AI

Gradient Descent?

전자둥이 2022. 7. 24. 15:16
반응형

안녕하세요.

Gradient Descent에 대해서 공부하기위해서 조사한 자료를 요약하고자 합니다.

 

Gradient Descent

Gradient descent는 한국말로 경사하강법이라고 불립니다. 

머신러닝에서 Gradient Descent는 모델의 파라미터값들을 업데이트하기 위해서 사용됩니다.

 

어떤방식으로 파라미터값들을 업데이트 하는지 설명해드리겠습니다.

 

Introduction

예시를 들어볼게요.

3차원 그래프 그림

다음과 같이 3차원 그래프 그림이 있다고 가정을 해볼게요. 여기서 우리가 원하는 것은 오른쪽 위에보이는 높은 지형(높은 값을 가진 지형이라고 가정할게요) 에서 가장 낮은 지형(진한 파랑 -> 낮은 값을 가지고 있는 지형)으로 가고자 하는 것으로 하겠습니다. 그리고 그림에서 화살표는 해당 위치에서 음의 기울기방향(높은 지형에서 낮은 지형)으로 그려져 있는 형태입니다.

 

자 이제 오른쪽 위에있는 높은 지형에서부터 낮은 지형으로 가기 위해 가는 것을 가정해보겠습니다. 그러기 위해서는 Negative gradient로 방향을 지정하고 한 발자국 진행하게 될 것이고 그 위치에서 다시 Negative gradient 방향으로 한 발자국 진행하게 될 겁니다. 이러한 과정을 반복적으로 진행하다보면 더이상 Negative gradient가 존재하지 않는 낮은 곳으로 가게 될 것입니다. -> 이 낮은 곳을 local minimum 이라고 부릅니다. (밑에 Gradient Descent 그림을 참고하시면 이해하시는데 도움이 됩니다.)

 

Gradient Descent 그림

Learning rate

원하는 goal를 향해 갈 때 한번에 얼만큼 갈지를 정하는 요소가 learning rate입니다. 

Learning rate가 높으면 원하는 goal를 향해 더 빨리 갈 가능성이 높아지겠지만, 대신 자칫하여 global minimum을 지나가버리면서 오버슈팅할 위험이 있습니다.

Learing rate가 낮으면 조금 더 정확하게 goal를 향게 조심스럽게 다가갈 수 있겠지만, 시간이 많이 걸리며 자칫하여 local minimum에 갇힐 수도 있습니다.

 

Cost function

cost function에 대해서 설명하기 앞서,

loss function 과 cost function의 차이를 알고 있어야 합니다.

저도 이 글을 작성하기 전까지는 cost function 과 loss function 은 일맥상통한 단어라고 생각했습니다. 하지만 미묘하게 차이점이 있습니다.

- loss function : 하나의 데이터에 대한 실제값과 예측값의 차이

- cost function: 전체 데이터의 오차, Loss function의 평균

이제 cost function 이 무엇을 뜻하는지 아실거라 생각합니다.

Step-by-step

이제 새로운 비용 함수(cost function)을 사용하여 경사 하강법을 해보겠습니다.

비용 함수(cost function)에는 weight와 bias 두 개의 파라미터가 있습니다. 따라서 경사 하강법을 사용하여 계산할 때 이 두개의 파라미터에 대하여 각각 계산 해줘야 합니다.

 

*Math

cost function:

cost function

gradient can be calculated as :

 

Code

def update_weights(m, b, X, Y, learning_rate):
    m_deriv = 0
    b_deriv = 0
    N = len(X)
    for i in range(N):
        # Calculate partial derivatives
        # -2x(y - (mx + b))
        m_deriv += -2*X[i] * (Y[i] - (m*X[i] + b))

        # -2(y - (mx + b))
        b_deriv += -2*(Y[i] - (m*X[i] + b))

    # We subtract because the derivatives point in direction of steepest ascent
    m -= (m_deriv / float(N)) * learning_rate
    b -= (b_deriv / float(N)) * learning_rate

    return m, b

 

 

 

* 참고 문헌 (Reference)

https://ml-cheatsheet.readthedocs.io/en/latest/gradient_descent.html

 

Gradient Descent — ML Glossary documentation

Gradient descent is an optimization algorithm used to minimize some function by iteratively moving in the direction of steepest descent as defined by the negative of the gradient. In machine learning, we use gradient descent to update the parameters of our

ml-cheatsheet.readthedocs.io

https://ruder.io/optimizing-gradient-descent/

반응형