본 포스팅은 Standford University의 'CS231n' 강의로 공부한 것을 정리했습니다.
Lecture 3 | Loss Functions and Optimization
손실함수(Loss function)란, 학습 데이터를 통해 얻은 W(weight matrix)를 사용하여 label을 예측하였을 때 W가 얼마나 못 예측하였는지(badness)를 정량적으로 알려주는 역할이다. 즉, 손실함수가 높을 수록 예측을 못한 것이다. 이러한 손실함수가 낮은 W를 찾아가는 과정을 최적화(Optimization)라고 한다.


서포트 벡터 머신(support vector machine, SVM)은 기계 학습의 분야 중 하나로 패턴 인식, 자료 분석을 위한 지도 학습 모델이다. 두 카테고리 중 어느 하나에 속한 데이터의 집합이 주어졌을 때, SVM 알고리즘은 주어진 데이터 집합을 바탕으로 하여 새로운 데이터가 어느 카테고리에 속할지 판단하는 비확률적 이진 선형 분류 모델을 만든다. 만들어진 분류 모델은 데이터가 사상된 공간에서 경계로 표현되는데 SVM 알고리즘은 그 중 가장 큰 폭을 가진 경계를 찾는 알고리즘이다. 비선형 분류에서도 사용될 수 있다. 출처
즉, 데이터를 분류하는 최대 결정 경계(decision boundary)를 찾는 알고리즘이다!

(if:) 정답 클래스의 스코어 점수가 제일 높으면
then,
140~

Multi-class SVM loss의 계산 과정은 다음과 같다.


Q. Car score가 조금 변하면 Loss에는 어떤 변화가 일어날까?
A. 우리가 Car Score를 조금 바꾸더라도 Loss는 변하지 않을 것이다.
SVM Loss는 오직 정답 스코어와 그 외의 스코어와의 차이만 고려했다. 이 경우 Car Score가 다른 스코어에 비해 월등히 높기 때문에 스코어를 조금 바꾼다고 해도 서로 간의 간격(Margin)은 여전히 유지될 것이고 결국 Loss는 변하지 않는다.
Q. SVM Loss가 가질 수 있는 최대/최솟값은 무엇인가?
A. 최솟값은 0이고 최댓값은 무한대이다.
모든 트레이닝 데이터에서 loss가 0이 되는 경우 최솟값은 0이 된다. 그리고 해당 손실 함수가 hinge loss 모양이라는 점을 고려하였을 때, 정답 클래스 스코어가 엄청 낮은 음수 값을 가지고 있다면 Loss는 무한대가 될 것이다.
Q. 모든 스코어 S가 "0에 가깝고", "값이 서로 비슷하다면" Loss는 어떻게 될까?
A. (Number of Calss) - 1
Loss를 계산할 때는 정답이 아닌 클래스를 순회한다. 그러면 (C-1)개의 클래스를 순회하게 된다. 스코어가 거의 비슷하다면 Margin 때문에 1 스코어를 얻게 된다. 그리고 Loss는 C-1을 얻게 된다. 즉, 모든 점수가 0, 0, ... , 0이 될 것이고 1이 (C-1)번 만큼 더해진다.
이는 디버깅 전략으로 유용하다. 트레이닝을 처음 시작할 때 Loss가 C-1이 아니면 버그가 있는 것이기 때문!
Q. Loss 계산에 (정답 카테고리)가 포함 된다면?
A. Loss에 1이 더 증가한다. 이 포함되기 때문에.
Q. Loss를 계산할 때 전체 합이 아닌 평균을 사용하면?
A. 변하는 것은 없다. 클래수의 수는 정해져 있으니, 평균을 취한다는 건 그저 손실 함수를 리스케일 한다는 의미이기 때문에. 단지 스케일만 변할 뿐이다.

Q. 손실함수를 제곱 항으로 바꾼다면?
A. 결과가 바뀐다. 이것은 다른 함수이다.
제곱항을 취하는 것은 좋은 것과 나쁜 것 사이의 트레이드 오프를 비선형적인 방식으로 바꾸는 것이다. 이렇게 하면 손실함수의 계산 자체가 바뀌며, 이를 squared hinge loss라고 부른다.
Hinge loss와 squared hinge loss 중 어떤 loss를 선택하느냐는 에러에 얼마나 신경쓰고 있고, 그것을 어떻게 정량화 할지에 달려있다. 손실함수란 사용자가 알고리즘에게 "어떤 에러를 신경쓰고 있는지", "어떤 에러가 트레이드 오프 되는 것인지"를 알려주는 것이므로 이는 실제 손실함수를 만들 때 고려해야 하는 요소이다.

def L_i_vectorized(x, y, W):
scores = W.dot(x)
margins = np.maximum(0, scores - scores[y] + 1)
margins[y] = 0
loss_i = np.sum(margins)
return loss_i
margins[y] = 0 : max로 나온 결과에서 정답 클래스만 0으로 만들었다. 이는 전체를 순회할 필요가 없게 해주는 일종의 vectorized 기법으로, 전체 합을 구할 때 제외하고 싶은 부분만 0으로 만들어준다.Q. L = 0인 W를 발견했다고 가정하자. 이러한 W는 하나 밖에 없을까?
아니다. 다른 W도 존재한다.
가령 2W 또한 L = 0의 값을 가진다. (하단 사진 참고)

수많은 중에 Loss = 0 이 되는 것을 선택하는 것은 모순이다. 왜냐하면 오직 해당 data의 Loss에만 신경쓰면 과적합(Overfitting)이 발생할 수 있기 때문.
So we don't really care about the training data performance,
we really care about the performance of this classifier on test data.

위 이미지는 과적합이 발생한 데이터셋과 분류기이다. 이러한 문제를 해결하는 방법을 통틀어 Regularization이라고 한다.

예제에서는 손실 함수에 항 을 추가하였다.
330~
따라서 Data loss와 Regularization loss라는 두 항을 가진 손실 함수가 완성되었다. 이때 는 하이퍼 파라미터이며 과 트레이드오프(trade off) 관계이다.
L2 Regularization이란 가중치 행렬 에 대한 Enclidean Norm이다. 간혹 squared norm이라고도 한다. 모델이 트레이닝 데이터에 완벽히 적합하지 못하도록 (과적합 방지 예방) 모델의 복잡도에 패널티를 부여하는 방법이다. 미분을 깔끔하게 하기 위해 1/2 x squared norm을 사용하기도 한다.

예제에서 L2 regression는 를 더 선호할 것이다. 왜냐하면 의 가중치가 더 작고 더 분산되기 때문이다.
Linear classification에서 W가 의미하는 것은, "얼마나 x가 Output Class와 닮았는지" 이다. 따라서 변동이 심한 어떤 입력 x가 있고 그 x의 특정 요소에만 의존하기 보다 모든 x의 요소가 골고루 영향을 미치는 경우에 L2 Regularization을 통해 더 강인해 질 수 있을 것이다.

우리가 원하는 것은 정답 클래스의 확률이 1에 가깝게 계산되는 것, 반대로 말하면 loss가 0에 수렴하는 것을 의미한다. loss가 0이 되기 위해서는 정답 score가 무한대에 가깝게 높아야 한다.
예제에서는 정답 클래스인 가 선택될 확률을 라고 표현하였다. 이를 최대화 하는 방향으로 (weight)를 구하면 되는데, 단순히 이 확률을 높여주는 것보다 log를 취한 값을 최대화 하는 것이 수학적으로 더 쉽다. 따라서 로 만들어주고, 이를 최대화 하는 방향으로 를 조절한다.
를 최대화 하는 건 정답 클래스가 선택될 확률이 높았으면 하는 것인데, loss function은 badness를 측정하는 것이기 때문에 log에 -(마이너스)를 붙여 계산한다. 이제 SVM의 손실함수는 로 나타나게 된다.
log는 단조증가함수이다.

Q. Softmax loss의 최대/최솟값은?
A. 최솟값은 0이고 최댓값은 무한대이다.
정답 클래스의 확률은 1이 되기를 원하고 정답이 아닌 클래스는 0이 되기를 원한다. log 안에 있는 어떤 값은 결국 1이 되어야 하는 것이다. , 이다.
Q. Loss가 0이 되려면 실제 스코어는 어떤 값이어야 할까?
A. 정답 스코어가 무한대에 가깝게 높아야 한다.
지수화와 정규화 과정을 거치기 때문에 확률 1(정답)과 0(그 외)를 얻으려면 정답 클래스의 스코어는 양의 무한대가 되어야 하고 나머지는 음의 무한대가 되어야 한다. 하지만 컴퓨터는 무한대 계산을 잘 못하기 때문에 Loss가 0이 되는 경우는 없을 것이다. (유한 정밀도) 이론적으로 해석하면 0은 "최소 loss"라고 보면 된다.
은 음의 무한대, 은 양의 무한대가 된다. 하지만 이러한 경우 또한 발생하지 않을 것이다. 확률이 0이 되려면 이 되어야 하는데 이것이 가능한 경우는 정답 클래스의 스코어가 음의 무한대일 때 뿐이기 때문이다. 이 또한 "유한 정밀도"를 가지고는 최댓값(무한대), 최솟값(0)에 도달할 수 없기 때문에 불가능하다.
Q. 가 모두 0 근처에 모여있는 작은 수일 때 loss는?
(=)가 된다.

이면 exp를 취한 빨간색 상자에 해당하는 값이 모두 1이 될 것이다. 이 값에 normalize를 취하면 각 클래스에 대한 확률이 1/C가 되므로 loss는 가 되는 것이다.
이는 softmax를 사용할 때 첫 번째 단계에서 해볼만한 좋은 디버깅 전략이다. log(c)가 아니면 무엇인가 잘못 되었음을 의미한다.
Linear Classification의 설정은 둘 다 같은 조건이고, 행렬 W와 입력이 불가능하다는 것도 같다. 다만 두 손실함수는 "badness"를 측정하기 위해 스코어를 해석하는 방식에 차이가 있다.


입력 x로부터 스코어를 얻기 위해 Linear Classifier를 사용한다.
모델 예측 값이 정답 값에 비해 얼마나 "badness"한지 측정한다.
1) SVM Loss
2) Softmax
이때 모델의 "복잡함"과 "단순함"을 통제하기 위하여 손실 함수에 regularization의 term을 추가한다. 이것이 Supervised leraning에 관한 전반적인 개요이다. 이러한 과정을 통해 최종 손실 함수가 최소가 되게 하는 가중치이자 파라미터인 행렬 를 구하게 된다.
Q. 어떻게 실제 Loss를 줄이는 를 찾을 수 있을까?
A. Optimization!
560~
Random search(임의 탐색)란 임의로 샘플링한 다량의 를 모아 Loss를 계산한 뒤 어떤 가 가장 적합한지 살펴보는 방식이다.


CIFAR-10 dataset을 이용하여 Linear classfier을 학습시킨 결과 15%의 정확도를 보였다. 이와 같이 정확도가 매우 낮으므로 실제로 사용하기에 부적절하다.
Follow the slope는 지역적인 기하학적 특성(local geometry)을 이용한 전략이다.

경사(slope)는 어떤 함수에 대한 미분값을 의미한다. 고등 수학에서는 1차원에서 함수의 미분을 이용하여 점의 기울기를 바로 구할 수 있었다. 하지만 앞으로 다루게 되는 문제들은 대부분 스칼라(값이 하나)가 아닌 벡터 값을 가지므로 위의 개념을 다변수로 확장시켜야 한다.
따라서 고차원에서는 Gradient라는 개념을 이용하게 되는데 이는 다변량 미적분(multi-variable functions)에서 사용되는 개념이다.
1) 수치 gradient
2) 해석 gradient
유한 차분법이란 유한한 차이(finite difference)를 이용하여 수치적으로 gradient를 계산하는 방법이다. 딥러닝 알고리즘으로 gradient를 계산하고 파라미터 백터를 반복적으로 업데이트 할 때 사용한다.


W의 모든 원소를 순회하는 것이 아니라 gradient를 나타내는 식을 찾아내고 한 번에 를 계산하는 방법.

660

작년에 머신러닝을 독학하며 정리한 노션인데 경사하강법에 대한 내용이 있어 링크를 남겨둔다! (1110) 03. 선형 회귀