CS231n

Assignmenft 1-3 (SoftMax)

민지기il 2024. 3. 30. 15:35

softmax 문제를 풀면서 느낀거는 강의를 듣고서만 풀 수 없는 거 같다.

여러 검색들과 정리된 식들, 코드로 어떻게 옮길 것인가를 반복하면서 풀었다. 

이번 코드는 내가 풀지 못했고 다른 코드를 가져와서 분석하는 식으로 공부했다...

**softmax_loss_naive

가중치 W:(D,C) /c는 클래스의 갯수 / 각 클래스에 대한 예측 점수를 계산하는 벡터

미니배치 X:(N,D) / N개의 minibatches, D는 각 data point의 차원 수

traing label y:(N,) /  y[i]는 미니 배치 내 datapoint의 ground_table / 이미지의 정답 클래스

 

SoftMax

-sigmoid 보다 학습이 더 잘된다

-loss function으로 cross-entrophy를 쓴다

cross-entrophy(p,q)=-(p1log(q1)+...pclog(qc)) p는 원-핫, q는 모델 예측 확률 == 일반적인 형태

Li=-log(e^fyi / e^f1+e^f2+...e^fj) == log loss라는 특수한 형대

-예측한 확률 분포와 진정한 class label의 차이를 줄인다.

- 식: fj(x) = e^xj / e^x1+e^x2+...e^xk

 

<코드 분석>

0) W와 X를 내적해준다. 이는 각 데이터 포인트(X)가 각 클래스에 속할 확률이다.

1) dW[:,y[i]] -=X[i]

-dW의 모든 행에 대해 y[i] 열에서 X[i]를 뺀다. 이때 X는 2차원 배열인데 X[i]는 i번째 행을 선택하여 1XD 인 1차원 배열이 된다.

X[i]는 i번째 data point의 feature vector이다.

-복습) X=0~9까지 손글씨를 쓴 2차원 배열, y는 실제 숫자 0~9이다.

W 가중치를 이용해 모델이 y에는 높은 확률을 다른 클래스는 낮은 확률을 할당한다. 예측된 확률분포와 y가 얼마나 일치하는지 손실을 계산한다.  (정규화도 까먹지 않기)

gradient descent)

W_new = W_old -a*dL/dW (a는 learning rate, dL/dW는 목표함수의 gradient)

왜 빼주지?

목표함수(cross-entrophy) 최소화가 목표이다(딥러닝 모델 함수의 목표-모델의 예측 오류를 최소화하여 모델의 정확도를 높인다).

y[i]번째 클래스에 대한 weight-vector은 줄이고(정답클래스에 대한 예측 점수 높이기) 다른 클래스는 늘린다(오답은 낮추기).

 

2) dW+=np.dot(np.reshape(X[i],[-1,1]),np.reshape(np.exp(scores),[1,-1]))     /     np.sum(np.exp(scores))

-np.reshape(X[i],[-1,1]) 

복습) [-1,1]은 X가 (N,D)인 상태에서 reshape하면 (N*D,1)이 된다.

-np.reshape(np.exp(scores),[1,-1])

exp한 scores가 (N,C)인 상태에서 [1,-1]으로 reshape하면 (1,N*C)이 된다.

따라서 내적해주면 (N*D, N*C)가 된다.