Sigmoid 보다 좋은 ReLU
- 쉽게 이해하기에 앞서 머신러닝의 지나온 과정에서 가장 큰 2가지 문제가 있었다.
- 첫 번째 : XOR 문제 - > Neural Network
- 두 번째 : Backprogation의 문제 -> ReLU
- Backprogation을 할때 많은 Layer에 거치게 되면 좋지 않은 결과가 나오게 된다.
- 이유는 간단하다 Backprogation의 경우 나온 결과 값으로 이전 레이어의 w, b를 조절 해 줘야하는데 sigmoid의경우 0~1사이의 값만을 가지므로 곱하면 곱할 수록 0에 가까워지게 된다.
- 따라서 많은 레이어를 거칠수록 w, b에 주는 영향은 줄어 들게된다.
- 이를 해결 해주는 방법은 생각 보다 간단하다.
- 기존에 쓰는 sigmoid(0~1)이 아닌 ReLU(0~∽)를 사용하여 인풋레이어에 가까워 질 수록 주는 영향을 크게 한다.
- 좋은 결과 값을 도출 하게 된다.
- 기본적인 ReLU이외에도 Leaky ReLU와 같이 0으로 만드는 것이 아니라 작은 값을 주는 방법도 있다.
초기 Weights 설정하기
- 위의 ReLU를 사용하여 그래프를 그렸을 때 한 그래프는 금방 낮은 Cost를 찾지만 다른 그래프는 아니다.
- 차이는 어떤 Weights로 시작했냐의 차이다.
- 이를 해결 하기 위해서 적절한 weight 설정 학습법, Restricted Boatman Machine(RBM)를 발표하였다.
- 방법은 현재 Layer와 다음 Layer을 연결시키고, 값을 도출하여 Backward시켜 x와 x_hat(결과 값)을 비교하여 초기 값(w,b)를 설정한다.
- 이 후 이를 반복한다.
- 이런 RBM은 복잡하다는 문제점이 있었는데.
- Xavier이 발표한 'Xavier initialization'으로 인해 더 쉽고 성능좋은 학습법을 사용 할 수 있게되었다.
- 이를 간단한 변형을 통해 더 좋은 성능 Xavier을 만들어 졌다.('He's initalization')
Overfitting
- 오버피팅이란 내가 학습시킨 데이터에 너무 최적으로 맞추다 보니 다른 테스트 케이스에서 오류가 심하게 나는 경우이다.
- 오버피팅의 여부는 데이터 셋과 테스트 셋의 정확도의 차이로 알 수 있다.(정확도 차이가 크면 오버피팅)
- 해결 방법은 크게 3가지가 있다.
- 해결 1 : 더 많은 데이터를 추가한다.
- 해결 2 : 정규화 한다. -> 너무 큰 weight를 주지 않는다.
- 해결 3 : Dropout 방식을 사용한다. -> 학습시 일부로 몇개의 노드를 0으로 만든다.(너무 최적화 하지 않기위해 오차를 만들어주는 것 같다.)
NN LEGO PLAY : NN의 구성
- 이어서 NN을 레고에 빗대어 설명했다.
- 일직선, 쪼개고, 합치고, 자유로은 방식으로 NN을 구성할 수 있다.
- "모델을 학습시키는데에 한계점은 너의 상상력이다"
'IT > 머신러닝' 카테고리의 다른 글
[section_12] RNN(Recurrent Neural Networks) (0) | 2018.06.01 |
---|---|
[section_11] CNN(Convolutional Neural Networks) (0) | 2018.06.01 |
[section_9_lab] TensorBoard 사용하기 (0) | 2018.06.01 |
[section_9_lab] Wide & Deep Network (0) | 2018.06.01 |
[section_9] Neural Network 1: XOR 문제와 학습방법, Backpropagation(2) (0) | 2018.06.01 |