티스토리 뷰

어떻게 자동적으로 W1, W2, b1, b2를 학습시킬 수 있을까?

 

gradient descent 알고리즘을 구현하기 위해서는 어떤 점에서의 미분값을 구하기 위해 미분 계산이 필요하다.

그런데 neural network로 가면서 노드가 여러개이므로 미분이 매우 복잡해진다. 미분값을 구한다는 것은, 최종적인 결과가 Y bar이고 초기값이 x1이라고 했을때, x1이 Y bar에 미치는 것을 알아야한다. 그리고 x1뿐만 아니라 각 노드에서 Y bar에 미치는 영향(미분값)을 알아야 각각의 weight을 조절할 수 있는데 계산량이 너무 많다.

그래서 minsky 교수는 불가능하다고 말했다.

 

이것은 1982년과 86년에 폴과 힌튼 교수에 의해 풀리게 되는데, 결과의 error를 보고 뒤에서부터 앞으로 계산을 하여 미분값과 실제로 뭘 조정해야 하는지 계산하는 방법이다.

 

실제로 이 알고리즘이 어떤식으로 풀리는지 계산해보자.

우리는 다음과 같은 식에서 w가 f에 미치는 영향, x가 f에 미치는 영향, b가 f에 미치는 영향을 알고 싶은 것이다.

방법은 2가지 방법으로 진행한다.

첫번째는, forward에 실제 값(학습데이터)을 입력시키고, 두번째로는, backward에서부터 미분 계산을 한다.

미분 값의 의미가 뭘까?

b에서의 미분값이 1이라는것은 Y bar에 미치는 영향이 1:1이라는 의미이다. 그리고 w에서의 미분값이 5라는 것은 5:1이라는 것이다.

 

이번에는 복잡한 경우가 있다고 생각해보자.

f는 최종 값이고 x는 최종적인 입력이라고 해보자.

먼저, 가장 마지막에 잇는 노드를 계산해보면 a가 f에 미치는 영향을 알 수 있다. 이런식으로 Back propagation을 계속 진행해가면, 노드 앞에 있는 값이 뒤에 있는 값에 어떤 영향을 미치는지 알 수 있다. 즉, local 미분값들을 구할 수 있다. 이런 로컬 미분값들을 쭉 곱하면 최종 값 f에 대해 최종 입력 값 x에 대한 미분값을 구할 수 있다.

 

 

아무리 복잡한 식도 다음과 같이 미분을 하면 쉽게 할 수 있다.

 

그래서 Tensorflow에서는 모든것이 그래프로 표현이 된다. 텐서플로우에서 hypothesis가 주어지면 각 성분들을 모두 그래프로 갖고 있다.

 

Cost 함수도 마찬가지다. 이렇게 표현한 이유는 Tensorflow가 미분가능하도록 하기 위함이다. (Back propagation을 구하기 위함). 실제 텐서플로우에서는 다음과 그래프를 볼 수는 없다. TensorBoard를 사용해 본 것이다.

 

이런 방법을 사용하면 기계적으로 아주 단순한 방법으로 아무리 복잡해도 back propagation을 사용하여 미분값을 구할 수 있었다.

 

69년에 민스키 교수가 불가능하다고 했던 것을 이렇게 해결해 보았다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함