CV/cs231n

assignment 1 - Softmax

알맹리 2021. 3. 27. 02:29

얘도 svm과 마찬가지로 3강에서 알려줌

 

 

1. Code

 

cs231n/classifiers 폴더에 있는 softmax.py를 고쳐서 씁니도

 

softmax loss naive

 numeric instability에 빠지지 않기 위해서 score중에 최대 값을 score 전체에 빼서 모든 값이 0이하가 되도록 만든 다음에 loss랑 grad를 구하면 된다. loss를 구할땐 score를 구해서 softmax함수를 취한 다음에 정답 클래스의 확률에 -log()를 취하면 됨! softmax loss는 log에 확률값을 넣는 거라 최소 0(확률이 1일때)에서 최대 무한대(확률 엄청 클 때)의 값을 가진다.  grad는 아래 사진처럼 구하면 됨(사실 잘 모르겟음;;;;)

 

 

softmax loss vectorized

loop 안 돌고 행렬 버전으로 하면 됨

2. Inline Question

Q. Why do we expect our loss to be close to -log(0.1)? Explain briefly.** 

 

A. 

가중치 행렬 W를 표준 정규분포에서 뽑은 값으로 만들었음

 

각 클래스의 예측 확률이 균등분포를 따르고 10개짜리 클래스라 각 클래스의 예측값이 1/10으로 나옴. softmax의 loss는 예측한 확률값에 -log를 씌운 값이니까 loss가 -log(1/10) 과 같은 -log(0.1) = 1

 

 

Q. Suppose the overall training loss is defined as the sum of the per-datapoint loss over all training examples. It is possible to add a new datapoint to a training set that would leave the SVM loss unchanged, but this is not the case with the Softmax classifier loss.

 

전체 training loss가 모든 train예제에 대한 per-datapoint loss의 합으로 정의된다는 가정 하에, 

새로운 datapoint를 train set에 추가해도 SVM loss는 바뀌지 않지만, Softmax loss는 바뀐다. 

 

A. SVM은 일정 성능의 기준을 넘으면 더이상 개선을 하지 않는데 Softmax는 확률이 1이 될 때까지 계속해서 성능을 개선한다. 맞음 

 

 

'CV > cs231n' 카테고리의 다른 글

assignment 1 - SVM  (2) 2021.03.26
assignment 1 - KNN  (0) 2021.03.22