인공지능

[모두의 딥러닝] lec 09-2. Neural Network: 딥네트웍 학습시키기 (backpropagation)

여니두 2019. 5. 7.

W, b 값을 어떻게 자동적으로 기계학습시킬 수 있을까?

Gradient descent 알고리즘

- 이 알고리즘의 구현을 위해서는 어떤 점에서의 미분값(기울기)이 필요함

 

--> NN으로 가면서 이 미분값 계산이 복잡해짐.

- x1이 Yhat에 끼친 영향을 알아야 W 값을 조정할 수 있을 것.

- 또한 각각의 점에서의 입력값들이 Yhat(결과)에 끼친 영향을 알아야 함.

 

문제해결: Backpropagation 알고리즘

- 출력값, 예측값을 비교하여 거기에서 나온 오류(error, cost)를 뒤에서부터 앞으로 전달하여 미분값과

어떤 것을 조정할 지 알려주는 것

 

예제: Back propagation (중요: chain rule (합성함수))

- 이 그래프를 통해 W, x, b가 f에 미치는 영향을 알아볼 것

- 방법 2가지로 진행

1. forward propagation: 실제 어떤 학습 데이터의 값을 가져와서 입력

2. backward: 실제 미분값 계산

 

- 왜 미분을 하냐?

: 아무리 복잡한 것들이 있더라도 미분하는 데 필요한 것은 이 편미분한 값들임.

--> 어떤 복잡한 것들이라도 미분가능

 

* chain rule

 

- 미분의 의미

ex) 1: b가 f에 미치는 영향이 1:1로 비례

ex) 5: w가 5배 증가하면 f도 5배 비례하게 증가

 

- 복잡한 경우

1. 제일 먼저 마지막에 있는 노드를 계산 (이유: 'back' propagation)

a가 f에 미치는 영향, b가 f에 미치는 영향...

2. g의 편미분 값을 알고있다고 가정

3. x가 f에 미치는 영향 계산 (x는 최종 입력값)

x가 g에 미치는 영향은 알 수 있음. (이유: operation을 미리 알고 있기 때문. (편미분))

--> chain rule 적용 

 

- 최종 입력값부터 출력값까지 많은 gate가 있다고 해도 최종 출력값간의 미분값을 구할 수 있게 된다.

 

Sigmoid

- 힘들게 미분하지 말고 그래프를 그려보기

- 1/x 의 미분값을 그 뒤의 미분값과 곱하고, 결과 값을 그 뒤의 미분값과 곱하고 ...

- 이런 방법으로 아무리 복잡한 식도 처음 미분값만 알고 있다면 구할 수 있다.

 

 Back propagation in TensorFlow: TensorBoard

- 따라서 텐서플로우에서는 모든 것이 그래프이다.

- cost 함수의 미분값

: 각각을 다 그래프로 만듦

==> 이유: TensorFlow가 이것을 다 미분하여 back propagation을 하기 위해서이다.

- 이러한 그래프들은 TensorBoard 라는 곳에서 볼 수 있다.

 

==> 이런 방법을 이용하면 아무리 복잡해도 back propagation을 이용하여 미분값(기울기)를 구할 수 있다.

 

 

 

댓글