Проблема взрыва градиентов

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: {{well|Статья написана с использованием LLM '''Gemini 1.5 Pro''' и проверена участником ~~~~}} '''Проблема взрыва град...)
 
Строка 1: Строка 1:
-
{{well|Статья написана с использованием LLM '''Gemini 1.5 Pro''' и проверена участником [[Участник:Said Mavletov|Said Mavletov]] 20:24, 12 июля 2026 (MSD)}}
+
{{well|Статья написана с использованием LLM '''Gemini''' и доработана участником [[Участник:Said Mavletov|Said Mavletov]] 21:53, 14 июля 2026 (MSD)}}
-
'''Проблема взрыва градиентов''' (англ. ''exploding gradient problem'') — это феномен численной нестабильности, возникающий при обучении глубоких [[Нейросеть|нейронных сетей]] (особенно [[Рекуррентная нейронная сеть|рекуррентных]]), при котором ошибки, распространяющиеся в обратном направлении по сети, экспоненциально накапливаются и принимают аномально большие значения. Это приводит к гигантским обновлениям весов, из-за чего алгоритм оптимизации не может сойтись к минимуму, а значения параметров часто переполняются, превращаясь в `NaN` (Not a Number).
+
'''Проблема взрыва градиентов''' ([[gradient exploding problem]]) — одна из классических трудностей, возникающих при обучении глубоких [[Искусственная нейронная сеть|нейронных сетей]] (Artificial Neural Networks, ANN) и [[Рекуррентная нейронная сеть|рекуррентных нейронных сетей]] (Recurrent Neural Networks, RNN) с помощью алгоритма [[Градиентный спуск|градиентного спуска]] (Gradient Descent) и метода [[Обратное распространение ошибки|обратного распространения ошибки]] (Backpropagation). Она заключается в лавинообразном, экспоненциальном росте величины градиентов функции потерь по мере их распространения от выходных слоев к входным.
-
Вместе с противоположным феноменом — [[Проблема затухания градиентов|затуханием градиентов]] (vanishing gradient) — эта проблема является одной из классических сложностей оптимизации глубоких архитектур.
+
Это явление приводит к численной нестабильности: обновления параметров становятся слишком большими, веса модели совершают резкие колебания или принимают нечисловые значения (not-a-number, <tex>\text{NaN}</tex> или <tex>\pm\infty</tex>), из-за чего процесс обучения расходится.
-
== Интуитивное понимание и симптомы ==
+
== История исследования ==
-
Механику взрыва градиентов проще всего понять через аналогию с игрой в «испорченный телефон» с усилителем.
+
-
[[Метод обратного распространения ошибки]] работает по правилу цепного дифференцирования (chain rule): чтобы вычислить изменение весов в первом слое, алгоритм перемножает производные всех последующих слоев. Если локальные градиенты (или элементы матрицы весов) на каждом слое систематически превышают единицу по модулю, то в сети из 50 слоев итоговый сигнал будет усиливаться экспоненциально. В рекуррентных сетях, разворачивающихся на тысячи шагов во времени, этот множитель стремится к бесконечности.
+
Проблема нестабильности градиентов начала активно обсуждаться в научном сообществе на рубеже 1980–1990-х годов.
 +
* В 1986 году Дэвид Румельхарт (David Rumelhart) и соавторы, популяризируя алгоритм обратного распространения ошибки, эмпирически обнаружили сложности с обучением многослойных структур. Формальная теория причин этих сложностей появилась позже.
 +
* В 1991 году Сепп Хохрайтер (Sepp Hochreiter) в своей дипломной работе формально показал, что при использовании стандартных функций активации градиенты неизбежно либо затухают, либо взрываются.
 +
* В 1994 году Йошуа Бенджио (Yoshua Bengio) с соавторами математически доказали, что обучение долгосрочным зависимостям в RNN с помощью градиентного спуска является крайне сложной задачей из-за экспоненциальной динамики градиентов.
 +
* В 2013 году Разван Паскану (Razvan Pascanu) и соавторы провели глубокий анализ динамических систем, лежащих в основе RNN, и предложили практический метод решения — клиппинг градиентов.
-
В результате алгоритм делает слишком большой шаг в пространстве параметров и «перепрыгивает» оптимальное решение.
+
== Интуитивное объяснение и связь с затуханием градиентов ==
-
=== Типичные симптомы в процессе обучения ===
+
Чтобы понять суть проблемы, представим простейшую нейронную сеть без нелинейных функций активации, состоящую из <tex>d</tex> слоев, где на каждом шаге входной сигнал умножается на некоторый скалярный вес <tex>w</tex>:
-
Взрыв градиентов легко диагностировать по логам обучения:
+
:<tex>\hat{y} = w \cdot w \cdot \dots \cdot w \cdot x = w^d x</tex>
-
* Модель демонстрирует резкие скачки значения функции потерь (loss) после периода стабильного снижения.
+
-
* Функция потерь принимает значение `NaN` или `Inf`.
+
-
* Веса модели становятся слишком большими, что приводит к численному переполнению (overflow) в типах данных (например, float16).
+
-
== Математические основания ==
+
По правилу дифференцирования сложной функции производная выхода по весу пропорциональна:
-
В рекуррентной нейронной сети скрытое состояние на шаге ''t'' вычисляется как ''h<sub>t</sub> = f(W h<sub>t-1</sub> + U x<sub>t</sub>)'', где ''W'' — матрица рекуррентных весов.
+
:<tex>\frac{\partial \hat{y}}{\partial w} = d \cdot w^{d-1} \cdot x</tex>
-
При использовании алгоритма обратного распространения ошибки сквозь время ([[BPTT]]), градиент функции потерь ''L'' по весам ''W'' требует вычисления производной скрытого состояния на шаге ''T'' по состоянию на более раннем шаге ''k''. Это выражается через произведение матриц Якоби:
+
При большой глубине сети (например, <tex>d = 100</tex>) поведение градиента критически зависит от величины <tex>w</tex>:
 +
# Если <tex>|w| < 1</tex> (например, <tex>w = 0.9</tex>), то производная стремится к нулю (<tex>\approx 0.00003</tex>). Это [[Проблема затухания градиентов]] (Gradient Vanishing Problem).
 +
# Если <tex>|w| > 1</tex> (например, <tex>w = 1.1</tex>), то производная экспоненциально возрастает (<tex>1.1^{99} \approx 12527</tex>). Это и есть '''взрыв градиентов'''.
-
''∂h<sub>T</sub> / ∂h<sub>k</sub> = ∏<sub>i=k+1...T</sub> (∂h<sub>i</sub> / ∂h<sub>i-1</sub>) = ∏<sub>i=k+1...T</sub> W<sup>T</sup> diag(f'(...))''
+
Обе проблемы имеют общую природу и часто рассматриваются совместно. Основную роль в их возникновении играют спектральные свойства произведения операторов, включающего весовые матрицы и производные функций активации, а также структура сети и методы нормализации.
-
Если наибольшее сингулярное число матрицы весов ''W'' строго больше 1, а производная функции активации недостаточно мала для компенсации этого роста, спектральная норма произведения матриц будет расти экспоненциально с увеличением расстояния ''T - k''.
+
== Математический анализ проблемы ==
-
== Инженерные решения ==
+
Рассмотрим глубокую полносвязную нейронную сеть прямого распространения с <tex>d</tex> слоями:
-
В современном [[Машинное обучение|машинном обучении]] проблема контролируется стандартными практиками проектирования и оптимизации.
+
:<tex>z_l = W_l a_{l-1} + b_l,</tex>
 +
:<tex>a_l = \sigma(z_l),</tex>
 +
где <tex>W_l</tex> — матрица весов, <tex>\sigma</tex> — [[Функция активации]] (Activation Function).
-
=== 1. Усечение градиентов (Gradient Clipping) ===
+
Градиент функции потерь <tex>L</tex> по весам первого слоя <tex>W_1</tex> вычисляется через цепное правило:
-
Наиболее надежный метод, предложенный Р. Паскану. Если норма вектора градиента ''||g||'' превышает заданный порог ''c'', градиент масштабируется:
+
:<tex>\frac{\partial L}{\partial W_1} = \frac{\partial L}{\partial z_d} \left( \prod_{t=2}^d \frac{\partial z_t}{\partial z_{t-1}} \right) \frac{\partial z_1}{\partial W_1}</tex>
-
''g ← c · (g / ||g||)''
+
Произведение матриц Якоби (Jacobians) перехода между слоями имеет вид:
 +
:<tex>\prod_{t=2}^d \frac{\partial z_t}{\partial z_{t-1}} = \prod_{t=2}^d W_t D_{t-1}</tex>
 +
где <tex>D_{t-1} = \operatorname{diag}(\sigma'(z_{t-1}))</tex> — диагональная матрица производных функции активации.
-
Это сохраняет направление вектора, но уменьшает его длину, позволяя алгоритму [[Градиентный спуск|градиентного спуска]] безопасно проходить области с высокой кривизной поверхности функции потерь.
+
Норма этого произведения ограничена сверху:
 +
:<tex>\left\| \frac{\partial z_d}{\partial z_1} \right\| \le \prod_{t=2}^d \|W_t\| \|D_{t-1}\|</tex>
-
=== 2. Архитектурные инновации ===
+
Так как производные большинства популярных функций активации ограничены (например, у sigmoid максимум равен 0.25, а у ReLU производная почти всюду равна 0 или 1, хотя в нуле не определена), главной причиной взрыва градиентов становятся нормы весовых матриц <tex>W_t</tex>. Если они существенно больше единицы, норма итогового градиента будет расти экспоненциально с ростом глубины <tex>d</tex>.
-
* '''[[ResNet|Остаточные связи]] (Residual Connections):''' Создают «короткие пути» (тождественные отображения) для распространения сигнала в глубоких сетях, снижая риск нестабильности градиентов при прохождении через множество слоев.
+
-
* '''Нормализация (Normalization):''' Применение [[Batch Normalization]] в сетях прямого распространения или Layer Normalization в архитектурах Трансформер сглаживает поверхность потерь и стабилизирует дисперсию активаций.
+
-
* '''Вентильные механизмы:''' Популярные архитектуры [[LSTM]] и [[GRU]] исторически создавались для борьбы с затуханием градиентов, однако их внутренние механизмы гейтирования обеспечивают более стабильное прохождение градиентов в обе стороны.
+
-
В современных архитектурах (таких как Трансформер) проблема взрыва градиентов обычно менее выражена благодаря комплексному использованию Layer Normalization, остаточных связей и специфических расписаний скорости обучения (learning rate warmup).
+
=== Особенности в рекуррентных сетях (RNN) ===
-
=== 3. Инициализация весов ===
+
В RNN ситуация усугубляется переиспользованием одной и той же матрицы скрытого состояния <tex>W_{hh}</tex> на каждом шаге по времени. При применении алгоритма [[Обратное распространение ошибки во времени]] (BPTT) для последовательности длины <tex>T</tex> возникает произведение:
-
Использование методов Хаймина (He) или Ксавье (Xavier) позволяет сохранить дисперсию активаций и градиентов примерно одинаковой на всех слоях. Для рекуррентных сетей применяется ортогональная инициализация (Orthogonal Initialization), при которой матрица весов изначально имеет сингулярные числа, равные единице.
+
:<tex>\frac{\partial h_T}{\partial h_1} = \prod_{t=2}^T W_{hh} D_t</tex>
 +
 
 +
Одним из важных факторов, способствующих взрыву градиентов в этом случае, является превышение [[Спектральный радиус|спектральным радиусом]] <tex>\rho(W_{hh})</tex> (максимальным по модулю собственным значением) единицы.
 +
 
 +
== Практическая диагностика ==
 +
 
 +
Взрыв градиентов можно диагностировать по следующим признакам:
 +
# '''Появление NaN или Inf:''' Значение функции потерь (loss) внезапно принимает нечисловое значение из-за арифметического переполнения при вычислении градиентов или обновлении весов.
 +
# '''Аномальный график функции потерь:''' Loss демонстрирует резкие, многократные скачки (spikes) вверх, после которых модель может перестать обучаться.
 +
# '''Экспоненциальный рост нормы градиента:''' При мониторинге нормы вектора градиентов <tex>\|g\|_2</tex> наблюдается её лавинообразный рост на несколько порядков.
 +
 
 +
== Методы снижения влияния проблемы ==
 +
 
 +
=== Процедурные методы ===
 +
 
 +
Наиболее распространенным подходом в инженерии является принудительное ограничение градиентов — [[Клиппинг градиента|Gradient Clipping]]. Чаще всего используется клиппинг по норме (Norm Clipping), который сохраняет направление вектора:
 +
:<tex>g \leftarrow \begin{cases} g, & \|g\|_2 \le c \\ c \frac{g}{\|g\|_2}, & \|g\|_2 > c \end{cases}</tex>
 +
 
 +
Также существенную роль играет [[Нормализация по батчам]] (Batch Normalization) и [[Нормализация слоев]] (Layer Normalization). Стабилизируя распределение активаций, они способствуют более стабильной оптимизации и косвенно уменьшают риск нестабильности, позволяя использовать большие шаги обучения (learning rate).
 +
 
 +
=== Архитектурные методы ===
 +
 
 +
* '''Остаточные связи (Residual Connections):''' Внедрение аддитивных связей (<tex>a_l = \mathcal{F}(a_{l-1}) + a_{l-1}</tex>) в сетях типа ResNet существенно уменьшает влияние проблемы. При дифференцировании появляется единичная матрица, позволяющая градиенту проходить в обход нелинейных преобразований.
 +
* '''Модифицированные RNN (LSTM / GRU):''' Архитектуры [[Долговременная краткосрочная память|LSTM]] и [[Рекуррентный блок с управляемыми вентилями|GRU]] используют механизмы вентилей (gates) и аддитивный канал состояния ячейки (cell state), что делает протекание градиентов во времени более устойчивым.
 +
* '''Архитектура Transformer:''' В современных моделях [[Трансформер (архитектура нейронных сетей)|Transformer]] проблема взрыва градиентов выражена гораздо слабее. Это достигается за счет комбинации сквозных остаточных связей, обязательного использования LayerNorm и грамотной инициализации весов.
 +
 
 +
== Практические рекомендации ==
 +
 
 +
При обучении современных глубоких моделей инженеры, как правило, используют комплексный подход, одновременно применяя:
 +
* Правильную инициализацию (Xavier или He);
 +
* Современные адаптивные оптимизаторы с регуляризацией (например, AdamW);
 +
* Клиппинг градиентов (например, <code>clip_grad_norm_</code> в PyTorch);
 +
* Методы нормализации (LayerNorm или BatchNorm);
 +
* Архитектурные решения с остаточными связями.
 +
 
 +
Пример использования клиппинга в PyTorch перед шагом оптимизатора:
 +
<source lang="python">
 +
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
 +
optimizer.step()
 +
</source>
 +
 
 +
Современные архитектуры почти всегда задействуют сразу несколько описанных выше механизмов стабилизации обучения, поэтому проблема взрыва градиентов проявляется значительно реже, чем в ранних глубоких и рекуррентных сетях. Однако она по-прежнему остается актуальной при обучении очень глубоких моделей, рекуррентных архитектур со сложной динамикой и при использовании слишком высоких скоростей обучения.
== Литература ==
== Литература ==
-
* {{статья | автор = Pascanu R., Mikolov T., Bengio Y. | заглавие = On the difficulty of training recurrent neural networks | журнал = International Conference on Machine Learning (ICML) | год = 2013 | страницы = 1310-1318 }}
+
 
-
* {{статья | автор = Glorot X., Bengio Y. | заглавие = Understanding the difficulty of training deep feedforward neural networks | журнал = Proceedings of the thirteenth international conference on artificial intelligence and statistics | год = 2010 | страницы = 249-256 }}
+
* {{книга
-
* {{книга | автор = Goodfellow I., Bengio Y., Courville A. | заглавие = Deep Learning | издательство = MIT Press | год = 2016 }}
+
| автор = Goodfellow I., Bengio Y., Courville A.
 +
| заглавие = Deep Learning
 +
| издательство = MIT Press
 +
| год = 2016
 +
| ссылка = http://www.deeplearningbook.org
 +
}}
 +
* {{статья
 +
| автор = Bengio Y., Simard P., Frasconi P.
 +
| заглавие = Learning long-term dependencies with gradient descent is difficult
 +
| издание = IEEE Transactions on Neural Networks
 +
| год = 1994
 +
| том = 5
 +
| номер = 2
 +
| страницы = 157–166
 +
| doi = 10.1109/72.279181
 +
}}
 +
* {{статья
 +
| автор = Hochreiter S.
 +
| заглавие = Untersuchungen zu dynamischen neuronalen Netzen
 +
| издание = Diploma thesis, Institut für Informatik, Technische Universität München
 +
| год = 1991
 +
}}
 +
* {{статья
 +
| автор = Pascanu R., Mikolov T., Bengio Y.
 +
| заглавие = On the difficulty of training recurrent neural networks
 +
| издание = International Conference on Machine Learning (ICML)
 +
| год = 2013
 +
| страницы = 1310–1318
 +
}}
 +
* {{статья
 +
| автор = Glorot X., Bengio Y.
 +
| заглавие = Understanding the difficulty of training deep feedforward neural networks
 +
| издание = AISTATS
 +
| год = 2010
 +
| страницы = 249–256
 +
}}
 +
* {{статья
 +
| автор = He K., Zhang X., Ren S., Sun J.
 +
| заглавие = Deep residual learning for image recognition
 +
| издание = CVPR
 +
| год = 2016
 +
| страницы = 770–778
 +
| doi = 10.1109/CVPR.2016.90
 +
}}
[[Категория:Машинное обучение]]
[[Категория:Машинное обучение]]
-
[[Категория:Обучение нейронных сетей]]
+
[[Категория:Нейронные сети]]
-
[[Категория:Математическая оптимизация]]
+

Текущая версия

Статья написана с использованием LLM Gemini и доработана участником Said Mavletov 21:53, 14 июля 2026 (MSD)


Проблема взрыва градиентов (gradient exploding problem) — одна из классических трудностей, возникающих при обучении глубоких нейронных сетей (Artificial Neural Networks, ANN) и рекуррентных нейронных сетей (Recurrent Neural Networks, RNN) с помощью алгоритма градиентного спуска (Gradient Descent) и метода обратного распространения ошибки (Backpropagation). Она заключается в лавинообразном, экспоненциальном росте величины градиентов функции потерь по мере их распространения от выходных слоев к входным.

Это явление приводит к численной нестабильности: обновления параметров становятся слишком большими, веса модели совершают резкие колебания или принимают нечисловые значения (not-a-number, \text{NaN} или \pm\infty), из-за чего процесс обучения расходится.

Содержание

История исследования

Проблема нестабильности градиентов начала активно обсуждаться в научном сообществе на рубеже 1980–1990-х годов.

  • В 1986 году Дэвид Румельхарт (David Rumelhart) и соавторы, популяризируя алгоритм обратного распространения ошибки, эмпирически обнаружили сложности с обучением многослойных структур. Формальная теория причин этих сложностей появилась позже.
  • В 1991 году Сепп Хохрайтер (Sepp Hochreiter) в своей дипломной работе формально показал, что при использовании стандартных функций активации градиенты неизбежно либо затухают, либо взрываются.
  • В 1994 году Йошуа Бенджио (Yoshua Bengio) с соавторами математически доказали, что обучение долгосрочным зависимостям в RNN с помощью градиентного спуска является крайне сложной задачей из-за экспоненциальной динамики градиентов.
  • В 2013 году Разван Паскану (Razvan Pascanu) и соавторы провели глубокий анализ динамических систем, лежащих в основе RNN, и предложили практический метод решения — клиппинг градиентов.

Интуитивное объяснение и связь с затуханием градиентов

Чтобы понять суть проблемы, представим простейшую нейронную сеть без нелинейных функций активации, состоящую из d слоев, где на каждом шаге входной сигнал умножается на некоторый скалярный вес w:

\hat{y} = w \cdot w \cdot \dots \cdot w \cdot x = w^d x

По правилу дифференцирования сложной функции производная выхода по весу пропорциональна:

\frac{\partial \hat{y}}{\partial w} = d \cdot w^{d-1} \cdot x

При большой глубине сети (например, d = 100) поведение градиента критически зависит от величины w:

  1. Если |w| < 1 (например, w = 0.9), то производная стремится к нулю (\approx 0.00003). Это Проблема затухания градиентов (Gradient Vanishing Problem).
  2. Если |w| > 1 (например, w = 1.1), то производная экспоненциально возрастает (1.1^{99} \approx 12527). Это и есть взрыв градиентов.

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

Математический анализ проблемы

Рассмотрим глубокую полносвязную нейронную сеть прямого распространения с d слоями:

z_l = W_l a_{l-1} + b_l,
a_l = \sigma(z_l),

где W_l — матрица весов, \sigmaФункция активации (Activation Function).

Градиент функции потерь L по весам первого слоя W_1 вычисляется через цепное правило:

\frac{\partial L}{\partial W_1} = \frac{\partial L}{\partial z_d} \left( \prod_{t=2}^d \frac{\partial z_t}{\partial z_{t-1}} \right) \frac{\partial z_1}{\partial W_1}

Произведение матриц Якоби (Jacobians) перехода между слоями имеет вид:

\prod_{t=2}^d \frac{\partial z_t}{\partial z_{t-1}} = \prod_{t=2}^d W_t D_{t-1}

где D_{t-1} = \operatorname{diag}(\sigma'(z_{t-1})) — диагональная матрица производных функции активации.

Норма этого произведения ограничена сверху:

\left\| \frac{\partial z_d}{\partial z_1} \right\| \le \prod_{t=2}^d \|W_t\| \|D_{t-1}\|

Так как производные большинства популярных функций активации ограничены (например, у sigmoid максимум равен 0.25, а у ReLU производная почти всюду равна 0 или 1, хотя в нуле не определена), главной причиной взрыва градиентов становятся нормы весовых матриц W_t. Если они существенно больше единицы, норма итогового градиента будет расти экспоненциально с ростом глубины d.

Особенности в рекуррентных сетях (RNN)

В RNN ситуация усугубляется переиспользованием одной и той же матрицы скрытого состояния W_{hh} на каждом шаге по времени. При применении алгоритма Обратное распространение ошибки во времени (BPTT) для последовательности длины T возникает произведение:

\frac{\partial h_T}{\partial h_1} = \prod_{t=2}^T W_{hh} D_t

Одним из важных факторов, способствующих взрыву градиентов в этом случае, является превышение спектральным радиусом \rho(W_{hh}) (максимальным по модулю собственным значением) единицы.

Практическая диагностика

Взрыв градиентов можно диагностировать по следующим признакам:

  1. Появление NaN или Inf: Значение функции потерь (loss) внезапно принимает нечисловое значение из-за арифметического переполнения при вычислении градиентов или обновлении весов.
  2. Аномальный график функции потерь: Loss демонстрирует резкие, многократные скачки (spikes) вверх, после которых модель может перестать обучаться.
  3. Экспоненциальный рост нормы градиента: При мониторинге нормы вектора градиентов \|g\|_2 наблюдается её лавинообразный рост на несколько порядков.

Методы снижения влияния проблемы

Процедурные методы

Наиболее распространенным подходом в инженерии является принудительное ограничение градиентов — Gradient Clipping. Чаще всего используется клиппинг по норме (Norm Clipping), который сохраняет направление вектора:

g \leftarrow \begin{cases} g, & \|g\|_2 \le c \\ c \frac{g}{\|g\|_2}, & \|g\|_2 > c \end{cases}

Также существенную роль играет Нормализация по батчам (Batch Normalization) и Нормализация слоев (Layer Normalization). Стабилизируя распределение активаций, они способствуют более стабильной оптимизации и косвенно уменьшают риск нестабильности, позволяя использовать большие шаги обучения (learning rate).

Архитектурные методы

  • Остаточные связи (Residual Connections): Внедрение аддитивных связей (a_l = \mathcal{F}(a_{l-1}) + a_{l-1}) в сетях типа ResNet существенно уменьшает влияние проблемы. При дифференцировании появляется единичная матрица, позволяющая градиенту проходить в обход нелинейных преобразований.
  • Модифицированные RNN (LSTM / GRU): Архитектуры LSTM и GRU используют механизмы вентилей (gates) и аддитивный канал состояния ячейки (cell state), что делает протекание градиентов во времени более устойчивым.
  • Архитектура Transformer: В современных моделях Transformer проблема взрыва градиентов выражена гораздо слабее. Это достигается за счет комбинации сквозных остаточных связей, обязательного использования LayerNorm и грамотной инициализации весов.

Практические рекомендации

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

  • Правильную инициализацию (Xavier или He);
  • Современные адаптивные оптимизаторы с регуляризацией (например, AdamW);
  • Клиппинг градиентов (например, clip_grad_norm_ в PyTorch);
  • Методы нормализации (LayerNorm или BatchNorm);
  • Архитектурные решения с остаточными связями.

Пример использования клиппинга в PyTorch перед шагом оптимизатора:

torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
optimizer.step()

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

Литература

  • Goodfellow I., Bengio Y., Courville A. Deep Learning. — MIT Press, 2016.
  • Bengio Y., Simard P., Frasconi P. Learning long-term dependencies with gradient descent is difficult // IEEE Transactions on Neural Networks. — 1994. — Т. 5. — № 2. — С. 157–166.
  • Hochreiter S. Untersuchungen zu dynamischen neuronalen Netzen // Diploma thesis, Institut für Informatik, Technische Universität München. — 1991.
  • Pascanu R., Mikolov T., Bengio Y. On the difficulty of training recurrent neural networks // International Conference on Machine Learning (ICML). — 2013. — С. 1310–1318.
  • Glorot X., Bengio Y. Understanding the difficulty of training deep feedforward neural networks // AISTATS. — 2010. — С. 249–256.
  • He K., Zhang X., Ren S., Sun J. Deep residual learning for image recognition // CVPR. — 2016. — С. 770–778.
Личные инструменты