Глубокая нейронная сеть - обратная связь с ReLU

17

У меня есть некоторые трудности с получением обратного распространения с помощью ReLU, и я проделал некоторую работу, но я не уверен, что я на правильном пути.

Функция стоимости: 12(yy^)2гдеyпредставляет собой реальное значение, и у представляет собой предсказанное значение. Также предположим, чтоx> 0 всегда.y^x


1 слой ReLU, где вес на 1-м слое равен w1

введите описание изображения здесь

dCdw1=dCdRdRdw1

dCw1=(yReLU(w1x))(x)


2 слой ReLU, где весовые коэффициенты на 1-м слое w2 , а на 2-м слое - w1 И я хотел обновить 1-й слой w2

введите описание изображения здесь

dCdw2=dCdRdRdw2

dCw2=(yReLU(w1ReLU(w2x))(w1x)

Поскольку ReLU(w1ReLU(w2x))=w1w2x


Трехуровневый ReLU, где весовые коэффициенты на 1-м уровне , 2-го уровня w 2 и 3-го уровня w 1w3w2w1

введите описание изображения здесь

dCdw3=dCdRdRdw3

dCw3=(yReLU(w1ReLU(w2(ReLU(w3)))(w1w2x)

Поскольку ReLU(w1ReLU(w2(ReLU(w3))=w1w2w3x

Так как правило цепочки действует только с 2 производными, по сравнению с сигмоидом, который может быть до слоев.n


Скажем, я хотел обновить все 3 веса слоя, где - 3-й слой, w 2 - 2 -й слой, ww1w2 - 3-й слойw1

dCw1=(yReLU(w1x))(x)

dCw2=(yReLU(w1ReLU(w2x))(w1x)

dCw3=(yReLU(w1ReLU(w2(ReLU(w3)))(w1w2x)

Если этот вывод правильный, как это предотвращает исчезновение? По сравнению с сигмоидом, где в уравнении мы много умножаем на 0,25, тогда как ReLU не имеет никакого умножения на постоянное значение. Если есть тысячи слоев, будет много умножения из-за весов, то не приведет ли это к исчезновению или взрыву градиента?

user1157751
источник
@NeilSlater Спасибо за ваш ответ! Можете ли вы уточнить, я не уверен, что вы имели в виду?
user1157751
Ах, я думаю, я знаю, что вы имели в виду. Ну, причина, по которой я поднял этот вопрос, в том, что я уверен, что вывод правильный? Я искал вокруг и не нашел пример ReLU, полученный полностью с нуля?
user1157751

Ответы:

15

Рабочие определения функции ReLU и ее производной:

ReLU(x)={0,if x<0,x,otherwise.

ddxReLU(x)={0,if x<0,1,otherwise.

Производная - это функция единичного шага . Это игнорирует проблему при x=0 , где градиент не является строго определенным, но это не является практической проблемой для нейронных сетей. В приведенной выше формуле производная на 0 равна 1, но вы можете также рассматривать ее как 0 или 0,5 без реального влияния на производительность нейронной сети.


Упрощенная сеть

С этими определениями, давайте посмотрим на ваши примеры сетей.

Вы выполняете регрессию с функцией затрат C=12(yy^)2. Вы определилиRкак выход искусственного нейрона, но вы не определили входное значение. Я добавлю это для полноты - назовите егоz, добавьте индексирование по слоям, и я предпочитаю строчные для векторов и строчные для матриц, так чтоr(1)вывод первого слоя,z(1) для его вход иW(0) для весасоединяющего нейрон на его входx(в большой сети, которые могут подключаться к более глубокомуrзначение вместо). Я также скорректировал номер индекса для весовой матрицы - почему это станет понятнее для большой сети. NB. На данный момент я игнорирую наличие большего количества нейронов в каждом слое.

Глядя на вашу простую 1 слой, 1 нейронную сеть, уравнения прямой связи:

z(1)=W(0)x

y^=r(1)=ReLU(z(1))

Производная функции стоимости по примерной оценке:

Cy^=Cr(1)=r(1)12(yr(1))2=12r(1)(y22yr(1)+(r(1))2)=r(1)y

Использование правила цепочки для обратного распространения до значения перед преобразованием ( z ):

Cz(1)=Cr(1)r(1)z(1)=(r(1)y)Step(z(1))=(ReLU(z(1))y)Step(z(1))

Это Cz(1) является промежуточным этапом и критической частью backprop, связывающих шаги вместе. Производные часто пропускают эту часть, потому что умные комбинации функции стоимости и выходного слоя означают, что это упрощено. Здесь это не так.

Чтобы получить градиент по отношению к весу W(0) , это еще одна итерация правила цепочки:

CW(0)=Cz(1)z(1)W(0)=(ReLU(z(1))y)Step(z(1))x=(ReLU(W(0)x)y)Step(W(0)x)x

, , , потому что z(1)=W(0)x следовательно,Z(1)W(0)знак равноИкс

Это полное решение для вашей простейшей сети.

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


Более общая сеть ReLU

Если мы добавим более общие термины, то мы можем работать с двумя произвольными слоями. Назовите их Layer (К) проиндексированными по я , а Layer (К+1) проиндексирован по J . Веса теперь представляют собой матрицу. Итак, наши уравнения прямой связи выглядят так:

ZJ(К+1)знак равноΣяWяJ(К)ря(К)

рJ(К+1)знак равнореLU(ZJ(К+1))

рJоUTпUTрJоUTпUT-YJ, Однако проигнорируйте это сейчас и посмотрите на общий способ обратного распространения, предполагая, что мы уже нашлиСрJ(К+1) - just note that this is ultimately where we get the output cost function gradients from. Then there are 3 equations we can write out following the chain rule:

First we need to get to the neuron input before applying ReLU:

  1. Czj(k+1)=Crj(k+1)rj(k+1)zj(k+1)=Crj(k+1)Step(zj(k+1))

We also need to propagate the gradient to previous layers, which involves summing up all connected influences to each neuron:

  1. Cri(k)=jCzj(k+1)zj(k+1)ri(k)=jCzj(k+1)Wij(k)

And we need to connect this to the weights matrix in order to make adjustments later:

  1. CWij(k)=Czj(k+1)zj(k+1)Wij(k)=Czj(k+1)ri(k)

You can resolve these further (by substituting in previous values), or combine them (often steps 1 and 2 are combined to relate pre-transform gradients layer by layer). However the above is the most general form. You can also substitute the Step(zj(k+1)) in equation 1 for whatever the derivative function is of your current activation function - this is the only place where it affects the calculations.


Back to your questions:

If this derivation is correct, how does this prevent vanishing?

Your derivation was not correct. However, that does not completely address your concerns.

The difference between using sigmoid versus ReLU is just in the step function compared to e.g. sigmoid's y(1y), наносится один раз на слой. Как видно из приведенных выше общих послойных уравнений, градиент передаточной функции появляется только в одном месте. Лучшая производная сигмоида добавляет коэффициент 0,25 (когдаИксзнак равно0,Yзнак равно0,5), и это становится еще хуже, и быстро насыщается до почти нулевой производной от Иксзнак равно0, Градиент ReLU равен либо 0, либо 1, а в исправной сети достаточно 1, чтобы иметь меньшие потери градиента во время обратного распространения. Это не гарантируется, но эксперименты показывают, что ReLU имеет хорошую производительность в глубоких сетях.

Если есть тысячи слоев, будет много умножения из-за весов, то не приведет ли это к исчезновению или взрыву градиента?

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

Нил Слэйтер
источник
Было ли выполнено цепное правило dСdY^?
user1157751
@ user1157751: нет, СY^знак равноСр(1) because y^=r(1). The cost function C is simple enough that you can take its derivative immediately. The only thing I haven't shown there is the expansion of the square - would you like me to add it?
Neil Slater
But C is 12(yy^)2, don't we need to perform chain rule so that we can perform the derivative on y^? dCdy^=dCdUdUdy^, where U=yy^. Apologize for asking really simple questions, my maths ability is probably causing trouble for you : (
user1157751
Если вы можете сделать вещи проще, расширяясь. Тогда, пожалуйста, расширяйте площадь.
user1157751
@ user1157751: Да, вы можете использовать правило цепочки таким образом, и это даст тот же ответ, что и я. Я просто расширил площадь - я покажу это.
Нил Слэйтер