10-3. Dropout과 앙상블

Overfitting : 학습 데이터로 트레이닝 해보니까 높은 정확도(0.99) 나오고, 테스팅 데이터로 해보니까 낮은 정확도(0.85)가 나올 수 있는 상태.
실전 사용에 별로 좋지가 않음

계속 깊게 학습을 할 수록 Overfitting 될 확률이 크다. 왜냐면 굉장히 많은 변수가 사용되고 그 변수를 이용해 만들어진 그래프는 꼬불꼬불 할 수 있기 때문이다.

Overfitting을 방지하기 위한 방법

  • 트레이닝 데이터를 많이 쓴다.
  • Regularization **

Regularization

  • Weight에 너무 큰 값을 줘서 너무 구부리지 않도록 하자!

L2 regularization : Regularization을 수학적으로 표현한 위의 식Dropout : Random 하게 어떤 뉴런들을 Kill 시켜버리자. 고양이인지 판별하기 위해 "귀가 있는지", "꼬리가 있는지", 뭐 이런 것들을 다 체크하는데 그 중에 몇 개의 조건들을 빼고 돌리는 것이다. 그 다음에 마지막에 얘네들을 총 동원해서 돌려보면 정확도가 좋다. 즉 학습할 때만 Dropout 을 시키고 실제 돌릴 때는 모두 다 돌리는 것이다.

구현

dropout_rate = tf.placeholder("float")
_L1 = tf.nn.relu(tf.add(tf.matmul(X, W1), B1))
L1 = tf.nn.dropout(_L1, dropout_rate)

# TRAIN
sess.run(optimizer, feed_dict={X: batch_xs, Y:batch_ys, dropout_rate:0.7})

# EVALUATION
print "Accuracy: ". accuracy.eval({X: mnist.test.images, Y: mnist.test.labels, dropout_rate: 1})

_L1 이라는 레이어를 만들고 dropout으로 보내면 된다. dropout__rate는 random하게 고르는데 0.5를 고르면 반을 학습시킨다.
0.7이면 70%만 참여하고 30%는 쉰다.

앙상블이 뭔가?

기계가 좀 많고 학습시킬 자료가 많을 때 사용할 수 있다.초기값이 조금씩 다른 세개의 같은 형태의 모델을 돌리므로 결과가 조금씩 다르다. 마지막에 이걸 다 합쳐서 결과를 낸다.
2% ~ 5% 까지 성능 향상을 시킬 수 있는 모델이다.

results for ""

    No results matching ""