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

Вопрос или проблема

Я работаю над реализацией метода Ньютона для выполнения градиентного спуска второго порядка в нейронной сети и испытываю трудности с вычислением производных второго порядка. Я понимаю, что на практике вычисление Гессиана (и его обратной матрицы) часто бывает практически невозможным, потому что в нем содержится $w^2$ элементов, где $w$ — это число весов в сети. Тем не менее, я просто пытаюсь разобраться, как это работает, и поэтому хотел начать с прямого вычисления Гессиана, прежде чем переходить к оптимизациям, таким как BFGS или конгруэнтные градиенты.

Мне не удалось найти много ресурсов, объясняющих, как выглядят производные второго порядка; я полагаю, что это связано с практическими ограничениями. Если рассмотреть это с основ, кажется, что матрица Гессиана всегда должна быть равна нулю, что явно неверно, и я надеюсь, что кто-то сможет объяснить, почему Гессиан не всегда равен нулю, и, если возможно, как выглядят уравнения для его элементов.

Предположим, у нас есть стандартная прямослойная нейронная сеть, состоящая из серии линейных комбинаций и функций активации. Что-то вроде
$$\overline x \longrightarrow \overline a^{(1)} = W^{(1)}\overline x \longrightarrow \overline h^{(1)} = \phi^{(1)}(\overline h^{(1)}) \longrightarrow \dots \longrightarrow \overline a^{(k)} = W^{(k)} \overline h^{(k-1)} \longrightarrow \overline h^{(k)} = \phi^{(k)}(\overline a^{(k)}) \longrightarrow L(\overline a^{(k)})$$
где $\overline x$ — это вектор входных данных, $\overline a^{(l)}$ — это вектор значений перед активацией в $l$-й слой, $\overline h^{(l)}$ — это вектор значений после активации в $l$-й слой, $W^{(l)}$ — это матрица весов $l$-го слоя, $\phi^{(l)}$ — это функция активации $l$-го слоя, а $L$ — это функция потерь.

Если сосредоточиться на одном нейроне, $n$-м нейроне $l$-го слоя, значение перед активацией $a_i^{(l)}$ является линейной комбинацией выходов $\overline h^{(l -1)}$ предыдущего слоя с $i$-й строкой матрицы весов. То есть, $$a_i^{(l)} = \displaystyle \sum_{j} W_{ij} \overline h^{(l-1)}$$
где $j$ — это количество нейронов в слое $l-1$. Расширяя сумму,
$$a_i^{(l)} = W_{i1}h_1^{(l-1)} + W_{i2}h_2^{(l-1)} + \dots + W_{ij}h_j^{(l-1)}$$
Если мы возьмем производную первого порядка от этой функции (игнорируя все другие пути, которые нам нужно учитывать, на мгновение), которая является функцией $\overline h^{(l-1)}$, мы получим градиент $\nabla f = \langle W_{i1}, W_{i2}, \dots, W_{ij} \rangle$. Как вторая производная этой функции может быть чем-то другим, кроме 0? Это функция $\overline h$, и мы уже продифференцировали все элементы $h$. Это суть моего недоумения, но очевидно, что это часть намного большего градиента, который должен учитывать всех нейронов, зависящих от $\overline h^{(l-1)}$.

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

Единственное уравнение, которое я нашел для производных второго порядка, находится в статье Википедии, https://en.wikipedia.org/wiki/Backpropagation#Second-order_gradient_descent. Там они приводят следующее (с измененными именами переменных, чтобы соответствовать тому, что я использовал до сих пор)
$$\dfrac{\partial^2 L}{\partial h_{j_1}^{(l)} \partial h_{j_2}^{(l)}} = \displaystyle \sum_{j_1 j_2} W_{i_1j_1} W_{i_2j_2} \dfrac{\partial^2L}{\partial a_{i_1}^{(l+1)} \partial a_{i_2}^{(l+1)}}$$
Может кто-нибудь объяснить, откуда это берется? Кроме того, я запутался в индексах суммирования в этом уравнении — кажется, что мы уже выбрали определенные значения $j_1$ и $j_2$ в левой части уравнения.

Ответ или решение

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

### Основы: линейные комбинации в нейронных сетях

В нейронной сети каждый нейрон в слое вычисляет значение активации как линейную комбинацию входных значений. Например, для n-го нейрона в l-ом слое, предактивационное значение вычисляется следующим образом:

\[
a_i^{(l)} = \sum_{j} W_{ij} h_j^{(l-1)}
\]

где \(W_{ij}\) — элементы матрицы весов, а \(h_j^{(l-1)}\) — выходные значения предыдущего слоя.

### Первые и вторые производные

Когда мы находим первую производную этой функции по \(h_j^{(l-1)}\), мы получаем градиент:

\[
\frac{\partial a_i^{(l)}}{\partial h_j^{(l-1)}} = W_{ij}
\]

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

\[
\frac{\partial^2 a_i^{(l)}}{\partial h_{j_1}^{(l-1)} \partial h_{j_2}^{(l-1)}}
\]

не равна нулю. На самом деле, это не так просто.

### Вторые производные и композиция функций

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

\[
\frac{\partial^2 a_i^{(l)}}{\partial h_j^{(l-1)} \partial h_k^{(l-1)}} = 0 \quad \text{(для } j \neq k\text{)}
\]

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

### Комплексные зависимости

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

### Выражение для вторых производных

Обратите внимание на следующее выражение, упомянутое в вашем вопросе:

\[
\frac{\partial^2 L}{\partial h_{j_1}^{(l)} \partial h_{j_2}^{(l)}} = \sum_{i_1, i_2} W_{i_1 j_1} W_{i_2 j_2} \frac{\partial^2 L}{\partial a_{i_1}^{(l+1)} \partial a_{i_2}^{(l+1)}}
\]

Это уравнение показывает, как вторые производные из одного слоя зависят от вторых производных выходного слоя. Суммирование по \(i_1\) и \(i_2\) подразумевает, что вы рассматриваете все возможные веса выходного слоя, что и приводит к ненулевым значениям.

### Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...