머신러닝/미니프로젝트

[프로젝트 프로토타입] 1. Intro about Back propagation

doyou1 2021. 10. 22. 17:30
반응형

목차

인공신경망, 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의 전체 프로세스 이미지

반응형