티스토리 뷰
지난 시간에는 classifier 중 이웃, kNN에 대해 배웠다.
이번 시간에는 Linear classifier에 대해 배울 것이다.
다시 CIFAR10을 불러와보자.
50,000 training images. each image is 32*32*3
Linear classifier
선형 분류기의 아이디어는 parametric approach이다.
3072 number에서 f(x,W) 라는 함수에 W라는 parameters or weights 라는 기본적인 가중치를 준다.
f(x,W) = Wx +b
(10,) (10, 3072)
모든 이미지를 함수로 만들어준다.
이미지를 쪼갠 후, W라는 가중치 벡터를 곱해서 각각의 r,g,b에 대한 결과값을 구한다.
b라는 편향성으로 함수를 보정해준다.
함수와 같다.
Bias Trick : bias(위 함수에서 b)를 직접적으로 W에 포함시켜서 계산한다.
똑같은 결과가 나온다.
그러나 따로 분류해서 계산하는 게 대부분의 상황에서 좋다. 알아만 둬라.
참고로 이건 선형 대수적인 결과다. Algebraic Viewpoint
r,g,b에 대해서 W라는 가중치와 편향성을 각각의 벡터로 나눌 수도 있다.
그렇게 나온 결과는 전부 다른 template를 가진다.
Visual viewpoint of classifier. -> 각각에 대해 template를 가지고 있다.
ex) r 관련해서는 인식하는 물체들이 b의 것과 다들 수 있다.
만약 다른 유형의 방식으로 카테고리가 나타난다면?
ex) horse template has 2 heads
선형 분류기는 view가 바뀐 이런 방식에 대해서는 대처할 수 없다.
그러나 얼룩에 대해서는 가능하다.
그리고 색깔에 대한 분류를 할 때도 r,g,b로 분류된 걸 쓴다면 실패할 가능성이 있다.
Interpreting a Linear Classifier : Geomectric viewpoint
차원적으로 분류가 불가능한 경우:
이미지가 4분면으로 나눠져 있는 상태에서,
1. first and thrid quadrants
->1, 3분면에 다른 색이 칠해져 있는 경우.
2. 1 <= L2 norm <=2
->구멍 뚫린 원이 그려져 있는 경우
3. Three modes
-> 점이 찍힌 경우
Linear Classifier : Three viewpoint
So far: defined a linear score funtion
아주 좋은 W를 고르는 것만이 가장 좋은 방법
그러기 위해서는 Loss Function이 바로 분류기가 얼마나 좋은지를 평가해준다.
Low loss = 좋은 분류기
High loss = 나쁜 분류기
모델이 잘 수행하는 방법을 정량화한다.
손실은 (Xi, Yi)에서 각각의 데이터셋(이미지, 라벨)에
Li(f(Xi,W),Yi) 라는 함수(Li가 loss funtion) 을 거친 것들을 1/N 해서 시그마 해서 더해준다.
즉, 간단히 말하면 모든 손실 함수들의 평균이 전체 손실이 된다.
Multiclass SVM Loss
직관적 전제조건 : 올바른 클래스의 손실 점수는 모든 잘못된 클래스에 할당된 모든 점수보다 훨씬 높아야 한다.
각 이미지에 단일 레이블을 할당하고 싶다는 직관적인 방법
당연히 분류기가 올바른 카테고리에 높은 점수를 할당하고, 다른 모든 카테고리에 낮은 점수를 할당하는 것이 합리적으로 보임.
다중 클래스에서 SVM 손실 계산은 그 직관을 구체적으로 만드는 특별한 방법 중 하나임.
x축이 우리가 고려중인 예에 대한 올바른 클래스에 대한 점수(score for correct class)
y축이 해당 클래스에 대한 손실이 되는 플롯을 그린다.
그 상태에서 다른 클래스에 비해 가장 높은 클래스의 점수를 기준으로 잡고, 손실함수를 그린다.
그러면 hinge loss로서 선형적으로 감소하고, 두 번째로 좋은 클래스의 함수와 margin이 생긴다.
Li = 시그마 max(0,Sj-Syi +1)
3.2,5.1, -1.7이 있다면
= max(0,5.1-3.2+1) + max(0,-1.7-3.2+)
=max(0,2.9) + max(0, -3.9)
=2.9+0 = 2.9
만약에 모든 스코어가 랜덤이라면, 손실함수는 c-1(c는 우리가 인식하려고 하는 범주(label)의 수)
통계분석적으로 회귀하기 때문.
모든 점수가 무작위인지 확인하고 시스템 훈련을 시작할 때 매우 다른 손실이 있는 경우 버그가 있는 것이므로,
시스템적인 확인을 할때 아주 유용하다.
그럼 만약에 예외 없이 모든 클래스에서 시그마가 이루어진다면 어떨까?
모든 손실이 1만큼 더해지기 때문에 영향 별로 없음.
만약에 sum 대신 평균 값을 사용하면? 혹은 제곱을 사용하면?
> 여기서 착안된 것이 최소 제곱법
-는 영향이 없다는 걸
Regularization : Beyond Training Error
2W를 사용해도 0으로 나오는 손실함수는 여전히 0이다.
그래서 정규화를 통해 보정해준다.
L(W) = 1/N 시그마 Li(f(xi,W),yi) + 람다R(W)
람다 = regularization strength(hyperparameter)
L(W)는 data loss : model predictions should match training data
Regularization : prevent the model from doing too well on training data
간단한 예제 = L2 정규화 (최소제곱법)
L1 정규화(절대값)
Elastic net (L1+L2)
복잡한 예제: Dropout, Batch normalization, cutout,Mixup,stochastic depth,etc...
이런 정규화를 하는 이유는 3가지.
1. Express preferences in among models beyoun "minimize traing error"
2. Avoid overfitting : Prefer simple models that generalize better
3. Improve optimization by adding curvature(몇 가지 추가 방법을 더한다 -> 훈련 정확도로 표현되지 않을 떄)
특히나 과적합(overfitting)는 기계 학습 최적화와 다른 방향이다.
결국 우리가 보이지 않는 데이터에서 잘 작동하는 걸 찾고 싶은 거기 때문에, 손실함수만 낮추는 건 불리할 수 있다.
->훈련 데이터로 맞추는 건 안 된다고 지난 강의에서 설명.
Regularization : Expressing Preferences
x = [1,1,1,1]
w1 =[1,0,0,0]
w2 =[0.25,0.25,0.25,0.25] 를 추가하면 L2 노름에서 더 좋은 효과를 보인다.
Cross-Entropy loss (multinomial logistic regression)
softmax function =e^x / 시그마 e^x
probabilities must be >=0라는 그 공식을, probabilities must sum to 1 이라는 공식으로 변환한다.
exp^(x) 한 뒤, 확률분포로 바꿈
0.13, 0.87, 0,00
Li= -log(0.13) = 2.04 역으로 계산
1.00이 correct probs이므로, 비교대조 연산
Classification에서는 다음과 같은 방식으로 하는 것
비교대조 할때 Cross entropy라는 방법도 있다.
분포의 두가지 확률이므로, Li= -log (e^x/시그마 e^x)
what is the min max possible loss Li?
->min 0, max = infinity
이론적. 0을 달성할 수 있는 실제적인 방법은 없음
if all scores are small random values, what is the loss?
-log(c) = log(10) ~ 2.3
이것은 매우 친숙한 숫자여야만 한다. 만약 훈련 시작시 처음에 2.3에 가까운 걸 본다면 아주 좆된 거다.
버그가 있는 거니 반드시 찾아라.