[프로젝트 프로토타입] 1. Intro about Back propagation
목차
인공신경망, dense & convolution layer ,CNN 리뷰 - 리뷰를 위한 그림 이미지, 수식
1.1 Gradient-based Learning
- gradient를 활용한 학습 - 코드 , 시각화한 이미지
- learning rate의 필요성 - 코드 , 시각화한 이미지
1.2 Why Jacobians?
- 야코비안 행렬이란? - 야코비안 행렬을 설명하기 위한 행렬식
- 스칼라.벡터,행렬,텐서에서의 derivatives - 각각의 수식
- backpropagation에서 야코비안 행렬을 어떻게 활용할 것인가 - back propagation의 전체 프로세스 이미지
1.1 Gradient-based Learning
딥러닝의 훈련과정을 바라보면, 기본적으로 모두 Gradient(기울기) 관점에서 바라볼 수 있다.
몸무게 대비 키를 예측하는 모델이 있다고 해보자
몸무게 | 61 | 63 | 76 | 80 |
키 | 163 | 167 | 175 | 181 |
-----------------그래프---------------
위 표와 그래프는 몸무게와 키 데이터이다.
우리는 이 데이터를 가지고 특정 몸무게에 따른 키를 예측하는 모델을 만드려한다.
훈련과정은 어떤 식으로 이루어져야할까?
예측모델이 결국 "Y = wX + b"라는 방정식으로 요약된다면,
훈련 과정 역시 방정식의 값을 바꾸는 식으로 진행이 되야할 것이다.
그리고, X와 Y는 고정된 데이터이기에, "y = ax + b"에서 a(계수), b(상수)를 바꾸는 식으로 진행 될 것이다.
몸무게(X) | a(계수) | b(상수) | 예측값(Prediction) | 키(Y) |
[61, 63, 76, 80] | 1 | 1 | [62, 64, 77, 81] | [163, 167, 175, 181] |
[61, 63, 76, 80] | 2 | 1 | [123, 127, 133, 161] | [163, 167, 175, 181] |
... |
-----------------그래프--------------- (몸무게(X)에 대하여 예측값과 실제값(키)와의 오차를 나타내야 함)
위의 표와 같이 훈련 결과를 보면, a, b를 바꿔가며 훈련을 했기에 당연하게도 예측값과 키의 차이가 발생한다.
이 차이, 오차를 줄인다면, 최소로 만든다면 예측 모델이 될 것이다.
우리는 위의 표와 같은 훈련을 수차례 거쳐 얻은 오차를 나타내는 그래프를 그릴 수 있다.
계수, 상수를 X축으로, 오차를 Y축으로 하는 그래프를 그려보겠다.
- 시각화를 위해 계수와 상수, 몸무게 등을 자연수로 함
import numpy as np
import matplotlib.pyplot as plt
W, B = 2.5, 10
# 몸무게
X = np.random.randint(48, 101, (10, ))
print(X)
# 키
Y = W*X + B
print(Y)
w_list = np.linspace(1, 4, 100)
loss_list = list()
for w in w_list:
Pred = w * X + B
loss = np.mean((Pred - Y) **2)
loss_list.append(loss)
fig, ax = plt.subplots(figsize=(10, 20))
ax.plot(w_list, loss_list)
plt.show()
위와 같이 (w, loss) 그래프가 그려진다.
(계수가 결과값에 더 큰 영향을 주기에 계수, 오차 그래프 그리겠음)
훈련은 w이 1 ~ 4로 증가하도록 진행했다.
그래프를 보면 알겠으나, 실제 데이터의 방정식의 계수 2.5일때, 가장 오류가 적다
멀리 돌아왔지만, 이 loss function에서 Gradient이 활용될 수 있다.
------------- w: 2.5 기준으로 왼쪽은 기울기가 음수, 오른쪽은 양수 ------------
훈련과정 속에서 기울기가 음수인지 양수인지를 판단해서
음수이면 오른쪽으로(w 증가), 양수이면 오른쪽으로(w 감소) w를 update 시켜주면 되겠다.
w의 update : w:= w - dw
w - dw : (dw가 음수이면 증가하고, 양수이면 감소한다)
기본적인 개념이 이러하고, 데이터 유형에 따라 효과적으로 훈련하는 방법은 굉장히 다양하다.
- learning rate의 필요성
위에서 설명한 개념대로 모델을 만들어보면, 문제가 발생한다.
w := w - dw
훈련횟수가 부족해 극소값에 다다르지 못하는 경우,
dw가 너무 커 넘어버리는 경우
1.2 Why Jacobians?
- 야코비안 행렬이란?
벡터 미적분에서 "야코비안 행렬"은 다변수 벡터 함수의 도함수 행렬이다.
- 야코비안 행렬을 설명하기 위한 행렬식
- 스칼라.벡터,행렬,텐서에서의 derivatives - 각각의 수식
input 및 함수의 shape 관계 없이 딥러닝 연산 관계를 설명하고, 표현하기 위함
야코비안 행렬식은 야코비안 행렬을 간략화해 표현해주는 기호
- backpropagation에서 야코비안 행렬을 어떻게 활용할 것인가
- back propagation의 전체 프로세스 이미지