본문 바로가기

Deep Learning

[CS231n] Lecture 3: Loss Functions and Optimization

Loss Functions

예측 함수 f(x,W) = Wx

 

왼쪽 숫자들은 임의의 행렬 W를 가지고 예측한 클래스 스코어이다.

고양이 샘플 데이터에서 cat score는 3.2로 car score 5.1보다 낮고, 개구리 샘플 데이터에서 frog score는 -3.1로 cat과 car에 대한 score보다 낮은 값을 갖고 있다.

우리는 정답 클래스가 해당 데이터에서 가장 높은 점수가 되는 분류기를 원하기 때문에 해당 분류기가 성능이 별로 좋지 않다는 것을 알 수 있다.

 

 

하지만 스코어를 눈으로 보며 분류기의 성능을 평가하는 것은 좋은 방법이 아니다.

문제를 해결할 알고리즘을 만들고, 어떤 W가 가장 좋은지 결정하기 위해서는 W가 좋은지 나쁜지를 정량화 할 방법이 필요하다!

 

손실함수는 W를 입력받아 각 스코어를 확인하고 W가 얼마나 안좋은지를 정량적으로 평가해준다.

우리는 모든 경우의 수 중에서 최선의 W를 찾기 위해 손실함수를 사용한다.

 

X: 알고리즘의 입력값, 학습 데이터

y: (예측하고자 하는) 레이블, 타겟

 

y라는 정수값은 X의 카테고리를 의미한다.

CIFAR10 데이터셋의 경우 클래스가 10개이기 때문에 레이블 y가 1에서 10 사이의 정수 또는 0에서 9 사이의 정수가 된다.

 

N개의 데이터 중 i번째 데이터에 대해서 손실함수 L_i는 예측함수 f와 정답 y_i를 사용해 학습 데이터를 얼마나 좋지 않게 예측하는지를 계산한다.

최종 Loss인 L은 데이터 셋에 있는 N개의 샘플들의 loss값의 평균이다.

 

우리는 가중치 행렬인 W의 공간을 탐색하면서 학습 데이터에 대한 loss를 최소화하는 W를 찾아야한다.

 

Multiclass SVM loss

 

기존 svm은 이진 데이터만 다루는데, multiclass SVM은 여러 클래스를 다루기 위해 일반화된 형태이다.

 

올바른 라벨에 해당하는 카테고리와 나머지 카테고리 간의 점수를 비교하여 Loss L_i를 구한다.

올바른 카테고리에 해당하는 점수가 더 높고, 그 격차가 일정 마진(safety margin)이상이면 loss값은 0이다.

 

이미지 내에서 정답이 아닌 카테고리의 모든 loss값들을 합치면 그 값이 바로 한 이미지의 최종 loss가 된다.

그리고 전체 학습 데이터 셋에서 loss값들의 평균을 구한다.

 

 

 

S: 분류기의 출력을 나온 예측된 스코어

Y_i: 이미지의 실제 정답 카테고리, 정수

S_Y_i: 트레이닝 셋의 i번째 이미지의 정답 클래스의 스코어

만약 1이 고양이고 2가 개면, S_1은 고양이 스코어이고 S_2는 개 스코어이다.

 

x축은 S_Yi, 즉 실제 정답 클래스의 스코어를 의미하고 y축은 loss값을 의미한다.

그래프에서 스코어 값이 높아질수록 loss 값이 선형적으로 줄어드는 것을 알 수 있다.

이후 예측된 스코어와 실제 정답간의 차이가 safety margin을 넘으면 loss값이 0이 되고, 이는 분류가 잘 되었다는 것을 의미한다.

 

여기서 safety margin이 임의로 1로 설정되어 있기는 하지만, 사실 이 값은 중요하지 않다.

왜냐하면 svm에서 중요한 것은 스코어의 절대적인 값이 아니라 스코어들 간의 상대적인 차이이기 때문이다.

만약 행렬 W를 전체적으로 스케일링한다면 결과 스코어도 이에 따라 스케일링된다.

따라서 1이라는 파라미터는 사라지고 W의 스케일에 의해 상쇄된다.

 

우리는 loss가 실제로 어떻게 작동하는지를 직관적으로 이해해야 한다.

 

Q1. What happens to loss if car scores change a bit?

car 스코어가 조금 변한다면 loss값은 어떻게 될까?

svm loss는 오직 정답 스코어와 다른 스코어와의 차이만 고려한다.

이 경우 차의 스코어가 훨씬 높기 때문에 값이 조금 변한다고 해도 서로간의 간격(margin)이 유지될 것이고 loss도 0으로 유지된다.

 

Q2. What is the min/max possible loss?

모든 클래스에 걸쳐서 정답 클래스가 가장 크다면 loss는 최솟값으로 0을 갖는다.

svm loss 그래프 모양이 hinge라는 걸 고려하면 최댓값은 +무한대가 된다.

 

Q3. AT initialization W is small so all s ~= 0. What is the loss?

모델을 처음부터 학습시킬때 보통 가중치 행렬 W를 임의의 작은수로 초기화하는데, 이 때 초기에는 결과 스코어가 임의의 일정한 값을 갖게 된다.

이 때 만약 스코어 s가 거의 0에 가깝고 서로 비슷하다면 svm loss를 계산할 때마다 1이라는 값이 나온다.

클래스의 개수가 c라고 할 때, 두 스코어를 비교하는 횟수가 c-1이 되므로 loss는 c-1의 값을 갖게 된다.

이런 방식으로 우리는 loss가 어떻게 계산될지 짐작할 수 있고, 이는 중요한 디버깅 전략이 된다.

만약 학습을 처음 시작할 때 loss가 c-1이 아니라면 버그가 있다고 판단할 수 있다.

 

Q4. What if the sum was over all classes? (including j = y_i)

svm loss는 정답인 클래스를 제외하고 다른 클래스의 스코어들을 전부 합했다.

만약 정답인 클래스도 같이 더하면 전체 loss값에 1이 더해질 것이다.

일반적으로 정답 클래스 스코어를 더하지 않는 이유는 loss가 0이 되어야 분류가 잘 되었다고 쉽게 해석할 수 있기 때문이다. 관례상 정답 클래스를 제외하고 계산해서 최소 loss가 0이 되도록 한다.

손실함수라는 것이 분류기에게 우리는 어떤 w를 찾고 있고 어떤 w에 신경쓰고 있는지를 말해주는 거라면 여기에서 이상한 점이 있다. 여기에서 우리는 학습 데이터에 대한 loss값이 0이 되도록 하는 W를 선택한다면, 트레이닝 데이터에 꼭 맞는 W를 찾는 것이기 때문이다.

하지만 우리는 학습 데이터에 대한 성능에 관심있는 것이 아니라, 테스트 데이터에서의 성능에 관심이 있다.

 

파란 점(학습 데이터)들에 분류기를 fit하게 학습시킨다면 파란색 곡선과 같이 구불구불한 곡선을 만들어 낸다.

이 때 만약 새로운 데이터(초록색 점)가 들어오게 되면 앞서 만든 곡선은 완전히 잘못된 분류기가 된다.

우리는 파란색 곡선이 아닌 초록색 선을 만들어내는 것이 중요하다.

그리고 이를 해결하는 방법을 통틀어 regularization이라고 하며, 이는 기계학습에서 가장 중요한 문제이다.

 

Regularization  정규화

우리는 regularizaion term이라는 새로운 항을 손실함수에 추가한다.

data loss term은 분류기가 트레이닝 데이터에 핏하게 학습되도록 도와준다면, regularizaion term에서는 모델이 좀 더 단순한 w를 선택하도록 도와준다.

 

과학계에서 널리쓰이는 오컴의 면도날이라는 말이 있다.

다양한 가설을 가지고 있고 그 가설들이 모두 어떤 현상에 대해 설명 가능하다면, 더 일반적이고 단순한 것을 선호해야한다는 것이다. 왜냐하면 더 단순하고 일반적인 가설이 미래에 일어날 현상을 잘 설명할 가능성이 높기 때문이다.

 

따라서 더 단순한 W를 찾기 위해 regularization penalty가 필요하고, 트레이드 오프를 위한 하이퍼파라미터 람다를 갖게 된다.

 

머신러닝의 정규화 유형


L2 Regularization (Ridge Regression)
가중치 행렬 W의 유클리드 노름(제곱 노름)에 페널티를 적용한다.
미분을 단순화하기 위해 종종 1/2​×norm2로 표시된다.
더 작은 norm을 갖는 가중치 벡터를 선호하여 가중치 집합이 더욱 균등하게 분산되도록 한다.
ex) 두 개의 가중치 벡터 W1​=[1,0,0,0] 및 W2​=[0.25,0.25,0.25,0.25]가 주어지면 L2 정규화는 더 작은 W2​를 선호합니다. 표준.


L1 Regularization (Lasso Regression)
가중치 행렬 W의 희소성을 장려합니다.
0이 아닌 가중치가 더 적은 모델을 선호하므로 솔루션이 더 희박해집니다.
복잡도 측정: 가중치 행렬의 0이 아닌 요소 수로 정의됩니다.


Elastic Net Regularization
L1 정규화와 L2 정규화의 조합이다.
L1과 L2 간의 균형을 유지합니다.


Max Norm Regularization
L1 및 L2만큼 일반적이지는 않지만 기계 학습과 딥 러닝 모두에 사용된다.


L2 정규화는 W의 요소가 분산되어 있고 크기가 더 작을 때 모델은 덜 복잡하다고 간주한다. 그리고 입력 X의 모든 요소가 효과를 갖는 것을 목표로 한다. 그와 달리 L1 정규화는 W에 0이 더 많은 모델을 덜 복잡하다고 간주한다.
정규화(L1, L2, Elastic Net 등) 방법을 선택하는 것은 특정 문제와 원하는 모델 속성(예: 희소성, 가중치 분포)에 따라 달라진다. 문제 상황과 해당 상황에서의 복잡성 정의를 이해하는 것은 적절한 정규화 기술을 선택하는 데 중요합니다.

 

Softmax Multinomial Logistic Regression
Softmax는 선형 분류기의 출력을 확률 분포로 변환하는 데 사용된다. 이는 각 클래스에 대한 스코어를 의미 있는 확률 값으로 해석하는 데 중점을 둔다.

Softmax 함수의 작동 원리
   - 각 클래스의 스코어에 지수 함수를 적용하여 양수로 변환합니다.
   - 이 지수화된 스코어들의 합으로 각 스코어를 정규화하여 확률 분포를 얻습니다.
   - 결과적으로, 각 클래스에 대한 확률이 0과 1 사이의 값으로 나타나며, 모든 클래스의 확률 합은 1이 됩니다.

확률 분포의 해석
   - 계산된 확률 분포는 실제 값과 비교됩니다. 예를 들어, 이미지가 고양이인 경우, 고양이 클래스의 확률은 1이 되고, 나머지 클래스는 0이 됩니다.
   - 목표는 정답 클래스의 확률을 1에 가깝게 만드는 것입니다.

손실 함수
   - 손실은 `-log(정답 클래스의 확률)`로 계산한다.
   - 확률이 1에 가까워질수록 로스는 0에 가까워진다.
   - 로스의 최솟값은 0이고, 최댓값은 무한대이다. (하지만 컴퓨터의 유한 정밀도로 인해 실제로는 이러한 극단적인 값에 도달하기 어렵다.)

디버깅 방법
   - 초기 반복에서 손실이 `logC`가 아니라면 문제가 있는 것으로 간주할 수 있습니다.


SVM과의 비교
   - SVM은 정답 클래스와 비정답 클래스 간의 마진에 초점을 맞춘다.
   - Softmax (Cross Entropy)는 확률을 기반으로 하여 정답 클래스의 `-log` 확률에 집중한다.

최적화 (Optimization)
최적화는 거대한 산과 계곡을 걸어다니며 골짜기의 밑바닥을 찾는 것과 유사하다. 여기서 '골짜기의 밑바닥'은 최소 손실(loss)을 의미한다.
신경망(Neural Networks)과 같은 복잡한 모델에서는 명시적인 최적의 솔루션을 찾는 것이 불가능하다. 대신, 반복적(iterative) 방법을 사용하여 점진적으로 성능을 향상시킨다.

임의 탐색(Random Search)은 임의로 선택된 많은 W값을 평가하는 방법으로 효율적이지 않다.
 지역적 기하학적 특성(Local Geometry) 활용해 경사(gradient)를 이용하여 손실 함수가 감소하는 방향으로 이동해야 한다.

Gradient Descent


가중치 W를 초기화한 후, 손실과 그래디언트를 계산하고, 가중치를 그래디언트의 반대 방향으로 업데이트한다.
이 때, 스텝 사이즈(learning rate)는 중요한 하이퍼파라미터이다.

Stochastic Gradient Descent, SGD


전체 데이터셋 대신 미니배치(minibatch)를 사용하여 그래디언트와 로스를 계산한다.
단순히 gradient descent를 하는 것보다 효율적이며, 대규모 데이터셋에 적합하다.