Когда я устанавливаю epsilon=10e-8
, AdamOptimizer
не работает. Когда я ставлю на 1, все работает нормально.
Как гиперпараметр epsilon влияет на tf.train.AdamOptimizer?
Ответы (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. проверьте здесь