JLOG

[Cs231n 정리] Lecture 3 : Loss Function and Optimization / CS231n 3강 정리 본문

Study/cs231n

[Cs231n 정리] Lecture 3 : Loss Function and Optimization / CS231n 3강 정리

정정선선 2021. 3. 3. 23:48

아래 블로그의 정리글을 참고해 작성되었습니다.

꿈 많은 사람의 이야기


 

cs231n 강의를 들으면서 공부 기록용으로 작성된 글입니다.


 

 

Linear Classifer를 사용할 때

Loss function : score를 이용해 얼마나 적절한지 정량화하기 위해서 Loss function을 정의

Optimization : loss의 값을 최소화하는 parameters를 찾기 위한 효율적인 방법을 정의

 

 

Loss function

SVM(hinge loss)

loss function은 현재 classifier가 얼마나 좋은지 알려준다.

 

SVM loss

 

 

추측한 score(sj)가 정답 score(syi)보다 1 이상으로 높을 때, sj-syi+1 값을 Loss로 반환한다.

1 미만일 때는 0 값을 Loss로 반환한다.

 

각 data에 대한 loss를 계산하는 과정

 

Q1. car의 score가 조금 변경 된다 할 때 무슨 일이 생기는가?

- car의 score가 다른 loss보다 압도적으로 큼으로 3 미만까지는 loss가 바뀌지 않는다.

3 미만으로 score가 변한다면, 전체 loss 값이 증가할 것이다

 

→ SVM의 특징 : 데이어에 민감하지 않다는 특징이 있다. 단순히 정답 클래스가 다른 클래스 보다 높은지만 중요시 한다.

 

Q2. min/max?

- hinge loss의 식과 그래프를 보면, min 0는 max는 무한대 값으로 가는 것을 확인할 수 있다.

 

Q3. At initalizaiton W이 매우 작아서 score가 0에 근사해지면?

직접 계산을 해보면, 정답 레이블을 제외한 C - 1만큼의 loss를 가지게 된다.

디버그 용으로 loss 값이 적절히 나오는지 Class-1을 보고 판단할 수 있다(sanity check)

 

Q4. 정답 클래스를 속해서 SVM loss를 구하면?

동일한 정답 score를 사용함으로 loss가 +1 된다. 즉, 최종 loss + 1 값으로 바뀔 것이다.

하지만 최종 loss가 1이 됨으로, 정답 score를 빼고 최종 loss를 0으로 만드는 것이다.

 

Q5. 만약 sum 대신 mean을 사용하면?

단지 scale만 작아지고 변화하는 것은 없다.

 

Q6. 전체 loss function에 제곱승을 한다면?

원래의 SVM와 달라지게 된다. 제곱승을 하면 non linear하고 squared hinge loss라고도 한다.

loss가 직선이 아니라 제곱승으로 올라가게 되고 '매우매우 안좋다' 또는 '매우매우 좋다'를 따질 때 유용하다.

하지만 제곱승을 하지 않은 SVM를 더 많이 사용한다.

 

 

 

 

 

Q. L=0일 때 W 값이 유일할까?

2W일 때도 L=0이므로, 유일하지 않다. 다양한 W가 존재할 수 있다.

두배의 2W를 사용해도 똑같이 0이 나온다.

W는 여러개가 될 수 있다.

 

W가 여러개가 된다면 문제가 발생한다. 우리는 새로운 데이터(test data)를 적절히 예측해야 함으

로, 새로운 데이터에 알맞은 모델을 찾는 것이 중요하다.

 

train data에 대해 다양한 W가 존재하게 되고, 위의 사진과 같이 test에 대해 적절하게 예측하지 못할 것이다.

이것을 과적합(오버피팅, overfitting)이라고 한다.

 

초록색 선과 같은 모델이 되어야지 test data에 적절하게 예측할 수 있을 것이다.

 

 

이때 해결방법으로 Regularization(규제)가 사용된다.

Data loss는 train data에 대해서 완전하게 match해 예측하는 model을 찾는 것이고

Regularization은 Occam's Razor에 따라 가설을 세우기 위해 단순한 데이터가 더 좋다고 하는 것이다.

 

(메모 : overfitting은 train set에 너무 높은 차수로 맞춰진 것이라고 생각했는데, 그냥 적절하지 않은 Weight이 사용된 것이구나, 즉 train에만 맞는 모델이고 test에는 맞지 않는 상황을 over fitting 너무 테스트 셋에만 맞춰졌다고 생각할 수 있을 것 같다.

아래 일차식으로 나타내는 것은 대부분의 모델이 복잡한 것보다 단순한 케이스가 더 잘 맞는 경우가 있어서 예를 이렇게 든 게 아닐까?)

 

 

overfitting에 대한 자세한 설명

 

 

 

(메모) 이 부분이 이해가 잘 가지 않는다.

 

 

 

L1은 실제 차수 값이 0인 되도록 하고 L2는 전체 차수의 값을 0에 가깝게 유도한다. 위의 경우 L1은 w1를 더 선호 할 것이고, L2는 w2를 선호한다.

 

일반적으로 L2 Regularization을 많이 사용한다.

 

 

 

Softmax classifier

K의 값이 존재할 때 각각의 값의 편차를 확대시켜 큰 값은 상대적으로 더 크게, 작은 값은 상대적으로 더 작게 만든 다음 normalization 시키는 함수이다.

 

Q1 min / max ?

이론적으로는 0, 무한대이다. (Log 그래프를 보면 확인할 수 있음)

 

Q2 W가 너무 작아서 S가 0에 가까운 경우, loss 값은?

score가 모두 0에 가까운 값이라면 loss는 -log1/C 값이 나오게 될 것이고,

loss 식이 올바른지 확인하기 위해 sanity check를 위해 쓰일 수 있다.

 

 

hinge loss를 사용했을 때, cross entropy loss를 사용했을 때의 차이점을 확인할 수 있다.

 

Q3 cross-entropy loss를 사용할 때 data 값이 조금 변경 되면 어떻게 될까?

loss는 확률 값으로 계산 되기 때문에 조금만 데이터가 변경되어도 확률에 영향을 미쳐, loss가 변경되게 된다. hinge loss는 단순히 정답 레이블이 다른 레이블보다 1 이상만 크면 영향을 미치지 않는다.

즉 cross entropy loss(softmax)는 score 값에 매우 민감한 것을 확인할 수 있다.

 

요약한 내용

 

 

 

 

 


Optimization

이제 적절한 W 값을 찾아가기 위해 Optimization이 사용된다.

Optimization은 산 속에서 골짜기를 내려가는 것과 같다.

낮은 위치가 낮은 loss 상태라고 생각할 수 있다.

 

 

Random search

좋은 위치(낮은 loss)를 찾기 위한 방법으로 Random search가 있는데, 단순히 random하게 w 위치를 찾는 것이다.

항상 좋은 위치를 찾을 보장이 없음으로, 사용하지 않는 나쁜 방법이다.

 

random search를 사용한 예시 결과를 보면

나쁘면 약 15%, 좋은 경우에는 95%로 결과의 차이가 매우 커서 사용하지 않는다.

 

 

Follow the slope(Gradient descent)

낮은 곳을 향해 나아가기 위해 경사를 따라 내려가는 방법을 사용하고 Gradient Descent라고 한다. 현재 위치와 이동한 위치의 미분 값을 계산하여 미분 값의 반대 방향으로 이동하면 항상 아래를 향해 나아가게 된다.

 

위와 같이 수식으로 하나하나 계산하는 방법을 numerical 방법(수치적 방법)이라고 한다.

 

 

 

 

현재 위치와 한번 이동한 후의 위치를 이용해 loss와 gradient를 계산해보면

loss는 감소하였고, gradient는 -2.5가 나오는 것을 확인할 수 있다.

 

 

 

loss가 증가한 경우에는 gradient가 양수 값이 나오는 것을 알 수 있다.

 

 

loss가 동일한 경우에는 gradient 값이 0으로

loss의 변화가 없음으로, 기울기가 0이라는 것을 확인할 수 있다.

 

이렇게 하나하나 수치적으로 계산하는 것이 위의 방법이다.

 

 

하지만 W이 너무 많아, 위와 같은 방식으로 하나하나 계산하기에 시간이 너무 많이 걸린다.

 

 

그래서 미분식을 이용해 더 빠르고 쉽게 계산할 수 있게 된다.

 

 

위와 같이 빠르게 미분을 이용해 빠르게 dW를 계산할 수 있다.

 

 

Numerical gradient 방식(직접 계산)은 근사적이고 느리지만 간편하다는 특징이 있다.

Analysis gradient 방식(미분)은 보다 정확하고 빠르지만 에러가 많이 나올 수 있다.

(왜? 에러가 더 많이 나오지?)

 

보통은 analytic gradient를 사용하지만, 디버깅 및 점검할 때는 numerical gradient를 사용하기도 하며 이것을 gradient check라고 한다.

 

 

gradient descent는 양의 기울기를 가질 때 음쪽으로 이동하고 음의 기울기를 가질 때 양쪽으로 이동한다.

step size는 learning rate라고도 불리며 한번에 이동하는 정도를 정해주는 값이다.

아래 두 그래프와 같이

너무 큰 learning rate를 가지면, 가장 낮은 값에 적절하게 정착하지 못해 overshooting이 일어날 수 있고,

너무 작은 learning rate를 가지면 시간이 너무 오래 걸리고, 전체적으로 가장 작은 loss를 가진 구간(global minimum)이 아닌 지역적인 최소 구간(local minimum)에 빠질 수 있다.

 

 

 

임의의 w 위치에서 가운데 빨간색 지점(기울기가 0에 가까운 지점)으로 가는 것이 목표이다.

 

 

SGD(Stochastic Gradient Descent)

지금까지 N(데이터의 개수)을 한꺼번에 두고 계산했다. 하지만 N 숫자가 너무 커지게 되면 계산이 비효율적이게 된다.

예를 들어 10000개의 데이터 셋이 있는데, 이 것들을 모두 계산해 W를 갱신해준다면, W의 갱신이 매우 느리게 일어난다.

그래서 SGD를 사용해 데이터들을 세트로 나누어주어 각 개수만큼의 loss를 계산하고 W를 업데이트하고, 그 다음 셋의 loss를 계산하고 W를 업데이트 하는 형식으로 진행한다.

 

이 때 나누어주는 것을 mini batch라고도 하며 256, 512와 같이 2의 승수를 사용한다.

 

 

 

Aside : Image Features

이 전까지는 이미지를 그 자체로 사용해서 성능이 별로 좋지 않았다.

그래서 CNN이 연구 되기 전에는 사진의 특징을 뽑고, 그 특징을 위와 같이 합쳐 linear regression의 input으로 사용했다.

 

 

왼쪽 좌표에 있는 파란점, 빨간점은 linear한 선으로 구별할 수 없지만, 각 점들을 극좌표계로 변환하게 되면 linear한 선으로 구별할 수 있게 된다. 이것을 동기로 하여 각각의 특징들을 이용해 이미지를 구별하려 하였다.

 

 

특징을 추출하는 다양한 기법들이 있다.

첫 번째, color histogram이다.

각 범위에 해당하는 컬러를 카운트해서 특징을 추출하는 방법이다.

 

 

두 번째, Hog으로, 이미지를 작은 구역으로 나누어주어 방향 값을 카운트하여 특징을 추출한다.

 

 

세 번째로는 Bag of Words 방법으로 이미지에서 random하게 patch들을 얻어 비지도학습과 같은 클러스터를 이용하여 각도, 색깔 등의 특징을 얻는다.

그리고 새로운 이미지를 잘라내 해당 cluster patches들과 비교해 어떤 특징이 있는지 비교할 수 있다. 이러한 방법은 약 10년 전에 개발된 방법으로 수업을 담당하는 fei fei li 교수가 대학원 시절에 만들었다고 한다.

 

 

이와 같이 예전에는 이미지에서 특징을 추출해 비교하는 방식을 사용했지만, 현재는 이미지에서 직접 특징을 뽑아내는 방법인 CNN을 사용한다.

 

 

Comments