Browsed by
카테고리: Stanford cs231n

요약] Lecture 3 : Loss functions and Optimization

요약] Lecture 3 : Loss functions and Optimization

이번 강의의 목표는

  • Loss function을 정의해서 현재 classifier가 얼마나 정확한지를 평가하고
  • 이를 이용해서 현재의 classifier를 향상시키는 방안을 제시하는 것

이 되겠다.

Linear classifier의 경우, 모든 분류에 대한 스코어값을 얻기 때문에 가장 가까운 븐류뿐만 아니라 다른 분류에 대한 스코어정보도 얻을 수 있다. 따라서 이를 통해 classifier가 다른 분류들과 얼마나 혼동하고 있는지도 체크할 수 있다.

Multicalss SVM(support vector machine) loss는 가장 쉬운 예라고 할 수 있겠는데, 현재 가장 높은 스코어(옳은 분류의 스코어를 제외)를 뽑아내어 그것을 Loss로 삼는 간단한 공식이라 할 수 있겠다. 각 사진에 대해 Loss를 구한 후, 이들의 총합을 현재 classifier의 정확도를 측정하는 척도로 쓴다.

 

 

Loss가 높을 수록 안좋은 것. 뒤에 보면 +1이 붙어있는데, 이는 Hyper parameter로 옳은 분류의 스코어값이 다른 분류의 스코어값보다 최소 이만큼은 높으면 좋겠다는 지표정도로 쓰는듯하다. 위 예시의 경우 각 스코어 값에 +1을 해도 max(0, x)값을 했을 때 0이 나온다면 만족스러운 스코어라고 판단한 것.

 

문제는 Loss가 0이 되는 경우가 Unique(유일)하지 않다는 것. 분류를 제대로 맞췄을 경우, 다른 분류의 score값들이 어떻든 Loss가 0이 뜨는 경우가 존재해서 결국 “얼마나 정확한가?”를 측정하는 목적에 부적합한 경우가 발생하는 것이다. 아래 예시를 보면 자동차를 제외한 나머지 분류의 점수들을 2배로 높여도 Loss값은 똑같이 0이 나온다. 분명 후자가 덜 정확한 classifier인데 말이다.

이를 해결하기 위해 뒤에 Weight regularization(무게 조절)을 하는데, 공식은 다양하지만 결국 공통점은 위의 오류를 줄이기 위한 방법이라는 점이다. 강의에서 설명하기로는 classifier들의 무게값이 균등한게 더 좋다고 가정하기때문에 다음과 같은 Regularization을 통해 그런 classifier를 찾아낸다고.

 

두 번째는 Softmax classifier인데, 각 분류의 스코어값들을 각각 실제 분류가 될 확률의 값으로 치환한 다음, 옳은 분류로 분류해 낼 확률이 낮으면 낮을 수록 Loss점수를 높게 주는 방식이다. 이 경우는 각 스코어의 변화에 따라 svm보다는 훨씬 민감하게 Loss변화가 일어난다는 게 특징.

 

두 방법 비교 :


이제 Classifier를 수정하면서 Loss가 작아지는 방향으로 나아가는 일만 남았다. 어떻게 나아갈 것인가가 문제.

 

  • 그냥 아무 방향이나 일단 나가본다 -> 시간이 오래걸림
  • classifier 의 각 weigtht마다 기울기를 계산하여 Loss가 낮아지는 방향으로 나아간다. -> 발상은 쉬운데 일일히 계산해야해서 엄청 느림
  • 그냥 weight의 기울기를  미분으로 구한다? -> 약간의 에러가 있음

2번째와 3번째가 살짝 이해 안되는 부분. 뭐가 다른거지. 보통은 3번째 방식에 2번째 방식을 확인차 섞는 듯 하다.

Mini-batch Gradient Descent는 이 기울기를 구할 때 이미지를 training셋 전체를 쓰지 않고 일부분만 쓴다는 것 같은데, 지나치게 많은 이미지를 사용하면 overfit의 문제가 발생할 수 있고, 반대로 지나치게 적은 이미지를 사용하면 매우 느리게 학습한다는 문제가 생기기 때문인 것으로 보인다.