Почему моя модель внимания хуже модели без внимания

Моей задачей было преобразовать английское предложение в немецкое. Сначала я проделал это с обычной сетью кодировщика-декодера, на которой я получил довольно хорошие результаты. Затем я попытался решить ту же задачу с той же точной моделью, что и раньше, но с вниманием Бахданова. Причем модель без внимания превзошла модель с вниманием.

Потеря модели без внимания снизилась примерно с 8,0 до 1,4 за 5 эпох и упала до 1,0 за 10 эпох, и потеря все еще уменьшалась, но более медленными темпами.

Потеря модели с вниманием уменьшилась примерно с 8,0 до 2,6 за 5 эпох, и многому не научилась.

Ни одна из моделей не переобучалась, поскольку потери при проверке также уменьшались в обеих моделях.

В каждом предложении на английском языке было 47 слов (после заполнения), а в каждом предложении на немецком языке было 54 слова (после заполнения). У меня было 7000 английских и 7000 немецких предложений в обучающей выборке и 3000 в проверочной.

Я пробовал почти все, например: разные скорости обучения, разные оптимизаторы, разные размеры пакетов, разные функции активации, которые я использовал в модели, пробовал применять пакетную и уровневую нормализацию и различное количество единиц LSTM для кодировщика и декодера, но ничего не имеет большого значения. , за исключением нормализации и увеличения данных, при которых потери снижаются примерно до 1,5, но затем снова перестают обучаться!

Почему это произошло? Почему модель с вниманием Бахданова провалилась, в то время как модель без какого-либо внимания показала хорошие результаты?

Редактировать 1 - Я пробовал применять LayerNormalization до внимания, после внимания и как до, так и после внимания. Результаты были примерно одинаковыми в каждом случае. Но на этот раз потери выросли примерно с 8,0 до 2,1 за 5 эпох, и снова многому не научились. Но большая часть обучения была сделана в 1 эпоху, так как в конце 1 эпохи потери достигли примерно 2,6, а затем достигли 2,1 в следующую эпоху, а затем снова не многому научились.

Тем не менее, модель без внимания превосходит модель с вниманием и LayerNormzalization. Что могло быть причиной этого? Возможны ли результаты, которые я получил? Как может обычная сеть кодировщика-декодера без какой-либо нормализации, без какого-либо слоя исключения работать лучше, чем модель с вниманием и с LayerNormalization?

Редактировать 2 - я попытался увеличить данные (я сделал это в 7 раз больше, чем предыдущий), на этот раз производительность обеих моделей значительно улучшилась. Но все же модель без внимания работала лучше, чем модель с вниманием. Почему это происходит?

Изменить 3 - я попытался отладить модель, сначала передав только один образец из всего набора обучающих данных. Потеря началась примерно с 9.0 и уменьшалась и сходилась к 0. Затем я попытался передать 2 отсчета, потеря снова началась примерно с 9.0, но на этот раз она просто колебалась между 1.5 и 2.0 в течение первых 400 эпох и затем медленно снижается. Это график того, как уменьшаются потери, когда я тренировал его всего с двумя образцами:

введите описание изображения здесь

Это график того, как уменьшаются потери, когда я тренировал его всего с одним образцом:

введите описание изображения здесь


person Community    schedule 25.10.2020    source источник
comment
Похоже, у вас проблема с нормализацией. Применяете ли вы какую-либо нормализацию в своей модели? если нет, попробуйте применить LayerNormalization после слоя внимания (или до него, проверьте оба), а затем сравните оба способа.   -  person user_007    schedule 25.10.2020
comment
@Ghanem Я попробовал то, что вы сказали, и добавил результаты LayerNormalization в редактирование.   -  person    schedule 25.10.2020
comment
Are the results that I got even possible? почему бы и нет! добавление внимания или какого-либо вспомогательного слоя не означает лучшей производительности. вы используете вложения слов? который из?   -  person user_007    schedule 25.10.2020
comment
@Ghanem Да, я использую вложения слов. Но я не использую никаких предварительно обученных встраиваний слов. Я использую собственное встраивание с использованием слоя tf.keras.layers.Embedding   -  person    schedule 25.10.2020
comment
Хорошо, вы их тренируете. Попробуйте использовать предобученные вложения, достойно.   -  person user_007    schedule 25.10.2020
comment
@Ghanem Я никогда не использовал предварительно обученные вложения. Какое предварительно обученное встраивание следует использовать для этой задачи? И даже если я им воспользуюсь, это повысит производительность обеих моделей (одной с вниманием, другой без внимания). И все же модель без внимания была бы лучше другой. И я хочу знать, почему модель без внимания работает лучше, чем модель с вниманием.   -  person    schedule 25.10.2020
comment
Это работает? Я имею в виду, что если обе модели ужасны, возможно, дело не во внимании. Может быть, вам нужно больше данных или больше вариантов похожих предложений (с некоторым видом увеличения данных) или предварительное обучение ваших встраиваний на больших наборах данных, чтобы компенсировать небольшой размер набора данных.   -  person Mehdi    schedule 26.10.2020
comment
@Mehdi Можно сказать, что модель с вниманием ужасна, но модель без внимания не потому, что ее потери достигли 1.0 за 10 эпох и все еще сокращались   -  person    schedule 26.10.2020
comment
Ok. Я имел в виду, что, возможно, данных недостаточно для изучения переводов вне зависимости от выбора модели. Так что, если бы это было так, то потеря не имела бы значения.   -  person Mehdi    schedule 26.10.2020
comment
@Mehdi Я увеличил данные, и производительность обеих моделей сильно выросла. Но все же модель без внимания работает лучше, чем модель с вниманием. Я добавил эту информацию в сообщение в качестве редактирования. Я не понимаю, почему это происходит?   -  person    schedule 26.10.2020
comment
@NITINAGARWAL, не могли бы вы поделиться кодом обеих ваших моделей (с вниманием или без внимания)? Возможно, есть небольшая ошибка в реализации, которая ухудшает модель с вниманием.   -  person David Dale    schedule 29.10.2020
comment
@DavidDale У меня были такие же сомнения! Поэтому я спросил, правильная ли реализация внимания Бахданау к Code Review: Здесь   -  person    schedule 29.10.2020
comment
Не могли бы вы также показать код модели без внимания, чтобы мы могли напрямую сравнить их? Я подозреваю, что ваш декодер теряет информацию о своем предыдущем состоянии, но лучше проверить.   -  person David Dale    schedule 31.10.2020
comment
@DavidDale Да, это была проблема реализации ... Исправление этого заставляет модель внимания работать лучше, чем обычная модель кодировщика-декодера!   -  person    schedule 31.10.2020


Ответы (1)


Всем спасибо за помощь .... Это была проблема с реализацией ... Исправление заставляет модель внимания работать лучше, чем обычная модель кодировщика-декодера!

person Community    schedule 31.10.2020