Как рассчитать субградиенты в TensorFlow? - PullRequest
0 голосов
/ 01 апреля 2019

Может ли процедура автоматического дифференцирования в TensorFlow вычислять субградиент при необходимости?Если субградиентов много, то какой из них будет выбран в качестве выходного?

Я пытаюсь реализовать статью по ссылке https://www.aclweb.org/anthology/P13-1045, которая использует рекурсивные нейронные сети для эффективного синтаксического анализа языка.Целевая функция использует функцию потери шарнира для выбора оптимальных выходных векторов, что делает функцию не дифференцируемой.Я использовал TensorFlow (v1.12) в активном режиме для программирования модели и использовал автоматическое дифференцирование для вычисления градиентов.После каждой партии я мог видеть, как меняются значения градиента, и точность немного улучшается.Через некоторое время оно уменьшается и этот процесс продолжается.Модель не сходится вообще для всех конфигураций гиперпараметров.

Размер мини-пакета: 256, 512, 1024;Параметры регуляризации - 0,1, 0,01, 0,001;Скорость обучения - 0,1, 0,01, 0,001;Функция оптимизации - градиентный спуск, адаград, адам;

В статье они описали, как найти субградиент для оптимальной функции очень абстрактным способом, который я еще не понял.Вначале я придерживался мнения, что автоматическое вычисление градиента вычисляет субградиент.Но в этот момент я начинаю сомневаться в этом, потому что кажется, что единственная переменная отсутствует.

1 Ответ

0 голосов
/ 09 мая 2019

К сожалению, Tensorflow не вычисляет субградиенты, а только градиенты.Как объясняется здесь Как тензорный поток обрабатывает недифференцируемые узлы во время вычисления градиента? .Подводя итог, можно сказать, что при вычислении частной производной, если существует проблема дифференцируемости, Tensorflow просто устанавливает эту производную равной нулю.

Что касается проблем, возникающих при обучении вашей модели, то нет общих правил, объясняющих, как настраивать гиперпараметры, поэтому я бы предложил выполнить поиск по сетке по скоростям обучения (в несколько эпох), чтобы найтихорошая начальная скорость обучения, которая обеспечивает хорошие результаты для одного из алгоритмов оптимизации.Обычно, ADAM или SGD с импульсом обеспечивают удовлетворительные результаты при выборе правильной начальной скорости обучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...