[모두의 딥러닝] Sigmoid보다 ReLU가 더 좋아
📗강의노트/모두의 딥러닝

[모두의 딥러닝] Sigmoid보다 ReLU가 더 좋아

728x90
반응형

Sung Kim 님의 "모두의 딥러닝" 강의노트입니다

좋은 강의 감사드립니다!

https://www.youtube.com/watch?v=mQGwjrStQgg&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&index=5


Active가 되는 기준이 있음!

위와 같이 하면 2단 Network가 만들어 지게 된다.
-1.0 , 1.0 은 W의 Minval , Maxval을 말한다 [-1.0,1.0) 으로 1은 포함 x

첫 x의 값이 2개라는 것을 알 수 있다. 그 다음은 사용자 설정에 따라 정할 수 있다, 제일 마지막 출력은 정해져있다. 0이나 1일경우 하나의 값으로 나오기에 1로 설정한다. 
-> 처음과 마지막의 숫자만 신경쓰고 나머지는 사용자 임의로 설정한다. 

bias는 출력값을 그대로 가져오면 된다. 

맨 앞을 초기 입력에서 보여서 "Input Layer
사이에 보이지 않는 것을 “Hidden Layer
마지막 출력값에 대한 것을 “Out Layer” 라고 부른다 

복잡한 deep network를 만들 때 tensorboard를 통해 잘 파악할 수 있다. 
With tf.name_scope(‘’) as scope: 를 붙임으로써 진행

9단으로 연결을 했는데도 accuracy가 좋지 않음!


사용하다보니 2단,3단에서는 잘 학습이 되는데 복잡한 9,10단이 될수록 학습이 안되었다.

Backpropagation을 계산하기 위해서 하나씩 미분하고 값들을 곱했는데,

-> 작은 sigmoid gate를 통과하기 때문에 1보다 작은 값들이 chain rule에 적용되어 계속 곱해진다. 그러면 이 값이 굉장히 작은 값이 된다. Ex. 0.00000xx  
그 결과로 최종 미분값은 0에 가까운 값이 된다. 이것이 문제이다. 처음의 입력이 영향을 미치지 못한다는 것이다. 
=> 이러한 현상을 “Vanishing Gradient”라고 부른다.  

최종단 근처의 경사(기울기)는 나타나지만 끝으로 갈수록 경사도가 사라지게 된다. 이 말은 학습하기 굉장히 어렵다는 것이고, 영향을 미치지 못하기 때문에 예측에도 도움이 되지 않는다!!

sigmoid가 아닌 다른 것을 썼어야 했음!
1 보다 작은 값을 계속 곱한 것이 문제이다.

이를 해결하기 위해서 간단하지만 ReLU라는 function을 사용한다.
0보다 작을 경우 X -> 0보다 클 경우 갈 때까지 가는 함수이다. 

ReLU : Rectified Linear Unit 

Activation function 에서 Sigmoid 대신에 ReLU를 넣으면 된다!

이를 다시 ReLU를 이용하여 9단의 Layer를 쌓아본다. 
하지만 마지막 Hypothesis를 세울 때는 Sigmoid를 사용해야 한다. 왜냐하면 값이 0과 1사이에서 출력이 되어야하기 때문이다. 

매우 좋은 성능을 보이는 것을 알 수 있다. 


ReLU를 쓰는게 cost가 더 빨리 떨어진다!


Leaky ReLU는 기존의 ReLU가 너무 0에서 끊었다고 생각해서 0.1을 0보다 작은 값 앞에 곱해주는 것이다.

ELU는 앞의 값을 0.1로 고정하지 말고 바꾸자! 

Maxout도 조금 다른 형태이다

tanh는 sigmoid를 가져오되 한계를 극복하기 위해 만들어졌다. 기존의 sigmoid가 0을 중심으로 있지 않기 떼문에 0을 중심으로 -1 ~ 1 로 이동한 것이다.



sigmoid만 cost의 값이 수렴이 안되는 모습을 보인다. 







728x90
반응형