У меня есть некоторые трудности с получением обратного распространения с помощью ReLU, и я проделал некоторую работу, но я не уверен, что я на правильном пути.
Функция стоимости: гдепредставляет собой реальное значение, и у представляет собой предсказанное значение. Также предположим, чтоx> 0 всегда.
1 слой ReLU, где вес на 1-м слое равен
2 слой ReLU, где весовые коэффициенты на 1-м слое , а на 2-м слое - И я хотел обновить 1-й слой
Поскольку
Трехуровневый ReLU, где весовые коэффициенты на 1-м уровне , 2-го уровня w 2 и 3-го уровня w 1
Поскольку
Так как правило цепочки действует только с 2 производными, по сравнению с сигмоидом, который может быть до слоев.
Скажем, я хотел обновить все 3 веса слоя, где - 3-й слой, w 2 - 2 -й слой, w - 3-й слой
Если этот вывод правильный, как это предотвращает исчезновение? По сравнению с сигмоидом, где в уравнении мы много умножаем на 0,25, тогда как ReLU не имеет никакого умножения на постоянное значение. Если есть тысячи слоев, будет много умножения из-за весов, то не приведет ли это к исчезновению или взрыву градиента?
источник
Ответы:
Рабочие определения функции ReLU и ее производной:
Производная - это функция единичного шага . Это игнорирует проблему приx=0 , где градиент не является строго определенным, но это не является практической проблемой для нейронных сетей. В приведенной выше формуле производная на 0 равна 1, но вы можете также рассматривать ее как 0 или 0,5 без реального влияния на производительность нейронной сети.
Упрощенная сеть
С этими определениями, давайте посмотрим на ваши примеры сетей.
Вы выполняете регрессию с функцией затратC=12(y−y^)2 . Вы определилиR как выход искусственного нейрона, но вы не определили входное значение. Я добавлю это для полноты - назовите егоz , добавьте индексирование по слоям, и я предпочитаю строчные для векторов и строчные для матриц, так чтоr(1) вывод первого слоя,z(1) для его вход иW(0) для весасоединяющего нейрон на его входx (в большой сети, которые могут подключаться к более глубокомуr значение вместо). Я также скорректировал номер индекса для весовой матрицы - почему это станет понятнее для большой сети. NB. На данный момент я игнорирую наличие большего количества нейронов в каждом слое.
Глядя на вашу простую 1 слой, 1 нейронную сеть, уравнения прямой связи:
Производная функции стоимости по примерной оценке:
Использование правила цепочки для обратного распространения до значения перед преобразованием (z ):
Это∂C∂z(1) является промежуточным этапом и критической частью backprop, связывающих шаги вместе. Производные часто пропускают эту часть, потому что умные комбинации функции стоимости и выходного слоя означают, что это упрощено. Здесь это не так.
Чтобы получить градиент по отношению к весуW(0) , это еще одна итерация правила цепочки:
, , , потому чтоz(1)=W(0)x следовательно,∂Z( 1 )∂W( 0 )= х
Это полное решение для вашей простейшей сети.
Однако в многоуровневой сети вам также необходимо перенести ту же логику на следующий уровень. Кроме того, у вас обычно есть более одного нейрона в слое.
Более общая сеть ReLU
Если мы добавим более общие термины, то мы можем работать с двумя произвольными слоями. Назовите их Layer( к ) проиндексированными по я , а Layer ( к + 1 ) проиндексирован по J . Веса теперь представляют собой матрицу. Итак, наши уравнения прямой связи выглядят так:
First we need to get to the neuron input before applying ReLU:
We also need to propagate the gradient to previous layers, which involves summing up all connected influences to each neuron:
And we need to connect this to the weights matrix in order to make adjustments later:
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 theStep(z(k+1)j) 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:
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'sy(1−y) , наносится один раз на слой. Как видно из приведенных выше общих послойных уравнений, градиент передаточной функции появляется только в одном месте. Лучшая производная сигмоида добавляет коэффициент 0,25 (когдах = 0 , у= 0,5 ), и это становится еще хуже, и быстро насыщается до почти нулевой производной от х = 0 , Градиент ReLU равен либо 0, либо 1, а в исправной сети достаточно 1, чтобы иметь меньшие потери градиента во время обратного распространения. Это не гарантируется, но эксперименты показывают, что ReLU имеет хорошую производительность в глубоких сетях.
Да, это тоже может оказать влияние. Это может быть проблемой независимо от выбора передаточной функции. В некоторых комбинациях ReLU может также помочь контролировать взрывающиеся градиенты, потому что он не насыщает (так что большие весовые нормы, как правило, являются плохими прямыми решениями, и оптимизатор вряд ли будет двигаться к ним). Однако это не гарантируется.
источник