딥러닝의 문제중 하나가, 학습의 단계가 많아 질수록 학습하는 내용이 더 나빠 질 수 있다는 점이 있었다
그이유를 자세히 알아보고, 해결법을 공부해보자,
딥러닝의 경우 이런식으로 입력값을 받고 각층을 올라가는 구조이다, 그러다 보면 결과값이 나오고 하지만 이과정에서 문제가 하나 발생하게 되는대
원래의 개념은 뒤로 돌아가면서 ( 미분값을 곱하기 때문에 가능 )
쉽게 W 값을 고쳐나갈수 있다는 것이었다, 하지만
뒤로 갈수록 값이 애매 모호해지는 경향이 있었다
이유는 sigmoid 를 사용 했기 때문이다!
가장 강력할것만 같았던 sigmoid 때문에 학습이 제대로 이루어 지지 않았던 것
sigmoid는 0~1 의 값으로만 나오기 때문에 결국 항상 1보다 작은수를 곱해 나간다,
그러다보면 값이 0에 가까워지고 결국은 학습자체가 0을 곱해버리기 때문에
제대로 이루어지지 않았다
그래서 나온 방법이
바로 ReLU 이다
위의 그래프와 같이 ReLu는 0 이상일때는 계속 커지는 값으로 변경 시켜 버리기 때문에
1보다 큰수가 나오게되고 결국은 학습이 잘되는 결과를 보여준다.
두번째 문제는 초기값을 잘 주는 방법이다.
원래 항상 랜던값을 주었던 초기값( W ) 를 잘주는 방법에 대해서 알아보자,
만약 초기값에 0을 넣게 되면 어떻게 될까?
이 이후의 러닝에서 모든것들이 0이 되어버리기 때문에 학습 자체가 불가능하다,
그럼 어떤 값을 넣어야 할까? 에서 비롯된 방법이 RBM이다
위와같이 Forward 와 Backward 의 방법을 이용해서
각 레이어마다 입력값을 비교해서 조절해 W 를 구하는 값이다
즉 앞에서 뒤로 갔을때 값, 뒤에서 앞으로 왔을때 값 등을 비교해서 최고의 초기값을 넣는 방법이다.
매번 그 방법을 하면 계산하는 시간이 오래 걸리게 된다 ( 매번 왔다 갔다 ),
그래서 나온 방법이 위와 같은 방법인대
각각 2010, 2015년에 나온 방법이다.
각 방법의 차이는 /2 가 들어갔느냐 마느냐인대
성능의 차이가 2015년의 방법이 좋다라는 것이다.
즉 위의 방법을 이용해서 초기값을 설정하면 조금더 나은 딥러닝을 할 수 있게 된다.
이로써 두가지의 문제를 해결했다.
'딥 러닝' 카테고리의 다른 글
07. CNN 실습01 ( 기본적으로 레이어 나누는 법) (0) | 2017.12.28 |
---|---|
06.CNN ( Convolutional NN ) (0) | 2017.12.27 |
04. XOR tensorflow 실습, 딥러닝 (0) | 2017.12.12 |
03. XOR의 문제, 해결방법 (0) | 2017.12.12 |
02. Tensorflow 함수 다시 복습!! (0) | 2017.12.10 |
댓글