바닥부터 시작하는 인공지능

[CS231N] Lecture3: Loss Functions and Optimization(1) 정리

HappinessChung 2021. 4. 28. 15:26
반응형

이번 강의에서는 손실함수와 최적화 방법에 대해서 배워보도록 한다. 손실함수는 주어진 input값들에 대하여 weight인 W값(행렬의 형태로 주어짐)이 얼마나 잘 기능하는지(결과를 얼마나 잘 예측하는지)를 측정하기위한 도구이다. 

 

 

 

1. 손실함수(Loss Function)

위의 식은 손실함수의 기본 형태를 나타낸 것이다(강의 슬라이드 우측 하단). 각 요소요소를 살펴보도록 하자. L은 손실함수의 최종 값(각 클래스별 손실함수값의 평균)을 나타낸다. N은 입력 이미지의 갯수를 나타낸다. L_i는 i번째 input값에 대한 손실함수의 값을 나타낸다(정답과 얼마나 차이가 있는지). 그 안의 두 파라미터를 살펴보자. 함수 f는 인풋 이미지x_i와 W를 이용하여 예측한 결과값(지난 강의의 score)을 나타낸다. 그리고 y_i는 i번째 입력 이미지의 정답이 무엇인지를 알려주는 변수이다. 

손실함수의 L_i에 대해 더 자세히 살펴보자. L_i는 정답 레이블을 제외한 9개 클래스의 score값에서 정답 레이블의 score값을 뺀 값을 모두 더한 값이 들어있다. 만약 정답 레이블의 score가 그렇지 않은 레이블의 score값보다 크다면 손실함수값에 더해지는 값은 0이 된다. 

max(0, s_j - s_yi + 1) 를 좌표평면에 나타내면 아래와 같다. x축은 s_yi - s_j값을 나타내고, y축은 그max함수의 결과를 나타낸다. s_j - s_yi값에 1을 더했기 때문에 

이러한 사실들을 바탕으로 다음과 같은 질문들을 던져볼 수 있다.

Q1. What happens to loss if car scores change a bit?(만약 차 calss의 score에 미세한 변동이 있다면?)

A. 만약 정답 Label의 score값이 여전히 다른 클래스의 값보다 크다면, L_i값은 0으로 동일할 것이다. 

Q2. What is the min/max possible loss?(손실함수의 값이 가질수 있는 최소,최대 값은?)

A. min은 0이고(정답 레이블의 score값이 다른 레이블의 score값보다 작은 경우), max는 무한대까지 가능하다. 

Q3. At initialization, W is small so all s == 0. What is the loss?(가중치를 초기화 할때 매우 작은 값으로 하여 모든 score의 값이 0에 가까워진 경우 손실함수의 값은?)

A. s_j와 s_yi의 값이 0에 가까워져 s_j - s_yi + 1의 값이 1에 가까워지기 때문에 손실 함수의 최종 값은 "class의 수 - 1"이 된다.

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

Q5. What if we used mean instead of sum?(만약 손실함수의 최종 값으로 sum대신 mean을 사용했다면?)

A. 그래도 괜찮다. 최종 손실함수에서 중요한 것은 절대적인 값의 크기가 아니다. 

Q6. What if we used the below loss function instead of the one that we used?(아래의 형태의 손실함수를 원래의 손실함수 대신 사용했다면?

A. 이전에 사용했던 함수와는 다르다. max함수의 값을 제곱하는것과 그대로 출력하는 것에는 차이가 존재한다. 

 

아래는 손실함수를 python을 이용하여 구현한 것이다.

numpy의 특성상 모든 클래스에 대해 for문을 통해 반복할 필요가 없다는 장점이 있다. 

 

지금까지 살펴본바와 같이, 각 클래스별 score(f)와 손실함수(L)을 식으로 정리하면 아래와 같다.

그런데 이때, L이 최솟값(min)이 되게하는 W(가중치행렬)이 유일한가? 라고 물어보면 그렇지 않다고 할 수 있다. 간단하게 설명하면 1+4도, 2+3도 모두 5라는 같은 값을 가지는 원리라보 보면 된다. 2W(가중치 행렬에 스칼라배를 한것)도 마찬가지로 L = 0을 만들기 때문에.

 

 

 

 

2. 과적합(Overfitting)

우리가 딥러닝 모델을 만들때 성능을 신경써야하는 데이터는 training data가 아니라 test data이다. training data는 모델을 학습시키기 위한 데이터일 뿐, 실질적으로 성능을 고려해야하는 데이터는 test data이기 때문이다. 만약 아래와 같은 파란색 점(training data)가 있다고 생각해보자. 만약 이 점들을 완벽하게 지나는 식을 찾았다면 아래와 같을 것이다.

이렇게 모델을 학습시켰을때, 새롭게 들어온 데이터(test data)가 아래와 같다고 해보자.

위의 그림을 보면 기존에 구한 식(파란선)이 새로운 데이터를 잘 설명하지 못한다는것을 확인 할 수 있다(파란 곡선이 초록색 점들을 지나지 않음). 오히려 아래와 같은 초록색 선이 전체적인 데이터의 경향성을 잘 설명한다고 볼 수 있다.

이러한 현상을 "과대적합"이라고 한다. 모델이 트레이닝 데이터의 특성을 너무 자세하게 반영한 나머지 새로운 테스트 데이터를 잘 설명하지 못하는 현상이다. 이러한 현상을 해결하기 위해 아래와같이 손실함수식에 새로운 항을 추가한다. 이를 Regularization이라고 한다.

Regulariztion은 W가 너무 트레이닝 데이터에 과적합 되는것을 막고 더 심플한 W를 구하기 위해 추가된 항이다. 이러한 행위는 William of Ockham의 "Among computing hypotheses, the simplest is the best."라는 말을 적용한 사례라고 볼 수 있다. 이를 Occam's Razor라고한다.

 

 

 

반응형