alterna ai
ALTERNA AI / ГЛАВА 05 · 06

05.6 Ограничиваем шаг и меняем расписание

На предыдущей странице: две истории градиента.

Слишком большой градиент, изменение самих весов и уменьшение шага — разные причины. Проверим их по отдельности.

Градиент [3,4] имеет длину5; хотим ограничить длину до2.

Разные средства решают разные проблемы

Если norm(g) велик, norm clipping ограничивает длину, сохраняя направление ненулевого gradient:

gclip=gmin⁡(1,c∥g∥2),c>0.g_{clip}=g\min\left(1,\frac{c}{\|g\|_2}\right),\quad c>0.

Приg=[3,4],norm5,c2 получаем[1.2,1.6],norm2. Приg=0 множитель принимаем1без деления. Покоординатное обрезание до[−c,c] является другой операцией и может изменить направление. Clipping не доказывает уменьшения loss: даже ограниченный шаг может быть неподходящим.

Weight decay в простом отдельном updateθ←(1−ηλ)θ уменьшает параметры приλ>0. Дляθ2,η.1,λ.5 получаем1.9. L2-регуляризация добавляет .5λ||θ||² к objective, градиент становится g+λθ. С обычным GD оба представления согласуются; с адаптивным optimizer включение λθ внутрь нормируемого gradient и отдельный decay обычно неэквивалентны. Это мотивация decoupled decay, не обещание одной настройки для всех библиотек.

Расписание ηₖ меняет шаг со временем, напримерη₀/(1+γk). Это настройка процедуры, не новый параметр самой модели. Слишком быстрое уменьшение может остановить полезный прогресс; слишком медленное оставить колебания. Гипотезу нужно проверять по корректной validation-задаче, не только красивому training plot.

Итоговый эксперимент. На квадратике выберите большойη, наблюдайте рост и остановку по безопасному пределу, затем уменьшитеη. В отдельном инструменте сравните norm clipping и decay: назовите, какой объект меняется, gradient или parameters. Не приписывайте изменение графика race флагу, которого в её модели нет.

Мы связали представления, преобразования, чувствительность, вероятностный критерий и обновление. Следующий блок применит их к классическому ML. Эта глава ещё в программе; математический фундамент и его самопроверки уже доступны.

from math import hypot
g,c = [3,4],2
factor = min(1,c/hypot(*g))
clipped = [factor*v for v in g]
assert abs(hypot(*clipped)-2)<1e-12

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

Ограничение градиента не гарантирует меньшую ошибку при любом шаге. Оно решает более узкую задачу размера чувствительности.

Как эти действия превратятся в обучаемую модель?

Python-примеры главы 05 Академическая база →