CS231n | 3강 - Loss Functions and Optimization
[CS231n] Lecture-3-Loss-Functions-and-Optimization
3강 Video 바로가기
- Contents
- Linear classification II
- Higher-level representations, image features
- Optimization, stochastic gradient descent
지난 강의(Lecture2)에서 이미지 인신의 어려움에 대해 이야기 했다. 사람의 시각 인식과 컴퓨터의 인식에는 Semantic Gap이 존재했고 이를 극복하기 위해서는 여러 Challenge가 존재한다. 또한 이미지 인식을 위한 기법으로 배운 KNN은 Data중심의 접근 방법으로 Hyperparameter인 W가 존재하고 이는 train 과정에서 세팅되어 test데이터를 predict한다.
그렇다면 어떻게 W를 결정하느냐? W에 대해 좋다 나쁘다를 정량화하는 것이 바로 Loss Function이다. 그리고 이 최선의 W를 찾아가는 방법이 Optimization이다. 오늘은 이 2가지 방법에 대해 배울 것이다.
Linear classification II
Loss Function
Loss function은 현재 분류기가 얼마나 좋은지 말해준다. dataset에 대한 Loss fucntion은 \(f(x_{i},W)\)와 \(y_{i}\)의 차이에 대한 평균이다. 이것은 이미지 뿐만 아니라 매우 general하게 이용된다.
Multiclass SVM Loss가 말하는 것은 true score이 다른 score보다 훨씬 높다면 좋다는 것을 의미한다. 이 Loss는 safety margin보다 true score가 다른 score보다 높다면 loss가 올라가게 된다.
실제 class는 고양이인데 자동차 score(5.1)가 고양이 score(3.2)보다 높기 때문에 손실을 입는걸 볼 수 있다.
모든 score에 대한 loss에 대해 평균을 구하면 5.27이 이 함수에 대한 Loss가 된다.
$ L=0 $이 되게 하는 W는 unique하지 않다.
Loss에 모델이 simple하게 해주는 Regularization term을 추가해서 train data에 overfitting되는 것을 막을 수 있다. 모델의 복잡성에 페널티를 부여하는 것이다. hyperparameter $ \lambda $를 조절해서 tuning한다.
L2 Regularization은 w의 복잡성을 줄여준다. 실제로 L2 Regularization은 weight가 분산된 w2를 선호한다. L1 Regularization은 그러나 변수가 shrinke하는 w1를 선호한다.
Softmax Classifier(Multinomial Logistic Regression)
0~1의 값을 가지도록 exponential을 취해주고 그 값들의 합이 1이 되도록 확률 분포를 따르도록 만들어준다. 이때 Loss function은 맞는 분류의 확률값이 클수록 loss가 작아지도록 $ L = -log P $ 를 최소화한다.
hinge loss(SVM)과 cross-entropy loss(Softmax)의 비교이다. SVM은 맞게 한번 분류되면 끝이지만 Softmax는 스코어를 더더 좋게 개선하기 위해 노력한다는 차이가 있다. 물론 딥러닝에서 두 loss를 다른거 쓰더라도 크게 결과가 달라지지는 않는다.
그렇다면 최적의 W를 찾는 방법은? 바로 최적화(Optimazation)이다.
Optimazation
한번에 Loss의 minima가 되게하는 명시적인 해답을 찾으면 좋지만, 딥러닝에서는 그렇게 한번에 찾는게 불가능하다. 반복하여 점차 나아지게 하는 방법을 사용한다.
Random Search
15.5%의 정확도이다. 이건 좋은 방법이 아니다.
Follow the slope
현재 서 있는 위치에서 경사를 느끼고 가장 가파른 곳으로 내려가는 방법이다.
negative gradient 방향으로가 가장 가파르게 내려간다.
Numerical gradient
gradient를 모두 하나씩 다 구하는 건 계산도 오래 걸릴 뿐더러 효과적인 계산 방법이 아니다. 이러한 Numerical gradient는 디버깅에서 사용하기 좋다.
Analytic gradient
그러나 위처럼 계산할 필요가 없이 미적분학의 요술 망치 (the magical hammer of calculus)를 사용하면, 훨씬 더 정확하고 빠르게 gradient를 구할 수 있다. 이 Analytic gradient는 실제적으로 사용되는 방법이다.
Gradient Descent
weight를 계속 업데이트해주는데 gradient의 음의 방향으로 step size만큼 움직인다. step size(learning rate)가 가장 중요한 hyperparameter 중 하나인데, 학습시에 가장 먼저 세팅하려고 한다.
Gradient descent는 각 loss의 선형합이다 따라서 저번에 본 예시처럼 이미지 파일에서 사용한다면 엄청나게 큰 N을 다 계산해야한다 그런데 이건 너무 느리고 오래걸리고 비효율적이다.
따라서 Stochasitic gradient descent를 사용한다. 모든 train set(N)을 사용해서 구하지 않고 통상적으로 2의 제곱수인 32/64/128 크기의 미니배치를 사용해서 Loss를 근사하는 방법이다. 이 외에도 여러 fancy한 방법들이 많이 존재하고 있다.
그 외의 이미지 인식 방법은 Color Histogram으로 이미지를 인식하는 법, Histogram of Oriented Gradients(HoG)으로 Dominant edge orientation으로 인하는 방법, Bag of Words방법으로 NLP처럼 이미지 조각 사전을 만들어서 인식하는 방법들이 있다.
그렇다면 이러한 Image feature를 이용하는 방법과 CNN은 어떤 차이가 있을까? Feature Extraction을 통한 전통적인 방식은 train을 하는 동안에도 Feature block이 fix이다. 이에 반해 CNN은 다른 것은 매우 비슷하지만 사전에 feature를 정해놓지 않고 data에서 직접 feature를 학습하는 방법이다.
다음시간에는 Neural Network에 대해 다루게 된다!