본문 바로가기
데이터 과학 관련 스터디/cs231n

cs231n 3강 Loss Functions and Optimization요약

by inhovation97 2020. 10. 24.

3강입니다.

목차는 아래와 같습니다.

overview

Loss function : SVM Loss(Hinge Loss) & Cross entropy Loss(soft max)
Optimization

지난 강의에서는 6가지 Semantic Gap으로 이미지 데이터를 분류하는 데에 어려움이 있으며, NN&KNN을 살펴보며 Linear classification의 원리만 살펴보았습니다.

 

<Loss Function - SVM loss>

  • 우선 지난 2강에서 뉴럴 네트웍의 기본 단위인 Linear Classifier를 배웠습니다. 픽셀을 1차원 array배열로 바꾼 뒤, 가중치 W를 곱하고 bias를 더해 각 클래스별 스코어를 산출합니다. 
  • 아직 최적의 가중치 W를 구하는 방법을 모르기 때문에 이번 강의는 이 부분에 집중합니다.

 

  • loss function을 정의하는데 그렇다면 이 loss function은 무엇일까요?

loss function은 가중치 W와 관련된 함수입니다. 최적의 W를 구해서 이미지를 더 잘 분류하기 위함입니다. 

이런 W가 얼마나 괜찮은지 수치적으로 손실 함수가 알려주기 때문에 이 손실함수를 최소화하며 이미지를 잘 분류하는 Optimize과정을 공부합니다.

 

 

 

 

설명을 위해 class를 3개로 합니다.

먼저 힌지 로스라고도 불리는 SVM loss(서포트 벡터 머신)는 이진분류와 멀티클래스 분류가 있는데 후자를 설명합니다.

 

수식을 보면 이미지에 대해서 Sj는 잘못 분류한 레이블 스코어, Syi는 정답 레이블 스코어 입니다. 따라서 각 이미지마다 모든 클래스 개수-1개의 Li가 도출 됩니다.

 

고양이는 그래도 2등으로 분류해서 틀렸기때문에 2.9지만, 개구리는 형편없이 분류했기때문에 loss값이 12.9나 됩니다.

 

각각의 Li의 값은 잘못 분류한 레이블 스코어 - 정답 스코어 + 1(safety margin을 1로 설정한 것) 입니다. 잘 생각해보면 이 classifier가 잘 분류하기만 하면, 값이 0보다 작아지기 때문에 Li는 항상 0값이 나옵니다.

 

이 모델이 얼마나 잘 맞췄는지는 모르는 큰 단점이 있는 것입니다. 데이터에 너무나도 둔감한 것입니다.

그렇다면 이 hinge loss의 최대값은 infinite하고 최소값은 0이라는 점이죠.

 

우리가 구한 힌지 로스 값을 도출한 W값이 유일한 값인지를 묻고 있습니다.

유일할까요? 아닙니다.

이는 라벨을 제대로 분류했을 때 크게 문제가 됩니다.

자동차의 예시를 보면 W값들에 2배씩 해줘서 각 클래스별 스코어 점수가 2배씩 나와도 잘 분류했기 때문에, 손실함수의 점수는 0이 나오죠.

잘 분류했는데 뭐가문제냐고 질문할 수 있습니다. 하지만 큰 문제입니다.

큰 차이로 잘 맞추면 그것에 관한 성적을 알 수가없이 무조건 로스값이 0이 나오기때문입니다.

또 이것이 train으로 학습한 것이기 때문에 0의 loss값을 신뢰할 수 없으니 test set에서는 제대로 분류를 못할 수도 있는 것입니다. W가 최적의 값이 아닌 것이지요.

 

이는 training셋에는 관대하기 때문에 나온 문제입니다. test셋에서도 제대로된 w값을 만들 수 있다고 믿을 수 없어요. 과적합의 위험이 있는 것입니다.

 

하지만 이 부분을 약간 해소시킬 방법이 있습니다.

 

 

1번 슬라이드는 데이터에 너무 과적합된 면이 보입니다. 우리는 평균적으로 loss값을 최소로하는 직선을 그어 정답을 도출하고 싶은 것입니다. 그래야 초록색 네모처럼 새로운 test셋에 대해서도 잘 반응할테니까요. 그래서 우리는 규제항을 추가해줍니다.

training 셋에는 loss가 더 커질지라도 새로운 셋이 오면 더 잘 분류할 것입니다. 

위에서 말했던 점수가 2배가 되었을 때, 처리하지 못한 부분을 3번 슬라이드를 보면 해결해줌을 알 수 있습니다.

더 작은 점수들에 대한 규제항의 값이 더 작기 w1,w2중에서도 w2를 더 loss값이 작은 모델로 선호하게 되는 것입니다.

 

규제항은 이 외에도 L1, L2, Elastic net등등 많습니다.

다른 규제항들을 추후 강의에 더 다룹니다.

 

<Loss Function - Cross entropy loss>

손실 함수를 알아보기 전에 먼저 softmax Classifier에 대한 이해가 필요합니다.

softmax Classifier은 multinomial Logisitic Regressrion입니다. 그래서 이미지 분류를 각 클래스에 대해 확률값으로 표현합니다. 확률이 가장 높은 class로 부여하는 셈이죠.

 

식은 이렇습니다.

  • w가중치를 통해서 우리는 어떤 이미지에 대해 각 클래스별로 score값을 얻었습니다.
  • 그 스코어 값들을 exp해줍니다. (이유는 밑에 설명합니다.)
  • exponential해준 스코어 값들을 위의 식을 통해 정규화하여 확률값 P로 반환합니다.
  • 우리는 이제 그 값을 최종 스코어로 이용합니다.
  • 그 확률값들을 -log화하여 loss fuction을 구합니다.

 

 

exp 해준 이유

multinomial Logisitic Regressrion입니다.

로지스틱 함수식을 살펴보면 자연상수가 있기때문인 것 같습니다(뇌피셜)

 

 

 

 

-log를 취한 이유

단조로운 로그함수를 이용해서 로그를 최대화 시키는게 더욱 쉽고, 확률이 낮은 놈일수록 오차를 더욱 높이기 위함입니다. -log에 1을 넣으면 loss값은 0이 되고, 확률이 낮은 class일수록 오차는 매우 커집니다.

 

 

두 손실 함수의 차이점

  • 1버 슬라이드 : 힌지로스는 max값을 취해서 도출하지만 cross-entropy는 확률값을 -log화하여 도출합니다.
  • 2번 슬라이드 : data값에 약간의 변형을 주면, 힌지로스는 3개의 값이 전부 0이지만, cross-entropy는 데이터에 매우 민감해서 전부 다 다른 값을 도출합니다. 좀 더 합리적입니다!

요약하자면 이렇게 됩니다.

Full loss는 언제나 규제항을 추가해주는 것을 의미합니다.

그럼 이제 손실함수로 W의 상태에 대한 주소를 알게 되었으니 최적의 W를 찾아야겠죠?

그 과정을 바로 Optimization이라고 합니다!

 

 

 

<Optimization>

본 강의에서는 우리가 가중치W를 수정하여 좋은 모델(loss가 0인 지점)로 수정해가는 것은 마치 눈을 감고 광활한 산맥을 따라 내려가는 것에 비유합니다.

 

 

 

 

첫번째 전략이라고 말하지만, 하지말아야하는 방법을 설명합니다.

random search를 하지 말라는 것입니다.

이 방식은 전혀 신뢰성이 없습니다. 마치 눈 감고 광황한 산맥을 내려가는 것을 무작위 텔레포트를 하는 의미와 똑같아서 이미지 분류를 운에 맡기는 것과 다름없기 때문입니다.

 

 

 

두번째 전략

산에 내려갈때 우리 발의 감각을 곤두세워 내려가면 오르막인지 내리막인지 느낄 수 있습니다. 이는 순간 변화율을 이용하는 것에 비유한 것입니다.

미분 계수를 이용하면 확실히 기울기를 통해 확실히 손실함수를 줄여 W를 수정할 수 있습니다. 하지만 이를 Numerical gradient라고 하는데, 이 방식은 super slow입니다.

 

 

 

이렇게 w를 하나하나 loss를 보며 수정해 나갑니다. 이렇게 첫번째 w는 수정을 통해 loss를 줄였지만,

 

 

그 다음은 양수가 돼서 loss값이 증가하고 말았습니다. 1.25347 -> 1.25253

이렇게 하나하나 계산하여 대입하는 Numerical gradient는 너무나도 느립니다.

 

 

 

문제에 봉착했지만, 우리는 위 두명의 수학자가 만든 미분식으로 w가 변화할 때의 loss식인 미분식을 이용해 이를 해결했습니다. 

2번 슬라이드처럼 미분값들이 쉽게 구해집니다.

이를 analytic gradient라고 하는데, 이는 추후 강의에서 다시 다룹니다.

 

 

 

요약합니다.

Numeric gradient : 값이 정확하진않고 근사적이며, 매우 느리다. 코딩은 쉽다.

Analytic gradient : 값이 정확하고 빠르다. 에러가 날 가능성이 있다.

실전에서 후자만 이용한다고 보면되고, 전자는 후자의 코드를 체크하는 정도로 이용합니다.

이를 gradient check이라고 합니다.

 

 

 

경사 하강법의 코딩을 보면 기울기 값에 -step size를 곱하여 weight를 수정해 나갑니다. 

learng late라고 하는 이 값은 얼마만큼의 비약으로 기울기 값을 변경하기를 지정해주는 것인데, 이는 아래로 가면 제가 자세히 설명한 적이 있습니다.

inhovation97.tistory.com/5?category=833809

 

[모두의 딥러닝] 4장 오차 수정하기 : 경사 하강법

4장 관련 포스팅입니다. 제목을 보면 알 수 있듯이 경사 하강법은 오차를 수정하는 기법입니다. 대부분의 데이터는 입력 변수가 여러개인 다중 회귀를 이용하며, 다중 회귀는 최소 제곱법을 쓰

inhovation97.tistory.com

 

우리는 경사 하강법으로 속도를 높였지만, SGD를 통해서 속도를 더 높일 수 있습니다. SGD는 전부계산한다기 보다는 띄엄띄엄 계산하면서 전부 계산하지 않고 minibatch를 두어서 수정해나가는 방식입니다. 

보통 32/64/128 수준으로 지정해주며, 이는 한번에 이 만큼씩만 계산을 하여 수정한다는 의미입니다.

위 코드에서는 256으로 잡았네요.

 

<Aside : Image Feature>

딥러닝의 좋은 점은 피쳐 엔지니어링이 필요없이 알아서 해준다는 것입니다.

이전에는 분명 사람들이 성능을 높이기 위해서 이 과정을 해줬어야했습니다.

이렇게 위 그림처럼 여러 피쳐를 뽑아내어 인위적으로 이미지의 정보를 늘려주었던 겁니다.

강의에서는 그 방법론들을 한 번 살펴봅니다.

 

 

 

그 중 하나는 바로 Color Histogram입니다.

해당 이미지의 컬러들에 대해서 히스토그램으로 가장 많이 나온 컬러를 뽑아내는 것이죠.

 

두번째는 HoG입니다.

이미지를 분할해서 각 분할 구역마다의 이미지 방향값을 뽑아내는 것입니다.

진짜 처음 듣는 얘기네요 ㅋㅋ

 

 

 

세번째 Bag of Words입니다.

이는 NLP분야에서 많이 사용하는 걸로 알고 있습니다. 이미지 분류 분야에도 이용됐었네요.

 

엄청난 발전이 있는 지금 CNN은 이러한 과정없이 원툴로 끝납니다.

저번 강의에 CNN이 3강에 있길래 다루는 줄 알았는데 안다루고 끝이 났네요.

 

 

다음 강의는 뉴럴 네트웍과 오차 역전파를 다루네요

 

*cs231n 강의자료

cs231n.stanford.edu/2017/syllabus.html

 

Syllabus | CS 231N

Lecture 8 Thursday April 27 Deep Learning Software Caffe, Torch, Theano, TensorFlow, Keras, PyTorch, etc [slides] [video]

cs231n.stanford.edu

 

댓글