인공지능

[모두의 딥러닝] lab 10. NN, ReLu, Xavier, Dropout, and Adam

여니두 2019. 5. 28.

Softmax classifier for MNIST

- 이전에 했던 Softmax를 이용한 MNIST

- 784개의 입력 vector, 10개의 출력

- cross_entropy 개념

- epoch 개념

> 세줄밖에 안되는 model로 굉장한 정확도를 낸다. (나머지는 lab 07-1 참조): 90.4% 정확도

 

위를 개선하기 위한 여러가지 팁

NN for MNIST

- 이전에는 한 단밖에 없었음

- 좀 더 깊게 들어가는 것 > Neural Network

- 추가할 때는 주의할 것이 Weight의 크기를 구하는 것!

- 제일 마지막의 결과는 10개로 확정, 안의 단은 우리가 알아서 디자인하면 됨.

- 각 단의 입력을 layer에 맞게 설정해주면 됨.

- ReLu activation function을 사용한 예시

- 94% 정확도

 

 

초기화를 잘 하려면? > Xavier 초기화 방법

- 구글링으로 "xavier initialization tensorflow" 검색해보기!

- 약 98% 정확도

- xavier로 했을 경우, 처음부터 cost가 굉장히 낮음.

> 초기값이 잘 initialize되었다는 것을 보여준다!

 

 

Deep NN for MNIST

- 깊고 넓게 해보기

- 5단까지 늘리고, 단을 나누는 것을 2배로 늘리자(256 -> 512).

> 넓고 깊게!

- 결과는 이전보다 정확도가 떨어짐.

이유?) 제각각의 요인이 있겠지만, 이 예시에서는 Overfitting 되었을 것임

> NN이 깊어지면 잘 발생하는 문제. 학습으로 주어진 값들을 너무 잘 기억해버려서 새 테스트 데이터셋

이 들어왔을 때는 잘 예측하지 못함

 

Overfitting 해결방법: Dropout for MNIST

- TensorFlow에서는 dropout 단을 하나 넣어줌으로써 구현함.

- Dropout이라는 layer가 있다고 가정적으로 생각.

- 몇 %를 keep할 것인가 > keep_prob: 전체 중 몇%를 keep할 것인가를 정해줌

train: 0.5 ~ 0.7

testing: 1.0 무조건!

 

> keep_prob을 placeholder로 정하고, 학습할 때와 테스트할 때 feed_dict로 값을 각각 넘겨주기

 

 

Optimizers

- 이전에 사용했던 Gradient Descent Optimizer뿐만 아니라 여러 optimizer들이 있음

 

ADAM: a method for stochastic optimization

: 아담 optimizer가 상당히 좋은 결과를 만들어낸다.

- Gradient Descent Optimizer을 사용했던 방식과 똑같이 쓰면 된다. (이름만 바꿔 사용)

 

요약

1. Softmax(1단) VS Neural Nets(여러 단) for MNIST : 90 to 94.5%

2. Xavier initialization: 97.8%

3. Deep Neural Nets with Dropout: 98%

4. Adam and other optimizers

 

> 연습문제: Batch Normalization(입력값 normalize시키기)

댓글