일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이토치
- C언어 공부
- 모두의 딥러닝
- object detection
- 영상처리
- 미디언 필터링
- matlab 영상처리
- pytorch zero to all
- c++
- 케라스 정리
- c++공부
- 골빈해커
- 파이토치 김성훈 교수님 강의 정리
- Pytorch Lecture
- 딥러닝 스터디
- MFC 프로그래밍
- 딥러닝
- c언어 정리
- 해리스 코너 검출
- 김성훈 교수님 PyTorch
- 파이토치 강의 정리
- 딥러닝 공부
- TensorFlow
- c언어
- 모두의 딥러닝 예제
- 가우시안 필터링
- tensorflow 예제
- pytorch
- 팀프로젝트
- 컴퓨터 비전
- Today
- Total
ComputerVision Jack
PyTorch Lecture 03 : Gradient Descent 본문
Gradient Descent
x_data | y_data |
1 | 2 |
2 | 4 |
3 | 6 |
이번 강의에선 저번 시간의 예제를 사용하여 Gradient Descent 알고리즘에 대해 설명해 주셨습니다.
위의 예제는 간단한 예제로, 우리는 y = x * w 식에 대해 w를 쉽게 추론할 수 있었습니다. 하지만 이번엔 w에 대해 비용그래프의 기울기를 감소시키는 방향으로 정의내리려고 합니다.
저번 시간의 예제에 해당하는 손실함수 그래프 입니다.
그래프에서 알 수 있듯 w가 2.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에 가깝게 수렴하는 것을 확인할 수 있습니다.
'DeepLearning > Pytorch_ZeroToAll' 카테고리의 다른 글
PyTorch Lecture 07 : Wide and Deep (0) | 2020.10.20 |
---|---|
PyTorch Lecture 06 : Logistic Regression (0) | 2020.10.12 |
PyTorch Lecture 05 : Linear Regression in the PyTorch way (0) | 2020.10.07 |
PyTorch Lecture 04 : Back-propagation and Autograd (0) | 2020.10.06 |
PyTorch Lecture 02 : Linear Model (0) | 2020.09.15 |