매개변수 갱신


신경망 학습의 목적은 손실 함수의 값을 낮추는 매개변수를 찾는 것이다. 즉, 매개변수의 최적값을 찾는 문제이며, 이러한 문제를 푸는 것을 **최적화(Optimization)**라고 한다.

대표적인 Optimizer 기법

확률적 경사 하강법(SGD)

매개변수의 기울기를 구해, 기울어진 방향으로 매개변수 값을 갱신하는 방법이다.

image.png

W: 갱신할 가중치 매개변수

δL/δW: W에 대한 손실 함수의 기울기

η: 학습률(learning rate)

class SGD:
  def __init__(self, lr=0.01):
    self.lr = lr

  def update(self, params, grads):
    for key in params.keys():
      params[key] -= self.lr * grads[key]

update(params, grads) 메서드가 호출되면서 가중치가 갱신된다.

SGD의 단점

SGD는 단순하고 구현이 쉽지만, 문제에 따라서는 비효율적일 때가 있다.

아래 함수의 최솟값을 구하는 문제를 예로 들어보겠다.

$$ f(x,y) = \frac{1}{20}x^2 + y^2 $$

이 함수를 그래프와 등고선으로 나타내면 다음과 같다.

image.png

이 둘 모두 x축 방향으로 축 늘인 듯한 모습을 보인다.