히비스서커스의 블로그

[CS231n 3] Optimization 본문

Theory/Computer Vision

[CS231n 3] Optimization

HibisCircus 2021. 1. 18. 20:11
728x90

  내용들은 전적으로 stanford university의 CS231n 2017 3강 강의 내용을 기반으로 작성하였음을 먼저 밝힙니다. 

 

2021/01/13 - [Programming/AIffel] - [Day 9] Loss Functions

 

[Day 9] Loss Functions

※ 이 내용들은 전적으로 stanford university의 CS231n 2017 3강 강의 내용을 기반으로 작성하였음을 먼저 밝힙니다. ※ 이전에 공부한 내용에서는 Linear classification의 모델의 구조를 살펴보았다. 20.

biology-statistics-programming.tistory.com

 

지금까지의 내용을 전체적으로 보자면

 

- 분류 함수 f(x)

: image classification을 할 수 있는 복잡한 분류 함수 f(x)에 관한 내용을 배우고 있다. 이 함수 f(x)는 파라미터를 가지고 있다.

 

- 손실함수 L

: 분류 함수 f(x)가 얼마나 안좋은지를 측정하는 함수이다

 

- Regularization term

: f(x) 즉, 모델이 복잡해지면 학습데이터에 대해서만 잘 분류할 수 있으므로(과적합될 수 있으므로) 모델이 복잡해지는 것을 막아주는 상쇄해주는 역할을 한다.

 

- 가중치 행렬(파라미터) W

최종 손실함수가 최소가 되게 하도록 해주는 역할이다.

 

그렇다면 어떻게 최종 손실함수가 최소가 되도록 해주는 W를 찾을 수 있을까? 이는 최적화 이론을 통해서 가능하다.

 

 

 

이제 최적화 이론 (optimization)에 대해서 살펴보자

 

- 골짜기의 밑바닥: 손실함수가 최소가 되는 가중치 행렬

우리가 골짜기에서 밑바닥을 찾는다고 해보자. 밑바닥이 우리가 찾는 손실함수가 최소가 되는 가중치 행렬 W이다.

따라서, 우리가 현재 있는 곳의 높이가 바로 Loss라고 할 수 있다.

 

- 반복적인 방법으로 찾아야 하는 이유

우리가 앞서 2장에서 봤던 NN함수는 f(x), 손실함수, Regularizer가 매우 복잡하여 밑바닥을 한 번에 찾기란 매우 어렵다.

따라서, 우리는 처음에 임의의 시작점에서 점차적으로 반복적인 방법으로 밑바닥을 찾아야 한다.

 

- 2가지 방법 중 첫번째: 무작위 찾기

가장 단순하고 무식한 방법은 무작위로 가보는 것이다. 

가중치 행렬을 임의로 매우 많은 양을 뽑아 찾아내는 방법이다. 터무니 없는 방법으로 무시하자.

 

- 2가지 방법 중 두번째: 기울기를 통해

우리가 골짜기에서 낮은 방향의 경사를 느끼며 그 방향으로 한걸음 한걸음 가는 방법이 있다. 

경사는 서 있는 곳의 기울기이다. 즉, 현재 지점에서의 gradient를 구하는 것인데 그 이유는 gradient는 그 지점에서 가장 많이 올라가는 방향이기 때문이다. 따라서, 현재 지점에서의 gradient에 -를 취해주면 내려갈 수 있는 방향이 되는 것이다.

 

- gradient를 계산하는 힘든 방법: 수치적 gradient

기울기를 구하는 식을 이용하여 가중치 행렬의 한 요소에 작은 값을 더한 다음 달라지는 loss의 차이를 통해 gradient를 구해나간다면 너무 오래걸린다.

하지만, 아래의 미분의 방법을 통해 gradient를 구하였을 때 구한 것이 잘 작동하는지를 확인할 때는 유용하게 쓸 수 있다.

 

- gradient를 계산하는 마법의 헤머 : 미분

gradient를 나타내는 식이 무엇인지 찾아내고 수식으로 나타내어 gradient dW를 계산하는 아주 좋은 방법이다.

W에 임의의 값을 초기화한 후 Loss와 gradient를 계산한 뒤에 가중치를 gradient의 반대 방향으로 업데이트 해 나간다.

 

- 얼만큼 걸어나갈 것인가: 스텝사이즈 learning rate, 가장 중요한 하이퍼파라미터

여기서 얼만큼 걸어나갈 것인가는 매우 중요하다. 아래의 그림을 보자.

출처 : https://medium.com/towards-artificial-intelligence/improve-your-ml-models-training-fc0b7a49da4

- gradient descent보다 더 좋은 성능을 보이는 update rule가 존재한다. (후에 더 배울 예정)

 

- 스텝에 현재 gradient 정보를 이용하는 방법: momentum, Adam optimizer

 

- gradient descent의 간소화 버전 stochastic gradient descent

전체 데이터셋의 gradient와 loss를 계산하려면 매우 오래걸린다.

따라서, Minibatch(작은 트레이닝 샘플 집합)로 나누어 학습을 하여 Loss의 전체 합의 "추정치"와
실제 gradient의 "추정치"를 계산하는 것이다.

이 방법은 Monte Carlo Method에서의 stochastic과 유사하다.

 

 

Linear classifier를 이용해서 SGD로 어떻게 이것을 학습시키는 지에 대한 웹 데모

Multiclass SVM optimization demo (stanford.edu)

 

Multiclass SVM optimization demo

Parameters \(W,b\) are shown below. The value is in bold and its gradient (computed with backprop) is in red, italic below. Click the triangles to control the parameters. Multiclass SVM loss formulation:

vision.stanford.edu

 

 

이미지 특징

 

이미지의 경우 픽셀들을 극좌표계로 바꾸는 것은 의미가 없다. (이미지마다 픽셀 값이 다 다르므로) 
극좌표계로 변환하는 것을 일종의 특징 변환이라 생각한다면 의미가 있다. (같은 대상을 나타낸 것은 비슷한 특징을 가지므로)

 

아래의 3가지 방법은 고전적인 이미지 분류 방법이다.

 

Color histogram

한 필셀은 해당하는 색의 양동이에 넣고 각 양동이에 들어있는 픽셀의 개수를 세는 방법이다.
이는 이미지가 전체적으로 어떤 색인지를 알려준다.

 

Histogram of oriented gradients(HOG)

HOG는 이미지 내에 전반적으로 어떤 종류의 edge정보가 있는지를 나타낸다.

 

 

BOW (Bag of Word)

시각단어의 용어를 다음과 같이 정의하여 분류한다.

1. 수 많은 이미지들을 조각내고 

2. k-means와 같은 알고리즘으로 군집화

 

 

 

요약) image classfier

 

 

과거) Color histogram, BOW, HOG

이미지를 입력받으면 BOW나 HOG와 같은 다양한 특징 표현을 계산하고 계산한 특징들을 한데 모아 연결해서, 추출된 그 특징들을 Linear classifier의 입력으로 사용했었다.

 

문제)

특징이 한번 추출되면 feature extractor는 classier를 트레이닝하는 동안 변하지 않는다.

 

 

현재) CNN, DNN

CNN이나 DNN도 과거의 특징들과 비슷하다.

 

다른 점) 

유일하게 다른점이 있다면 이미 만들어 놓은 특징들을 쓰기 보다는 데이터로부터 특징들을 직접 학습하려 한다는 것이다. 즉, linear classifier만 학습하는 것이 아니라 가중치W도 같이 학습하는 것이다.

 

 

 

 

2021년 1월 18일

 

 

히비스서커스

728x90