Моей задачей было преобразовать английское предложение в немецкое. Сначала я проделал это с обычной сетью кодировщика-декодера, на которой я получил довольно хорошие результаты. Затем я попытался решить ту же задачу с той же точной моделью, что и раньше, но с вниманием Бахданова. Причем модель без внимания превзошла модель с вниманием.
Потеря модели без внимания снизилась примерно с 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 эпох и затем медленно снижается. Это график того, как уменьшаются потери, когда я тренировал его всего с двумя образцами:
Это график того, как уменьшаются потери, когда я тренировал его всего с одним образцом:
Are the results that I got even possible?
почему бы и нет! добавление внимания или какого-либо вспомогательного слоя не означает лучшей производительности. вы используете вложения слов? который из? - person user_007   schedule 25.10.2020tf.keras.layers.Embedding
- person   schedule 25.10.2020