수리수리연수리 코드얍

[EECS 498-007/598-005] 3강. Linear Classifier (2) 본문

놀라운 Deep Learning/Deep Learning for Computer Vision

[EECS 498-007/598-005] 3강. Linear Classifier (2)

ydduri 2023. 1. 21. 21:38

2. Loss Function

좋은 가중치 W를 선택하기 위해서는 가중치 weight가 얼마나 좋은지 정량화하는 loss function을 찾아야 하고, optimization을 통해 이 loss function을 최소화할 수 있는 가중치를 찾아야 한다.

loss function이란 classifier가 잘 동작하는지 나타내주는 지표이다. loss, 즉 손실이 작아야 좋은 classifier이고, 손실이 크면 안 좋은 classifier이다.

  • Loss Function의 다른 이름: Object Functon, Cost Function
  • Negative Loss Function의 다른 이름: Reward Function, Profit Function, Utility Function, Fitness Function...

loss function에 대해 수식적으로 접근해 보겠다. x는 전 글과 마찬가지로 입력 이미지, y는 10개의 클래스(카테고리) 각각에 해당하는 라벨로, 1부터 10까지의 정수로 표현될 것이다.

개별 데이터에 대한 loss는 아래와 같은 식을 이용해 구할 수 있다.

  • f(xi, W): 각각의 입력 이미지에 대한 linear classifier의 예측값
  • y: 정답, 즉 각각의 입력 이미지에 대한 알맞은 라벨

이 둘의 차이를 보고 싶은 것이 바로 loss function이고, 그 기준은 loss function 종류별로 다를 수 있다.

전체 loss는 위에서 구한 개별 데이터에 대한 loss 값을 모든 데이터에 대하여 평균 내어 구할 수 있다.

1) Multiclass SVM Loss

첫 번째로 다룰 loss는 Multiclass SVM Loss이다. 이는 classification에서 보편적으로 쓰이는 loss function으로, '정답 클래스의 score는 다른 클래스의 score에 비해 높아야 한다!'라는 직관적인 아이디어를 기반으로 한다.

x축을 정답 클래스의 점수, y축을 loss로 두었을 때 해당 loss function의 형태는 아래 그림과 같이 나타나는데, 그 모양이 경첩 같다고 하여 'Hinge Loss'라는 별칭도 가지고 있다.

Hinge Loss에 대해 더 자세히 살펴보자. 아래 그림을 보면 loss가 오른쪽으로 갈수록 점점 줄다가 0이 되는 지점이 존재하는데, 이 지점을 결정하는 것이 바로 Sj와 Syi의 차이이다.

  • Sj: 오답 클래스의 점수
  • Syi: 정답 클래스의 점수
  • Marjin: Sj와 Syi의 차이(Syi - Sj), 이것이 1보다 커지는 score를 얻으면 loss는 0이 되고, 그 이하의 score를 얻을 시 loss 존재

Multiclass SVM Loss를 수식적으로 표현해보자.

앞서 Syi에서 Sj를 뺀 'marjin'이 1 이상일 경우 loss가 0이 된다고 하였는데, 이를 식으로 나타내면 'Syi - Sj ≥ 1'이 된다. 이 식을 변형해서 역으로 Sj에서 Syi를 빼도록 만들어보자. 이항만 하면 되는 간단한 문제이다. 'Sj - Syi ≤ -1'

이제 SVM Loss 식을 보자. 0과 'Sj - Syi + 1' 중에서 최댓값을 출력하는 형태이다. 앞에서 구한 Sj - Syi ≤ -1의 양변에 1을 더해보자. Sj - Syi + 1 ≤ 0, 즉 marjin이 1 이상일 경우 Sj - Syi + 1의 값은 항상 0 혹은 음수가 나오게 된다.

(1) Marjin이 1 이상, loss는 0

ex 1. 만약에 marjin이 딱 1이라면 Sj - Syi = -1이 되고, 따라서 Sj - Syi + 1 = -1 + 1 = 0이 된다. 0과 0중 최댓값을 출력하면 당연히 0이 나올 것이다. 즉, SVM loss가 0이라는 뜻이다.

ex 2. marjin이 2라면 Sj - Syi = -2가 되고, Sj - Syi + 1 = -2 + 1 = -1이 되어, 0과 -1중 최댓값을 출력하면 0이 나온다. 마찬가지로 SVM loss는 0이다.

(2) Marjin이 1 미만, loss가 존재

이번엔 marjin이 1보다 작은 상황을 보자. 만약 marjin이 0이라면 Sj - Syi = 0이 되고, Sj - Syi + 1 = 1이 되어, 0과 1중 최댓값을 출력하면 1이 나온다. 이 경우 SVM loss는 1이다.

고양이 이미지를 분류하는 상황을 생각해보자. 아래 예시에서 정답 클래스의 점수인 Syi는 3.2가 될 것이고, 오답 클래스의 점수 Sj는 5.1과 -1.7 두 개가 존재한다. 두 개의 오답 클래스에 대하여 각각의 loss를 구해준 뒤 합치면 고양이 이미지에 대한 전체 loss를 구할 수 있다.

같은 방식으로 자동차, 개구리 이미지에 대한 loss를 산출하고, 이들을 평균 내어 전체 Multiclass SVM Loss를 구할 수 있다.

아래 내용들은 영상에서 강연자께서 던지신 질문들과 그에 대한 답변을 정리한 것이다.

2) Regularization

앞서 loss를 작게 만드는 가중치가 좋은 가중치라고 하였는데, 그렇다면 loss를 아예 0으로 만들어버리는 것이 과연 좋은 일일까?

모델을 학습시킬 때는 training data를 사용하지만, 실제 상황에서 투입될 데이터는 모델에게 익숙한 training data가 아니라 처음 보는 형태의 test data일 것이다. 이러한 test data에 대해서도 좋은 성능을 발휘하는 것이 모델의 최종적인 목적이 될 것이다.

그런데 학습 단계에서 이미 loss가 0이라는 것은, training data에 과도하게 적합되어 있어 test data가 들어왔을 때 오히려 오차가 커질 수 있다는 위험성을 내포하고 있다. 이런 과적합(overfitting) 문제를 피하기 위해 등장한 조치가 바로 'Regularization'이다. 해당 파트 소제목이 'beyond training error'인 것도 이 때문이다.

아래 그림에서 파란색 박스를 친 부분이 Regularization에 해당하는 항으로, 모델이 training data에 과적합되는 것을 방지한다. 이때 람다는 해당 regularization의 강도를 조절하는 지표로, 모델이 결정하는 것이 아니라 사람이 조절할 수 있는 하이퍼파라미터에 해당한다.

Regularization의 예시

  • simple한 형태: L2, L1, Elastic net(L1과 L2가 혼합)
  • 보다 복잡한 형태: Dropout, Batch normalization, Cutout, Mixup, Stochastic depth...

앞서 언급했던 regularization 종류들 중 L2 regularization의 예를 간단히 들어 보겠다.

x는 입력 이미지고, W1, W2는 각각 가중치이다. Linear classifier의 함수 f(x, W) = Wx+b에서 bias가 없다고 가정하면, 가중치와 입력 이미지를 곱함으로써 모델의 결과값을 얻을 수 있다.

아래 예시의 경우 x와 W1을 곱한 것, x와 W2를 곱한 것 모두 같은 결과값인 1을 도출한다. 그러나 L2 regularization을 해보면, W2의 경우가 더 작은 loss를 가지게 된다.

이는 L2 regularization이 가중치를 하나의 feature에 몰아 주는 것보다 분산시키는 것을 선호해서인데, 특정 feature에 높은 가중치가 쏠려 있다는 것은 과적합을 시사하는 결과일 수 있기 때문이다.

또한 당연하게도, 아래에서처럼 모든 training data에 대해서 과적합된 f1 모델과, 모든 training data를 포함하고 있지는 않으나 보다 심플한 형태의 f2 모델이 있다고 할 때, regularization은 f1 모델에 더 큰 규제를 가하는 방식으로 작용한다.

3) Cross-Entropy Loss(Multinomial Logistic Regression)

마지막으로 또다른 loss 종류 중 하나인 Cross-Entropy Loss에 대해서 알아보겠다. 이 loss는 '확률적'인 접근을 기반으로 한다. 모델이 예측한 점수가 나올 확률과 실제 확률의 차이를 측정하는 것이 바로 Cross-Entropy Loss이다.

이를 위해 우선 도출된 점수에 exponential을 취하고, 정규화를 통해 0과 1 사이의 값으로 만들어준다. 그 결과는 0과 1 사이의 값으로 조정되므로, 이제 이것을 '모델이 예측한 점수가 나올 확률'로서 사용할 수 있게 된다. 실제 확률(정답일 확률)의 경우 지금은 고양이 이미지를 예시로 들고 있으므로, 고양이 클래스가 1, 나머지 클래스는 0이 될 것이다.

이 둘을 비교한 결과 도출되는 loss가 바로 Cross-Entropy Loss인데, 공부하다보니 이 loss를 보다 자세히 설명하려면 정보이론부터 KL divergence 등 정말 많은 내용이 나와서 나중에 아예 별도의 글로 다뤄보고자 한다.

아래 내용들은 아까처럼 영상에서 강연자께서 던지신 질문들과 그에 대한 답변을 정리한 것이다. 이번 글은 이쯤에서 마무리하도록 하겠다.

Comments