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 |