2016 cs231n 강의 내용을 정리해 올린 글입니다.

 

 

TODO

1. 훈련 데이터의 score에 대해 불만족하는 정도를 정량화하는 loss function을 정의한다. 

2. loss function을 최소화하는 파라미터들을 효율적으로 찾는 과정 (optimization)

 

 

- Loss Function

3개의 훈련 예시, 3개의 클래스, f(x, W) = Wx 에 의해 도출된 score가 표시되어 있다.

 

 

1. SVM을 활용한 Hinge loss

Hinge loss를 구할 수 있는 form이다. S_j는 잘못된 레이블의 스코어, S_yi는 올바른 레이블의 스코어를 의미한다.  1은 safey margin을 의미한다.

 

고양이에 대한 Hinge loss 값을 구해보면

max(0, 5.1-3.2+1) + max(0, -1.7-3.2+1) = 2.9+0 = 2.9 가 된다.

 

다음과 같이 Hinge loss 값들을 구할 수 있다.

 

이제 loss값들을 더해 총클래스의 수로 나눠주면 (2.9+0+10.9)/3 = 4.6을 도출해낼 수 있다.

 

Q: what if the sum was instead over all classes? (including j = y_i)

 

고양이 클래스를 예시로 들면

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

-> loss값이 1 늘어나게 된다. -> 평균 loss값도 1 늘어나게 된다.

 

Q2: what if we used a mean instead of a sum here?

큰 의미는 없을 것.. 

 

Q3: what if we used?

squared hinge loss라고도 불린다.

 

non-linear 한 방식이므로 차이가 존재..

 

Q4: what is the min/max possible loss?

최저값은 0이 된다. 최댓값은 무한대

 

Q5: usually at initialization W are small numbers, so all s ~= 0. What is the loss?

max(0, 0-0+1) +  max(0, 0-0+1) ~= 2

loss는 2가 될 것 이다. 일반화를 하면 class-1 값이 초기의 loss 값이 될 것이다.

이를 통해 초기의 학습이 잘 진행되고 있는지 확인할 수 있다. (sanity check)

 

numpy 코드로 표현하면 다음과 같다.

 

위의 수식을 정리한 것

다음과 같은 loss에서 사실 bug가 존재한다. loss 0을 만족하는 W를 찾았다고 하였을 때 W는 유일하지 않다.

 

loss값을 0으로 만드는 W가 유일하지 않다는 예시

유일한(unique)한  Weight값을 결정해주기 위해서 regularization이라는 개념을 도입한다.

 

A way of trading off training loss and generalization loss on test set

 

Data Loss = > 학습용 데이터들의 최적화 담당

Regularization loss => 테스트 데이터들의  일반화 담당

=> Data에도 가장 fit 하고 가장 최적화(작은) W값을 추출하게 됨.

 

 

일반적으로 사용되는 Regularization 방법

 

 

다음과 같이 결과가 1로 같지만, L2 Regularization은 w_2를 선호하게 된다.(Weight를 최대한 Spread out)

-> diffuse over everything

 

 

 

 

2. Softmax를 활용한 Cross entropy loss

 

 

 

계산을 따라가며 확인해보면

마지막 확률은 합이 1이 된다.

Q: What is the min/max possible loss L_i?

확률의 범위 (0~1), -log(0) = 무한대, -log(1) = 0 이기 때문에 (0~무한대)의 범위를 가진다.

 

Q5: usually at initialization W are small numbers, so all s ~= 0. What is the loss?

e^0 = 1이 되고, normalize 하면 0.33이 되면 -log(0.33)이 된다.

 

다음과 같이 softmax와 svm을 비교할 수 있다.

Q: Suppose I take a datapoint and I jiggle a bit (changing its score slightly). What happens to the loss in both cases?

A : svm에는 +1 (safety margin)이 있어 robustness를 만족하게 된다. 따라서 loss가 동일하지만, softmax에서는 모든 수들을 고려하여 loss를 만들기 때문에  변화하게 된다.

 

 

정리

 

 

- Optimization

strategy #1 : Random search

정확도 15.5%... 최악이다.,

 

strategy #2: Follow the slope

1차원의 경우 함수의 미분으로 표현가능, 다차원의 경우 벡터의 형태로 표현 가능

 

Numerical gradient 계산 과정

장점 : 코드로 작성하기에는 쉽다.

단점 : 근사치를 가지게 된다. 평가 시간이 매우 길다.

 

 

 

사실 loss는 W의 함수이기 때문에 미분만 구하면 쉽게 구할 수 있다. => Analytic gradient

장점 : 정확하고 빠르다.

단점 : 코드로 작성하면 에러가 날 가능성이 있다.

 

실제 사용할 때는 Analytic gradient를 사용하고 체크할 때에만 numerical gradient를 사용하면 된다. 이를 gradient check라고 한다. 

 

- Gradient Descent ( Full-batch Gradient Descent)

step_size = learning rate로 hyperparameter이다.

 

 

- Mini-batch Gradient Descent

 

 

mini-batch를 사용하였을때, 시간에 따른 loss값 특정 데이터만 사용하여 파라미터를 업데이트 하였기 때문에 노이즈가 생긴다. 장기적으로는 서서히 내려간다.

 

 

mini-batch  Gradient  Descent의 대표적인 예로는 stochastic gradient descent가 있다.

파라미터를 업데이트하는 방식으로는 Gradient Descent만 있는 것이 아니라 

momentum, Adagrad, RMSProp, Adam,... 등이 있다.

 

 

- Aside : Image Features

전통적인 방법 : 이미지 -> 특징 추출 -> linear classifer 적용

 

특징 추출 방법 

1. color (Hue) Histogram

 

2. HOG/SIFT features

8x8 픽셀로 구성되어 있는 구역 내에 edge의 방향을 특징으로 추출

 

3. Bag of Words

 

딥러닝 접근 방법 : 특징 추출을 하지 X, 이미지 자체를 모델에 넣어 결과를 반환해줌

 

 

 

+ Recent posts