Как гиперпараметр epsilon влияет на tf.train.AdamOptimizer?

Когда я устанавливаю epsilon=10e-8, AdamOptimizer не работает. Когда я ставлю на 1, все работает нормально.


person hhb1994    schedule 05.04.2017    source источник


Ответы (1)


t <- t + 1

lr_t ‹- скорость обучения * sqrt (1 - бета2 ^ т) / (1 - бета1 ^ т)

m_t ‹- бета1 * m_{t-1} + (1 - бета1) * г

v_t ‹- бета2 * v_{t-1} + (1 - бета2) * г * г

где g - градиент

переменная ‹- переменная - lr_t * m_t / (sqrt(v_t) + эпсилон)

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

Итак, я предполагаю, что когда вы тренируетесь с небольшим эпсилоном, оптимизатор станет нестабильным.

Компромисс заключается в том, что чем больше вы сделаете эпсилон (и знаменатель), тем меньше будут обновления веса и, следовательно, медленнее будет прогресс обучения. В большинстве случаев вы хотите, чтобы знаменатель мог стать маленьким. Обычно лучше работает значение эпсилон, превышающее 10e-4.

Значение по умолчанию 1e-8 для эпсилон может быть не очень хорошим значением по умолчанию. Например, при обучении начальной сети в ImageNet в настоящее время хорошим выбором является 1,0 или 0,1. проверьте здесь

person Nandeesh    schedule 30.06.2017