Как рассчитать субградиенты в TensorFlow?

Вычисляет ли процедура автоматического дифференцирования в 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; Функция оптимизации - градиентный спуск, адаград, адам;

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


person Kandy16    schedule 01.04.2019    source источник


Ответы (1)


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

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

person Kas    schedule 09.05.2019