두번째 과제.. 3강에서 알려주는 SVM 입니도
1. Code
KNN과 다르게 svm.ipynb 파일과 assignment1/cs231n/classifiers 폴더에 있는 파일 2개를 수정해야 한다.
linear_svm.py 파일에서는 loss와 grad를 naive하게 구하는 것과 vectorized 버전으로 구하는 두가지 버전의 함수를 구현해야 한다
loss는 아래의 식으로 구한다.
위의 식을 대입해서 loss를 구하면
loss = max( 0, 5.1 - 3.2 + 1) + max( 0, -1.7 - 3.2 + 1) = 2.9 + 0 = 2.9
정답이 cat이기 때문에 car와 frog에 대한 값을 각각 계산하고 더해준다.
dW는 loss function L을 W에 대해 미분한 값이다.
loss naive에서는 일단 score를 구하고 class길이 j만큼 루프를 돌면서 L식과 같이 margin(s_j - s_y + 1)을 구한다.
만약 j가 정답 클래스인 경우엔 패스하고 j가 다른 클래스인 경우에 margin이 0 이상이면
1. loss에 그 값을 더하고
2. dW에 s_j를 더하고 s_y_i를 뺀다.
마지막으로 loss와 dW에 1/N을 하고 오버피팅 방지를 위해 L2 regularization을 W에 대해 미분한 값을 더해준다.
loss vectorized에서는 위와 같은 걸 matrix에 적용한다고 생각하면 된다. ㅋㅋ
linear_classifier.py 파일에서는 train 함수와 predict 함수를 짜서 쓰면 된다!
svm.ipynb 파일 아래쪽에서 하이퍼파라미터 적용하는 부분 코드를 짜야 하는데 엄청 어렵진 않으니 걍 읽기..
2. Inline Question
Q1. It is possible that once in a while a dimension in the gradcheck will not match exactly. What could such a discrepancy be caused by? Is it a reason for concern? What is a simple example in one dimension where a gradient check could fail? How would change the margin affect of the frequency of this happening? Hint: the SVM loss function is not strictly speaking differentiable
가끔 gradcheck의 차원이 정확히 일치하지 않을 수 있습니다. 그러한 불일치의 원인은 무엇입니까? 걱정할 이유입니까?
gradcheck이 실패 할 수있는 1 차원의 간단한 예시? 이런 일이 발생하는 빈도의 여백 영향을 어떻게 변경합니까?
힌트 : SVM 손실 함수는 엄밀히 말하면 미분 할 수 없습니다.
A. discrepancy는 loss function이 어떠한 점에서 미분이 불가능할 때 일어난다. 예를 들어 ReLU 함수 f(x) = max(0, x) 에서 x=0일 때 미분이 불가능하다.
이 식에서 수치적 기울기는
이지만, 분석적 기울기는
이기 때문에 x=0 점 근처에서 값이 큰 차이가 난다.
Q2. Describe what your visualized SVM weights look like, and offer a brief explanation for why they look they way that they do.
시각화 된 SVM 가중치가 어떻게 생겼는지 설명하고 왜 그렇게 보이는지에 대한 간략한 설명
A. 해당 객체가 평균적으로 보이는 모양. score는 샘플이랑 가중치의 내적이라서 정확한 label에서 더 높은 점수를 얻으려면 가중치랑 sample이 평행해야 한다.
'CV > cs231n' 카테고리의 다른 글
assignment 1 - Softmax (3) | 2021.03.27 |
---|---|
assignment 1 - KNN (0) | 2021.03.22 |