Разъяснение по выводу обратного подпорки остаточного слоя NN

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

Если формулой для расчета выходных данных нормального скрытого слоя является F(x), то формулой для скрытого слоя с остаточным соединением является F(x) + o, где x - скорректированный по весу результат предыдущего слоя, o - вывод предыдущего слоя, а F - функция активации. Чтобы получить дельту для нормального слоя во время обратного распространения, необходимо рассчитать градиент выхода ∂F(x)/∂x. Для остаточного слоя это ∂(F(x) + o)/∂x, которое делится на ∂F(x)/∂x + ∂o/∂x (1).

Если все это правильно, как справиться с ∂o/∂x? Мне кажется, что это зависит от того, как далеко назад в сети происходит.

  • Если o только что из предыдущего слоя, то o*w=x, где w - веса, соединяющие предыдущий слой со слоем для F(x). Если взять производную каждой стороны относительно o, то получим ∂(o*w)/∂o = ∂x/ ando, и в результате получим w = ∂x/do, который является обратной величиной слагаемого, полученного в (1) выше. Имеет ли смысл, что в этом случае градиент остаточного слоя равен просто ∂F(x)/∂x + 1/w? Точно ли интерпретировать 1 / w как обратную матрицу? Если так, то действительно ли это вычисляется средами NN, которые используют остаточные соединения, или есть какой-то ярлык, который предназначен для добавления ошибки из остаточного?

  • Если o находится дальше в сети, то, я думаю, деривация становится немного более сложной. Вот пример, где остаток поступает с одного уровня дальше обратно в сеть. Архитектура сети является Input -w1 -L1- w2 -L2- w3 -L3- Out, имеющей остаточное соединение от уровней L1 до L3. Символ o из первого примера заменен выходом L1 слоя для однозначности. Мы пытаемся вычислить градиент в L3 во время обратной подпорки, которая имеет прямую функцию F(x)+L1, где x=F(F(L1*w2)*w3). Производная этого отношения - ∂x/∂L1=∂F(F(L1*w2)*w3/∂L1, что является более сложным, но не кажется слишком сложным для численного решения.

Если приведенный выше вывод является обоснованным, то стоит отметить, что существует случай, когда вывод не удается, и это происходит, когда остаточное соединение происходит из уровня ввода. Это потому, что входные данные не могут быть разбиты на выражение a o*w=x (где x будет входными значениями). Я думаю, это должно предполагать, что остаточные слои не могут происходить из входного слоя, но, поскольку я видел диаграммы сетевой архитектуры, которые имеют остаточные соединения, которые происходят из входных данных, это ставит под сомнение мои вышеупомянутые выводы. Я не вижу, где я ошибся. Если кто-то может предоставить деривацию или пример кода для правильного расчета градиента в остаточных точках слияния, я был бы глубоко признателен.

РЕДАКТИРОВАТЬ:

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

Исходя из того, что я видел (читая первые несколько страниц форумов Google, читая основные статьи и просматривая видео-лекции) и поста Максима внизу, я начинаю думать, что ответ таков: ∂o/∂x = 0 и что мы рассматриваем о как константу.

Кто-нибудь делает что-то особенное во время обратной пропуска через NN с остаточными слоями? Если нет, то означает ли это, что остаточные уровни являются "активной" частью сети только на прямом проходе?

1 ответ

Решение

Я думаю, что вы немного усложнили остаточные сети. Вот ссылка на оригинальную статью Kaiming He в al.

В разделе 3.2 они описывают ярлыки "идентичности" как y = F(x, W) + x, где W являются обучаемыми параметрами. Вы можете понять, почему это называется "идентичность": значение из предыдущего слоя добавляется как есть, без каких-либо сложных преобразований. Это делает две вещи:

  • F теперь учится остаточный y - x (обсуждается в 3.1), короче: легче учиться.
  • Сеть получает дополнительное соединение с предыдущим уровнем, что улучшает поток градиентов.

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

Теперь авторы статьи идут немного дальше и рассматривают несколько более сложную версию F, который изменяет выходные размеры (что, вероятно, вы имели в виду). Они пишут это вообще как y = F(x, W) + Ws * x, где Ws это матрица проекции. Обратите внимание, что, хотя она написана как матричное умножение, эта операция на самом деле очень проста: она добавляет дополнительные нули к x чтобы сделать его форму больше. Вы можете прочитать обсуждение этой операции в этом вопросе. Но это очень мало меняет в обратном направлении: сообщение об ошибке просто обрезается до первоначальной формы x,

Другие вопросы по тегам