[Deep Learning] cs231n 3강 내용 정리 (1)
parametic approach : linear classifier (change image to vector)
f(x, W) = Wx + b
b : bias, 같은 score일 때 가중치를 부여한다.
learning template : 각 category에 해당하는지 판단할 때 바탕이 되는 이미지.
learning template가 W에 해당함. 이때 W에 곱해지는 x는 pixel 값이라 최댓값이 정해져 있기 때문에 W를 키우지 않고 bias를 두어 가중치를 부여한다.
Loss function (=cost function) : optimization. quantify badness of any W.
Multiclass SVM loss (=Hinge Loss) : true class의 score를 si라고 하고 나머지 class의 score를 sj라고 했을 때 si와 sj 값을 비교하여 loss를 계산한다.
si - sj >= safety margin 이면 0을,
si - sJ < safety margin 이면 si - sj + safety margin 값을 Loss에 더해준다.
(자기 자신은 sj에 포함되지 않는 점을 주의하자.)
safety margin : 정답의 score가 다른 class 보다 최소 얼마나 더 커야하는지 정해준다.
true score가 다른 score에 비해 safety margin만큼 크지 않으면 loss가 생길 수 있다.
전체 loss는 각 이미지에 대해서 계산한 loss 합의 평균이다.
Q. What happens to loss if car scores change a bit?
A. True class인 car의 score가 이미 다른 class의 score보다 크기 때문에 loss가 변하지 않는다.
Q. What is the min/max possible loss?
A. Loss의 최솟값은 0이고, 최댓값은 무한대가 된다.
Q. At initialization W is small so as s = 0. What is the loss?
A. number of class - 1 만큼이 loss가 된다. -1이 되는 이유는 자기 자신을 제외하기 때문임.
Q. What if the sum was over all classes?
A. Loss는 safety margin만큼 증가한다. (true class도 포함하여 loss를 계산하니까.)
Q. What if we used mean instead of sum?
A. 그저 rescaling을 할 뿐이라서 변화가 없다.
Q. What if we used loss = max(0, si-sj+safety margin)^2
A. loss 값을 과장하여 더 심각한 상황으로 받아들이게 된다. Error를 얼마나 care하는지 변화가 생긴다.
Q. L=0이 되는 W를 찾았을 때 이 W 값은 unique한가?
A. 여러 개. 2W도 Loss = 0 이 된다.
Data loss : f(x,W)에서 loss는 예측한 class와 실제 class를 뺀 값의 합의 평균이다. (Model predictions should match training data)
train data에 너무 perfect하게 맞추면 f 함수가 너무 복잡해짐. overfit이 발생하여 실제 성능은 나쁨.
Overfit을 해결하기 위해서 Regularization이 필요. -> 좀 더 간단한 W를 선택할 수 있도록 해준다.
람다는 regularization strength, R(W)는 regulation 함수.
Occam's Razor : Among competing hypotheses, the simplest is the best -> 같은 성능 일 때는 간단한 것이 낫다.
Regularization
L1 regularization : 모든 k, l에 대해서 Wk, l의 절댓값의 합
L2 regularization : 모든 k, l에 대해서 Wk,l의 제곱의 합
Elastic net (L1 + L2) : L2 regularization에 특정 상수 베타를 곱한 값과 L1 regularization 값의 합
Max norm regularization : max norm regularization. 가장 큰 값만 남는다.
Softmax Classifier : 각 class의 score 값을 max에는 좀 더 큰 portion을 주어 normalize 해준다. 그 후 true class의 normalize 값을 통해 loss를 계산.
Li = -logP(Y=yi|X=xi)
true class일 확률이 높다고 예측한다면, 그 score는 1에 가까워진다. 그래서 loss가 - log 인 것. (-log 그래프 참고. 1일 때 0이고 0에 가까울수록 무한대로 수렴.)
Li = -log(true class의 normalize 값/모든 class의 normalize 값의 합)이라고 할 수 있다.
즉, SVM과 Softmax의 가장 큰 차이는 SVM은 true class와 other class를 전부 비교하고 Softmax는 true class 하나만 생각하는 점이다.
다만, Softmax에서 normalize한 뒤 true class의 비율을 따지는 것이므로 다른 class가 아예 고려되지 않았다고 보기는 힘들다.
Q. What is the min/max possible loss L_i?
A. 최소값은 0, 최댓값은 무한대이다.
Q. Usually at initialization W is small so as all s = 0. What is the loss?
A. Loss = -log(1/C) = log C (C는 class의 개수)
Softmax vs 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에게는 큰 영향을 미치지 않지만, Softmax는 exponential이 취해진 이후의 비율이므로 correct는 무한대로, incorrect score는 음의 무한대로 가까워진다.
R(W)에서 W는 loss를 최소화하는 W 값이다.
Optimization : W를 어떻게 찾을까?
(1) random search (나쁨)
(2) follow the scope = derivative (좋아)
gradient : vector of along each dimension
slope in any direction is the dot product of the direction with the gradient.
direction of steepest descent is the negative gradient
이 gradient를 numerical 하게 계속 계산하는 것은 너무 번거로웠음. (현재 loss - 전 loss)/h를 계속 각각 계산해서.
numerical gradient 대신 analytic gradient를 사용하자.
Analytic Gradient : exact, fast to compute
iterating을 하지 않고 some function data와 W를 이용해 수식으로 계산해버림.
Numerical gradient : approximate, slow, easy to write.
대신 debugging tool로 unit test 하는데 이용한다.
Analytic gradient : exact, fast, error-prone
항상 Analytic gradient를 이용하지만, numerical gradient를 이용해 implementation을 check 한다.
이 과정을 gradient check라고 부름.
SGD (Stochastic Gradient Descent) : 완전한 loss function이 아닌 일부(batch)로 이루어진 loss function을 이용해서 이 batch에 대한 gradient를 구한다. (regularization 효과.)
N이 너무 크면 Full sum이 너무 expensive 함. 그래서 Approximate sum using a minibatch of example. Minibatch의 사이즈는 메모리에 잘 할당하기 위해 2의 N승으로 설정하는 것이 일반적이다.
Image features
Motivation : 극 좌표계를 이용하여 퍼져있는 것을 줄로 세워준다. linear classify가 가능하도록.
Color Histogram : color bucket 중 하나에 특정 pixel에 해당하는 값을 넣음. 어느 color가 가장 많이 나왔는지에 대한 분포를 알 수 있다.
Histogram of Oriented Gradients (HoG) : vector로 image를 나타낸다. (열 개의 화살표. 화살표는 총 9개 방향.)
9개 방향 : 피자를 8조각으로 자른 모습을 생각해보자.
Bag of Words : extract random patch -> cluster patches to form "codebook" or "visual words" (얼마나 occur 했는지) 그 이후 image를 encode 한다.