ReLU에 대한 설명 이전에
ReLU의 등장 배경은 바로 Backpropagation 룰 때문이다.
Layer의 수가 많으면 많을 수록 학습된 결과에 대해서 정확도가 높아야하는데
오히려 정확도가 떨어진다는 것이다. 이유는 경사에 대한 기울기가 사라진다는 것인데,
시그모이드 함수를 사용할 경우 결괏값에 대해서 Layer가 많을 수록 0에 수렴해진다는 것이다.
시그모이드의 값이 항상 0보단 크고 1보단 작은 값으로
Layer에 대한 결괏값을 또 다시 시그모이드에 대한 인풋으로 넣으면 값이 너무 작아진다는 것이다.
즉, 시그모이드의 1보다 작은 결괏값을 또 다음 계층의 시그모이드에 인풋으로 넣고 그 결괏값을 또 다음 계층의 시그모이드 인풋을 넣고 하는 행위를 많이 하다보면 값이 제대로 성립되지 않는다는 것이다.
그래서 나타난 것이 ReLU이다.
ReLU가 아주 간단한게, 0보다 작으면 0에 수렴하고
0보다 크면 끝이 없이 크게 하는 것이다.
파이썬 코드로 구현하는 방법은 다음과 같다.
# input place holders
X = tf.placeholder(tf.float32, [None, 784])
Y = tf.placeholder(tf.float32, [None, 10])
# weights & bias for nn layers
W1 = tf.Variable(tf.random_normal([784, 256]))
b1 = tf.Variable(tf.random_normal([256]))
L1 = tf.nn.relu(tf.matmul(X, W1) + b1)
W2 = tf.Variable(tf.random_normal([256, 256]))
b2 = tf.Variable(tf.random_normal([256]))
L2 = tf.nn.relu(tf.matmul(L1, W2) + b2)
W3 = tf.Variable(tf.random_normal([256, 10]))
b3 = tf.Variable(tf.random_normal([10]))
hypothesis = tf.matmul(L2, W3) + b3
ReLU외에 비슷한 함수는 뭐가 있을까?
Sigmoid : 0보단 크고 1보단 작은 값
tanh : -1보단 크고 1보단 작은 값
ReLU : 0보단 큰 것
ELU : 원하는 값으로 지정할 수 있음
전체적인 결과는 다음과 같다.
'[프로그래밍] > 모두를 위한 딥러닝' 카테고리의 다른 글
[모두를위한딥러닝] Dropout과 앙상블 (1) | 2019.08.21 |
---|---|
[모두를위한딥러닝] Weight 초기화를 잘해보자 (0) | 2019.08.21 |
[모두를위한딥러닝] 텐서보드(TensorBoard)로 딥러닝 해보기 (0) | 2019.08.21 |
[모두를위한딥러닝] XOR 문제를 딥러닝으로 풀기 (0) | 2019.08.21 |
[모두를위한딥러닝] 텐서(Tensor) 연산 기본 사용 명령어 (0) | 2019.08.20 |