Накопление градиента

Как модели на самом деле обучаются — от обычного градиентного спуска до Adam

Накопление градиента имитирует больший пакет, когда памяти не хватает. Вместо того чтобы делать шаг после каждого микро-пакета, вы складываете градиенты нескольких микро-пакетов, а затем делаете один шаг оптимизатора.

Эффективный размер пакета равен размеру микро-пакета, умноженному на число шагов накопления. Это позволяет небольшому GPU вести себя так, будто он обучается на более крупном пакете.

Идею хорошо схватывает бочка для дождевой воды. Маленькая кружка не может полить весь сад за раз, поэтому вы выливаете несколько кружек в бочку, а затем используете уже набранный объём. Накопление градиента собирает несколько маленьких вкладов в градиент перед одним обновлением. Фигура ниже — буквально этот же процесс: каждое новое слагаемое — это одна кружка, а растущие столбики — бочка, наполняющаяся до своей суммы. Накопление градиента — это частичная сумма градиентов, которую вы обналичиваете одним-единственным шагом.

Где это встречается в MLНакопление градиента часто применяют для больших языковых моделей, больших изображений и при ограниченной памяти GPU. Оно позволяет командам выбирать эффективный размер пакета, не требуя, чтобы весь пакет помещался в память сразу.
▶ Накопление градиента
← Масштабирование размера пакетаИнициализация и масштаб сигнала →