Потеря LSTM, реализованная в Keras с бэкэндом TF2, остается постоянной, и параметры в основном не изучаются во время обучения на большом наборе данных - PullRequest
0 голосов
/ 05 мая 2020

Мы реализуем следующую архитектуру в Tensorflow 2. RNN означает LSTM в этой модели.

Dual Encoder LSTM

Эта модель используется для реализации извлечения: на основе чат-бота, найденного в этой статье и в этом блоге . У автора блога есть рабочая модель , написанная в tf1.

К нашей записной книжке Colab можно получить доступ здесь . И вывод архитектуры модели из нашего кода:

this

Символ? символ означает batch_size, который мы можем предопределить. 160 - это длина предложения, что означает повторение сети LSTM, поскольку мы загружаем LSTM по одному слову за раз. 256 - это выходная форма сети LSTM. Набор данных для обучения выглядит следующим образом:

enter image description here

Утверждалось, что эта модель работает во время обучения на наборе данных Ubuntu Corpus с 1M записями. Однако, когда мы обучаем нашу модель, потери остаются на уровне 0,6931 после 2-3 итераций, и мы предполагаем, что тогда параметры, особенно M, не изучаются во время обучения. Мы прогнали модель 12 часов, и потери совсем не уменьшились. Вот результат обучения

Now training the model...
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6938(195600,)
1000000/1000000 [==============================] - 2111s 2ms/sample - loss: 0.6938
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.7739(195600,)
1000000/1000000 [==============================] - 2106s 2ms/sample - loss: 0.7739
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6939(195600,)
1000000/1000000 [==============================] - 2163s 2ms/sample - loss: 0.6939
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6932(195600,)
1000000/1000000 [==============================] - 2101s 2ms/sample - loss: 0.6932
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6931(195600,)
1000000/1000000 [==============================] - 2099s 2ms/sample - loss: 0.6931
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6932(195600,)
1000000/1000000 [==============================] - 2098s 2ms/sample - loss: 0.6932
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6931(195600,)
1000000/1000000 [==============================] - 2102s 2ms/sample - loss: 0.6931
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6931(195600,)
1000000/1000000 [==============================] - 2097s 2ms/sample - loss: 0.6931
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6931(195600,)
1000000/1000000 [==============================] - 2107s 2ms/sample - loss: 0.6931
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6931(195600,)
1000000/1000000 [==============================] - 2103s 2ms/sample - loss: 0.6931
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6931(195600,)
1000000/1000000 [==============================] - 2103s 2ms/sample - loss: 0.6931
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6931(195600,)
1000000/1000000 [==============================] - 2092s 2ms/sample - loss: 0.6931
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6931(195600,)
1000000/1000000 [==============================] - 2099s 2ms/sample - loss: 0.6931
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6931(195600,)
1000000/1000000 [==============================] - 2099s 2ms/sample - loss: 0.6931
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6931(195600,)
1000000/1000000 [==============================] - 2096s 2ms/sample - loss: 0.6931
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6931(195600,)
1000000/1000000 [==============================] - 2125s 2ms/sample - loss: 0.6931
Train on 1000000 samples
 999936/1000000 [============================>.] - ETA: 0s - loss: 0.6931(195600,)
1000000/1000000 [==============================] - 2132s 2ms/sample - loss: 0.6931
Train on 1000000 samples
  33792/1000000 [>.............................] - ETA: 24:23 - loss: 0.6931

Однако наша модель будет работать, если мы усечем наш набор данных до 100 000 записей, что означает, что потери будут неуклонно уменьшаться.

В чем может быть причина что эта модель может обучаться на небольшом наборе данных, но не на большом?

Спасибо.

...