코딩공부

assignment1 - softmax 본문

ML , DL (2019)/cs231n

assignment1 - softmax

초보코더 2019. 8. 20. 23:43
반응형

softmax classifier는 svm과 내용이 상당히 비슷해서 SVM과 다른부분들만 설명을 하도록 하겠습니다.

설명이 없는 부분은 SVM과 같다고 생각하면 됩니다.

 

이번에도 코드는 

github.com/Lee-daeho/cs231n 에 있습니다. 필요하신 분들은 가서 확인하시면 됩니다.

 

cs231n/classifiers/softmax.py softmax_loss_naive 함수

scores를 구하는 부분은 SVM과 같다. 하지만 위의 TODO부분을 보면 If you are not careful here, it is easy to run into numeric instability. 라는 부분이 있다. 주의하지 않으면 numeric instability에 빠질 수 있다. 라는 의미인데 cs231n의 lecture note를 보면 다음과 같은 설명을 찾을 수 있다.

cs231n Practical Issues

Softmax function을 구하는 코드를 작성할 때, e^fyi 와 sum(e^fj)가 exponentials때문에 매우 큰 값이 될 수있다. 매우 큰 수로 나누는 것은 numerically unstable할 수 있다, 그러므로 normalization trick을 사용하는 것은 매우 중요하다. 분자와 분모에 상수 C를 곱하고 이것을 sum안으로 넣어주면, 우리는 다음과 같은 식을 얻을 수 있다.

 

C는 어떤 값이든 사용할 수 있다. 이것은 결과를 변화시키지 않으면서, 계산의 numerical stability를 더 좋게 할 수 있다(improve). 일반적인 C는 logC = -maxjfj가 되는 C이다. 즉, f 벡터의 값들을 가장 큰 값이 0이되도록 shift해야 한다는 뜻이다. 코드로 하면 다음과 같다. 

 

위의 내용에서 볼 수 있듯이 numerical stability를 향상시키기 위해서는 f값들 중 최댓값을 f에서 빼는 방법을 사용할 수 있다. 

 

다음은 scores를 exponential 해서 모두 더해주고, correct class의 score도 exponential 해준다. 

이후 softmax classifier의 정의에 따라 loss를 구한다. 

softmax classifier loss function

dW를 구하기 위해 f = Wx이고 SVM과 같이 풀면 softmax_loss_naive 함수 사진에 보이는 것처럼 코드로 작성할 수 있다. 

 

이후 vectorize하여 loss와 dW(gradient)를 구하는 부분은 다음과 같다.

cs231n/classifiers/softmax.py softmax_loss_vectorized 함수

해당 부분과 이후의 코드는 SVM코드와 매우 유사하므로 생략한다.

다음 Backpropagation강의는 assignment가 없으으므로 강의내용을 번역 및 설명을 하려고 한다.

 

 

코드 및 사진 출처 - cs231n.github.io

반응형

'ML , DL (2019) > cs231n' 카테고리의 다른 글

cs231n assignment1 - two-layer neural net  (0) 2020.01.10
backpropagation, intuition - 2 (요약)  (0) 2019.09.01
Backpropagation, Intuitions  (0) 2019.08.22
cs231n assignment1 - SVM  (0) 2019.08.17
cs231n assignment1 - knn  (6) 2019.08.14