경사 하강법(Gradient Descent) 최적화 알고리즘

    기계 학습은 매개변수인 W(weight, 가중치)와 B(bias, 편향)을 찾기 위해서 반복 작업을 하는 것으로 해석할 수 있다. 최적화 알고리즘(optimizer)는 이 매개변수를 찾기 위한 최적화된 알고리즘을 제공하는 것인데 가장 기본적인 것으로는 Gradient Descent가 있다. 이름에서 풍기는 것처럼 기울기를 구한 후, 기울기가 낮은 쪽으로 계속 이동시켜서 극값에 이를 때까지 반복한다. 


    좀 쉽게 이해를 하자면, 우리가 산을 등산한다고 가정을 해보자. 꼭대기로 이동을 한다면 인간은 어떻게 움직일 것인가? 바로 경사가 높아지는 쪽으로 계속 움직여서 정상에 도착을 할 것이다. 반대로 하산한다면, 경사가 낮아지는 쪽으로 움직일 것이다. 이 간단한 원리가 바로 Gradient Descent이다. 



    위와 같은 cost를 가진 모형에서 최소값을 찾기 위해서 어떻게 학습을 해야 할까? 경사 하강법은 단순하게 현재 위치에서 낮아지는 쪽으로 이동을 수행한다. 이를 쉽게 그림으로 표현하자면 아래와 같다.


    source, 

    https://medium.com/@utkarshmani1997/machine-learning-gradient-descent-optimization-87e63eed063c


    gradient descent는 학습률(learning rate)가 기본적으로 높기 때문에 빠르게 학습이 되지만 성능이 좋지 않은 편이다. 최근에 나온 범용적인 알고리즘들(ex: Adam, RMSProp...)이 워낙 좋은 것들이 많고, HW의 성능도 계속 올라가고 있기 때문에 실제 사이트에서 기본적인 gradient descent를 쓰는 일은 많지 않을 것이다. 


    다만 현재 나온 대부분의 optimizer들이 해당 알고리즘으로 변형된 알고리즘들이며, 최적화 알고리즘을 이해하기에 매우 쉬운 개념이다보니 첫번째 optimizer로 기본적인 Gradient Descent를 선정해보았다. 


    텐서플로우에서는 아래와 같이 사용이 가능하다. 

    1
    optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)



    케라스에서는 아래와 같이 사용이 가능하다.

    1
    2
    3
    4
    5
    from keras import optimizers
     
    # All parameter gradients will be clipped to
    # a maximum norm of 1.
    sgd = optimizers.SGD(lr=0.01, clipnorm=1.)




    참고문헌

    https://keras.io/optimizers/


    댓글

    Designed by JB FACTORY