2020/09/12 ๊นํ ๋ธ๋ก๊ทธ ๊ธฐ๋ก
3. Loss Function and Optimization
Linear Classifier (๋ณต์ต)
- W์ ๊ฐ ํ์ class์ classifier๋ก ์๊ฐํ๊ฑฐ๋ ๊ฐ class์ template (prototype)์ผ๋ก ์๊ฐํ ์ ์๋ค
- Wx+b ์์ (W,b)์์ ๊ธฐ์ตํ๊ธฐ ๋ณด๋จ, x์ ์ฒซ col์ 1์ ์ถ๊ฐํ๊ณ , W์ b๋ฅผ ํ matrix๋ก ์ ์ฅํ๋ ๊ฒ.
๊ทธ๋์ ๊ต์๋์ด ๋งจ๋ ์์ 1์ด ์๋ col์ ์ถ๊ฐํ๊ฑฐ์๋ค...
Loss Function
- loss function = cost function = objective function
- ์ผ๋ง๋ ๋ชจ๋ธ์ด ์ข์๊ฐ?
- loss ๊ฐ์ด ์์ ์๋ก ์ข๋ค
Multiclass SVM( Support Vector Machine) loss
- correct class์ score๊ฐ incorrect class์ ๋นํด ์ ์ด๋ ฮ๋งํผ์ ์ปค์ผํ๋ค
- j๋ correct class, s ๋ f(x, W)์ score๋ฅผ ์๋ฏธ
def L_i_vecorized(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์ ์ด๊ธฐ๊ฐ์ผ๋ก ์์ฃผ ์์ ๊ฐ๋ค์ ๋ฃ์ผ๋ฉด, ๋ชจ๋ s๋ ๊ฑฐ์ 0์ ๊ฐ๊น์ด ๊ฐ์ผ๋ก ๋์จ๋ค. ๊ทธ๋ฌ๋ฉด loss๊ฐ class์ ๊ฐฏ์์ ๊ฐ๋ค.(๋๋ฒ๊น
์ ์ฌ์ฉํ ์ ์๋ค)
- sum ๋์ mean์ ์ฌ์ฉํด๋ scale๋ง ๋ฌ๋ผ์ง์ง ์๊ด ์๋ค
- hinge loss
- threshold๊ฐ 0์ธ loss
- (min, max) = (0, โ)
- squared hinge
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฒ์๋ ๊ฐ์ง๋ง, loss๋ค์ ํฌ๊ธฐ ๋ณํ๊ฐ ๋ ๊ทน์ฌํด์ง๋ค. ์์ ์ฐจ์ด s๋ฅผ ํฐ loss์ ์ฐจ์ด๋ก ๋ง๋ค๊ณ ์ถ์ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฌ์ฉํ๋ค
Regularization
- loss๊ฐ 0์ธ W๋ ์ฌ๋ฌ๊ฐ๊ฐ ๋ ์ ์๋ค
- Regularization penalty์ธ R(W) ๋ฅผ loss function์ ๋ง๋ถ์ฌ ๋ ์ต์ ์ W๋ฅผ ์ฐพ๋๋ค
- ๊ฐ๋ง๋ 1๋ณด๋ค ํฐ ์์ (์ฃผ๋ก cross-validation์ผ๋ก ๊ฒฐ์ )
- W๊ฐ๋ง ๊ฐ์ง๊ณ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ data์๋ ์ ํ ๋ฌด๊ดํ๋ค
- loss์ ์ด ๊ฐ์ด ํฌํจ๋๋๊ฑฐ๋ผ W์ค ๊ฐ์ฅ ์์ W๋ฅผ ๊ตฌํ ์ ์๊ฒ ํด์ค๋ค
- R(W)๋ก๋ ๋ค์ํ ์์ ์ฌ์ฉํ ์ ์๋ค.
Softmax Classifier
- SVM๊ณผ ํจ๊ป ๋ง์ด ์ฐ์ด๋ ์๊ณ ๋ฆฌ์ฆ
- binary logistic regression์ ์์ฉ
- cross entropy loss
- ์ด๊ธฐ W๊ฐ ์์์ s ๊ฐ ๋ค 0์ ๊ฐ๊น์ฐ๋ฉด loss๋ log C ๊ฐ ๋จ (C๋ class ๊ฐฏ์)
- ์ ๊ทํ ํ๋ผ๋ฏธํฐ์ธ ๋๋ค์ ๊ฐ์ด ์ปค์ง๋ฉด softmax ๊ฐ์ ์์์ง๋ค
Optimization
- Descent Gradient
- ๋ด๋ฆฌ๋ง๊ธธ์ ์ฐพ์ ๊ทธ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ ๊ฒ
- ๋ฏธ๋ถ๊ฐ ์ด์ฉ
while True:
weights_grad = evaluate_gradient(loss_fun, data, weights)
weigths += -step_size * weights_grad
- Mini-batch Gradient Descent
- ๋ชจ๋ training data๋ฅผ ์ด์ฉํด gradient ์ฐพ์ผ๋ ค๋ฉด ๋๋ฌด expensive
- minibatch๋ก ๋๋ ์
- data์ ๊ฐ sample๋ค์ด ์๋ก correlatedํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅ
- SGD(Stochastic Gradient Descent)
- mini batch์ ์ ์ฉํ ๋ฐฉ์์ ํ๋์ sample๋ก
- ์ผ๋ฐ์ ์ผ๋ก SGD๊ฐ minibatch ๋ฐฉ์์ ๋ปํจ (ํผ์ฉ)
- minibatch์ ํฌ๊ธฐ๋ก 2์ ์ ๊ณฑ์ ์ฌ์ฉ
while True:
data_batch = sample_trainig_data(data, 256)
weigts_grad = evaluage_gradient(loss_fun, data_batch, weights)
weights += -step_size*weights_grad
๊ผผ์ง๋ฝ
Batch Normalization์ ๋ํ ๋
ผ๋ฌธ์ ์ฝ์ผ๋ฉด์ ๋ฅ๋ฌ๋๊ณผ ๊ด๋ จ๋ ๊ธฐ์ด ์ง์์ ๋ง์ด ์ฐพ์๋ดค๋ค. ๊ทผ๋ฐ ๊ทธ ๋ด์ฉ์ ๋ค ์ด ๊ฐ์์์ ๋ค์ ๋ฃ๊ฒ ๋์ ์ดํดํ๊ธฐ๊ฐ ์กฐ๊ธ ์ฌ์์ ์ข๊ธฐ๋ ํ๋ฉด์... ๋๋ฌด ์๋๊ฑฐ ์์ด ๋
ผ๋ฌธ์ ๋ค๋ณ๋? ํ๋ ์๊ฐ๋ ๋ค์๋ค. ๊ทธ๋๋ ๊ฐ์๋ ์ฌ๋ฐ์๋ค :)