3장에서는 모든 딥러닝 모델의 기본이 되는 Linear Classifiers와 최적의 파라미터를 가지기 위해 필요한 Loss function에 대해 알아보고자 한다.

 

  • Parametric Approach: Linear Classifier

Parametric Approach는 파라미터를 사용한 모델을 의미한다. Train 과정에서 학습 데이터에 대한 요약된 정보를 파라미터 W, b에 담기 때문에 이를 Parametric Approach라고 부른다. W는 우리가 흔히들 부르는 Weights(가중치)이고 b는 bias 값이다. 

이제 간단한 모델(함수)을 만들어 보면 f(x, w) = wx + b의 형태인 직선의 방정식으로 만들 수 있다. 

모든 값들은 행렬의 형태로 표현되므로 차원의 수를 맞추어 주는 것이 중요하다.

 

입력값 = 32 x 32 x 3 = 3072 : 32 pixel을 가진 RGB 이미지

출력 값 = 10 : 전체 Class의 수

 

입력값과 출력 값의 차원을 통해 파라미터 W, b의 차원을 결정할 수 있다. 

x = (3072, 1)

f(x, W) = (10, 1) 이므로

f(x, W) = W * x = (10, 3072) * (3072, 1) = (10, 1)의 형태로 계산되므로 W의 차원을 결정할 수 있다. 

b는 단순히 행렬이 더해지는 연산이므로 출력 값과 같은 차원인 (10, 1)의 차원을 가진다.

 

예를 들어 cat, dog, ship 3개의 class를 분류하는 선형 분류기를 생각해보자.

입력 이미지는 간단하게 2 x 2 이며 출력 값은 3개의 클래스이므로 3 x 1이 된다.

 

입력값 x = 2 x 2 = 4 = (4, 1)

출력 값 f(x, W) = (3, 1)

 

위의 값들을 토대로 W, b의 차원을 결정하면

f(x, W) = W * x = (3, 4) * (4, 1) = (3, 1)의 형태로 계산되고 b = (3, 1)이 된다.

이를 통해 계산된 값은 -96.8, 437.9, 61.95 번째 행이 가장 값을 가진다. 여기서 계산된 최종 값이 의미하는 것은 class 대한 score 생각할 있다. 1행 = cat, 2행 = dog, 3행 = ship 대한 score 이번 학습 모델이 계산한 class score dog 가장 높은 것을 확인할 있다.

이것이 의미하는 것은 현재 모델은 고양이 입력 이미지에 대해 강아지로 예측하고 있음을 의미한다. 여기서 우리는 이 모델이 가지는 W, b 값이 입력 이미지에 대한 score를 높게 학습해야 함을 알 수 있다.

주황색 행렬은 고양이에 대한 score, 보라색 행렬은 강아지에 대한 score, 초록색 행렬은 배에 대한 score를 의미한다. 즉, 현재 들어온 입력 이미지가 고양이, 강아지, 배일 score를 표현한다. 

 

그럼 여기서 학습되는 파라미터 W는 어떤 것을 의미할까?

 

앞서 우리는 입력 이미지에 class score가 가장 높게 나오도록 학습해야 한다고 말했다. 만약 고양이 이미지가 입력으로 들어갔는데 강아지에 대한 score가 높게 나온다면 모델은 주황색 행렬 W값을 업데이트해서 고양이에 대한 score가 높아지도록 학습할 것이다.

이러한 과정을 반복하다 보면 최종적으로 주황색 행렬 W값은 고양이 이미지에 대해 높은 score를 가지도록, 보라색 행렬 W값은 강아지 이미지에 대해 높은 score를 가지도록, 초록색 행렬 W값은 배 이미지에 대해 높은 score를 가지도록 최종 모델이 나올 것이다.

 

선형 분류기를 Visual Viewpoint에서 바라보자.

슬라이드 아래의 흐릿한 이미지는 우리가 업데이트하는 W행렬을 이미지화한 것이다. 각 W행렬은 자신이 속한 class에 대한 score를 높게 나오도록 학습되는데 내적을 잘 생각해보면 내적의 값이 크다는 의미는 두 벡터가 유사하다는 것과 같은 의미로 바라볼 수 있다.

즉, 어떤 입력 이미지 행렬과 W행렬의 내적 값이 크다는 것은 두 행렬이 유사하다는 것을 의미한다.

(내적에 대한 더 자세한 부분은 https://shyu0522.tistory.com/26 를 참고해 보자! )

 

다시 W행렬을 이미지화한 것을 살펴보면 어느 정도 나름.. class를 형상화하는 것을 알 수 있다. 입력 이미지와 내적 연산을 하며 내적 된 값인 score를 높게 학습하는 과정에서 당연하게도 W행렬은 입력 이미지들과 비슷하게 업데이트된다.

다시 나름대로 표현해 보면 W행렬은 각 class를 대표하는 추상적인 template이랄까....라고 생각한다.

 

이제 선형 분류기에서 파라미터가 어떤 역할을 하는지 알았다. 

 

그럼 선형 분류기의 가장 큰 문제점은 무엇일까?

 

바로 각 class에 대해 하나의 template만 가진다는 점이다. 우리는 학습을 하면서 학습 데이터에 대해 높은 score를 가지는 W행렬을 업데이트할 것이다. 그럼 최종적으로 학습 이미지에 대해 하나의 평균화된 template이 나올 것인데 만약 이 template과 살짝 다른 이미지가 들어오면 올바른 예측을 하지 못할 것이다. 반대로 만약 각 class에 대해 이러한 template들이 다양하다면(겹겹이 쌓여 있다면) 올바른 예측을 할 확률은 높아질 것이다.

 

이런 식으로 직선으로 각 class를 구분하는 것이 선형 분류기라고 생각할 수 있다.

하지만 이렇게 직선으로 class를 구분한다는 관점으로 본다면 분류할 수 없는 형태도 존재하는데 아래와 같다.

 

  • Hard Cases : Linear Classifier

1. 데이터가 서로 반대의 사분면에 존재하는 경우

2. 도넛 모양의 형태로 서로 다른 class로 분포하는 경우

3. 하나의 class가 여러 영역에 분포하는 경우

 

위와 같은 경우에 직선으로 빨간색과 파란색으로 명확하게 분리할 수 없다. 위와 같은 데이터가 존재하는 경우 선형 분류기의 한계점이 드러나고 뒤에 나오겠지만 여기에 비선형성을 추가함으로써 한계를 극복할 수 있다.

 

  • Perceptron

여기서 말하는 퍼셉트론은 단층 퍼셉트론으로 앞서 말한 선형 분류기를 사용한 것을 말한다.

위와 같은 XOR문제에서 초록색, 파란색 데이터를 구분 지을 수 있는 단 하나의 직선이 존재할까?

그런 직선은 존재하지 않다. 이 XOR 문제를 해결하지 못하는 것이 단층 퍼셉트론의 한계이다.

 

그럼 이 문제를 어떻게 해결할 수 있을까? 

https://ang-love-chang.tistory.com/26 참고

답은 위의 XOR 평면을 휘어줌으로써 두 데이터를 분리할 수 있다.

이렇게 평면을 휘어주는 역할을 하는 층이 존재하는데 이를 은닉층(hidden layer)이라고 한다.

 

https://ang-love-chang.tistory.com/26

위와 같이 기존의 퍼셉트론으로 분리할 수 없는 데이터를 은닉층을 추가함으로써 공간을 왜곡하여 데이터를 분리할 수 있다.

더 자세한 내용은 https://ang-love-chang.tistory.com/26 을 참고하면 좋을 것 같다!

 

자 다시 선형 분류기로 넘어와서 우리는 class에 맞는 높은 score를 가지도록 파라미터를 업데이트한다고 했다.

그러면 어떻게 파라미터를 업데이트하고 현재 이 분류기가 좋은 성능인지 어떻게 알 수 있을까?

 

  • Loss Function

그 정답은 Loss Function이라는 함수를 정의함으로써 현재 모델의 성능, 파라미터 업데이트에 대해 수학적으로 알 수 있다.

Loss에 대해 먼저 이해를 해보면, Loss는 한국어로 '손실'이라는 의미이다. 즉, 현재 모델이 얼마큼의 손실을 가지고 있느냐를 알려준다. 이것은 만약 Loss가 크다면 모델의 성능이 떨어진다는 것이고, Loss가 작다면 모델의 성능이 좋다는 것이다.

 

그럼 대표적인 Loss Function을 알아보자

 

  • SVM Loss

SVM Loss의 식은 Loss = max(0, Sj - Syi + 1)의 형태인데 이 식의 기호부터 살펴보면

 

Sj = j 번째 class의 score

Syi = 현재 정답 class의 score

+1 = margin

 

우리는 정답 class의 score가 높아야 한다. 다른 class에 대한 score + margin < 현재 정답 class score라는 것은 현재 분류기가 잘 예측하고 있으니 Loss = 0이 된다. 반대로  다른 class에 대한 score + margin > 현재 정답 class score라는 것은 현재 분류기가 잘못된 class로 예측하고 있으니 그 score의 차이만큼 이 Loss가 된다.

 

자 그럼 각 cat, car, frog에 대한 score가 계산되었다고 가정하고 SVM Loss를 계산해보자.

 

왼쪽 빨간 박스를 살펴보면 이번 정답 class는 cat이다.(Syi = cat score)

이제 다른 class에 대한 score와 SVM Loss를 비교해보면

 

cat = 3.2

car = 5.1

frog = -1.7

 

1. cat, car score 비교

    -> max(0, 5.1 - 3.2 + 1) = max(0, 2.9) = 2.9

2. cat, frog score 비교

    -> max(0, -1.7 - 3.2 + 1) = max(0, -3.9) = 0

3. 총 loss

    -> 2.9 + 0 = 2.9

 

이렇게 남은 car, frog에 대해서도 총 loss를 계산하면

 

2.9, 0, 12.9의 Loss가 나온다.

우리는 평균적인 Loss값을 통해 모델의 성능을 살펴볼 것이므로  (2.9 + 0 + 12.9) / 3 = 5.27이 최종적인 Loss가 된다.

 

우리가 이제 W를 업데이트하면서 Loss가 0이 되었다고 가정하면 이때의 파라미터 W가 유일할까? 답은 유일하지 않다!

이 W를 찾아가는 방법은 다음 장에서 자세히 알아보도록 하자.

 

  • Regularization

앞서 우리는 Loss Function을 통해 나온 Loss값이 작아지도록 모델을 학습시킬 것이다. 이때 이 Loss는 근본적으로 training data로부터 나온다. 즉, 우리의 모델은 training data에 의존하여 모델이 학습되는데 이렇게 training data에 편향되어 학습하는 것을 overfitting이라고 한다. 

훈련 이미지가 아닌 새로운 이미지가 들어와도 올바른 예측을 해야 좋은 모델이라고 말할 수 있다. 이렇게 모델이 편향되어 학습하는 것을 방지하기 위한 방법이 Regularization(정규화)이다.

 

식을 보면 앞부분의 Data loss는 위에서 loss값을 구하기 위한 식이고 뒤에 R(W) 값이 Regularization에 대한 식이 된다. 이 식에서의 람다 값을 조절함으로써 정규화를 강하게, 약하게 줄 수 있다. R(W)의 대표적인 방법으로는 L1 regularization, L2 regularization 방법이 있다.

 

L1 regularization

L1 regularization을 알기 위해서는 L1 norm에 대해 알아야 한다. L1 norm은 벡터 p, q가 있을 때 각 원소들의 차이의 절댓값 합을 의미한다. L1 regularization은 Data loss값에 각 가중치 절댓값의 합을 추가하여 표현할 수 있다. 이를 통해 가중치가 너무 크지 않은 방향으로 학습되게 하는 효과를 줄 수 있다. 하지만 가중치를 업데이트하는 과정에서 가중치가 0이 될 수 있다.

 

L2 regularization

L2 regularization도 마찬가지로 L2 norm이 존재한다. L2 norm은 각 원소의 제곱의 합을 제곱근 한 것을 의미한다. 이 항을 Data loss에 추가하여 가중치를 규제한다. 가중치를 업데이트하면서 전체적인 가중치 값을 균등히 작게 하여 모델의 과적합을 막을 수 있다. 일반적으로 L2 regularization이 더 좋은 성능을 보인다.

 

Regularization 요약

Regularization
은 모델의 과적합을 막는 대표적인 방법이다. 과적합을 막는 것은 더 간단한 모델을 구현하는 것을 의미한다. L1 regularization은 cost function에 L1 항을 추가한 것으로 가중치를 업데이트 하면서 특정 가중치들은 0이된다. 이렇게 함으로써 모델에 큰 영향을 주는 가중치들만 남게 된다.(feture selection 가능) 
L2 regularization은 cost function에 L2항을 추가한 것으로 가중치를 업데이트하면서 전체적으로 가중치가 작아진다. 모델의 복잡도를 낮추고 큰 가중치들을 작게할 수 있고 전체적인 학습 데이터에 대해 균등하게 학습할 수 있으나 가중치를 0으로 만들지 못한다.

 

또 자주 사용되는 Loss Function 중 하나인 Cross-Entropy Loss에 대해 알아보자.

  • Cross-Entropy Loss

Cross-Entropy Loss Function은 모델에 의해 예측되는 score를 확률적으로 해석해보자는 것에 의미를 두고 있다.

추가적으로 여기서는 Softmax라는 함수를 사용한다.

 

1. 각 class score

cat = 3.2

car = 5.1

frog = -1.7

 

2. class score에 exponential -> 모든 값들을 양수로 만들어 줌

cat = e^3.2 = 24.5

car = e^5.1 = 164.0

frog = e^(-1.7) = 0.18

 

3. 확률적으로 해석

전체 = cat + car + frog = 24.5 + 164.0 + 0.18 = 188.68

cat = 24.5 / 188.68 = 0.13

car = 164.0 / 188.68 = 0.87

frog = 0.18 / 188.68 = 0.0

 

이렇게 나온 0.13, 0.87, 0.0이 softmax함수의 결괏값이다.

 

softmax로 계산된 값을 -log()로 계산함으로써 cross-entropy loss를 계산할 수 있다.  y = -log(x)의 그래프는 x 값이 1에 가까워질수록 loss 값이 0에 가까워지고, x 값이 1로부터 멀어질수록 loss값이 높아진다. 확률 값이 1에 가까울수록 loss는 0에 가까워져야 하므로 왜 -log 값을 사용하는지 알 수 있을 거라 생각한다.

 

Cross-Entropy loss에서 loss의 최솟값은 0, 최댓값은 inf가 된다. SVM과 비교해서 다른 점은 SVM은 정답 clss보다 높은 점수면 무조건 loss가 0이었으나 여기서는 해당 class일 확률이 1이어야만 loss가 0이 될 수 있다. 이를 사용하게 되면 정답 class가 선택될 확률이 1에 가까워지도록, 정답이 아닌 class가 선택될 확률은 0에 가까워지도록 가중치를 학습한다.

 

예시를 통해 SVM, Cross-entropy를 비교해보면 3개의 class에 대한 score가 나오고 있다. 여기서는 첫 번째 class가 정답 class이다. score = [10, -2, 3]을 보면 첫 번째 class에 대한 score가 가장 큰 것을 알 수 있다. 이때의 SVM은 loss = 0이고, Cross-entropy는 loss > 0이다. 그 아래의 score는 모두 다른 값을 가지고 있으나 모두 1번 class가 가장 크기 때문에 SVM loss = 0이 된다. 이는 다른 score를 가졌음에도 같은 loss를 가지는 문제가 발생한다.

 

3장에서는 선형 분류기와 Loss Function에 대해 알아보았다. 다음 장에서는 낮은 Loss를 가지기 위한 파라미터를 업데이트하는 방법에 대해 알아볼 것이다!

'DeepLearning > Michiganc 대학 강의' 카테고리의 다른 글

Lecture 4: Optimization  (1) 2022.11.14
Lecture 2: Image Classification  (0) 2022.11.05
복사했습니다!