[CS231n] lecture 3. Optimization: Gradient Descent 강의 요약

포스팅을 시작하기에 앞서 수준 높은 강의와 강의 자료를 무료로 배포해주신 Stanford University CS231n 교수진께 감사의 말씀을 드립니다. 
온라인 강의: https://www.youtube.com/watch?v=vT1JzLTH4G4&list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk 
강의 자료: https://cs231n.github.io

Optimization

목표: Loss function을 통해 Weight vector의 품질을 점차 좋아지게 만든다.

 

방법론 1: Random Search

방법론 2: Random Local Search

방법론 3: Gradient Descent

-      Numerical Gradient

-      Analytic Gradient

-      Mini-batch Gradient descent

 

방법론 1: Random Search

알고리즘: Weight 벡터를 매 번 랜덤으로 생성한 후 더 좋은 품질을 보이는 Weight 벡터를 저장한다.

장점: 코드 작성이 쉽다.

단점: 최적의 결과를 보장할 수 없다. 컴퓨터 자원 남용

 

방법론 2: Random Local Search

알고리즘: k*(Weight vector)의 성능이 더 좋다면 이를 저장한다.

장점: 코드 작성이 쉽다.

단점: 지역해로 빠질 가능성, 컴퓨터 자원 남용

 

방법론 3: Gradient(미분)

아이디어: 일반적으로 어떤 문제의 최대 최소 문제는 미분을 통해 접근한다.

알고리즘: 미분은 접선의 기울기를 뜻하므로 W에 따라 Loss function을 미분하면 Loss function의 접선의 기울기를 알 수 있다. 이를 통해 Loss function의 값을 가장 빠르게 줄일 수 있는 지점을 찾을 수 있다.

 

Numerical Gradient

컴퓨터를 통해 극한값을 계산할 수 없으므로 무수히 작은 수(ex. h= 0.00001)를 통해 미분식을 대입한다.

장점: 함수의 미분을 몰라도 코드 작성이 가능하다.

단점: 시간이 무수히 많이 걸린다. 엄밀한 의미에서 미분이 아니다(에러 유발 가능).


Analytic Gradient.

설계자가 수학적 개념을 통해 Loss functionW로 편미분

(1은 괄호 안의 수식이 0보다 클 경우 1, 그 외의 경우는 0을 반환하는 indicator function)

장점: 정확하다. 빠르다

단점: 코드 작성 시 설계자가 오류에 빠지기 쉽다. 

-> Numerical Gradient를 통해 Analytic Gradient를 디버깅한다


Gradient Descent.


미분한 결과에 따라 step size(변수)에 따라 weight vector를 갱신한다.

(weight = weight – step_size*weights_grad인 이유는 loss function의 값을 줄이기 위해서다.)

 

Mini-batch Gradient descent.

일반적으로 데이터의 개수는 neural network에서 무수히 많기 때문에 모든 데이터를 통해 Gradient를 계산하는 것은 너무 많은 메모리와 시간을 소요한다. 따라서 training 데이터의 부분집합을 통해 gradient를 계산한다.



이 블로그의 인기 게시물

[CS231n] Features 과제(Assignment)

[minGPT]play_image 설명

[CS231n] lecture 4. backpropagation 강의 요약