- 본 게시글은 Justin Johnson 교수님의 Deep Learning for Computer Vision, University of Michigan 정리글입니다.
- 개인적인 생각이 서술되어 있습니다. 잘못된 내용이 존재할 확률이 존재하기에 주의바랍니다.
- 잘못된 내용, 오타는 지적해주시면 감사하겠습니다.
강의링크:
https://www.youtube.com/watch?v=qcSEP17uKKY&list=PL5-TkQAfAZFbzxjBHtzdVCWE0Zbhomg7r&index=3
강의자료:
https://web.eecs.umich.edu/~justincj/slides/eecs498/498_FA2019_lecture03.pdf
기타자료: 고려대학교 김성범 교수님(DMQA) 강의자료 및 강의영상
https://www.youtube.com/watch?v=pJCcGK5omhE
3.1. Linear Classifers
CIFAR-10 데이터 셋의 고양이 이미지를 예측해 봅니다.
이미지의 크기는 32 x 32 x (R,G,B)이므로, 총 pixel의 크기는 32x32x3 = 3072입니다.
f(x,W) = Wx + b의 구성요소는 다음과 같습니다.
- f(x,W)는 Linear Classifiers이고, 이를 통해 이미지를 예측합니다.
- W는 가중치(Weights) 행렬로, 해당 예제에서는 10개의 y값에 대한 3072개의 pixel 가중치(10, 3072)가 입력됩니다.
- x는 3072개의 pixel을 (3072, 1)로 flatten한 벡터입니다.
- b는 bias vector로 (10,1)의 크기를 가지는 벡터입니다. 정답과 예측값의 차이가 클수록 bias는 높습니다.
Wx + b = (10,3072) x (3072,1) + (10,1) = (10,1) + (10,1)의 크기를 가지는,
즉 10개의 class scores이 도출됩니다.
아래 예제를 통해 class scores의 개념을 확립할 수 있습니다.
그림의 우측 값은 Linear Classifiers로 cat, dog, ship 3가지 class에 대한 class score를 계산한 값입니다.
cat score = -96.8, dog score = 437.9, ship score = 61.95로 해당 예제에서는 dog score의 점수가 가장 높습니다.
즉 잘못 분류되었음을 확인할 수 있습니다. 잘못 분류하는 원인에 대해서는 아래에서 자세히 다루어보겠습니다.
추가로 W (3,4)는 3가지 class, 4개의 pixel을 의미합니다.
3.2. Three viewpoint of Linear Classifers
Linear Classifers에는 Algebraic Viewpoint / Visual Viewpoint / Geometric Viewpoint의 3가지 관점이 있습니다.
Algebraic Viewpoint
Algebraic Viewpoint는 선형대수적인 관점, 행렬곱과 같은 수치적으로 바라보는 것입니다.
좌측의 그림과 우측의 그림은 동일한 내용으로, 행렬곱을 모르시는 분들은 우측의 그림을 통해 2x2의 각 요소가 매칭된다고 이해하시면 될 것 같습니다. 또한 우측의 그림을 통해 Visual Viewpoint를 쉽게 이해할 수 있습니다.
Visual Viewpoint
Visual Viewpoint 각 W(Weight)의 행을, class(여기서는 10개) 중 하나에 대한 template로 바라보는 것입니다.
하지만 위의 그림에서 확인할 수 있듯이 plane ~ truck template의 결과가 좋지 않음을 확인할 수 있습니다.
다음과 같은 원인이 있습니다.
- 위의 그림에서 plane은 파란색을 띄고 있기에, 이를 plane의 특징으로 오해할 수 있습니다. 즉, 예시의 맥락에서 확인할 수 있는 단서에 과도하게 의존하는 경향이 있습니다.
- Horse 그림은 머리가 2개인 것으로 보이는데, 이는 말을 옆면에서 바라보았기 때문입니다. 주어진 이미지로만 학습하기에 위치에 따라 다르게 보이는 현상을 인식하지 못합니다. 이는 1개의 template만을 사용할 수 있기 때문입니다.
Geometric Viewpoint
Geometric Viewpoint는 말 그대로 기하학적 관점으로 바라보는 유용한 관점입니다. 하지만 저차원(3차원 이하)밖에 보지 못하는 이유로 제한된 상황에서만 활용 가능합니다.
하지만 아래의 case와 같이 선형으로 분류할 수 없는 상황에서는 어떻게 할까요?
단층 퍼셉트론으로는 XOR을 해결할 수 없기에 다층 퍼셉트론을 통해 해결합니다. 이 개념이 인공신경망의 시작이 됩니다.이에 관해서는 추후에 다루도록 하겠습니다.
3.3. Loss function
주어진 W를 통해 각 class score를 계산하는 방법을 앞서 살펴보았습니다.
그럼 좋은 W는 어떻게 선택하는 것일까요?
1. Use a loss function to quantify how good a value of W is
▶ Loss function(손실함수)을 통해 W 값이 얼마나 좋은지를 정량화합니다.
2. Find a W that minimizes the loss function (optimization)
▶ 최적화 기법을 통해 loss function을 최소화하는 W를 찾습니다.
Loss function은 분류기가 얼마나 좋은지를 나타내는 지표로 값이 낮을수록 좋음을, 값이 높을수록 나쁨을 나타냅니다.
Objective function(목적함수, 최적화에서 주로 사용), cost function(비용함수, ML / DL 에서 주로 사용)과 동일한 뜻입니다.
수식으로 표현하면 다음과 같습니다.
그럼 Multi-class SVM loss 예제를 통해 자세히 살펴보겠습니다.
수식을 잠시 살펴보겠습니다.
L_i는 i번째 loss로, s_j(정답이 아닌 class score)와 s_yi(정답인 class score)의 차이 + margin(+1)로 이루어집니다.
s_j - s_yi + 1 < 0 → max(0, s_j - s_yi + 1) = 0
s_j - s_yi + 1 > 0 → max(0, s_j - s_yi + 1) = s_j - s_yi + 1
을 loss로 선택하라는 의미입니다. 따라서 loss는 (0, inf)의 범위를 지닙니다.
즉 정답인 class socre가 정답이 아닌 class score + margin보다 크다면 loss 값은 0이 됩니다.
여담으로 그래프의 모양이 hinge(경첩)처럼 생겼다고 하여 'Hinge Loss'고도 불립니다.
Loss 계산은 다음과 같이 진행됩니다. 먼저 각 class에 대한 loss를 계산합니다.
Car class의 loss 계산은 다음과 같습니다.
max(0, 1.3(cat score)-4.9(car score) + 1(margin)) + max(0, 2.0(frog score)-4.9(car score) + 1(margin))
= max(0, -2.6) + max(0, -1.9)
= 0 + 0 = 0
다음으로 각 class의 loss의 합을, class의 개수로 나누어줍니다.
Loss = (2.9(cat loss) + 0(car loss) + 12.9(frog loss)) / 3 = 5.27
따라서 개별 class에 관한 예측의 정확도만이 아닌, 전체 class에 관한 예측 정확도를 모두 고려하게 됩니다.
강의에서 제시된 5가지 질문을 통해 loss function을 자세히 알아보겠습니다.
Q1. What happens to the loss if the scores for the car image change a bit?
A. Loss는 변하지 않으며 계속 0일 것입니다. 이는 SVM의 특징인 robustness 때문인 것 같습니다.
*robustness: 데이터에 변동이 생겨도 기존의 성능에서 변동이 크지 않은 것
Q2. What are the min and max possible loss?
A. 최소값은 0, 최대값은 inf입니다.
최소값이 0인 이유는 max(0, x)이기에 음수가 나올 수 없고, 최대값이 inf인 이유는 만약 정답 class score가 정답이 아닌 class score보다 매우 작아질수록 inf에 가까워지기 때문입니다.
Q3: If all the scores were random, what loss would we expect?
A. 정규분포를 따르며 표준편차가 매우 작다는 가정하에,
loss = # of class - 1의 값입니다. 해당 예제에서는 2가 나올 것입니다.
이는 max(0, s_j - s_yi + 1)를 통해서도 확인할 수 있습니다.
이때의 s_j는 s_yi와 매우 유사한 값일 것이기에 max(0, s_j - s_yi + 1) = 1이 될 것이고, 이러한 비교를 class별로 2번 진행하기에 loss는 2가 됩니다. 따라서 평균 loss = (2 + 2+ 2) / 3 = 2를 통해 확인할 수 있습니다.
Q4: What would happen if the sum were over all classes? (including i = yi)
A. 기존 loss에서 max(0, s_yi - s_yi + 1)가 추가된 것이기에 loss는 1이 증가될 것입니다.
Q5: What if the loss used a mean instead of a sum?
A. 변하지 않을 것입니다.
Q6: What if we used this loss instead? (기존 loss에 제곱을 취한 형태)
A. 변할 것입니다.
add Q. Suppose we found some W with L = 0. Is it unique?
A. No! 2W is also has L=0!
L=0이라는 뜻은 정답 class score >> 정답이 아닌 class score이기에 x2를 취한다면 이 차이는 다 커질 것입니다. 따라서 loss는 계속 0이 유지됩니다. 하지만 loss가 0이 아니라면 loss는 다른 값을 가질 것입니다.
3.4. Regularization
Regularization(정규화)는 왜 필요할까요?
바로, overfitting 문제를 해결하기 위해 필요합니다.
*overfitting: training data에 너무 과하게 학습되어 testing data에 좋은 성능을 발휘하지 못하는 상태
*underfitting: traing data & testing data 모두에 좋은 성능을 발휘하지 못하는 상태
※ 최소한 traing data에는 좋은 성능을 보이기에 underfitting 보다는 overfitting한 상태가 낫다고 알려져 있습니다.
아래의 그림은 순서대로 underfitting, optimal, overfitting한 상태를 보여줍니다.
Regularizataion은 overfitting한 상태에 제약을 걸어 optimal한 상태에 가깝게 만들어 줍니다.
아래의 수식은 Data loss에 Regularization을 추가한 식입니다.
Data loss는 training 정확도를, Regularization은 generalization(일반화) 정확도를 나타냅니다.
람다를 통해 training 정확도와 generalization 정확도를 조절할 수 있습니다.
람다가 커진다면 underfitting에 가까워질 것이고 (회귀 계수 값에 제약이 가해져 0에 가까워짐)
람다가 작아진다면 overfitting에 가까워질 것입니다 (회귀 계수 값에 제약이 거의 없어 기존과 유사함).
Regularization 방법은 크게 3가지가 존재합니다.
L2-norm regularization은 Ridge Regression,
L1-norm regularization은 Lasso(Least Absolute Shrinkage and Selection Operator)라고 불립니다.
*해당 내용에 관한 자세한 공부를 원하시는 분들은, 고려대학교 김성범 교수님의 강의를 참고하길 바랍니다.
*More complex에 제시된 내용들은 모델 관점, 데이터 관점에서 overfitting 문제를 해결하는 방법입니다.
좌측의 그림은 Ridge Regression, 우측의 그림은 Lasso를 보여주는 그림입니다.
Ridge와 Lasso의 특징은 다음과 같습니다.
Ridge와 Lasso는 각각의 장점을 지니고 있었기에 이들의 장점을 융합한 방법인 Elastic net이 등장하게 되었습니다.
이를 통해 변수 선택이 가능함과 동시에 다중공선성 문제를 해결할 수 있게되었습니다.
Elastic net은 다음과 같습니다.
3.5. Cross-Entropy Loss
앞서 Multi-class SVM loss를 살펴보았습니다. 이보다 더 흔히 사용되는 것이 Cross-Entropy loss 입니다.
먼저 각 class score를 지수함수를 통해 양수로 변환 → softmax 함수를 통해 총합이 1인 0 ~ 1 사이의 확률로 변환합니다.
*softmax 함수는 해당 값이 전체 값에서 차지하는 비중을 나타내며, 0 ~ 1로 값을 정규화시켜줍니다.
다음으로 Cross-Entropy loss 계산입니다.
구해진 값 [0.13 0.87 0.00]T 와 [1.00 0.00 0.00]T를 통해 값을 계산합니다.
- (1 x log 0.13 + 0 x log 0.87 + 0 x log 0.00)
= - log 0.13
= -2.0404324 입니다.
만약 [0.13 0.87 0.00]T이 [1.00 0.00 0.00]T이라면 어떻게 될까요?
- (1 x log 1.00 + 0 x log 0.00 + 0 x log 0.00)
= - log 1.00
= 0 입니다.
이처럼 두 값이 정확히 일치한다면 Cross-Entropy loss는 0이 될 수 있습니다.
하지만 이처럼 기준이 매우 엄격하기에 SVM loss=0이 나오더라도 Cross-Entropy loss > 0 인 상황이 많이 연출됩니다.
Q. If all scores are small random values, what is the loss?
A. log(# of category)
CIFAR-10 데이터를 예로 들어보겠습니다. 총 10개의 class를 가지고 있기에 If all scores are small random values이면
[0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1]T와 [1 0 0 0 0 0 0 0 0 0]T를 비교하게될 것입니다.
*첫번째 class가 정답이라는 가정이 있습니다.
이를 계산하면 -log 0.1 = log 10 = 2.3으로, log(# of category)로 일반화할 수 있습니다.
이것이 중요한 이유는 이를 기준으로 삼을 수 있기 때문입니다.
"학습한 모델의 loss가 random loss보다 크다면, 학습이 많이 잘못된 것이겠죠?"
긴 글 읽어주셔서 감사합니다.
'공부 정리 > Machine learning & Deep learning' 카테고리의 다른 글
[EECS 498-007 / 598-005] Lecture 8: CNN Architectures (0) | 2023.01.26 |
---|---|
[EECS 498-007 / 598-005] Lecture 7: Convolutional Networks (0) | 2023.01.24 |
[EECS 498-007 / 598-005] Lecture 6: Backpropagation (0) | 2023.01.17 |
[EECS 498-007 / 598-005] Lecture 5: Neural Network (2) | 2023.01.11 |
[EECS 498-007 / 598-005] Lecture 4: Optimization (0) | 2023.01.08 |