관리 메뉴

ComputerVision Jack

PyTorch Lecture 03 : Gradient Descent 본문

DeepLearning/Pytorch_ZeroToAll

PyTorch Lecture 03 : Gradient Descent

JackYoon 2020. 9. 16. 14:44
반응형

Gradient Descent

x_data y_data
1 2
2 4
3 6

이번 강의에선 저번 시간의 예제를 사용하여 Gradient Descent 알고리즘에 대해 설명해 주셨습니다.

위의 예제는 간단한 예제로, 우리는 y = x * w 식에 대해 w를 쉽게 추론할 수 있었습니다. 하지만 이번엔 w에 대해 비용그래프의 기울기를 감소시키는 방향으로 정의내리려고 합니다.

 

손실함수

저번 시간의 예제에 해당하는 손실함수 그래프 입니다. 

그래프에서 알 수 있듯 w2.0값이 되는 부분에서 손실(비용)이 최소 값을 갖습니다.

이제 이 그래프에 대해 경사 하강법 알고리즘을 적용해 보겠습니다.

교수님의 강의 내용

예를 들어 w가 2가 아닌 4라고 생각해본다면 비용은 최소값이 아닌 어떤 특정한 값을 갖게 됩니다.

특정한 값을 갖게 된다면 2차함수이기 때문에 그 값에 대해 기울기 값이 존재하게됩니다.

그 기울기 값을 미분을 통해 깍아 내려간다면 기울기가 0 또는 최소가 되는 지점의 w의 값을 알 수 있을 것입니다.

기울기 재정의

따라서 우리는 해당 w에 대해 다음의 수식으로 기울기를 재정의해 나아갈 수 있습니다.

여기서 a(알파)는 경사가 내려갈 정도를 의미한다고 생각하면 됩니다. (learning rate)

또한 loss 함수의 경우 (x * w - y) ^2 이므로 해당 값을 미분하면 됩니다.

 

그럼 경사가 내려가면서 w값에 변화가 생기고 w값의 변화에 따라 MSE 오차가 감소하는 것을 확인할 수 있습니다.

[02. manual_gradient.py]

x_data = [1.0, 2.0, 3.0]

y_data = [2.0, 4.0, 6.0]

# 마찬가지로 해당 실습에 필요한 데이터셋을 정의합니다.

 

w = 1.0

# w값이 2가 이상적이지만 우리는 경사 하강법을 통해 알아보려하기 때문에 임의의 랜덤 값으로 초기화 합니다.

 

def forward(x):

    return x * w

# 우리가 실습에 사용할 모델(수식)을 forward 함수로 생성합니다.

 

def loss(x, y):

    y_pred = forward(x)

    return (y_pred - y) * y_pred - y)

# 다음은 모델을 토대로 손실 함수를 loss로 생성합니다.

 

def gradient(x, y):

    return 2 * x * (x * w - y)

# 기울기 미분 함수를 정의합니다. 위에 제시한 (x * w - y)^2의 미분 함수입니다.

 

print('Prediction (before training)', 4, forward(4))

# 경사하강법을 통해 학습이 진행되기 전에 4의 값을 넣어 결과를 출력합니다. 당연히 4 * w(1) = 4가 나옵니다.

 

for epoch in range(10):

    for x_val, y_val in zip(x_data, y_data):

        grad = gradient(x_val, y_val)

        w = w - 0.01 * grad

        print('\tgrad : ', x_val, y_val, round(grad, 2))

        l = loss(x_val, y_val)

    print('progress : ', epoch, 'w = ', round(w, 2), 'loss = ', round(l, 2))

# 10번의 반복동안 우리는 기울기를 하강시키며 w값의 변화함을 보고 그 때의 MSE값을 확인할 수 있습니다.

 

print('Predicted score (after training)', '4 hours of studying : ', foward(4))

# 경사하강법을 통해 변화된 w를 통해 4의 값을 넣었을때, 8에 가깝게 수렴하는 것을 확인할 수 있습니다.

경사 하강법 적용

 

 

반응형
Comments