Проблема НЕ исправления смещения
Согласно статье
В случае редких градиентов, для надежной оценки второго момента необходимо усреднить по многим градиентам, выбрав небольшое значение β2; однако именно в этом случае малых β2 отсутствие коррекции смещения инициализации приведет к гораздо большим начальным шагам.
Обычно на практике устанавливается намного ближе к 1, чем (как предложено автором , ), поэтому коэффициенты обновления намного меньше, чем .β2β1β2=0.999β1=0.91−β2=0.0011−β1=0.1
На первом этапе обучения , , термин в обновлении параметра может быть очень большим, если мы будем использовать смещенную оценку напрямую.m1=0.1gtv1=0.001g2tm1/(v1−−√+ϵ)
С другой стороны, при использовании исправленной смещением оценки и , термин становится менее чувствительным к и .m1^=g1v1^=g21mt^/(vt^−−√+ϵ)β1β2
Как исправляется смещение
Алгоритм использует скользящее среднее для оценки первого и второго моментов. Смещенная оценка будет такой: мы начнем с произвольного предположения и постепенно обновим оценку с помощью . Таким образом, очевидно, что на первых нескольких шагах наше скользящее среднее сильно смещено в сторону начального .m0mt=βmt−1+(1−β)gtm0
Чтобы исправить это, мы можем убрать эффект начального предположения (смещения) из скользящей средней. Например, во время 1, , мы член из и делим его на , что приводит к . Когда , . Полное доказательство приведено в разделе 3 статьи.m1=βm0+(1−β)gtβm0m1(1−β)m1^=(m1−βm0)/(1−β)m0=0mt^=mt/(1−βt)
Как хорошо прокомментировал Марк Л. Стоун
Это похоже на умножение на 2 (о боже, результат смещен), а затем деление на 2, чтобы «исправить» его.
Почему-то это не совсем эквивалентно
градиент в начальной точке используется для начальных значений этих вещей, а затем первый параметр обновления
(конечно, его можно преобразовать в ту же форму, изменив правило обновления (см. обновление ответа), и я считаю, что эта строка в основном нацелена на то, чтобы показать ненужность введения смещения, но, возможно, стоит заметить разницу)
Например, исправлен первый момент времени 2
m2^=β(1−β)g1+(1−β)g21−β2=βg1+g2β+1
Если в качестве начального значения используется с тем же правилом обновления,
который вместо этого в сторону на первых нескольких шагах.g1m2=βg1+(1−β)g2
g1
Действительно ли исправление смещения имеет большое значение?
Так как оно действительно влияет только на первые несколько этапов обучения, это кажется не очень большой проблемой, во многих популярных системах (например, keras , caffe ) применяется только смещенная оценка.
По моему опыту, предвзятая оценка иногда приводит к нежелательным ситуациям, когда потери не уменьшатся (я не проверил это полностью, поэтому я не совсем уверен, связано ли это с предвзятой оценкой или чем-то еще), и уловка Я использую больший чтобы смягчить начальный размер шага.ϵ
Обновление
Если вы развернете правила рекурсивного обновления, по сути, является средневзвешенным значением градиентов,
Знаменатель может быть вычислен по формуле геометрической суммы, поэтому он эквивалентен следующему обновлению правило (которое не включает в себя термин смещения) m^t
m^t=βt−1g1+βt−2g2+...+gtβt−1+βt−2+...+1
m1←g1
пока не сходятся, сделайте (взвешенная сумма) (средневзвешенное значение)
mt←βmt+gt
m^t←(1−β)mt1−βt
Следовательно, это может быть сделано без введения смещения и его исправления. Я думаю, что статья помещает это в форму исправления смещения для удобства сравнения с другими алгоритмами (например, RmsProp).