TensorFlow - ReLU
ReLU 소개
- sigmoid 는 activation function 으로 불린다.
- 전달받은 값이 어느 값 이상이면 작용을 하는 함수를 activation function 이라 불린다.
- XOR 를 2단의 NN 으로 구현
- 3단 이상인 경우
- 9단
- 9단 시각화
-
문제점
-
Backpropagation 은 9단 이상 가면 Accuracy 가 보장되지 못한다.
- 9단까지 연결했는데도 Accuracy 가 0.5 가 나온다.
-
S 를 거친 output 을 input 으로 가지는 S 는 0~1 의 값을 가진다.
- 항상 0~1 사이의 값이 곱해지면서 계산이 진행될 수록 0에 가까워진다.
-
Vanishing gradient 문제 (경사의 기울기가 사라지는 문제)
- 단수가 깊어질 수록 앞쪽의 경사도가 사라진다.
-
-
해결 (Hinton)
- Sigmoid 가 1보다 작은 값이 된다는 것이 문제.
- 0보다 작으면 0, 0보다 크면 갈때까지 가면 되지 않을까?
- ReLU : Rectified Linear Unit
-
NN 에서는 Sigmoid 가 아닌 ReLU 를 사용해야 한다.
- 마지막에만 sigmoid 사용 (0~1 사이의 값)
-
파생된 다른 Activiation Function 들.
- 0 이하의 값도 표현하는 LeakyReLU
초기값 주는것
- weight 에 초기값을 멍청한 값을 줘서 문제가 생겼었다 (Sigmoid)
-
주의점
-
초기값은 0이 아니여야 한다.
- 초기값이 0이면 앞의 모든 기울기가 0이됨...
- RBM 구조를 사용한다.
-
- RBM 내용 추가.
-
RBM
- forward 의 x 값과 backward x 추측 값을 비교하여 w 을 계속하여 조정하는 구조.
- 다른말로 encode, decode
-
RBM 으로 어떻게 초기화를 진행할까
- w 을 모두 학습시킨다. 한스텝씩 foward, backward 를 진행하면서..
- RBM 대신..
-
Overfitting
- 트레이닝 데이터에 나오지 않은 테스트 데이터에 대한 적중률이 낮음.
- 레이어가 많아질 수록 err가 떨어지는데, 테스트데이터는 err 가 높아짐.
-
Overfitting 방지
- 트레이닝 데이터셋 개수를 늘린다.
-
정규화 : 구불구불한 선을 피자.
-
Dropout
- 훈련할 때 랜덤한 뉴런을 스킵시킨다.
- 첫 훈련은 너 쉬어, 두번째 훈련은 너 쉬어.
- 마지막엔 총 동원하여 예측
-
Dropout 구현
- 마지막엔 dropout_rate 가 1이여야함. (학습때만 조절.)
-
앙상블 (Ensemble)
- 다양한 트레이닝셋과, 학습 모델을 합치는것.
-
Feedforward neural network
- 가장 일반적으로 쓰이는 네트워크
- 첫번째 레이어는 input, 마지막 레이어는 output 인 구조이다.
- 중간의 레이어들을 'hidden' 레이어 라고 부른다.
- 이 hidden 레이어가 1개 이상일 경우, 'Deep' 뉴런 네트워크라 불린다.
- Fast forword (less net 이라는 네트워크 구조)
- 출력을 2단 앞으로 붙인다. (도중의 Activation Function 은 스킵이 된다.) 3% 이하로..
- Split & Merge
- 이 네트워크는
- Recurrent Network
- 같은
- 초기화
- 구글 - xavier initialization tensorflow 검색
- Optimizers
- 어떤것이 더 좋은지는 테스트해보자.
- 어떤 optimizer가 시뮬레이션한 웹 페이지가 있음.
- Adam 이 결과가 가장 좋더라..
- Adam
# define cost/loss & optimizercost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=hypothesis, labels=Y))optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
- 요약
- Softmax - 90%, NN - 94.5
- Xivier initialization - 97.8
- Deep NN + dropout - 98%
- Adam 등의 optimizer
- Batch Normalization
- 입력값에 대한 정규화 방법
- 이용해서 98% 이상을 뽑아내보자.
- CNN 을 사용하면 99% 까지 올릴 수 있다.
'TensorFlow' 카테고리의 다른 글
TensorFlow - CNN (Convolutional Neural Networks) (0) | 2018.04.29 |
---|---|
TensorFlow - XOR 문제 딥 러닝으로 풀기. (0) | 2018.03.26 |
TensorFlow - 딥러닝의 기본 개념 (0) | 2018.03.26 |
TensorFlow - Softmax regression (0) | 2018.03.25 |
TensorFlow - Logistic regression (0) | 2018.03.25 |