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 & optimizer
cost = 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% 까지 올릴 수 있다.



+ Recent posts