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