[정리] 모두를 위한 딥러닝 10 - ReLU & 초기값 정하기 by 김성훈
강의 웹사이트 : http://hunkim.github.io/ml/
Lec = 강의 / Lab = 실습
시그모이드 결과값은 0<f(x)<1 이기 때문에 이를 체인룰에 따라 계속 곱하다보면 (레이어가 많으면)
0.01 * 0.03 * 0.2 와 같은 형태가 되기 때문에 결국 한없이 0 에 가까워지게 됩니다.
즉, 입력값 X 가 결과값 f(x), Y 에 미치는 영향이 거의 없게 됩니다.
따라서, 학습을 깊게 여러번 하면 할수록 에러가 커지는 현상이 일어납니다. 이건 오버피팅 Over Fitting 과 다릅니다.
이를 극복하기 위한 함수가 렐루 ReLU 입니다. (위 그림에서 검정색이 시그모이드 sigmoid, 자주색이 렐루 ReLU 함수)
렐루는 0 이하는 0 으로, 그 이상값은 자기 자신의 값을 갖는 함수입니다.
이 두가지 함수를 비교하기 위해 텐서보드 tensorboard 를 이용해보겠습니다.
텐서보드로 분석할 수 있도록 로그를 남긴 다음, 텐서보드를 띄워서 웹브라우저로 확인하면 됩니다.
생각보다 메모리나 CPU 를 많이 사용하는, 좀 무거운 라이브러리입니다.
(텐서보드 이미지 추가)
정확도 비교.
1번 방법 = 시그모이드를 사용하여 레이어 3개 ~ 10개 사용하기.
# weights & bias for nn layers
with tf.name_scope("L1") as scope:
W1 = tf.Variable(tf.random_normal([784, 256]))
b1 = tf.Variable(tf.random_normal([256]))
L1 = tf.sigmoid(tf.matmul(X, W1) + b1)
w1_hist = tf.summary.histogram("weights1", W1)
b1_hist = tf.summary.histogram("biases1", b1)
layer1_hist = tf.summary.histogram("L1", L1)
with tf.name_scope("L2") as scope:
W2 = tf.Variable(tf.random_normal([256, 256]))
b2 = tf.Variable(tf.random_normal([256]))
L2 = tf.sigmoid(tf.matmul(L1, W2) + b2)
w2_hist = tf.summary.histogram("weights2", W2)
b2_hist = tf.summary.histogram("biases2", b2)
layer2_hist = tf.summary.histogram("L2", L2)
이런 형태로 레이어를 3개, 10개 만듭니다.
2번 방법 = 렐루 relu 를 사용하여 레이어 3개 ~ 10개 사용하기.
# weights & bias for nn layers
with tf.name_scope("L1") as scope:
W1 = tf.Variable(tf.random_normal([784, 256]))
b1 = tf.Variable(tf.random_normal([256]))
L1 = tf.nn.relu(tf.matmul(X, W1) + b1)
w1_hist = tf.summary.histogram("weights1", W1)
b1_hist = tf.summary.histogram("biases1", b1)
layer1_hist = tf.summary.histogram("L1", L1)
with tf.name_scope("L2") as scope:
W2 = tf.Variable(tf.random_normal([256, 256]))
b2 = tf.Variable(tf.random_normal([256]))
L2 = tf.nn.relu(tf.matmul(L1, W2) + b2)
w2_hist = tf.summary.histogram("weights2", W2)
b2_hist = tf.summary.histogram("biases2", b2)
layer2_hist = tf.summary.histogram("L2", L2)
이런 형태로 레이어를 3개, 10개 만듭니다.
두 소스에서 sigmoid / relu 이 부분만 다릅니다.
4개의 소스를 비교해보면
|
Sigmoid 3 Layer |
ReLU 3 Layer |
Sigmoid 10 Layer |
ReLU 10 Layer |
정확도 |
94.21 % |
95.87 % |
94.31 % |
93.00 % |
엠니스트 MNIST 는 위 4가지 중에서 렐루 3 레이어로 만들때 가장 좋은 결과가 나왔습니다.
즉, 너무 많은 레이어는 결과가 더 나빠지기도 합니다.
그리고, 초기값 잘 설정하는게 중요합니다.
(정리중)
RBM : Restricted Boatman (Boltzman) Machine
자비어 : xavier
MSRA
'Tech > 머신러닝' 카테고리의 다른 글
[정리] 모두를 위한 딥러닝 06 - Softmax Regression (0) | 2018.06.15 |
---|---|
케라스 Keras 모델 저장, 재사용 (0) | 2018.06.12 |
[정리] 모두를 위한 딥러닝 09 - XOR 풀기 by 김성훈 (0) | 2018.06.11 |
유용한 사이트 모음 (0) | 2018.02.07 |
MNIST-CNN 강의 (0) | 2018.02.06 |