1

this 기사 다음에 길쌈 신경 네트워크를 학습하는 동안 테스트 세트의 정확도는 떨어지지 만 학습 세트의 정확도는 너무 높아집니다.훈련 정확도가 적극적으로 증가하고 테스트 정확도가 안정 됨

아래는 (일부는 새로운 될 수 있도록 몇 가지 예는 이전의 시대에서 볼 수 있습니다) 무작위로 각 시대에서 선정 6400 개 교육 사례, 와 예이며, 6400 동일한 테스트 예.

더 큰 데이터 세트 (64000 또는 100000 훈련 예)의 경우 훈련 정확도 증가가 더 급격 해지고 세 번째 신기원에서 98이됩니다.

나는 또한 을 사용하여 각기 6400 개의 훈련 예제을 무작위로 섞어서 시도했다. 예상대로, 그 결과는 더욱 나 빠진다.

conv 5x5 (1, 64) 
max-pooling 2x2 
dropout 
conv 3x3 (64, 128) 
max-pooling 2x2 
dropout 
conv 3x3 (128, 256) 
max-pooling 2x2 
dropout 
conv 3x3 (256, 128) 
dropout 
fully_connected(18*18*128, 128) 
dropout 
output(128, 128) 

어떤 원인이 될 수 있습니다 :

epoch 3 loss 0.54871 acc 79.01 
learning rate 0.1 
nr_test_examples 6400  
TEST epoch 3 loss 0.60812 acc 68.48 
nr_training_examples 6400 
tb 91 
epoch 4 loss 0.51283 acc 83.52 
learning rate 0.1 
nr_test_examples 6400 
TEST epoch 4 loss 0.60494 acc 68.68 
nr_training_examples 6400 
tb 91 
epoch 5 loss 0.47531 acc 86.91 
learning rate 0.05 
nr_test_examples 6400 
TEST epoch 5 loss 0.59846 acc 68.98 
nr_training_examples 6400 
tb 91 
epoch 6 loss 0.42325 acc 92.17 
learning rate 0.05 
nr_test_examples 6400 
TEST epoch 6 loss 0.60667 acc 68.10 
nr_training_examples 6400 
tb 91 
epoch 7 loss 0.38460 acc 95.84 
learning rate 0.05 
nr_test_examples 6400 
TEST epoch 7 loss 0.59695 acc 69.92 
nr_training_examples 6400 
tb 91 
epoch 8 loss 0.35238 acc 97.58 
learning rate 0.05 
nr_test_examples 6400 
TEST epoch 8 loss 0.60952 acc 68.21 

이것은 (I 각 회선 후 RELU 활성화를 사용하고 있습니다) 내 모델?

나는 속도 붕괴 학습과 모멘텀의 최적화를 사용하고 있습니다 :

batch = tf.Variable(0, trainable=False) 

    train_size = 6400 

    learning_rate = tf.train.exponential_decay(
     0.1,    # Base learning rate. 
     batch * batch_size, # Current index into the dataset. 
     train_size*5,   # Decay step. 
     0.5,    # Decay rate. 
     staircase=True) 
    # Use simple momentum for the optimization. 
    optimizer = tf.train.MomentumOptimizer(learning_rate, 
             0.9).minimize(cost, global_step=batch) 
+0

이 기사를 재현하려는 이유가 있습니까? 아마도 특정 논문을보기 전에 mnist, cifar와 같은 "고전적 사례"중 몇 가지를 시도해 보는 것이 가장 좋습니다. –

답변

1

이 매우 많은 것으로 예상된다. 이 문제를 overfitting이라고합니다. 이것은 모델이 테스트 세트에 유용한 것을 실제로 배우지 않고도 학습 예제를 "암기"하기 시작할 때입니다. 사실, 이것이 바로 우리가 처음에 테스트 세트를 사용하는 이유입니다. 우리가 충분히 복잡한 모델을 가지고 있다면 의미가 없더라도 데이터를 완벽하게 맞출 수 있습니다. 테스트 세트는 모델이 실제로 무엇을 배웠는지 알려주는 것입니다.

또한 유효성 검사 세트을 사용하는 것이 유용하지만 테스트 세트와 비슷하지만 훈련을 중단 할시기를 알아 내기 위해 사용합니다. 유효성 검사 오류가 낮아지면 교육을 중지하십시오. 왜 테스트 세트를 사용하지 않습니까? 테스트 세트는 모델이 실제 세계에서 얼마나 잘 작동 하는지를 확인하는 것입니다. 테스트 세트의 정보를 사용하여 교육 과정에 관한 것들을 선택하기 시작한 경우, 부정 행위와 같은 것보다 더 많이 테스트 오류에 의해 처벌됩니다. 더 이상 실제 오류를 나타내지 않습니다.

마지막으로, 길쌈 신경 네트워크는 과용하는 능력이 악명 높다.. Conv-nets가 라벨을 섞어도 0 번 훈련 오류를 표시 할 수 있으며 임의의 픽셀도 표시됩니다. 즉, Conv-net이이를 표현하는 법을 배우는 실제 패턴이 필요하지 않습니다. 즉, 은 conv-net을 정규화해야합니다. 즉, 드롭 아웃, 일괄 정규화, 과 같은 것을 사용해야합니다..

당신은 자세한 내용을 원한다면 내가 몇 링크를 떠날거야 : 이 https://arxiv.org/pdf/1611.03530.pdf (이 논문은 다음과 같습니다

검증, 오버 피팅 초기 이

전환 그물 피팅 임의 라벨 https://elitedatascience.com/overfitting-in-machine-learning 중지, 조금 나아졌지만 그 사이에 끼어 들기 위해 interresting)

추신 실제로 테스트 정확도를 향상 시키려면 데이터 보강을 사용하여 모델 또는 열차를 변경해야합니다. 전송 학습을 시도 할 수도 있습니다.

+0

충분한 교육 세트 예제가 있다면 데이터 보증이 필요합니까? 나는 오프라인에서 1 백만 개의 서로 다른 트리플렛을 만들었지 만 (더 작은 트레이닝 세트 크기로 시작했다.) –

+0

데이터 증가는 모델이 불변하도록하려는 변환을 사용하여 데이터를 보강함으로써 일반화에 도움이됩니다. 어떤면에서는 단순히 예제를 추가하는 것과는 다른 효과가 있습니다. –

+0

그러나 결국, 엄청난 양의 예제가 모델을 변경해야하는 것보다 결과를 향상시키지 못한다면. 배치 정규화가 도움이된다. 아직 사용하지 않는 경우 드롭 아웃. 이러한 일반적인 정규화 방법 외에도 모델을 개선 할 분명한 방법은 없습니다. 그러나 더 많은 레이어가 일반적으로 더 좋으며 (충분한 데이터가 제공됨) 이미지를위한 학습을 ​​전송하는 것이 매우 유용합니다. –

관련 문제