본문 바로가기

머신러닝 & 텐서플로 & 파이썬

Sigmoid , ReLU

반응형


Sigmoid 함수는 주어진 값을 0~1사이의 값으로 변환 시켜주는 함수입니다.


머신러닝에서 많이 사용하는 함수입니다. 값이 커지거나 작아지거나 할때 가중치가 너무 무리하게 커지는 것을 방지 하기 위한 용도로 사용합니다.


sigmoid 함수 : 

 



입력-- 입력 레이어  -- 히든 레이어 1---- 히든 레이어 2 ------- 히든 레이어 N -- 출력 레이어 -- 출력


레이어 

  x = ax*b 

  x' = sigmoid(x) 


  0<x'<1


아주 많이 사용하는 함수였죠.!!!


그러나 Back propagation 시에 sigmoid 함수를 사용하게 되면, 깊이가 깊은 중첩된 레이어에서는 좋은 결과를 내지 못하게 됩니다.


이유는 sigmoid 함수를 통하게 되면 어떤 값이든 0~1 사이 값이 됩니다.

예를 들면 -10 이라는 결과를 sigmoid를 통과 시키고 나면 0.001 과 같이 0에 가까운 값이 되어 버립니다.

0에 가까운 값이 나오면, 이를 이용해서 어떤 입력에 곱해졌을때 영향이 매우 미미해지게 되죠.



2006년까지 이 문제가 풀리지 않았습니다.


하지만 ReLU의 등장으로 이 문제를 극복해냈습니다.


ReLU

Rectified Linear Unit


알고리즘 : x = max(0, x)


0보다 작은 값은 0

0보다 큰 값은 계속 커짐


큰값, 즉, 영향을 많이 미치는 값은 그 영향력을 그대로 이전 함수에 전달합니다.


ReLU 함수를 사용함으로 해서 영향력이 큰 변수 값들은 계속 다음 레이어에 큰 영향을 미치도록 만들었고,

Back propagation 될때도 변화량이 크게 되어 깊이가 깊은 Deeeeeeeeep learning에서도 좋은 결과를 얻게 되었습니다.




두 함수의 사용법은 아래와 같습니다.


L1 = tf.sigmoid(tf.matmul(X,W1) + b1)   <- sigmoid

L1 = tf.nn.relu(tf.matmul(X1,W1) + b1)   <- ReLU



이외의 다양한 Activation 함수들이 있는데 다음과 같습니다.


Activation Function

Sigmoid

ReLU

Leaky ReLU

ELU

Maxout

tanh



'머신러닝 & 텐서플로 & 파이썬' 카테고리의 다른 글

drop out 과 앙상블(ensemble)  (0) 2018.01.26
초기값  (0) 2018.01.26
tensorboard: 학습 모니터  (0) 2018.01.26
데이타 프로세싱(data processing)  (0) 2018.01.25
머신러닝 : Overfitting (오버피팅)  (0) 2018.01.25