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