3강: Loss Functions and Optimization

Aacara·2022년 1월 12일
0

cs231n

목록 보기
2/7
post-thumbnail

스탠포드 강의의 CS231n 3강을 보고 정리한 내용입니다.

링크 : https://www.youtube.com/watch?v=h7iBpEHGVNc&list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv&index=3

지난 강의에서 학습을 한다는 것은 곧 W(weight)를 학습한다는 것과 같다는 것을 배웠다. 이번 강의에선 더 나아가 어떻게하면 좋은 W를 구할 수 있을까에 대한 고민을 담아냈다. 좋은 W를 구하기에 앞서 W가 얼마나 좋은지(역으로 생각하면 얼마나 나쁜지)에 대한 측정 기준이 필요하다. W가 얼마나 좋은지에 대한 기준이 maximum likelihood estimation이고 W가 얼마나 나쁜지에 기준이 바로 loss function이다. 측정 기준을 구했으니 안좋음을 최소화하거나 좋음을 최대화하여 최적의 W를 근사적으로 찾아가는 방법이 Optimization이다.

W를 근사적으로 찾아야만 하는 이유는 data driven approach를 선택했기 때문이다. 2강에서 다루었듯이 Data driven approach란 특징들을 일일이 정의해주는 대신 수많은 데이터를 입력해서 컴퓨터가 스스로 특징들을 파악할 수 있도록 하는 방법이다. 정확한 해를 구하려면 컴퓨터가 파악한 특징들을 알아야하는데 이는 불가능하다.

따라서 3강을 Loss function과 Optimization이라는 키워드를 기준으로 살펴보겠다. MLE(Maximum likelihood estimation) 관련해서는 나중에 정리할 것 같다.

1-1. Loss function

2강에 이어서 여전히 image classification task를 수행하는 linear classifier를 다룰 것이다. 구체적으로 loss function을 기준으로 SVM classifier와 softmax classifier 로 나눠서 설명할 것이다.

Loss function이란?


앞서 말했던 대로 loss function이란 W가 얼마나 나쁜지에 대해 정량화한 지표다. 정량화의 기준을 ground truth label y(i)(정답 라벨)과 score function(f(x(i), W)의 차이로 삼았다.

위의 식에서 최종 loss는 각 loss의 합 대신 1/N을 곱해서 평균을 냈다. 손실 함수에 스칼라값을 곱해주어도 함수의 모양이 바뀌지 않기 때문에 최적해가 바뀌지 않는다. 그런데 굳이 1/N을 곱한 이유는 수치의 안정화를 위해서다.

Loss function 1: Hinge Loss/Max margin Loss(> SVM classifier)

s(score function) = f(x(i), W) = W * x라고 할 때 Hinge Loss를 그래프로 표현하면 아래와 같다.

[ Hinge loss의 의미 ]
Hinge loss는 나머지 클래스의 점수에서 정답 클래스의 점수를 빼줘서 구한다. 따라서 정답 클래스의 점수가 오답 클래스의 점수에 비해 상대적으로 높을수록 loss가 감소한다. 그렇기 때문에 Hinge loss그래프의 기울기가 음수다. 하지만 loss는 아무리 낮아도 0 이하로 내려갈 수 없기 때문에 (정답 클래스의 점수 > 오답 클래스의 점수 + margin 값)이라면 loss는 0이다. 더 나아가, (정답 클래스의 점수 >> 오답 클래스의 점수 + margin 값)인 경우 loss는 0이므로 정답 클래스의 점수가 조금 바뀌더라도 loss 값은 변화가 없을 것이다. 다시 말하자면, hinge loss에서 중요한 것은 정답 클래스의 점수가 다른 클래스의 점수보다 크다는 질적인 차이일뿐 '얼마나' 더 큰지의 양적인 차이는 중요하지 않다.

[ Margin의 의미 ]
Margin 값을 주는 이유를 이해하기 위해 하나의 상황을 예를 들어 보자. 만일 margin이 없는 상황에서 정답 클래스와 정답이 아닌 클래스의 score이 같다면, loss는 0이된다. 하지만 제대로 분류했을 경우에만 loss 값이 0으로 만들고 싶어서 margin을 주는 것이다. 따라서 margin값이 많이 클 필요가 없으며 통상적으로 1을 사용한다.

[디버깅]
디버깅 관점에서도 한번 생각해보자. 만약 W를 잘못 초기화해서 행렬의 각 원소들이 작은 랜덤 값이라면? 너무 작아서 그 차이가 0에 수렴한다면 각 클래스의 loss는 margin 값인 1일 것이다. 본인을 제외한 클래스들과만 비교하므로 [loss = 클래스의 수 - 1]일 것이다. 따라서 첫번째 epoch의 loss 값이 [클래스의 수 - 1]이라면 더 큰 값들로 초기화를 해야 할 것이다.

Hinge Loss를 직접 구해보자.

1. cat클래스의 loss

2. car클래스의 loss

3. frog클래스의 loss

4. loss의 평균

Loss function 2: Cross Entropy Loss(> softmax classifier)

[Cross Entropy Loss의 의미]
앞서 다뤘던 hinge loss는 정답 클래스의 점수가 다른 클래스의 점수보다 크다는 질적인 차이에만 초점을 뒀었다. 정답 클래스의 점수가 나머지 클래스의 점수보다 크다는 사실이 중요했을 뿐 얼마나 더 큰지는 중요하지 않았다. 그렇기 때문에 loss function의 값 자체로부터 의미를 도출해내지 못했다.

이 때, loss function의 값들 자체에 의미를 담게 된 것이 cross entropy loss이다. 여기서 말하는 의미란 정답 클래스의 점수가 다른 클래스의 점수보다 '얼마나' 더 큰지라는 양적인 차이를 의미한다. 양적인 차이를 담아내기에 확률 분포가 적합하다.

[식에 대한 이해]
1. e^x 사용하는 이유 : 확률은 양의 값이므로 양수, 음수 어떠한 입력에 관해서도 양수의 출력을 가지는 함수에 값을 통과시켜야 한다. 지수함수 e^x는 이 기능을 완벽하게 수행한다.

2. normalization : 모든 클래스의 loss function 점수들을 0과 1사이의 숫자로 정규화한다. 합산한 값이 1이므로 확률의 의미를 담고있다.

3. -log 사용 이유 : loss function이란 안좋음에 대한 기준이므로 안좋음을 최소화해야 좋을 것이다. 따라서 -가 붙는다.

추가적으로 log 함수를 통과시키는 이유는 뭘까? log 함수 그래프를 보면서 이해해보자.

앞서 loss 값을 최소화해야 한다고 했다. 이 말은 -loss 값을 최대화해야 한다는 것과 같은데 -loss function을 최대화하기에 -log(loss function)이 더 용이하다. 확률의 값은 0과 1사이인데 -log 함수에서 0과 1사이의 값들은 입력에 대한 출력의 민감도가 크다. 이게 무슨 뜻이냐면 -log function을 통과시키면 촘촘한 간격의 x에 1대1 대응하는 y의 scale은 0부터 무한대이기 때문에 차이를 확대해서 볼 수 있다는 것이다.
[계산 과정]

SVM loss vs softmax loss

정리하면 SVM loss는 오른쪽 식, softmax는 왼쪽 식으로 표현된다.

두 loss의 가장 큰 차이점은 datapoint에 대한 민감도이다. SVM loss의 경우 정답 클래스의 점수가 오답 클래스의 점수보다 크다는 사실 자체가 중요해서 datapoint에 대한 민감도가 낮다. 그에 반해 softmax loss는 정답 클래스의 확률을 높이는 것이 목표이므로 모든 datapoint마다 성능을 높이고자 한다. 즉, datapoint에 대한 민감도가 높다. 이렇게 보면 softmax loss의 성능이 더 좋을 것 같지만 실제로 적용해보면 성능이 비슷하다.

Regularization

Generalization

앞에서 다루었던 hinge loss와 cross entropy loss는 데이터에 관련된 loss다. Data에만 기반에서 그래프를 그리면 파란색과 같이 classifier가 그려지는데 train set에 overfit되어 새로운 데이터(초록색 네모)를 예측하는 데에 적합하지 않다. 따라서 일반화가 필요하다. Loss function의 일반화를 위해 loss function에 regularization R(W)항을 추가한다. Training data를 fit하는 것과 더 간단한 모델을 구하는 것은 tradeoff관계에 있다. 어느 쪽에 더 비중을 두는지를 lambda항을 통해 조절한다. Lambda가 커진다면 일반화에 비중을 두는 것이고 lambda가 작아진다면 training set에 fit한 함수를 구하는 데에 초점을 두는 것이다.

L1, L2 regularization


Regularization R(w)항은 복잡도라는 기준에 따라 L1, L2 regularization으로 크게 나뉜다. L1 regularization의 덜 복잡함은 sparse solution이고 L2 regularization 기준의 덜 복잡함은 골고루 퍼져있는 것이다.

L1 regularization이나 L2 regularization을 각자 어떤 상황에 이용하는지를 알기 위해 통계적으로 접근해보겠다.

L1 regularization

L1 regularization은 W matrix 가중치의 PDF(probability distribution function)이 라플라스 분포를 띄고 있을 때 사용한다. 그렇다면 언제 라플라스 분포를 띄고 있을까? 2강에서 L1 distance를 배웠던 것을 상기시켜보자. L1 distance는 좌표축에 dependent했었는데 이는 즉 2가지 특성에 의존한다는 의미였다. 따라서 이항분포를 떠올릴 수 있다. 이항분포는 연속된 n번의 독립적 시행에서 각 시행이 확률 p를 가질 때의 이산 확률 분포이다. 라플라스의 정리를 이용하면 이산 확률 분포(discrete probability distribution)을 정규 분포와 같은 연속 확률 분포pdf(probability distribution function)으로 만들 수 있다. 간략하게만 정리한다면 라플라스의 정리는 중심 극한 정리(CLT)를 이항 분포에 적용한 개념이다. 수학적으로 증명을 보구싶다면 이 링크 를 참고 : https://pkjung.tistory.com/159


가중치가 라플라스 분포를 띌 때 L1 distance를 사용하는 이유를 식으로도 이해해보자. 위의 라플라스 분포 식에 -log를 취한 후 상수항을 빼면

L1 distance 항이 나온다.

L2 regularization

L1 regularization은 W matrix 가중치의 PDF(probability distribution function)이 가우시안 분포를 띄고 있을 때 사용한다. 그렇다면 언제 가우시안 분포를 띄고 있을까? 이 역시 2강에서 L2 distance를 배웠던 것을 상기시켜보자. L2 distance는 좌표축에 independent했었는데 주로 어떤 특징들이 있는지 모를 때 사용했었다. 직관적으로도 와닿는게 자연계에서 independent하고 충분히 많은 특성들을 가진 집단은 중심 극한 정리에 의해 가우시안 분포를 띠고 있기 때문이다.


위에서와 마찬가지로 가중치가 가우시안 분포를 띌 때 L2 distance를 사용하는 이유를 식으로 이해해보자. 위의 가우시안 분포 식에 -log를 취한 후 상수항을 빼면

L2 norm 항이 유도된다.

1-2. Maximum Likelihood estimation

Maximum likelihood 관점에서보는 loss

여태 모델을 학습한다고 할 때 W가 얼마나 나쁜지에 대한 기준인 loss에 대해 이해했다. W가 얼마나 좋은지에 대한 기준은 maximum likelihood estimation이다. 구체적으로, Maximum likelihood estimation 관점에서의 loss의 목표는 관측 데이터의 확률을 최대화하는 확률분포 함수를 찾는 것이다. CS231에 나오는 내용이 아니므로 나중에 정리해볼 생각이다.

Classifier

Loss 관점에서 hinge loss와 cross entropy loss를 살펴보았다. 하지만 우리가 큰 범위에서 linear classifier를 공부하고있다는 것을 잊지말자. SVM classifier와 softmax classifier는 linear classifier로 각각의 SVM classifier는 hinge loss, softmax classifier는 cross entropy loss를 갖는다. 각 classifier의 의미를 한번 짚고 넘어가자.

SVM classifier

SVM classifier는 최대의 margin을 찾는 분류기이다. 각 점 x(2차원 Real 영역에 속한)와 a transpose * x + b의 hyperplane 사이의 거리의 합을 최소화하고자 한다. 여기서 거리가 바로 loss이다.

softmax classifier

softmax classifier는 원래 regression의 개념을 classification에 도입한 개념이다. Classification은 데이터의 클래스를 예측하는 문제를 해결하고자 한다. Regression은 독립 변수와 종속 변수의 관계를 나타내는 연속 함수를 찾고자 한다. Softmax classifier는 얼마나 정답에 높은 확률을 부여했는지 수치화하여 a transpose * x + b 연속 함수를 찾아내고자 한다. 이러한 방법으로 classification을 진행하므로 regression 방법으로 classification한다고 한 것이다.

2. Optimization

W의 성능을 측정해서 가장 좋은 W를 찾기 위해 설정한 기준을 loss로 삼았다. Optimization은 가장 적은 loss값을 가지는 W를 구하는 과정이다. Loss function을 그림으로 표현한다면 아래의 그림과 같다.

Loss function 전체에서 가장 작은 loss 값을 가지는 지점이 global minima이고 지역적으로 가장 작은 loss 값을 가지는 지점이 local minima이다. 궁극적인 목표는 최적해가 위치한 global minima를 찾는 것이지만 loss function 그 자체를 한꺼번에 알 수 없어서 정확한 해를 구할 수 없어 근사적으로 최적해를 찾아야 한다. 궁극적으로는 내가 구한 지점이 global minima인지 알 수 없으므로 무작위의 초기값을 여러 개 설정해서 여러개의 local minima 중 가장 작은 지점을 찾아주는 식으로 보완한다.

Gradient descent

임의의 시작 지점에서 어느 방향으로 가야 local minima나 global minima를 찾을 수 있을까? 쉽게 떠올릴 수 있는 방법은 그 순간순간 가장 가파른 곳으로 이동하는 것이다. 가장 가파른 곳을 구하기 위해 편미분을 해서 가장 기울기가 큰 벡터를 찾는다. 그 후 그 지점에서 음의 방향으로 이동해준다.

Stochastic gradient descent(SGD)

Training set 전체에 loss 값으 기울기를 구해서 평균을 내주면 컴퓨터 자원의 소모가 너무 크다. 이를 해결하기 위해 전체 데이터셋에 대해 기울기를 구하지 말고 minibatch 샘플을 구해서 그 샘플의 기울기만 구하는 방법이 SGD이다. 다시 말해서, 샘플(표본 집단)을 통해 전체 데이터셋(모집단)을 추측하는 것이다. 어떤 batch가 선택하는지는 임의성/확률성 개념이 들어가므로 stochastic이다.

참고로 batch의 크기는 32, 64, 124처럼 통상적으로 2의 배수로 설정한다.

profile
https://github.com/aacara

1개의 댓글

comment-user-thumbnail
2022년 1월 17일

자세한 설명 감사합니다!

답글 달기

관련 채용 정보