Перейти к основному содержимому

Остаточный блок

Один или несколько слоёв нейросети преобразуют вход zz, применяя к нему некоторую нелинейную функцию F1(z)F_1(z):

Популярным приёмом, повышающим гладкость функции потерь и упрощающим её минимизацию, является использование в архитектуре остаточного блока (residual block), выходом которого является сумма входа zz и нелинейного преобразования F(z)F(z):

Перенос входа zz в выходную сумму показан тождественной связью (skip connection), идущей сверху над блоком нелинейных преобразований F(z)F(z), а сам нелинейный блок F(z)F(z) вычисляет остаток (residual) между желаемым выходом и входом.

Размерность входа и выхода

Как видим из определения остаточного блока, преобразование F(z)F(z) должно обеспечивать такое же число выходов, каким было число входов, чтобы мы их могли сложить.

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

Если нужно снизить выходную размерность, то тождественное преобразование заменяется на линейное преобразование WzWz (с настраиваемой матрицей весов WW), приводящее размерность входа к размерности нелинейного выхода F(z)F(z) перед суммированием:

y=F(z)+Wzy = F(z)+Wz
Расположение активаций

Активация ReLU всегда выдаёт неотрицательные значения, а LeakyReLU смещает распределение в сторону неотрицательных значений. Чтобы нелинейный блок F(z)F(z) мог как увеличивать, так и уменьшать вход zz, последним преобразованием нелинейного блока ставят линейный слой без функции активации, которую переносят в начало последующего нелинейного блока.

Обычно используется не один, а сразу несколько подряд идущих остаточных блоков, как показано ниже:

что аналитически записывается как

z1=F1(z)+zy=F2(z1)+z1\begin{align*} z_1&=F_1(z)+z \\ y&=F_2(z_1)+z_1 \\ \end{align*}

Эквивалентно это можно записать как

y=F2(F1(z)+z)+F1(z)+zy = F_2(F_1(z)+z)+F_1(z)+z

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

Нейросети, использующие большое количество остаточных блоков, называются остаточными сетями (residual networks).

Преимущества остаточных сетей

Прогнозирование ансамблем

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

Естественная инициализация

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

Более устойчивая настройка

В работе [1] визуализируются градиенты (a) однослойной сети (b) глубокой сети без остаточных блоков (c) глубокой сети с использованием остаточных блоков. Как видим из рисунка ниже (источник), градиенты глубокой сети без использования остаточных блоков гораздо резче меняются, чем при их использовании, что затрудняет настройку нейросетей градиентными методами.

В работе [2] предлагается схема визуализации ландшафта функции потерь. Там также показывается, что потери становятся более гладкими при использовании остаточных блоков (источник):

Гладкие потери проще минимизировать:

  • можно обучать сеть с более высоким шагом обучение (learning rate)

  • меньше риск остановить обучение в локальном неоптимальном оптимуме.

Интуиция результатов

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

Литература

  1. Balduzzi D. et al. The shattered gradients problem: If resnets are the answer, then what is the question? //International conference on machine learning. – PMLR, 2017. – С. 342-350.
  2. Li H. et al. Visualizing the loss landscape of neural nets //Advances in neural information processing systems. – 2018. – Т. 31.