본문 바로가기

컴퓨터공학

[CS231n 3강 정리] 손실함수(Loss functions), 최적화(Optimization)

반응형

저번 시간에 Linear Classifier의 개념에 대해 알아보고, 임의의 W로 score을 구해보았습니다. 하지만 좋은 W를 사용해야 성능이 올라가겠죠? W가 좋은지 나쁜지를 보는 척도가 바로 오늘 다루는 손실함수 (Loss function)입니다.

 


Loss function(손실함수)

Multiclass SVM loss

손실함수에는 무수한 종류가 있으나, 기본적이고 이미지분류에도 성능이 좋은 Multiclass SVM loss부터 살펴보겠습니다. 식은 다음과 같습니다. 그래프를 그려보면 Hinge 처럼 생겨서 Hinge loss라고도 불립니다.

 

sj: 오답 카테고리의 스코어

syi: 정답 카테고리의 스코어

 

식만 보면 아리까리 할 수 있으니 바로 예제 풀어봅시다.

첫번째 데이터에 대한 Loss값을 한번 구해보겠습니다. 고양이니까 syi = 3.2가 되고, 나머지 두개 카테고리 (car, frog)에 대해 계산을 진행해줍니다. 

 

j = car 이라면, 3.2 >= 5.1 + 1 가 성립하지 않기 때문에 sj - syi +1 = 5.1 - 3.2 + 1 = 2.9j = frog 라면, 3.2 >=-1.7 + 1이 성립하기 때문에 0이 되겠네요.

 

즉, 첫번째 데이터에서의 Loss 값은 2.9 + 0 = 2.9가 되겠습니다. 이런식으로 모든 데이터에 대해 구해주면, 최종 Loss는 (2.9+0+12.9)/3=5.27이 나옵니다. 이것이 현재 사용된 W에 대한 정량적 평가가 되겠네요. 계산해보면서 알아채셨겠지만, 여기서 syi >= sj + 1이면 0이 되는 조건은 1의 마진 값을 줌으로써 정답 카테고리의 스코어를 이 정도 맞췄으면 꽤 잘맞췄네? 하는 것이죠. 마진을 크게하면 모델은 좀 더 널널하게, 작게하면 엄격하게 분류를 해야된다. 로 이해하시면 되겠습니다. 

 

더보기

이해를 돕기위한 퀴즈

1. car 스코어가 조금 변하면 Loss에는 무슨일이 일어날까?

- Loss는 안바뀐다.

2. SVM Loss가 가질 수 있는 최대, 최소값은?

- 최소 0, 최대 무한대

3. 모든 스코어 S가 0과 가깝고, 값이 서로 거의 비슷하다면 Loss는 어떻게 될까?

- 비슷하니 그 차가 마진을 넘지 못하기에 마진값에 가까운 스코어를 얻게 됨. 이경우에서는 결국 (클래스의 수-1)

- 디버깅 전략으로 많이 사용한다. 트레이닝을 처음 시작할 때 Loss가 c-1이 아니면 버그가 있는 것

4. SVM Loss의 경우 정답인 클래스는 제외하고 더했다. 정답인 것도 같이 계산에 포함시킨다면 어떻게 될까?

- Loss 가 1 증가

5. Loss에서 전체 합이 아닌 평균을 쓴다면?

- 영향없다. 단지 스케일만 변할 뿐.

6. 손실함수를 제곱항으로 바꾼다면?

- 비 선형적으로 바뀜. 손실함수의 계산이 달라져 결과가 달라진다. squared hinge loss라 한다.

 

 

손실함수의 종류는 많습니다. 오차를 어떤식으로 해석할지는 우리의 몫이죠. 가령 squared hinge loss는 큰 loss를 더 크게, 아주 작은 loss는 더 작게 해줍니다. 어떤 에러를 trade-off 할지 생각하여 손실함수를 정하게 됩니다.

 

Multiclass SVM loss의 파이썬 코드는 다음과 같습니다.

 

 


Regularization loss

자, 그럼 loss가 0인 w를 찾았다고 해봅시다. 이게 유일한 0일까요?? 앞서 스케일에 대해서도 잠깐 언급하였는데, 2w도 loss는 0이 됩니다. loss가 작으면 작을수록, 즉 0이 되면 가장 좋은거다! 라고 생각하였는데, 사실 좋지 않은 일입니다. w가 0이라는 것은 트레이닝 데이터에 완벽한 w라는 것인데, train set이 아닌 test 데이터의 성능이 더 중요하니까요!!

 

사실 함수가 단순해야 test 데이터를 맞출 가능성이 더 커지기 때문에 이를 위해 Regularization을 추가해줍니다. 따라서 최종적인 Loss의 식은 다음과 같이 변합니다. Data Loss 와 Regularization loss의 합으로 변하고, 하이퍼파라미터인 람다로 두 항간의 트레이드오프를 조절할 수 있습니다.

Regularization loss를 다음과 같이 생각하면 좋습니다.

 

- 모델은 여전히 더 복잡한 모델이 될 가능성이 있으나, soft penalty인 regularization을 추가함으로써, 만약 너가 복잡한 모델을 계속 쓰고 싶으면, 이 penalty를 감수해야 할 거야!

 

Regularization에도 다음과 같이 많은 종류가 있습니다.

 

그럼 이 Regularization는 모델이 복잡한지 아닌지, 자신이 원하는 모델인지 어떻게 파악할 수 있을까?

위의 예제를 보면서 감을 찾아봅시다. 다음과 같이 x와 w1,w2가 주어졌고, Linear Classification(f=wx)의 관점으로 볼 때, 두 w는 같은 스코어를 제공합니다. 앞서 배운 data loss는 같겠죠. 이를 L2와 L1 regression의 관점에서 한 번 살펴봅시다.

 

1) L2 Regularization의 경우 w2를 선호

- w2가 norm이 작기 때문

- coarse 한 것을 고름

- 모든 요소가 골고루 영향을 미치길 바람

- parameter vector, Gaussian prior, MAP inference

 

2) L1 Regularization의 경우 w1을 선호

- sparse 한 solution을 고름

- 0 많으면 좋다고 판단

 

모델과 데이터의 특성에 따라 Regularization loss를 잘 설계하는 것이 중요하겠네요. 


Multinomial logistic regression(softmax)

다른 유명한 손실함수도 하나 살펴봅시다. 딥러닝에서 자주 쓰이는 소프트맥스!

 

앞서 Multi-class SVM loss에서는 스코어 자체에 대한 해석보다는 정답 클래스와 정답이 아닌 클래스들을 비교하는 형식으로 이루어졌죠. 하지만 Multinomial logistic regression 경우 스코어 자체에 추가적인 의미를 부여합니다. 아래 수식을 가지고 클래스별 확률 분포를 계산하고, 이를 이용해서 Loss를 계산합니다. 왼쪽 식을 softmax function이라 합니다.

 

예제를 풀어보겠습니다. 아까 그 고양이 사진입니다.

단계

- 스코어 자체를 loss로 쓰는 것이 아닌 지수화 시킴

- 정규화 진행

- -log 씌움

 

다음 그림에서 SVM과 Softmax의 단계를 복습해봅시다.

더보기

이해를 돕기위한 퀴즈

1. softmax loss의 최대 최소는?

최소 0, 최대 무한대

2. Loss가 0이 되려면 실제 스코어는 어떤 값이어야 하는가?

정답 스코어는 극단적으로 높아야 한다. 지수화 정규화를 거치기 때문에 확률 1을 얻어 loss가 0이 되려면, 정답 클래스의 스코어는 +무한대가 되어야 하고, 나머지는 -무한대가 되어야 한다. 하지만 컴퓨터는 무한대 계산을 잘 못하기 때문에 loss가 0인 경우는 절대 없을 것이다. 유한 정밀도를 가지고는 최대 최소에 도달할 수 없다.

3. s가 모두 0 근처에 모여있는 작은 수 일때의 loss는?

log C. 마찬가지로 디버깅 전략

4. 그래서 SVM과 softmax의 차이?

SVM의 경우에는 margin을 넘으면 성능 개선에 신경쓰지 않으나, softmax의 경우 1의 확률을 얻으려 할 것이다. 실제 딥러닝에서 성능 차이가 크진 않다.


최적화(Optimization)

지금까지 지도학습의 전반적인 개요를 살펴보았습니다. f를 정의해서 스코어를 구하고, 손실함수를 이용해서 w도 평가했습니다. regularization term도 배워봤구요. 어쨋든 최종 목적지는 최종 손실함수가 최소가 되게 하는 W를 구하는 것이겠죠. 이제 그부분으로(최적화) 넘어가보도록 합시다.

 

우리가 고딩때 함수의 최소값을 찾는 방식대로 loss가 최소가되는 w를 찾아볼 수도 있겠으나, 비효율적이기 때문에 임의의 지점에서 시작해서 점차 성능을 향상시키는 iterative한 방식을 사용합니다.

 

대충 이렇습니다.

 

해당지점에서의 slope를 계산하고, 낮은쪽으로 가는겁니다. 굉장히 쉬운 생각이지만, 꽤 잘 작동합니다.

slope 계산: gradient 사용

 

gradient는 벡터 x의 각 요소의 편도함수들의 집합입니다. 그래서 gradient는 그쪽 방향으로 갈때 함수 f의 slope가 어떤지를 알려줍니다. gradient의 방향은 함수에서 가장 많이 올라가는 방향이므로, 이 반대방향으로 간다면 가장 많이 내려갈 수 있겠죠. 또한 우리가 원하는 방향의 경사를 알고 싶다면, 그 방향의 unit vec와 gradient를 내적하면 됩니다.

gradient

1) 수치적 gradient

- 유닛 테스트로 사용

 

2) 해석적 gradient

- 실제 구현할 떄

- Gradient Descent에서는 우선 W를 임의의 값으로 초기화

- Loss와 gradient를 계산한 후 가중치를 gradient의 반대 방향으로 업뎃

- stepsize는 하이퍼파라미터 = Learning rate. 가장 먼저 체크하는 하이퍼파라미터이다.

Gradient Descent

Gradient descent보다 실제 학습시에 더 좋은 성능을 보이는 Updata Rule들이 있다. momentum, Adam optimizer 등

 

더보기

Gradient는 선형 연산자이기 때문에 실제 gradient를 계산하는 과정을 살펴보면, Loss는 각 데이터 Loss의 Gradient의 합이다. 즉, gradient를 한번 더 계산하려면, N개의 전체 트레이닝 셋을 한번 더 돌면서 계산해야하고, 이는 너무 많은 시간을 할애한다. 그래서 실제로는 stochastic gradient descent를 사용한다.

 

stochastic gradient descent ( 거의 모든 DNN 알고리즘에 사용됨)

- 전체 데이터 셋의 gradient와 loss를 계산하기보다, Minibatch라는 작은 샘플 집합으로 나누어서 학습을 진행한다. 보통 32,64,128을 쓴다.

- minibatch를 이용해서 loss와 gradient의 추정치를 구한다. 이는 Monte Carlo Method와 유사

 

웹데모 사이트 Linear Classifier와 Gradient descent

Multiclass SVM optimization demo (stanford.edu)

 

Multiclass SVM optimization demo

Parameters \(W,b\) are shown below. The value is in bold and its gradient (computed with backprop) is in red, italic below. Click the triangles to control the parameters. Multiclass SVM loss formulation:

vision.stanford.edu

 

지금까지는 실제 Raw 이미지 픽셀을 입력으로 넣어주었다. 하지만 이건 좋은 방식이 아님. Multi-Modality(말 머리 두개) 같은 것들 때문에. 그래서 특징 벡터라는 것을 이용하기로 하고, 이 특징벡터가 Linear Classifier의 input으로 들어가게 된다. 아래와 같이 선형분리가 불가능한 것도, 극좌표계로 특징변환을 하면 분류가 가능해진다.

Examples

- 색 분포를 특징벡터로 쓰는 간단한 것들도 있음

- HOG: Local orientation deges를 측정

- bag of words

 

10년 전까지만 해도 이미지를 입력받으면 BOW나 HOG와 같은 다양한 특징 표현을 계산하고, 계산한 특징들을 한데 모아 연결해서 입력으로 사용하였다. 그런데 이는 특징이 한번 추출되면 feature extractor classifier는 트레이닝 동안 변하지 않는다.

 

하지만 이제 CNN,DNN쪽으로 넘어가면 이미 만들어 놓은 특징들을 쓰는 것이 아닌, 데이터로 부터 특징들을 직접 학습한다. raw 데이터가 그대로 들어가고, 여러 레이어들이 특징 벡터를 직접 만들어낸다.

다음시간에는 CNN과 역전파에 대해 살펴보자.

 

4강으로 돌아오겠습니다. 안녕!

https://oculus.tistory.com/9

 

[CS231n 4강 정리] 역전파(Back propagation), 신경망(Neural Network)

지난시간까지 w와 스코어, loss function, 그리고 gradient를 배웠습니다. 오늘은 이제 실제로 analytic gradient(앞 강의에서 설명한 해석적 방식) 를 어떻게 계산하는지에 대해서 알아봅시다. 역전파(Back Pr

oculus.tistory.com

 

반응형