ML | DL

1. 미분(differentiation)과 경사하강법(gradient descent)

삐롱K 2022. 7. 14. 17:52
728x90
반응형

1️⃣ 미분(differentiation)

  • 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구
  • 편미분(partialdifferentiation)
    • 벡터가 입력인 다변수 함수의 경우 사용

 

2️⃣ 경사하강법(gradient descent)

1) 경사하강법

  • 함수의 극소값의 위치를 구할 때 사용
  • 목적함수를 최소화할 때 사용
  • 이론적으로 미분가능하고 볼록(convex)한 함수에 대해선 적절한 학습률과 학습횟수를 선택했을 때 수렴 보장
  • 한 번 업데이트할 때마다 전체 데이터를 미분해야 함
  • ↔ 경사상승법(gradient ascent) : 목적함수를 최대화할 때 사용

 

2) 파라미터

① 학습률 : 어느 만큼 이동시킬지 정해주는 것
                  미분을 통해 업데이트하는 속도 조절. 조심해서 다뤄야 함.

 

3) 알고리즘

var = init
grad = gradient(var)
while(abs(grad) > eps):
	var = var - lr * grad
    grad = gradient(var)
  • init :시작점
  • lr : 학습률 
  • eps : 알고리즘 종료조건 → 컴퓨터로 계산할 때 미분이 정확히 0이 되는 것은 불가능하므로  eps  보다 작을 때 종료

 

3️⃣ 확률적 경사하강법(stochastic gradient descent)

1. SGD

1) SGD

  • 모든 데이터를 사용해서 업데이트하는 대신 데이터 한개 또는 일부 활용하여 업데이트
  • 볼록이 아닌 목적식은  SGD  를 통해 최적화 가능
  • 따라서 경사하강법보다 머신러닝 학습에 더 효율적
  • 원리 :  미니배치 연산

 

2) 장단점

  • 장점 : 더 빨리, 자주 업데이트를 하는 것이 가능해짐
  • 단점 : 랜덤 데이터를 사용하여 중간 결과의 진폭이 크고 불안정해 보일 수도 있음

 

2. 모멘텀(momentum)

  • ‘관성, 탄력, 가속도’라는 뜻
  • 경사 하강법에 탄력을 더해 주는 것. 오차를 수정하기 전 바로 앞 수정 값과 방향(+, -)을 참고하여 같은 방향으로 일정한 비율만 수정
  • 수정 방향이 양수(+) 방향으로 한 번, 음수(-) 방향으로 한 번 지그재그로 일어나는 현상이 줄고, 이전 이동 값을 고려하여 일정 비율만큼만 효과를 냄.

 

3. 다른 방법

고급 경사 하강법 개요 효과 케라스 사용법
확률적 경사 하강법(SGD) 랜덤하게 추출한 일부 데이터를 사용해 더 빨리, 자주 업데이트를 하게 하는 것 속도 개선  keras.optimizers.SGD(lr = 0.1) 
케라스 최적화 함수 이용
모멘텀(Momentum) 관성의 방향을 고려해 진동과 폭을 줄이는 효과 정확도 개선  keras.optimizers.SGD(lr = 0.1,
                               momentum = 0.9) 
 네스테로프 모멘텀 (NAG) 모멘텀이 이동시킬 방향으로 미리 이동해서 그레이디언트를 계산. 불필요한 이동을 줄이는 효과 정확도 개선  keras.optimizers.SGD(lr = 0.1,
     momentum = 0.9, nesterov = True) 
아다그라드 (Adagrad) 변수의 업데이트가 잦으면 학습률을 적게 하여 이동 보폭을 조절하는 방법 보폭 크기 개선  keras.optimizers.Adagrad(lr = 0.01,
                                  epsilon = 1e - 6) 
※ 참고: 여기서 epsilon, rho, decay 같은 파라미터는 바꾸지 않고 그대로 사용하기를 권장하고 있습니다.
따라서 lr, 즉 learning rate(학습률) 값만 적절히 조절하면 됩니다.
알엠에스프롭 (RMSProp) 아다그라드의 보폭 민감도를 보완한 방법 보폭 크기 개선  keras.optimizers.RMSprop(lr = 0.001,
                  rho = 0.9, epsilon = 1e - 08,
                                      decay = 0.0) 
아담(Adam) 모멘텀과 알엠에스프롭 방법을 합친 방법 정확도와 보폭 크기 개선  keras.optimizers.Adam(lr = 0.001,
               beta_1 = 0.9, beta_2 = 0.999, 
              epsilon = 1e - 08, decay = 0.0)
728x90
반응형