앞 내용에 이어서 이번에는 Loss function 중에서 softmax를 다뤄볼 것이다.
각 score를 확률값으로 바라볼 수 있을 것이다. $P(Y\ =\ k\ |X\ =\ x_{i})$ 는 $X=x_{i}$일 때 $Y = k$로 k라는 class에 속할 확률값을 찾는 것이며, 이러한 값이 Likelihood가 된다.
$\Sigma_{j}e^{sj}$ = 모든 score의 합
$e^{sk}$ 는 k class 의 score
Maximize loglikelihood는 가장 최대가 되는 값을 찾는 것이기 때문에 그 값에 대해 -1 을 곱해줘서 최솟값을 찾는 loss function 으로 만들 수 있다. 그리고 MLE는 각 확률값을 곱하여 도출하는데 이 부분에서 log를 취해주면 곱을 덧셈으로 바꿀 수 있기 때문에 계산하기에 용이하다. softmax 함수를 적용하면 0~1사이의 확률값으로 결과값이 도출된다.
SVM vs Cross-entropy loss (Softmax)
두 loss function 을 비교하면 위 데이터의 경우 softmax 값이 더 낮은 loss를 가진다 (조금더 정답에 가깝다는 뜻) 하지만 SVM의 경우 작은 변화에 대해서는 margin보다 작을 경우 값의 변화가 없지만, Softmax인 경우 직접적인 영향을 미치게 된다.
Optimization
Random Search : 임의로 가중치를 선택하여 이 가중치에 대한 loss를 확인해보는 것
import numpy as np
bestloss = float('inf')
for num in xrange(1000):
W = np.random.randn(10, 3073) * 0.0001
loss = L(x_train, y_train, W)
if loss < bestloss:
bestloss = loss
bestW = W
print('in attempt %d the loss was %f, best %f' %(num, loss, bestloss))
score = Wbest.dot(x_test)
y_pred = np.argmax(score, axis = 0)
np.mean(y_pred == y_test)
Gradient Descent
loss function 을 미분하여 그 값이 0에 가까워지도록 점점 경사를 내려가면서 탐색하는 방법이다. 현재 w값에 대해 loss를 계산하고 w의 각 차원에서 h만큼 움직여 그 때의 loss를 계산한다 w의 loss와 w + h의 loss를 비교하여 gradient를 구할 수 있다.
# 수치적으로 GD를 계산
import numpy as np
def eval_numerical_gradient(f, x):
fx = f(x)
grad = np.zeros(x.shape)
h = 0.00001
it = np.nditer(x, flags = ['multi_index'], op_flags = ['readwrite'])
while not it.finished:
ix = it.multi_index
old_value = x[ix]
x[ix]= old_value + h
fxh = f(x)
x[ix] = old_value
grad[ix] = (fxh - fx) / h
it.iternext()
return grad
h가 아주 작은 값이라는 가정 하에 gradient를 추정한 것이고, 각 차원에 대해서 반복하기 때문에 계산하는데 너무 오래걸리는 문제로 인해 실제로는 사용하지 않는다. 그렇기 때문에 해석학적으로 접근해 미분을 통하여 gradient를 계산한다. Gradient Descent 에 대해서는 다음에 다뤄볼 것이다.
'Deep Learning > CS231N' 카테고리의 다른 글
[CS231N] 활성화 함수(Activation Fucntion)의 종류 (0) | 2021.07.08 |
---|---|
[CS231N] Neural Network Back-propagation (0) | 2021.07.06 |
[CS231N] Loss function & Optimization (1) (0) | 2021.07.05 |
[CS231N] Image Classification pipeline (0) | 2021.07.04 |
[CS231N] INTROTUCTION (0) | 2021.06.29 |