Как обсуждалось в комментариях, проблема заключается в большом размере пакета и, возможно, также в оптимизаторе, используемом для обучения.
Трудно определить точную причину, по которой ваш алгоритм не сделал этого.сходятся с текущими настройками, но это можно аргументировать следующим образом:
Большие размеры пакетов имеют более медленную конвергенцию.
Неудобно, обучение с большими размерами пакетов в некоторых случаях фактически замедляетсяваше обучение.Причина этого чисто умозрительная и зависит от точного характера и распространения ваших данных.Однако, как правило, меньший размер пакета означает более частые обновления.Если все ваши расчетные градиенты указывают в одном и том же направлении, более частые обновления приведут к более быстрой конвергенции.Хорошая практика - иметь размер пакета, который никогда больше 1000. В большинстве сценариев 128 - это хорошее эмпирическое правило и хороший компромисс между преимуществом скорости в больших партиях и хорошими свойствами сходимостименьших размеров партии.Обратите внимание, что это имеет смысл только в тех случаях, когда у вас много обучающих данных.
Также обратите внимание, что теоретически градиенты нескольких примеров в таком большом параметре могут «усредняться», то есть большой размер пакета будет иметь толькоочень маленький и нечеткий градиент.Наличие меньшего количества образцов в мини-партии уменьшит этот шанс, хотя это увеличивает риск "пойти в неправильном направлении" (то есть иметь градиент, который указывает на противоположный directin).
SGD - хорошая отправная точка, но существует несколько оптимизаций.
Одним из таких «более умных» вариантов является предложенный метод ADAM.Об этом есть весьма цитируемая статья , которая может дать вам смутное представление о том, что происходит под капотом.По сути, SGD - очень наивное решение, которое не имеет каких-либо специальных предположений или встроенных оптимизаций.(Из того, что я знаю, ADAM, например, использует производные первого порядка)
Существует много различных и существует масса теоретических статей (и практических сравнений ) различных реализаций.Стоит многого хотя бы частично понять, что делают параметры, и знать, какие значения имеет смысл устанавливать их.
Например, вы уже установили скорость обучения на разумное значение (0,001);лично я обычно получаю значения от 0,001 до 0,01 и, возможно, использую затухание скорости обучения с течением времени, если у меня большая скорость обучения.