[Machine Learning] CS231N #3 Loss Functions and Optimization

2023. 10. 14. 00:57Run/Machine Learning

 

Stanford University CS231n, Spring 2017

CS231n: Convolutional Neural Networks for Visual Recognition Spring 2017 http://cs231n.stanford.edu/

www.youtube.com

 

 

 

위 classifier는 첫 번째 이미지를 dog로, 두 번째 이미지를 automobile로, 세 번째 이미지를 truck으로 추측하고 있음

따라서 좋은 classifier가 아님, 우리가 원하는 것은 실제 정답인 class에 대해 가장 높은 score을 띄도록 하는 것

 

Weight를 사용하여 score을 구하고, 이를 바탕으로 weight가 얼마나 안 좋은지 측정하는 것이 loss function

가능한 weight들 중 가장 적절한 weight를 구하는 과정이 optimization

 

 

 

Score을 구하는 방법 $f(x, W) = Wx$

 

 

 

데이터셋의 구성

$x$는 이미지, $y$는 해당 이미지의 라벨 (정수값으로 매겨짐)

 

 

 

Loss function

모든 데이터셋에 대해 loss 값을 구한 뒤 평균을 냄

이 loss function은 가장 기본적인 형태이고, 이외에 여러 loss function이 있음 (ex. SVM loss)

 

 

Multiclass SVM Loss

 

데이터셋 $(x_i, y_i)$

Scores vector: $s = f(x_i, W)$

 

정답 카테고리($y_i$)를 제외한 나머지 카테고리 $y$의 합을 구하고,

정답 카테고리의 score($s_{y_i}$)과 틀린 카테고리의 score($s_j$)을 비교함

만약 $s_{y_i}$가 $s_j$보다 특정 값 (safety margin, 위 예시에서는 1) 이상 크면, loss 값은 0이 되고

만약 특정 값 이상 크지 않으면, $(s_{y_i} - s_j +$ 특정 값$)$이 전체 loss에 더해지게 됨

 

Loss function을 보면 정답 카테고리의 score이 높을수록 loss가 선형적으로 줄어드는 것을 볼 수 있음

 

 

 

이를 모든 데이터셋에 대해 계산하고 평균을 구하면 최종 loss 값이 됨

모든 score이 0이라고 하면 loss 값은 'class 수 - 1'이 되는데, 이 특성은 디버깅할 때 유용함

Loss 값이 0이라고 해서 해당 weight가 유일한 것이 아님 (ex. 2*weight로 계산해도 loss 값 0임)

 

 

Regularization

파란색: train data / 초록색: test data

 

우리는 classifier가 test data에 대해 잘 작동하기를 원함

즉, 파란색 데이터에 맞춰 구불구불한 classifier가 되기 보다는, 초록색 데이터에 맞춘 classifier가 되기를 원함

이에 regularization 항을 추가해 classifier가 좀 더 단순한 weight를 찾을 수 있도록 함 ($\lambda$는 hyperparameter)

 

 

 

 

Regularization 종류는 여러 가지가 있음 (2017년 자료라 더 최신 방식이 있을 수도?)

L1 regularization은 weight에 0이 아닌 요소가 많은 복잡하고, 0이 많으면 덜 복잡함

L2 regularization은 weight가 어느 쪽에 치중되어 있으면 복잡하고, 전체적으로 퍼져있으면 덜 복잡함

 

 

Softmax Classifier (Multinomial Logistic Regression)

 

SVM loss에서는 score에 대해 분석을 하지 않았음

Multinomial logistic regression의 cost function은 score 자체에 의미를 부여함

Softmax 함수를 사용하여 score을 가지고 class 별 확률 분포를 계산함

 

 

 

각 score에 대해, exp를 취해 양수로 만들고 이를 normalize 함

이를 통해 확률 분포를 얻을 수 있고, 이는 input 이미지가 해당 class일 확률이 됨

확률이므로 값은 0~1 사이이고 모든 확률의 합은 1임

우리가 원하는 것은 정답 class의 확률이 최대한 1과 가까운 것임

그렇게 되면 loss 값은 -log(정답 class 확률)이 됨

Softmax loss의 최솟값은 0이고, 최댓값은 무한대임

 

 

SVM vs Softmax

 

SVM은 정답 score과 오답 score 간의 margin을 신경쓰고, Softmax는 확률을 구해 -log(정답 class)를 신경씀

 

 

Optimization (Gradient Descent, Stochastic Gradient Descent)

최적화는 loss 값을 가장 작게 만드는 위치를 찾는 것임

이를 위해 gradient descent, stochastic gradient descent 등을 사용함

 

# Gradient Descent
while True:
    weights_grad = evaluate_gradient(loss_fun, data, weights)
    weights += -step_size * weights_grad
# Stochastic 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 # parameter update

 

데이터셋의 loss를 계산하는 것은 굉장히 오래 걸림

그래서 stochastic gradient descent를 사용하여, 전체 데이터셋의 gradient, loss를 계산하지 않고 minibatch로 나눠서 계산함

Minibatch는 보통 2의 지수로 사용하고, minibatch를 이용하여 loss의 전체 합의 추정치와, gradient의 추정치를 계산함

 

 

(+) Image Features

Linear classifier는 raw image pixel을 input으로 받아 처리함

하지만 이는 multi-modality 등 때문에 좋은 방법이 아님

실제로 raw image pixel을 사용하면 classifier가 잘 작동하지 않음

 

 

 

그래서 딥러닝이 흥하기 전엔 (초기 컴퓨터비전 말하는 듯) image의 feature representation을 추출하여 classifier에 집어넣음

Feature representation을 사용하면 선형으로 분리가 가능해져 linear classifer로 잘 분리할 수 있음

Feature representation 예시로는 color histogram, histogram of oriented gradients (HoG), Bag of Words 등이 있음

 

 

Color Histogram

 

이미지에서 모든 픽셀에 대해 Hue 값을 뽑아 이미지가 전체적으로 어떤 색인지 확인함

 

 

Histogram of Oriented Gradients

 

이미지에 전반적으로 어떤 edge가 있는지 확인함

 

 

Bag of Words

 

문장을 표현할 때 문장 내 단어의 발생 빈도를 계산하여 feature vector로 사용함

 

 

Image Features vs CNN

 

Linear classifier에서는 feature extraction이 이루어진 뒤에 training 동안 update 되지 않음

Neural network에서는 feature을 직접 뽑지 않고, raw image pixel을 집어넣고 weight를 update 함