인공지능/인공지능 수업

[CS231n] CNN for Visual Recognition Lec 3

정장밀 2021. 1. 15. 15:48

전 포스팅에서 다음 시간에는 Linear Classifier에서 W의 성능을 판단하기 위한 loss function(손실 함수), 최대한 좋은 값의 W을 구하기 귀한 Optimization(최적화)를 배우기로 한다. 를 이어 진행!

Lecture 3. Loss Function(손실함수) and Optimization(최적화)

이번 시간에는 전 강의에서 짚어봤던 'W를 어떻게 하면 더 좋게 만들것인가?' 에 대한 내용을 더 상세하게 알아보려한다. W를 좋게 만들기 위한 이유는? 분류기(Linear Classifier)의 기본 식을 다시 살펴보자.

$ f(x) = Wx + b $

우리가 예측하고 싶은 이미지를 입력으로 받아왔을 때, 모델의 학습을 거쳐 만들어진 W 값(클래스 별로 만들어진 이미지의 가중치)에 그 입력을 곱한 값을 라벨(클래스)에 따른 점수로 출력한다. 이 출력값 중, 가장 높은 점수의 클래스로 예측한다. (b는 학습 모델이 가지는 bias로 학습 데이터양에 따라 비례한다.) 입력값에 W가 곱해지니 W가 출력에 많은 영향을 끼친다는 건 당연한 일일 것이다. 그래서 우리는 보다 정확한 예측을 위해! 적절한 W를 찾는 과정을 거쳐야한다. 그래서 Loss Function는 뭔데?

3.1 Loss Function

분류기 모델도 다 만들었고, W도 다 만들어놨다. 하지만 이게 과연 좋은 출력을 얼마나 가질 수 있을까? 우리는 이 때 모델이 가지는 W에 대해 적절함의 정도를 파악하고 싶다. 이를 수행하기 위해 나온 개념이 바로 Loss Function(손실함수) 이다. 즉, 우리가 알고 싶은 W에 대한 적절함에 대한 정도를 수치화해서 나타내주는 함수로 실제 라벨과 모델로 예측한 라벨의 값을 비교하는 함수이다.

더 쉬운 이해를 위해, 이전 시간에 진행했던 CIFAR-10 데이터의 일부로 학습 모델의 예측값을 가져와서 진행! 이 예측값은 bias가 없는 단순 선형식 $f(x) = Wx$의 값이다.

그림의 고양이 예측값을 보자. cat/car/frog의 점수가 각각 3.2/5.1/-1.7로 고양이 이미지를 입력했을 때, 자동차 라벨이 출력된다! bias도 없으니 W에 문제가 있을 것! 손실함수로 얼마나 문제가 심각한지 파악해보자.

  • 손실함수을 이용해 구한 테스트 데이터의 손실값(Loss) 식

    $ L = \frac{1}{N} \sum_{i}{L_i(f(x_i,W),y_i)} $

    • 식에서 N은 데이터 개수, i는 데이터 인덱스, f는 입력값과 W를 통해 예측한 y값, $y_i$는 실제 테스트 라벨 y값이다. 그리고 $L_i$는 적용할 손실함수이다. 테스트 데이터의 손실값은 손실함수로 구한 값을 모두 더한 후 데이터 개수로 나눈 평균값이다.

손실함수($L_i$) 1) SVM loss
$ L_i = sum_{j!=y_i}{max(0, s_{j}-s_{y_i}+1)} $

SVM loss 식의 $ s_j $ 와 $ s_{y_i} $ 는 아래 예시로 알아보자.

- 이미지가 cat일 때, $y_i$는 cat으로 즉, $s_{y_i}$는 cat의 스코어 벡터이다. 식을 전개했을 때, $j$와 $y_i$가 다른 경우를 계산하기 때문에, $s_j$는 car, frog의 스코어 벡터의 값을 갖는다. 같은 방식으로 loss 값을 구할 수 있다.

강의 중 질문 몇 가지를 던진다.

Q1. 자동차 스코어에 0.5를 줄인다면 loss 결과에 어떤 영향을 줄 것인가?
A. 줄인다고 해도 변동이 작기 때문에 결과에 차이가 없다.

Q2. SVM loss의 min/max 값은?
A. min = 0, max = 무한대 를 갖는다.

Q3. W 초기화할 때 s가 0에 가깝다고 가정하면, class 개수가 C일 때, loss {L_i}는 무엇인가?
A. C-1 : 디버깅 전략, C-1이 아니면 코드에 문제가 있다고 판단한다.

Q4. $j$와 $y_i$가 같은 경우까지 포함한다면?
A. loss min값이 1이 된다. 같은 경우 상수 1을 항상 포함하기 때문에, 관례상 제외한다.

Q5. 다 합하는 대신, 평균을 구하면?
A. 스케일만 달라질 뿐, 아무 영향이 없다.

Q6. 만약 최대값의 제곱을 다 합하면?
A. 우리는 손실함수를 통해 모델이 얼마나 나쁜가에 대해 파악하려고 한다. 만약 최대값의 제곱으로 손실함수의 값을 구하면, 나쁜 것은 더 나쁘게 표시되기에 굉장히 잘 못 된 것에 관한 구별이 가능하다.

Q7. L = 0일 때, W는 유일한 값인가?
A. W는 유일하지 않다. 2배의 값을 가져도 스케일 결과가 L=0로 같다.

손실함수 2) Softmax Classifier
스코어를 구할 때, 확률을 이용하여 0에서 1 사이의 값을 갖게 한다. 정답에 가까울 수록 확률이 1에 가까워진다. 함수에 단조증가의 특징을 가지는 log 스케일을 적용하였다. 그리고 마이너스를 취해 얼마나 안 좋은지 판단할 수 있게 한다. SVM loss보다 데이터에 민감한 특징이 있다. 식과 그 계산 과정은 아래 이미지에서 볼 수 있다.

3.2 Regularization

앞서 알아본 data loss의 식은 학습 데이터로 학습된 모델의 예측값에 대한 것을 파악한다. 학습 데이터에만 신경쓰게 되는 분류기가 되는 것이다. 이 때, Regularization은 학습 데이터만 지향하는 모델을 방지하기 위함이다.

그림으로 보면 하늘색 선이 학습 데이터만을 지향하는 모델이라 성능이 전혀 고려되지 않았다. 즉, 과적합이 생기게 된다. 이를 방지하기 위해, 정규화(Regularization) 과정을 진행해야 한다. 모델 설계 시, W 중에서도 더 간단한 W를 선택하게 해준다!

3.3 Optimization

Optimization 과정으로 실제 loss에 맞는 최적의 W를 찾는다. W 찾을 때, random search를 이용할 수도 있지만, 임의로 지정한 것이기 때문에 가능은 하지만 아주 나쁜 방법이다. 이제 최적화 방법으로 slope를 따라 내려가는 방법을 알아보자. local geometry '경사'로 세부사항을 파악하기 쉽고, 그만큼 정확도가 높은 방법이다.

경사 Gradient를 이용하기 위해 미분이 많이 사용되어 편도함수를 이용한다. numerical(수치적)한 방법을 통해, 위 이미지의 방법으로 W의 gradient를 구한다. 하지만 입력 데이터의 크기가 커지면 계산 과정이 너무 많아지는 문제가 생기기 때문에, 우리는 모델을 설계할 때는 미분 공식을 이용해 analytic gradient한 방법을 사용하고, numerical gradient는 디버깅용으로 사용한다.

  • Gradient Descent
    • 한 스텝동안 -gradient만큼 W를 업데이트하며 loss를 개선시킨다.
    • Stochastic Gradient Descent(SGD)
      • 입력 데이터의 크기 N이 커지면 loss 값이 작아지기 때문에, minibatch를 이용하여 부분의 gradient를 구한다. 즉, SGD는 minibatch로 구한 loss를 추정치로 삼아 모델에 적용하는 방식이다.

이번 시간에 loss function, regularization, optimization 법을 정리했다. 다음 시간 4장에서는 역전파와 Neural Networks를 알아본다.