исчезающий градиент и нулевой градиент

Sep 30 2020

Существует хорошо известная проблема vanishing gradientпри BackPropagationобучении Feedforward Neural Network (FNN)(здесь мы не рассматриваем исчезающий градиент рекуррентной нейронной сети).

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

Так может ли кто-нибудь дать мне четкий ответ?

Ответы

1 JavierTG Sep 30 2020 at 20:53

Относительно низкий градиент не всегда означает, что мы достигли критической точки

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

Например, подумайте о функции $f(w_1,w_2) = 0.001w_1^2 + w_2^2\rightarrow$ для точки с похожими координатами у нас будет градиентная составляющая $1000$ раз больше в $w_2$ направление, чем в $w_1$ направление.

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

Как видим, даже далеко от минимума на $(0, 0)^T$, улучшения на $w_1$ очень мало, поэтому нам нужно много итераций, чтобы достичь минимума на $w_1$. И он достиг минимума после$1000$итераций! Так что, если бы мы инициализировали алгоритм с точкой дальнего следования, он бы вообще не достиг минимума.

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

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


Рассуждение с использованием обратного распространения ошибки с использованием простой NN

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

Как мы знаем, элемент градиента, определяемый производной функции стоимости, $C$, относительно веса $w^l$ слоя $l$, в полносвязной нейронной сети задается левым членом: $$\frac{\partial C}{\partial w^l}= \delta^l (a^{l-1})^T \,\,\,\,\,\,\,\,\xrightarrow[]{\text{in our simple NN}}\,\,\,\,\,\,\,\, \frac{\partial C}{\partial w^l}=\delta^l a^{l-1}$$

куда $\delta^l$ это термин "ошибка" ($\partial C/\partial z^l$), и $a^{l-1}$ представляет собой вектор активаций нейронов из предыдущего слоя ($l-1$). Обратите внимание, что в простой NN, представленной выше, нам не нужно транспонировать$a^{l-1}$ так как это скаляр (один нейрон на слой $\rightarrow$ одна активация на слой).

Как правило, мы можем легко вычислить "ошибку" последнего слоя ($\delta^L$), но мы не знаем, как рассчитать его для предыдущих слоев, поэтому используем обратное распространение :

$$\delta^l = \left((w^{l+1})^T\,\,\delta^{l+1}\right)\odot g(z^l) \,\,\,\,\,\,\,\,\xrightarrow[]{\text{in our simple NN}}\,\,\,\,\,\,\,\, \delta^l=w^{l+1} \,g(z^l) \,\,\delta^{l+1} $$

куда $g(z^l)$ представляет активационную функцию нейрона с учетом термина $z^l$.

Итак, для любого слоя $l$, как срок $\partial C/ \partial w^l$вычислено ?. Используя предыдущие рассуждения для простой NN, теперь мы знаем, что:

$$ \begin{align} \delta^{l} &= w^{l+1} \,g(z^{l}) \,\,\color{blue}{\delta^{l+1}}\\ \\ & = w^{l+1} \,g(z^{l}) \,\,\color{blue}{w^{l+2} \,g(z^{l+1}) \,\,\delta^{l+2}}\\ \\ &= w^{l+1}\color{blue}{w^{l+2}...w^{L}}\,\,g(z^{l})\color{blue}{g(z^{l+1})...g(z^{L})\,\,\delta^L} \end{align} $$ Где синие термины эквивалентны $\delta^{l+1}$.

Как мы видели ранее, этот термин $\delta^l$ умножается на активацию нейрона из предыдущего слоя $a^{l-1}$, дает нам желаемое $\partial C/\partial w^l$:

$$ \frac{\partial C}{\partial w^l} = \delta^{l}a^{l-1} = w^{l+1}\color{blue}{w^{l+2}...w^{L}}\,\,g(z^{l})\color{blue}{g(z^{l+1})...g(z^{L})\,\,\delta^L} \,\,a^{l-1}$$

Итак, теперь мы ясно видим, что обновления, сделанные для веса $w^l$ напрямую зависят от значений всех весов и активаций последующих слоев.

Это означает, что для любого значения$w^l$ (он может быть очень далек от оптимума, как в ситуации, построенной в начале), его составляющая градиента может стремиться к нулю, если какой-либо из весов или активаций, $g(z)$(или их комбинация) последующих слоев стремятся к нулю. Этот нежелательный эффект, как вы сказали в вопросе, известен как исчезающий градиент .

Теперь мы понимаем, что даже если вес представляет собой значение $\partial C/\partial w^l$близко к нулю, это не означает, что мы достигли критической точки для этого веса. Более того, изучение этих параметров значительно замедлится, поскольку их обновления пропорциональны соответствующему компоненту градиента. Таким образом, они могут застрять в значении, далеком от минимума!

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