June 21, 2023

Обзор на обзор Understanding Optimization of Deep Learning

Данный пост будет в необычном формате.

Обзор на обзор, он же обзор 2-го порядка.

На днях в ряде тг каналов упоминался обзор Understanding Optimization of Deep Learning.

В целом, неплохой обзор с множеством практических рекомендаций, довольно полезный для начинающих и продолжающих. Более опытный же DL-практик вряд ли найдет себя много нового, хотя есть ряд неожиданных фактов и знаний.

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

Основные идеи и положения:

  • Нормализационные слои помогают оптимизации. BatchNorm стабильнее LayerNorm, но у последнего шире область применения.
  • Skip connections помогают оптимизации
  • Self-attention - выразительная операция, однако не Липшицева, что значительно затрудняет оптимизацию в трансформерах. Поэтому обучение имеет свойство расходиться без аккуратной подстройки learning_rate, warmup, weight_decay.
  • Затухающие активации (а-ля сигмоида) приводят к затуханию градиентов, ReLU отключает половину градиентов, GeLU, Swish и им подобные не имеют подобных проблем.
  • Инициализация принципиальна для сходимости. Инициализация из распределения с нулевым средним и стандартным отклонением порядка 1 / \sqrt{d} (d - размерность входного слоя) необходима для стабильного обучения. Для глубоких сетей еще можно добавлять фактор 1 / \sqrt{L} (L - число слоев) для большей стабильности.
  • Drop Path (отбрасывание Residual части) эффективно снижает постоянную Липшица.
  • Adam и другие адаптивные оптимизаторы более устойчивы в большом значению константы Липшица по сравнению с обычным SGD (из-за preconditioning). Потому предпочтительны (и почти необходимы) для обучения трансформеров.
  • Weight decay эффективно понижает константу Липшица. В своем роде он выступает в качестве сжимающего отображения.

Из интересного и не столь на слуху:

1) Стандартный attention имеет бесконечную постоянную Липшица, затрудняя обучение, альтернативные варианты - L2 attention и Scaled Cosine Similarity (SCS) имеет конечную константу, потому ожидается, что должны приводить к более стабильному обучению.

L2 attention
Scaled cosine similarity attention

2) Параметры Adam по умолчанию (\beta_1, \beta_2) = (0.9, 0.999) не оптимальны при шумной оптимизации. Рекомендуемые значения \beta_2 = (0.95, 0.98). С подобным сам столкнулся при обучении T5 на WMT14, когда только понижение \beta_2 позволило стабилизировать обучение.

3) У Adam максимальное значение изменения весов ограничено сверху в отличие от SGD.

Максимальное значение шага Adam

Далее графики симуляции констант Липшица. Без residual у ResNet они быстро растут с глубиной, а для трансформеров residual не так важен, как выбор attention.

Без слоев нормализации в трансформерах все совсем плохо, но для ResNet будто бы константа Липшица даже меньше.

Итого, в целом добротный перечень хороших практик и знаний по оптимизации. Про саму оптимизацию можно говорить бесконечно долго, и человечество еще далеко от сходимости в понимания всех аспектов оптимизации нейронных сетей.

Тем интереснее, как говорится.