Linear classifier์ ์ ์ํ๋ค๋ฉด ์ด์ ๋ ๋ญ ํด์ผํ ๊น?
์ฐ์ ์ข์ ๊ฐ์ค์น(W)๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ํ์ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ์ ๊ฐ์ค์น๊ฐ ์ข์์ง ๋์์ง๋ฅผ ์ด๋ป๊ฒ ์ ์ ์์๊น?
=> W๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์์ ์ค์ฝ์ด๋ฅผ ํ์ธํ๊ณ ์ฐ๋ฆฌ์ W๊ฐ ์ผ๋ง๋ ์ข๊ณ ๋์์ง๋ฅผ ์ ๋ํ ํด์ฃผ๊ธฐ ์ํ ์์คํจ์๊ฐ ํ์
=> ์์คํจ์๋ฅผ ์ด์ฉํด์ Loss๋ฅผ ์ต์ํ ํ๋ ์ต์ ์ W๋ฅผ ์ฐพ์์ผ ํจ(์ต์ ํ)
- Define a loss function that quantifies our unhappiness with the scores across the training data.
ํ์ต ๋ฐ์ดํฐ ์ ์ฒด scores์ ๋ํด ๊ฐ์ค์น(๋ชจ๋ธ)์ ์ฑ๋ฅ์ ์์นํํ๊ธฐ ์ํ loss function์ ์ ์ - Come up with a way of efficiently finding the parameters that minimize the loss function. (optimization)
loss function์ minimizeํ๊ธฐ ์ํ parameters๋ฅผ ์ฐพ๊ธฐ ์ํ ํจ๊ณผ์ ์ธ ์ ๊ทผ ๋ฐฉ๋ฒ (optimization)
๊ฒฐ๊ตญ ์ฐ๋ฆฌ ๋ชจ๋ธ์ด ์์ธกํ ๊ฐ๊ณผ ์ค์ ์ ๋ต ๋ฐ์ดํฐ๊ฐ์ ์ฐจ์ด๋ฅผ ๋ํ๋ด๊ธฐ ์ํ loss fuction์ ์ ์ํ๊ณ
์ด loss function ์ต์ํ ์ํค๊ธฐ ์ํ ์ต์ ํ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
Loss function
Loss function
loss function์ ์ค์ ์ ๋ต ๋ฐ์ดํฐ์ ๋ชจ๋ธ์ด ์ ๋ต์ด๋ผ๊ณ ์์ธกํ ๋ฐ์ดํฐ ์ฌ์ด์ ์ฐจ์ด๋ก, ์ฐ๋ฆฌ์ classifier์ ์ฑ๋ฅ์ ๋ํ๋ด์ค๋ค.
x_i ๋ฅผ ์ด๋ฏธ์ง, y_i๋ฅผ label์ด๋ผ๊ณ ํ ๋ ์๋์ ๊ฐ์ ๋ฐ์ดํฐ์ ์ด ์๋ค๊ณ ํ์.
$${(x_i, y_i)}^{N}_{i=1}$$
์ด๋ dataset์ ๋ํ Loss๋ ์๋์ ๊ฐ๋ค.
$$L = \frac{1}{N}\sum_{i}(f(x_i, W), y_i)$$
์ด๋ N๊ฐ์ ๋ชจ๋ ๋ฐ์ดํฐ์ ๋ํ์ฌ ๋ชจ๋ธ์ ์์ธก๊ฐ์ธ f(x, W)์ ์ค์ ์ ๋ต๊ฐ์ธ y ์ฌ์ด์ Loss๋ฅผ ๊ตฌํ์ฌ ํฉํ ๊ฐ์ด๋ค. ์ฆ ์ ๋ฐ์ ์ธ dataset์ ๋ํ Loss๋ฅผ ๊ตฌํ ๊ฒ์ด๋ค.
Multiclass SVM loss
multi-class SVM loss๋ ์ฌ๋ฌ ํด๋์ค๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ SVM์ ์ผ๋ฐํ๋ ๋ฒ์ ์ด๋ค.
์ด๋ SVM loss ์๋์ ๊ฐ์ด ์ ๋ฆฌ๋๋ค.
$$L_i = \sum_{j \neq y_i}max(0, s_j - s_{y_i} + 1)$$
SVM loss์์๋ ์ ๋ต label์ score ๊ฐ๊ณผ ๋๋จธ์ง ์นดํ ๊ณ ๋ฆฌ์ ๊ฐ๋ค๊ฐ์ ์ฐจ๋ฅผ ๊ตฌํ๊ฒ ๋๋ค.
๋ง์ฝ ์ ๋ต label์ ํด๋นํ๋ score์ ๊ฐ์ด ๋ค๋ฅธ ์นดํ ๊ณ ๋ฆฌ score ๊ฐ๋ณด๋ค ๋๊ณ (= ์ ์์ธกํจ)
๋ score ๊ฐ์ ์ฐจ์ด๊ฐ safety margin(์์์์๋ 1) ์ด์์ด๋ผ๋ฉด
์ ๋ต label์ score ๊ฐ์ด ์ด์์ ์ธ ๊ฒ์ผ๋ก Loss ๊ฐ์ 0์ด ๋๋ค.
์ด์ ๊ฐ์ด 0๊ณผ ๋ค๋ฅธ ๊ฐ์ ์ต๋๊ฐ Max(0, value)์ ๊ฐ์ ํ์์ ์์ค ํจ์๋ฅผ hinge loss ๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
์ฐ์ธก ์๋จ์ ๊ทธ๋ํ๋ฅผ ๋ณด๋ฉด x์ถ์ด s_{y_i}์ด๊ณ y์ถ์ด loss๋ฅผ ์๋ฏธํ๋ค.
์ ๋ต ์นดํ ๊ณ ๋ฆฌ์ ์ ์๊ฐ ์ฆ๊ฐํ ์๋ก loss๋ ์ ํ์ ์ผ๋ก ์ค์ด๋ค๋ฉฐ safety margin์ ๋์ด์๋ฉด loss๋ 0์ด ๋๋ค.
์์์ผ๋ก ์ดํด๋ณด๋ฉด s_j ๋ ์ ๋ต์ด ์๋ label์ ๊ฐ์ด๊ณ , s_{y_i}๋ ์ ๋ต label์ score ๊ฐ์ด๋ค.
๊ณ ์์ด ์ฌ์ง์ ์๋ก ๋ค๋ฉด ๊ณ ์์ด๋ฅผ car์ frog๋ผ๊ณ ํ ๊ฐ๋ค(5.1, -1.7)์ด s_j์ธ ๊ฒ์ด๊ณ 3.2๊ฐ s_y_i ์ด๋ค.
๊ณ ์์ด ์ด๋ฏธ์ง์์ cat์ด๋ผ๊ณ ๋ถ๋ฅํ score์ธ 3.2์ car๋ผ๊ณ ๋ถ๋ฅํ score 5.1๋ก ๋ณด๋ฉด car๋ผ๊ณ ์์ธกํ score ์ ๊ฐ์ด ํฌ๋ loss ๊ฐ์ด ์ปค์ผํ๋ค๊ณ ์์ธกํ ์ ์๋ค. loss ๊ฐ์ ๊ตฌํด๋ณด๋ฉด max(0, 5.1-3.2+1) = max(0, 2.9) = 2.9
๋ค์์ผ๋ก cat์ด๋ผ๊ณ ๋ถ๋ฅํ score 3.2์ frog๋ผ๊ณ ๋ถ๋ฅํ score -1.7 ์ ๋ณด๋ฉด cat ์ score๊ฐ ๋ ํฌ๋ loss๋ 0์ด๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํด ๋ณผ ์ ์๋ค. loss๊ฐ์ ๊ตฌํด๋ณด๋ฉด max(0, -1.7-3.2+1) = max(0, -3.9) = 0
์ฆ ์๋ชป ์์ธกํ score ๊ฐ์ด ์ค์ ์ ๋ต์ด์ด์ผ ํ score ๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด ์ฐ๋ฆฌ์ loss ๊ฐ์ 0๋ณด๋ค ํฌ๊ฒ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด margin saftey๋ ์ ๋ฃ๋ ๊ฒ์ผ๊น?
๋ง์ฝ s_j์ s_{y_i} ๊ฐ์ ์ฐจ์ด๊ฐ margin saftey๋ณด๋ค ์๋ค๋ฉด, loss๊ฐ ์๊ธด๋ค. ์ฆ ์ ์ด๋ margin safety ๋งํผ์ ๊ฐ๊ฒฉ์ด ์กด์ฌํด์ผ ์ฌ๋ฐ๋ฅธ ํด๋์ค๋ฅผ ์ ํํ๋ค๋ ์ฒ๋์ธ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด ๊ณ ์์ด ๋ฐ์ดํฐ์์ cat์ด๋ผ๊ณ ์์ธกํ score๊ฐ 3์ด๊ณ car๋ผ๊ณ ์์ธกํ score๋ 3์ด๋ผ๊ณ ํด๋ณด์. ์ด๋ safety margin ์์ด loss ๊ฐ์ ๊ตฌํ๋ฉด max(0, 3-3) = 0์ด ๋๋ค. ํ์ง๋ง cat๊ณผ car์ score๊ฐ์ด ๋์ผํ๋ค๋ฉด ๋ถ๋ช ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ด๋ ์ฐ๋ฆฌ๋ ์ ๋ต score๊ฐ ๋ค๋ฅธ score๊ณผ ์ ์ด๋ 1์ ๊ฐ์ ์ฐจ์ด๊ฐ ๋์ผ ํ๋ค๊ณ safety margin์ ์ค๊ฒ์ด๋ค. margin์ ํฌํจํ loss ๊ฐ์ ๋ค์ ๊ตฌํด๋ณด๋ฉด max(0, 3-3+1) = max(0,1) = 1 ์ด ๋๋ค. ๊ฒฐ๊ตญ safety margin์ ์ถ๊ฐํ์ฌ์ loss ๊ฐ์ด 0์์ 1์ด ๋ ๊ฒ์ด๋ค.
๋ค์ ์ ๋ฆฌํ๋ฉด safety margin์ ๋ชจ๋ธ์ด ์ฌ๋ฐ๋ฅธ ํด๋์ค์ ๋ค๋ฅธ ํด๋์ค ๊ฐ์ ๊ฐ๊ฒฉ์ ์ถฉ๋ถํ ๋ํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
๊ทธ๋ฌ๋ฉด margin safety์ ๊ฐ์ ์ด๋ป๊ฒ ์ ํ ๊น? ์ฌ์ค ์ฐ๋ฆฌ๋ ์ค์ฝ์ด๊ฐ ์ ํํ ๋ช์ธ์ง๋ฅผ ๋ณด๋ ๊ฒ์ด ์๋๋ผ ์ค์ฝ์ด ๊ฐ์ ์๋์ ์ธ ์ฐจ์ด๋ฅผ ๋ณธ๋ค. ๋ค์ ๋งํ๋ฉด ์ ๋ต ์ค์ฝ์ด๊ฐ ๋ค๋ฅธ label ์ค์ฝ์ด๋ณด๋ค ์ผ๋ง๋ ๋ ํฐ์ง๋ฅผ ๋ณด๊ณ ์ถ์ ๊ฒ์ด๋ค. ์ถํ ํ๋ ฌ W๋ฅผ ์ค์ผ์ผ๋งํ๊ฒ ๋๋ฉด 1์ด๋ผ๋ ๊ฐ์ ํฌ๊ฒ ์๊ด์ด ์์ด์ง๊ณ W ์ค์ผ์ผ์ ์ํด ์์๋๋ฏ๋ก ์ฌ๊ธฐ์๋ loss์ safety margin์ ๋ํด ์ดํด๋ง ํ๊ณ ๋์ด๊ฐ๋ฉด ๋๋ค.
๊ฐ ๋ฐ์ดํฐ์ ๋ํ loss ๊ฐ์ ๊ตฌํ๋ค๋ฉด ์ด๋ฅผ ๋ชจ๋ ๋ํ๋ค์ ํ๊ท ์ ๋ด์ค๊ฒ ์ฐ๋ฆฌ ๋ฐ์ดํฐ์ ์ ๋ํ L ๊ฐ์ด ๋๋ค.
Q: What happens to loss if car scores change a bit?
A: car score๊ฐ ์ฝ๊ฐ ๋ฐ๋๋๋ผ๋ ์ด๋ฏธ car score๊ฐ ๋ค๋ฅธ scroe๋ณด๋ค ๋๊ธฐ์ Loss๋ ๋ณํ์ง ์์ ๊ฒ์ด๋ค.
Q2: what is the min/max possible loss?
A2: min์ 0์ผ ๊ฒ์ด๊ณ max๋ ๋ฌดํ๋์ด๋ค.
Q3: At initialization W is small so all s ≈ 0. What is the loss?
A3: ํด๋์์ ์ -1 ์ด๋ค. ์ฐ๋ฆฌ๋ loss๋ฅผ ๊ณ์ฐํ ๋ ์ ๋ต์ด ์๋ ํด๋์ค๋ฅผ ์ํํ๊ฒ ๋๋๋ฐ margin์ผ๋ก ์ธํด ๊ฐ iteration๋ง๋ค 1์ ์ป๊ฒ ๋ ๊ฒ์ด๊ณ ๊ฒฐ๋ก ์ ์ผ๋ก C-1๋ฒ ์ํํ๋ฏ๋ก ์ฐ๋ฆฌ์ socre๊ฐ 0์ ๊ฐ๊น๋ค๋ฉด loss๋ ํด๋์์ ์ -1 ์ ๊ฐ์ ๊ฐ์ง๋ฐ ๋๋ค. ์ด๋ ๋๋ฒ๊น ์์ ์ ์ฉํ๊ฒ ์ธ ์ ์๋๋ฐ ๋ง์ฝ ์์ ๊ฐ์ ์กฐ๊ฑด์์ ํ์ต์ ์์ผฐ๋๋ฐ loss๊ฐ C-1์ด ์๋๋ผ๋ฉด ๋ฒ๊ทธ๊ฐ ์๋ค๊ณ ์ง์ํด ๋ณผ ์ ์๋ค.
Q4: What if the sum was over all classes? (including j = y_i)
A4: ์ฐ๋ฆฌ๊ฐ SVM loss๋ฅผ ๊ตฌํ ๋๋ ์ ๋ต score๋ ์ ์ธํ๊ณ ( ์ ๋ต์ด ์๋ score - ์ ๋ต score ) ์ ์ฐจ๋ฅผ ๋ณด์๋๋ฐ ๋ง์ฝ ์ ๋ต score๋ ๊ณ ๋ ค๋ฅผ ํด์ ๋ํ๋ค๋ฉด Loss์ 1์ด ์ฆ๊ฐํ๊ฒ ๋๋ค. ์ ๋ต ํด๋์ค๋ฅผ ์ ์ธํ๋ ์ด์ ๋ Loss๊ฐ 0์ด ๋๋ ๊ฒ์ด ์ข์ ํด์์ผ๋ก ๊ฐ์ฃผ๋๊ธฐ ๋๋ฌธ์ด๋ค.
Q5: What if we used mean instead of sum?
A5: ํฌ๊ฒ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค. ์๋ํ๋ฉด ํ๊ท ์ ์ทจํ๋๊ฑด ๊ทธ๋ฅ ์์คํจ์๋ฅผ resacling ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
Q6: What if we used
$$L_i = \sum_{j \neq y_i}max(0, s_j - s_{y_i} + 1)^2$$
A6: ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ค. 0์ ๊ทธ๋๋ก ์ง๋ง ๋ง์ฝ ์๋ชป ๋ถ๋ฅํ score๊ฐ ๋ ํฌ๋ค๋ฉด ์ด๋ฌํ loss์ ์ ๊ณฑ์ ํด์ ํจ๋ํฐ๋ฅผ ํฌ๊ฒ ๋ถ์ฌํ๊ฒ ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ฅ hinge loss๊ฐ ์กฐ๊ธ ์๋ชป๋ ๊ฒ๊ณผ ๋ง์ด ์๋ชป๋ ๊ฒ์ ํฌ๊ฒ ์ ๊ฒฝ์ฐ์ง ์๋๋ค๋ฉด squared hinge loss๋ ๋งค์ฐ ์ฌํ๊ฒ ์๋ชป ๋ถ๋ฅํ๋ ๊ฒ์ ์ํ์ง ์๋ ๊ฒ์ด๋ค.
Multiclass SVM Loss: Example code
def L_i_vectorized(x, y, W):
scores = W.dot(x)
margins = np.maximum(0, scores - scores[y] + 1)
margins[y] = 0
loss_i = np.sum(margins)
return loss_i
์ง๊ธ๊น์ง Loss ํจ์๋ฅผ ํตํด ์ฐ๋ฆฌ๊ฐ ์ด๋ค W๋ฅผ ์ ๊ฒฝ์ฐ๋์ง ์์นํํ๋๋ฐ, ๋จ์ํ Loss๊ฐ 0์ธ W๋ฅผ ์ ํํ๋ ๊ฒ์ ๋ชจ์์ด๋ค. ์๋ํ๋ฉด ์ฐ๋ฆฌ์ loss๋ train ๋ฐ์ดํฐ๋ง ์ ๊ฒฝ์ฐ๊ณ test ๋ฐ์ดํฐ์์์ ์ฑ๋ฅ์ ์ ๊ฒฝ์ฐ๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ๋์ ์ ๋ฐ์ดํฐ๊ฐ ํ์ต ๋ฐ์ดํฐ, ์ด๋ก์ ๋ค๋ชจ๊ฐ test ๋ฐ์ดํฐ๋ผ๊ณ ํ ๋, ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ถ๋ฅ๊ธฐ๋ ์ด๋ก ์ ์ด ๋๋ค. train ๋ฐ์ดํฐ์๋ง fit ๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ Regularization์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์์์ ์ ์ํ ์์คํจ์์ Regularization ์ด๋ผ๋ ํญ์ ํ๋ ์ถ๊ฐํด์ค๋ค. loss fucntion์ด trainindg dataset์ fitํ ๋ชจ๋ธ์ ๋ง๋ค๊ธฐ ์ํ ๋ชฉ์ ์ด์๋ค๋ฉด, Regularization์ ๋ชจ๋ธ์ด simple W๋ฅผ ์ ํํ ์ ์๋๋ก ๋๋๋ค.
์ฌ์ค Regulatization์ด๋ผ๋ ๋จ์ด๋ฅผ ๋ณด๊ณ ์ ๊ทํ๊ฐ ๋ฐ๋ก ๋ ์ฌ๋๊ณ ๊ทธ๋ฌ๋ค๋ณด๋ normalization๊ณผ ํท๊ฐ๋ ธ๋๋ฐ ์๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
https://hichoe95.tistory.com/55
L2 Regularization (Weight Decay)
Regularization์๋ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์๋๋ฐ, L2 Regularization(Weight Decay)๊ฐ ๊ฐ์ฅ ๋ณดํธ์ ์ด๋ค.
L2 ์ ๊ทํ ๊ธฐ๋ฒ์ ๊ฐ์ค์น ํ๋ ฌ W์ ๋ํ Euclidean Norm๋ก, W์ euclidean norm์ ํจ๋ํฐ๋ฅผ ์ฃผ๋ ๊ฒ์ด๋ค.
L1 ์ ๊ทํ ๊ธฐ๋ฒ์ W์ ํจ๋ํฐ๋ฅผ ๋ถ๊ณผํ๋ ๊ฒ์ผ๋ก, ํ๋ ฌ W๊ฐ ํฌ์ํ๋ ฌ์ด ๋๋๋ก ํ๋ค.
Elastic net regularization์ L1๊ณผ L2๋ฅผ ํผํฉํ ํํ์ด๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก Regularization์ ๋ชจ๋ธ์ด training dataset์ ์์ ํ fitํ์ง ์๊ฒ๋ ๋ชจ๋ธ์ ๋ณต์ก๋์ ํจ๋ํฐ๋ฅผ ๋ถ์ฌํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด Regularization์ด ๋ชจ๋ธ์ ๋ณต์ก๋๋ฅผ ์ด๋ป๊ฒ ์ ์์์๊น?
์์ ์์์์ x๋ train data์ด๊ณ w๋ ๊ฐ์ค์น์ด๋ค.
x์ w๋ฅผ ๊ฐ์ง๊ณ dot product(๋ด์ )์ ํด๋ณด์. xw1, xw2๋ชจ๋ ๋ด์ ๊ฒฐ๊ณผ ๊ฐ์ 1์ด ๋์จ๋ค.
ํ์ง๋ง L2 Regularization์ w2์ norm์ด ๋ ์์ผ๋ฏ๋ก w2๋ฅผ ์ ํธํ๋ค. L2 Regularization์ x์ ๋ชจ๋ ์์๊ฐ W์ ์ํฅ์ ์ฃผ๊ธธ ๋ฐ๋ผ๋ฉฐ ๋ณ๋์ด ์ฌํ ํน์ ์ ๋ ฅ๋ณด๋ค๋ ๋ชจ๋ x์ ์์๊ฐ ๊ณจ๊ณ ๋ฃจ ์ํฅ์ ๋ฏธ์น๊ธธ ์ํ ๋ ์ฌ์ฉ
๋ฐ๋ฉด L1์ L2์๋ ๋ค๋ฅด๊ฒ ๋ณต์ก๋๋ฅผ ์ ์ํด์ ๊ฐ์ค์น W์ ์๋ 0์ ๊ฐ์์ ๋ฐ๋ผ ๋ชจ๋ธ์ ๋ณต์ก๋๋ฅผ ๋ค๋ฃจ๊ณ , ์ผ๋ฐ์ ์ผ๋ก sparseํ solutions์ ์ ํธํ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก๋ ์ฃผ์ด์ง ๋ฌธ์ ์ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ์ด๋ค ๊ฒ์ ์ฌ์ฉํ ์ง ์ ํํด์ผ ํ๋ค.
์ถ๊ฐ๋ก ๊ณต๋ถํด๋ณผ ๊ฒ
Bayes theorem(๋ฒ ์ด์ฆ์ ๋ฆฌ)์ MLE/MAP, regularization term์ด ์ค์ง์ ์ผ๋ก ์ด๋ค์์ผ๋ก ์ํฅ์ ๋ฏธ์น๋์ง..
Softmax Classifier (Multinomial Logistic Regression)
SVM Loss์์ ์ฐ๋ฆฌ๋ ๊ทธ์ ์ ๋ต ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ณด๋ค ๋์ ์ค์ฝ์ด๋ฅผ ๋ด๊ธฐ๋ง ์ํ์ ๋ฟ ์ค์ฝ์ด ์ซ์ ์์ฒด์ ๋ํ ํด์์ ํ์ง ์์๋ค.
Softmax(Multinominal Logistic Regression)์ ์ค์ฝ์ด ์์ฒด์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ค. softma๋ score๋ฅผ ํ๋ฅ ๋ก ๋ณํ์์ผ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ ๋ต ํด๋์ค์ ํด๋นํ๋ ํ๋ฅ ์ด 1์ ๊ฐ๊น๊ฒ ๋๋๋ก ๋ง๋ค๊ธฐ๋ฅผ ์ํ๋ค.
์ด๋ Loss๋ -log(์ ๋ต ํด๋์ค์ ํ๋ฅ )์ด๋ค. Log๋ ๋จ์กฐ ์ฆ๊ฐ ํจ์๋ก log๋ฅผ ์ต๋ํ ์ํค๋ ๊ฒ์ด ํ๋ฅ ๊ฐ์ ์ต๋ํ ์ํค๋ ๊ฒ๋ณด๋ค ์ฝ๋ค. ๋ค๋ง log P ๋ฅผ ์ต๋ํ ์ํจ๋ค๋ ๊ฒ์ log P ๋ฅผ ๋์ด๊ณ ์ถ๋ค๋ ๊ฒ์ธ๋ฐ Loss ํจ์๋ ์ด๋ฆ์์ ๋ณด์ด๋ฏ์ด "์ผ๋ง๋ ์ฑ๋ฅ์ด ๋์์ง"๋ฅผ ์ธก์ ํ๋ ๊ฒ์ด๋ฏ๋ก log์ ๋ง์ด๋์ค๋ฅผ ๋ถํ๋ ๊ฒ์ด๋ค,
* Softmax ํจ์๋ ํ์ฑํ ํจ์์ด๊ณ Loss๋ฅผ ๊ตฌํ๊ธฐ ์ํด์๋ Cross Entropy๋ฅผ ์ฌ์ฉํ๋ ๊ฒ
ํ๋ฅ ๊ณ์ฐ์ ์์ธก ๊ฐ์ด ์์๊ฐ ๋์ค๊ฑฐ๋ ๋ถ๋ชจ๊ฐ 0์ด ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด exp ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค. ์ด๋ ์์ฐ์์ e๋ฅผ ๋ฐ์ผ๋ก ์ฌ์ฉํ๋ ์ด์ ๋ 1. ๋ฏธ๋ถ ์ ๊ณ์ฐ ์ฉ์ด 2. ํฐ ๊ฐ์ ๋ ํฌ๊ฒ๋ณด๊ณ ์์ ๊ฐ์ ์๊ฒ ๋ด์ ๊ตฌ๋ถ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด์์ด๋ค.
SVM์ ๋ค๋ฅด๊ฒ score๋ฅผ ๊ทธ๋๋ก ์ฐ์ง ์๊ณ , ์ค์ฝ์ด๋ฅผ ์ง์ํ ์ํจ๋ค์ ํฉ์ด 1์ด ๋๋๋ก ์ ๊ทํ ์์ผ์ฃผ๊ณ
์ ๋ต ์ค์ฝ์ด์๋ง -log๋ฅผ ์์ฌ์ค๋ค.
Q: What is the min/max possible loss L_i?
A: ์ต์๋ 0, ์ต๋๋ ๋ฌดํ๋. ๋ง์ฝ ์ ๋ต์ ์ ๋ง์ท๋ค๋ฉด ์ ๋ต ํด๋์ค์ ํ๋ฅ ์ด 1์ผ ๊ฒ์ด๊ณ ๋~๋ฌด ๋ชป๋ง์ท๋ค๋ฉด ํ๋ฅ ์ 0์ด ๋ ๊ฒ์ด๋ค. ํ๋ฅ ์ด 1์ด๋ผ๋ฉด loss๋ 0์ด ๋๊ณ ํ๋ฅ ์ด 0์ด๋ผ๋ฉด -log(0)์ ์์ ๋ฌดํ๋๋ก ์ด๋์ ์ค์ฝ์ด๋ ๋ฌดํ๋์ ๊ฐ๊น๊ฒ ๊ทน๋จ์ ์ผ๋ก ๋์์ง๋ค.
Q2: Usually at initialization W is small so all s ≈ 0. What is the loss?
A2: -log(1/C) = log(C)๊ฐ ๋๋ค.
Softmax vs SVM
SVM์ ์ ๋ต ์ค์ฝ์ด์ ์ ๋ต์ด ์๋ ์ค์ฝ์ด ๊ฐ์ margins์ ์ ๊ฒฝ์ฐ๊ณ ์ผ์ margins์ ๋๊ธฐ๋ง ํ๋ฉด ๋ ์ด์ ์ฑ๋ฅ ๊ฐ์ ์ ์ ๊ฒฝ์ฐ์ง ์์
softmax๋ ํ๋ฅ ์ ๊ตฌํด์ -log P ์ฒ๋ฆฌํจ. ์ด๋ฏธ ์ ๋ต ํด๋์ค์ ํ๋ฅ ์ด ๋ค๋ฅธ ํด๋์ค๋ณด๋ค ๋์๋ ์ฑ๋ฅ์ ๋ ๋์ด๋ ค๊ณ
Optimization
์ฐ๋ฆฌ์ ์ต์ข ๋ชฉํ๋ ์์์ ์ ์ํ loss fucntion์ด ์ต์๊ฐ ๋๊ฒ ํ๋ ๊ฐ์ค์น W๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ค์ Loss๋ฅผ ์ค์ด๋ W๋ฅผ ์ด๋ป๊ฒ ์ฐพ์ ์ ์์๊น?
์ฐ๋ฆฌ๊ฐ ์ด๋์ธ์ง ๋ชจ๋ฅผ ์ฐ ๊ณจ์ง๊ธฐ์ ๋์ฌ์ก๋ค๊ณ ํ์. ์ฐ๋ฆฌ๋ ์ด๋ป๊ฒ๋ ๊ณจ์ง๊ธฐ์ ๋ฐ๋ฐ๋ฅ์ ์ฐพ์์ผ ํ๋ค.
์ฌ๊ธฐ์ ๋์ ์์น(๋์ด)๋ฅผ loss, ์ฃผ๋ณ ์ฐ๊ณผ ๊ณจ์ง๊ธฐ๊ฐ w์ธ ๊ฒ์ด๋ค. w์ ๋ฐ๋ผ loss๊ฐ ๋ณํ๋๋ฐ ์ฐ๋ฆฌ์ ๋ชฉํ๋ ๊ฐ์ฅ ๋ฎ์ loss๋ฅผ ์ฐพ๋ ๊ฒ.
์ด ์ํฉ์์ ๊ฐ์ฅ ๋จผ์ ์๋ํด ๋ณผ ์ ์๋ ๋จ์ํ๊ณ ๋ ๋นํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ random search์ด๋ค.
Strategy #1: A first very bad idea solution: Random search
์์๋ก ์ํ๋งํ W๋ฅผ ์์ฒญ ๋ง์ด ๋ชจ์๋ค์ loss๋ฅผ ๊ณ์ฐํด์ ์ด๋ค W๊ฐ ์ข์์ง๋ฅผ ์ดํด๋ณด๋ ๊ฒ์ด๋ค.
import numpy as np
#assume X_train is the data where each column is an example(e.g, 3073 x 50,000)
#assume Y_train are the labels (e.g. 1D array of 50,000)
#assume the function L evaluates the loss funtion
bestloss = float("inf") # Python assigns the highest possible float value
for num in range(1000):
W = np.random.randn(10, 3073) * 0.0001 # generate random parameters
loss = L(X_train, Y_train, W) # get the loss over the entire training set
if loss < bestloss :
bestloss = loss
bestW = W
print ('in attempt %d the loss was %f, best %f' % (num, loss, bestloss))
์ฝ 15%์ ์ ํ๋ ๋์ด
Strategy #2: Follow the slope
๋จ์ํ random searchํ์ง ๋ง๊ณ local geometry์ ํน์ฑ์ ์ด์ฉํ์ฌ ๊ฒฝ์ฌ๋ฅผ ๋๋ผ๋ฉฐ ์ฐพ์ ๋ด๋ ค๊ฐ๋ณด์.
์ฌ๊ธฐ์ slope๋ ์ด๋ค ํจ์์ ๋ํ ๋ฏธ๋ถ๊ฐ์ด๋ค.
ํน์ ๋ฐฉํฅ์์ ์ผ๋ง๋ ๊ฐํ๋ฅธ์ง ์๊ธฐ์ํด ๊ทธ ๋ฐฉํฅ์ ์ ๋๋ฒกํฐ์ gradient ๋ฒกํฐ๋ฅผ ๋ด์ .
gradient๋ ํจ์์ ์ด๋ค ์ ์์ ์ ํ 1์ฐจ ๊ทผ์ฌ ํจ์๋ฅผ ์๋ ค์ค๋ค.
1. gradient๋ฅผ ๋ํ๋ด๋ ์ ์ฐพ๊ณ
2. ํ๋ฒ์ gradient dW๋ฅผ ๊ณ์ฐ
In summary:
- Numerical gradient: approximate, slow, easy to write
- Analytic gradient: exact, fast, error-prone
=> In practice: Always use analytic gradient, but check implementation with numerical gradient.
This is called a gradient check.
Gradient Descent
#Vanilla Gradient Descent
while True:
weights_grad = evaluate_gradient(loss_fun, data, weights)
weights += - step_size * weights_grad # perform parameter update
๋จ ์ธ์ค์ ์ด ์ฝ๋๋ ์๋ฌด๋ฆฌ ํฌ๊ณ ๋ณต์กํ ์ ๊ฒฝ๋ง์ด๋๋ผ๋ ๊ทธ ์ ๊ฒฝ๋ง์ ์ด๋ป๊ฒ ํ์ต์ํฌ์ง์ ๋ํ ํต์ฌ ์์ด๋์ด๋ฅผ ๋ด๊ณ ์๋ค.
Gradient descent์์ ์ฐ์ W๋ฅผ ์์์ ๊ฐ์ผ๋ก ์ด๊ธฐํํ๋ค.
์ดํ Loss์ Gradient๋ฅผ ๊ณ์ฐํ๊ณ
๊ฐ์ค์น๋ฅผ gradient์ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์ ๋ฐ์ดํธ ํ๋ค. (gradient๊ฐ ํจ์์์ ์ฆ๊ฐํ๋ ๋ฐฉํฅ์ด๋ฏ๋ก -gradient๋ฅผ ํด์ผ ๋ด๋ ค๊ฐ๊ฒ ๋๋ค.)
*step size๋ learning rate๋ผ๊ณ ๋ ํ๋ฉฐ ํ์ต์์ ์ ํด์ค์ผ ํ๋ ๊ฐ์ฅ ์ค์ํ ํ์ดํผํ๋ผ๋ฏธํฐ ์ค ํ๋์ด๋ค.
๋นจ๊ฐ์ : loss๊ฐ ๋ฎ์ ์์ญ
ํ๋์ : loss๊ฐ ๋์ ์์ญ
์ฐ๋ฆฌ๋ ์์ด์ ์ W์์ ์ถ๋ฐํ์ฌ -gradient๋ฅผ ๊ณ์ฐํ๋ฉด์ ์ด ๊ฐ์ผ๋ก ๊ฐ์ค์น๋ฅผ ์ ๋ฐ์ดํธ ํด๊ฐ๋ฉด์
cost๊ฐ ๊ฐ์ฅ ๋ฎ์ ์ง์ ์ ๋๋ฌํ๊ฒ ๋๋ค.
Gradient Descent ์ธ์๋ momentum์ด๋ Adam optimizer๋ฅผ ์ด์ฉํ์ฌ W๋ฅผ ์ ๋ฐ์ดํธํด ๋๊ฐ๋ ๋ฐฉ๋ฒ๋ค๋ ์๋ค.
Stochastic Gradient Descent (SGD)
์ฐ๋ฆฌ๋ ์์คํจ์ L์ ์ ์ํ๊ณ , training dataset์ ์ ์ฒด Loss๋ฅผ ๊ตฌํ๊ธฐ ์ํด์ Loss ๋ค์ ํ๊ท ์ ์ฌ์ฉํ๋ค.
ํ์ง๋ง ์ค์ ๋ก๋ N์ด ์์ฒญ๋๊ฒ ์ปค์ง ์ ์๊ณ ์ด๋ ๊ณ์ฐ์ ์ผ๋ก ๋นํจ์จ์ ์ด๋ค.
Gradient๋ ์ ํ ์ฐ์ฐ์์ธ๋ฐ ์ค์ gradient๋ฅผ ๊ณ์ฐํ๋ ๊ณผ์ ์ ์ดํด๋ณด๋ฉด
๊ฐ ๋ฐ์ดํฐ Loss์ Gradient์ ํฉ์ด๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
๊ทธ๋ฌ๋ Gradient๋ฅผ ํ๋ฒ ๋ ๊ณ์ฐํ๋ ค๋ฉด N๊ฐ์ ์ ์ฒด ํธ๋ ์ด๋ ์ ์ ํ๋ฒ ๋ ๋๋ฉด์ ๊ณ์ฐํด์ผ๋๊ณ W๊ฐ ์ ๋ฐ์ดํธ ๋๋ ค๋ฉด ๊ต์ฅํ ๋ง์ ์๊ฐ์ด ์์๋๋ค.
=> ์ค์ ๋ก๋ SGD(Stochastic Gradient Descent)๋ผ๋ ๋ฐฉ๋ฒ์ ๋ง์ด ์ด๋ค.
์ ์ฒด ๋ฐ์ดํฐ ์ ์ gradient์ loss๋ฅผ ๊ณ์ฐํ๊ธฐ ๋ณด๋ค๋ Minibatch๋ผ๋ ์์ ํธ๋ ์ด๋ ์ํ ์งํฉ์ผ๋ก ๋๋ ์ ํ์ต์ ์ํค๋ ๊ฒ์ด๋ค. (Minibatch๋ ๋ณดํต 2์ ์น์๋ก ์ ํ๋ฉฐ 32, 64, 128์ ์ฃผ๋ก ์ด๋ค)
Minibatch๋ฅผ ์ด์ฉํด์ loss์ ์ ์ฒด ํฉ์ "์ถ์ ์น"์ ์ค์ gradient์ "์ถ์ ์น"๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ด๋ค.
#Valina Minibatch Gradient Descent
while True:
data_batch = sample_training_data(data, 256) #sample 256 examples
weights_grad = evaluate_gradient(loss_fun, data_batch, weights)
weights += - step_size * weights_grad # perform parameter update
์์์ minibatch๋ฅผ ๋ง๋ค๊ณ , minibatch ๋ด์์ loss์ gradient๋ฅผ ๊ณ์ฐํ๊ณ W๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
(Loss์ ์ถ์ ์น์ Gradient์ ์ถ์ ์น๋ฅผ ์ฌ์ฉํ๋ ๊ฒ)
์น ๋ฐ๋ชจ
http://vision.stanford.edu/teaching/cs231n-demos/linear-classify/
'์ธ๊ณต์ง๋ฅ ๐ > CS231n' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CS231n 5๊ฐ Convolutional Neural Networks (0) | 2024.03.20 |
---|---|
CS231n 4๊ฐ Introduction to Neural Networks (0) | 2024.03.20 |
CS231n 2๊ฐ Image Classification Pipeline (0) | 2024.03.07 |