Важное примечание: исходная статьяhttps://ecdicus.com/feedforward-neural-networksс правильным латексным отображением.

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

Нейронная сеть впервые использовалась в качестве основной коннекционистской модели. В середине-конце 1980-х годов наиболее популярной коннекционистской моделью была модель параллельной распределенной обработки (PDP) [McClelland et al., 1986], которая имеет три основные характеристики: 1) представление информации является формальным распределением (нелокальным); 2) Память и знания хранятся в связи между блоками; 3) Учиться новым знаниям, постепенно меняя силу связи между единицами.

Коннекционистская нейронная сеть имеет множество сетевых структур и методов обучения. Хотя ранняя модель подчеркивает биологическую рациональность модели (биологическое правдоподобие), на более позднем этапе больше внимания уделяется моделированию конкретных когнитивных способностей, таких как распознавание объектов и язык. Понимание и т. д. Особенно после введения обратного распространения ошибок для улучшения его способности к обучению нейронные сети все чаще используются в различных задачах машинного обучения. С увеличением обучающих данных и увеличением (параллельной) вычислительной мощности нейронные сети совершили большой прорыв во многих задачах машинного обучения, особенно в обработке перцептивных сигналов, таких как речь и изображения. Способность учиться.

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

нейроны

Искусственный нейрон или сокращенно Нейрон — это базовая единица, из которой состоит нейронная сеть. Он в основном имитирует структуру и характеристики биологических нейронов, получает набор входных сигналов и производит выходные.

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

В 1943 г. психолог МакКаллох и математик Питтс предложили очень простую модель нейрона, основанную на структуре биологических нейронов, МП нейрона [McCulloch et al., 1943]. В современных нейронных сетях не так много изменений в структуре нейронов и нейронов МП. Отличие состоит в том, что функция активации f в МП-нейронах представляет собой ступенчатую функцию от 0 или 1, в то время как в современных нейронах обычно требуется, чтобы функция активации была непрерывной и производной функцией.

Предположим, нейрон получает D входов $x_1, x_2,…, x_D$, пусть вектор $x = [x_1; х_2;…; x_D]$ для представления этой группы входных данных и использования Net Input $ z \in \mathbb{R} $ представляет собой взвешенную сумму входного сигнала x, полученного нейроном,

$z=\sum_{d=1}^{D}w_dx_d+b$

$ =w^Tx+b$

Где $w = [w_1; w_2;…; w_D] \in \mathbb{R} $ — вектор D-мерного веса, а $b \in \mathbb{R}$ — смещение.

После прохождения сетевого входа z через нелинейную функцию f(⋅) получается значение активации нейрона (Активация) $\alpha$,

$\альфа=f(х)$

Среди них нелинейная функция f(⋅) называется функцией активации (Activation Function).

На рис. 1 показан пример типичной структуры нейрона.

Рисунок 1 — Типичная структура нейрона

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

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

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

Функция сигмовидного типа

Функция сигмовидного типа относится к функции S-образной кривой, которая является функцией насыщения на обоих концах. Обычно используемые функции сигмовидного типа включают логистическую функцию и функцию Tanh.

Для функции f(x), если $ x \rightarrow -\infty $, ее производная ${f}’(x) \rightarrow 0$, она называется левонасыщенной. Если $x \rightarrow +\infty$, его производная ${f}’ (x) \rightarrow 0$, то это называется насыщением справа. Когда левое и правое насыщение удовлетворяется одновременно, это называется насыщением обоих концов.

Логистическая функция Логистическая функция определяется как

$\sigma(x)=\frac{1}{1+exp(-x)} $

Логистическую функцию можно рассматривать как функцию «сжатия», которая «сжимает» ввод поля вещественных чисел до (0, 1). Когда входное значение близко к 0, функция сигмовидного типа является приблизительно линейной функцией; когда входное значение близко к обоим концам, ввод подавляется. Чем меньше вход, тем ближе к 0; чем больше вход, тем ближе к 1. Эта функция также аналогична характеристике биологических нейронов. Он возбуждает одни входы (выход 1) и подавляет другие входы (выход 0). По сравнению со ступенчатой ​​функцией активации, используемой персептроном, логистическая функция непрерывна и выводима, а ее математические свойства лучше.

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

Функция Tanh Функция Tanh также является функцией сигмовидного типа. Это определяется как

$ tanh(x)=\frac{exp(x)-exp(-x)}{exp(x)+exp(-x)}$

Функцию Tanh можно рассматривать как расширенную и преобразованную логистическую функцию, и ее диапазон значений составляет (-1, 1).

$ танх(х)=2\сигма(2х)-1$

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

Рисунок 2 — Логистическая функция и функция Таня

Функция Hard-Logistic и функция Hard-Tanh

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

Возьмем в качестве примера логистическую функцию $\sigma(x)$. Ее производная равна ${\sigma}’(x) = \sigma(x)(1- \sigma(x))$. Разложение Тейлора первого порядка логистической функции вблизи 0 имеет вид

$g_l(x) \приблизительно \sigma(0) x \times {\sigma}’(0)$

$= 0.25x+0.5$

Таким образом, логистическая функция может быть аппроксимирована кусочно-логистической функцией (x).

$\text{hard-logistic(x)} =\left\{\begin{matrix}
1 & g_l(x)\geq 1 \\
g_l & 0‹g_l(x)‹ 1 \\
0 &g_l(x)\leq 0
\end{matrix}\right.$

$ = макс ( мин (г_1 (х), 1), 0) $

$ = макс ( мин (0,25x + 0,5, 1), 0) $

Точно так же разложение Тейлора первого порядка функции Тана около 0 равно

$g_l (x) \приблизительно танх(0) + х \times {танх}’ (0)$

$=x,$

Таким образом, функция Tanh также может быть аппроксимирована кусочной функцией hard-tanh(x)

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

$ hard-tanh (x) &= max ( min (g_l (x), 1), -1) $

$ = макс ( мин (х, 1), -1).$

На рис. 3 показана форма функции Hard-Logistic и функции Hard-Tanh.

Рисунок 3 — Функция активации Hard Sigmoid

Функция ReLU

ReLU (Rectified Linear Unit) [Nair et al., 2010], также называемая функцией Rectifier [Glorot et al., 2011], представляет собой функцию активации, часто используемую в глубоких нейронных сетях. ReLU на самом деле является линейной функцией, определяемой как

$ReLU(x)=\left\{\begin{matrix}
x & x\geq 0 \\
0 & x‹0
\end{matrix}\right.$

$= макс(0, х).$

Преимущества Нейроны, использующие ReLU, должны выполнять только операции сложения, умножения и сравнения, что более эффективно в вычислительном отношении. Функция ReLU также считается биологически обоснованной (Biological правдоподобие), такой как одностороннее подавление, широкая граница возбудимости (то есть уровень возбуждения может быть очень высоким). В биологической нейронной сети нейроны, которые возбуждаются одновременно, очень редки. Только 1% $\sim$ 4% нейронов в человеческом мозгу активны одновременно. Функция активации сигмовидного типа приведет к неразреженной нейронной сети, в то время как ReLU имеет хорошую разреженность. Около 50% нейронов будут активированы.

С точки зрения оптимизации, функция ReLU является функцией насыщения слева по сравнению с насыщением обоих концов функции сигмовидного типа, а производная равна 1, когда x > 0, что упрощает проблему исчезновения градиента нейронной сети до определенной степени и ускоряет сходимость скорости градиентного спуска.

Недостатки Выходные данные функции ReLU не центрированы по центру нуля. Введение смещения смещения в нейронную сеть последнего слоя повлияет на эффективность градиентного спуска. Кроме того, нейроны ReLU чаще «умирают» во время обучения. Если во время обучения определенный нейрон ReLU в первом скрытом слое не может быть активирован на всех обучающих данных после неправильного обновления параметров, то градиент собственных параметров нейрона всегда будет равен 0. Он никогда не сможет быть активирован в последующем процессе обучения. Это явление называется Dying ReLU Problem (Проблема умирающего ReLU), и оно может возникать и в других скрытых слоях.

В реальных условиях, чтобы избежать описанной выше ситуации, также будут широко использоваться несколько вариантов ReLU.

ReLU с утечкой

Leaky ReLU (Leaky ReLU) поддерживает небольшой градиент $\gamma$, когда вход x ‹0. Таким образом, когда нейрон неактивен, может быть ненулевой градиент для обновления параметров, что позволяет избежать активации [Maas et al., 2013]. Определение Leaked ReLU выглядит следующим образом:

$LeakyReLU(x) =\left\{\begin{matrix}
x & \text{if} \quad x ›0\\
\gamma x & \text{if} \quad x \ leq 0
\end{matrix}\right.$

$= макс(0, х) + \гамма мин(0, х),$

Среди них $\gamma$ — небольшая константа, например 0,01. Когда $\gamma ‹1$, ReLU с утечкой также можно записать в виде

$LeakyReLU(x) = max(x, \gamma x), $

Это эквивалентно относительно простому блоку maxout.

ReLU с параметрами

Параметрический ReLU (Parametric ReLU, PReLU) вводит обучаемый параметр, и разные нейроны могут иметь разные параметры [He et al., 2015]. Для i-го нейрона его PReLU определяется как

$PReLU_i(x)=\left\{\begin{matrix}
x & \text{if} \quad x ›0 \\
\gamma_i x & \text{if} \quad x \ leq 0
\end{matrix}\right.$

$ = макс (0, х) + \gamma_i мин (0, х), $

Среди них $\gamma_i$ — наклон функции при $ x \leq 0$. Следовательно, PReLU — ненасыщаемая функция. Если $\gamma_i=0$, то PReLU вырождается в ReLU. Если $\gamma_i$ — малая константа, то PReLU можно рассматривать как ReLU с утечкой. PReLU может позволить разным нейронам иметь разные параметры, или группа нейронов может иметь один и тот же параметр.

Функция ELU

ELU (экспоненциальная линейная единица) [Clevert et al., 2015] представляет собой приближенную нелинейную функцию с центром в нуле, которая определяется как

$ELU(x) =\left\{\begin{matrix}
x& \text{if} \quad x ›0 \\
\gamma (exp(x)-1) & \text{ if} \quad x \leq 0
\end{matrix}\right.$

$ =max(0,x)+min(0,\gamma(exp(x)-1)),$

Среди них $\gamma\geq 0$ — это гиперпараметр, который определяет кривую насыщения при $x\leq 0$ и корректирует выходное среднее значение около 0.

Функция софтплюс

Функцию Softplus [Dugas et al., 2001] можно рассматривать как гладкую версию функции Rectifier, которая определяется как

$Softplus(x) = log(1 + exp(x)).$

Производной функции Softplus является логистическая функция. Хотя функция Softplus также имеет характеристики одностороннего торможения и широкой границы возбуждения, она не имеет разреженной активации.

На рис. 4 показаны примеры функций ReLU, Leaky ReLU, ELU и Softplus.

Рисунок 4 — Функции ReLU, Leaky ReLU, ELU и Softplus

Функция взмаха

Swish-функция [Ramachandran et al., 2017] представляет собой функцию активации с автоматическим входом, определяемую как

$свиш(х) = х \сигма(\бета х)$

Среди них $\sigma(.)$ — логистическая функция, а $\beta$ — обучаемый параметр или фиксированный гиперпараметр. $\sigma(.) \in (0, 1)$ можно рассматривать как мягкий вентильный механизм. Когда $\sigma(\beta x)$ близко к 1, вентиль находится в состоянии «открыто», а выход функции активации близок к самому x; когда $\sigma(\beta x)$ близко к 0, гейт находится в состоянии «Выкл», выход функции активации примерно равен 0.

На рис. 5 показан пример функции Swish.

Рисунок 5 — Функция взмаха

Когда $\beta = 0$, функция Swish становится линейной функцией $x/2$. При $\beta = 1$ функция Swish приблизительно линейна, когда $x›0$, и приблизительно насыщена, когда $x ‹0$, и обладает определенной степенью немонотонности. Когда $\beta \rightarrow +\infty$, $\sigma(\beta x) $ имеет тенденцию быть дискретной функцией 0–1, а функция Swish приблизительно соответствует функции ReLU. Таким образом, функцию Swish можно рассматривать как нелинейную интерполяционную функцию между линейной функцией и функцией ReLU, и ее степень контролируется параметром $\beta$.

GELU-функция

GELU (Gaussian Error Linear Unit) [Hendrycks et al., 2016] также является функцией активации, которая регулирует свое выходное значение с помощью стробирующего механизма, похожего на функцию Swish.

$GELU(x) = xP(X \leq x), $

Среди них $P(X \leq x)$ — кумулятивная функция распределения гауссовского распределения $\mathcal{N}(\mu,\sigma²)$, где $\mu,\sigma$ — гиперпараметры, обычно устанавливаемые $\ мю = 0, \сигма = 1$. Поскольку кумулятивная функция распределения гауссова распределения является сигмовидной функцией, функция GELU может быть аппроксимирована функцией Tanh или логистической функцией,

$GELU(x) \приблизительно 0,5x(1+tanh(\sqrt{\frac{2}{\pi}}(x + 0,044715x³
))$

$ GELU(x) \ приблизительно x\sigma(1.702x).$

При использовании логистической функции для аппроксимации GELU эквивалентна специальной функции Swish.

Максимальная единица измерения

Единица Maxout [Goodfellow et al., 2013] также является кусочно-линейной функцией. Ввод функций активации, таких как сигмовидная функция и ReLU, является чистым входом нейрона z, который является скаляром. Входные данные модуля Maxout — это все исходные выходные данные нейронов предыдущего слоя, представляющие собой вектор $x = [x_1; х_2;…; х_D]$.

Каждая единица Maxout имеет K весовых векторов $w_k \in \mathbb{R}^D$ и смещение $b_k (1\leq k \leq K)$. Для входа x мы можем получить K net inputs $z_k 1 \leq k \leq K$.

$z_l= w_k^T x +b_k $

Где $w_k = [w_{k,1},\hdots, w_{k,D}]^T$ — k-й весовой вектор.

Нелинейная функция блока Maxout определяется как

$maxout(x) =\max_{k \in [1,K]}(z_k)$

Единица Maxout — это не только нелинейное отображение между чистым входом и выходом, но и общее изучение нелинейных отношений отображения между входом и выходом. Функцию активации Максута можно рассматривать как кусочно-линейную аппроксимацию любой выпуклой функции, и она не дифференцируема в конечной точке.

Структура сети

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

К настоящему времени исследователи изобрели различные структуры нейронных сетей. В настоящее время существует три широко используемых структуры нейронных сетей:

Сеть прямой связи

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

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

Сеть памяти

Сеть памяти также называется сетью обратной связи. Нейроны в сети могут получать не только информацию от других нейронов, но и собственную историческую информацию. По сравнению с сетью прямой связи нейроны в сети памяти имеют функцию памяти и имеют разные состояния в разные моменты времени. Распространение информации в нейронной сети памяти может быть односторонним или двусторонним, поэтому его можно представить графом ориентированного цикла или неориентированным графом. К сетям памяти относятся рекуррентные нейронные сети (глава 6), сети Хопфилда (раздел 8.6.1), машины Больцмана (раздел 12.1), ограниченные машины Больцмана (раздел 12.2) и так далее.

Сеть памяти можно рассматривать как программу с более сильными способностями к вычислениям и памяти.

Чтобы увеличить объем памяти сети памяти, можно ввести блоки внешней памяти и механизмы чтения-записи для сохранения некоторых промежуточных состояний сети, называемых нейронной сетью с расширенной памятью (MANN) (раздел 8.5), таких как нейронные графы Линцзи. [Graves et al., 2014] и сети памяти [Sukhbaatar et al., 2015] и так далее.

Граф сети

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

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

Сеть графа представляет собой обобщение сети прямого распространения и сети памяти, включая множество различных методов реализации, таких как сверточная сеть графа (GCN) [Kipf et al., 2016], сеть графового внимания (Graph Attention Network, GAT) [Veličković et al. , 2017], нейронная сеть передачи сообщений (MPNN) [Gilmer et al., 2017] и др.

На рис. 6 показаны примеры сетевой структуры сетей прямой связи, сетей памяти и сетей графов, где круглый узел представляет нейрон, а квадратный узел представляет группу нейронов.

Рисунок 6 — Примеры трех различных сетевых структур

Нейронная сеть с прямой связью

Учитывая набор нейронов, мы можем использовать нейроны в качестве узлов для построения сети. Разные модели нейронных сетей имеют разные топологии сетевых подключений. Относительно простой топологией является сеть прямой связи. Нейронная сеть с прямой связью (FNN) — самая ранняя из изобретенных простых искусственных нейронных сетей. Нейронные сети с прямой связью часто называют многослойным персептроном (MLP). Но название многослойного персептрона не очень разумно, потому что нейронная сеть с прямой связью фактически состоит из многослойной модели логистической регрессии (непрерывная нелинейная функция), а не композиции многослойного персептрона (прерывистая нелинейная функция) [Bishop, 2007].

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

На рис. 7 показан пример нейронной сети с прямой связью.

Рисунок 7 — Многослойная нейронная сеть с прямой связью

В таблице 1 приведены обозначения, описывающие нейронную сеть с прямой связью.

СимволЗначение

L

Количество слоев в нейронной сети

$M_l$

Количество нейронов в слое l.

$f_l(.)$

Активационная функция нейронов l слоя

$W^{(l)} \in \mathbb{R}^{M_l \times M_{l-1}}$

Весовые матрицы слоев с l-1 по 𝑙

$b^{(l)} \in \mathbb{R}^{M_l}$

Смещение от слоя l-1 к слою l.

$z^{(l)} \in \mathbb{R}^{M_l}$

Скрытое значение нейронов в слое l

$a^{(l)} \in \mathbb{R}^{M_l}$

Выход нейронов в слое 𝑙

Пусть $a ^{(0)} = x$, нейронная сеть прямого распространения осуществляет распространение информации, непрерывно повторяя следующую формулу:

$ z^{(l) }=W^{(l) }a^{(l-1) }+b^{(l) }$

$a^{(l) }=f_l(z^{(l) })$

Сначала вычислите значение чистой активации нейронов в слое l (Net Activation) $z^{(l)}$ в соответствии со значением активации нейронов в слое l -1 (Activation)$ a^{(l -1)}$ , а затем передайте функцию активации, чтобы получить значение активности нейронов слоя l. Следовательно, мы также можем рассматривать каждый нейронный слой как аффинное преобразование и нелинейное преобразование.

Формулы также можно комбинировать и записывать в виде:

$z^{(l)}=W^{(l)}f_{l-1}(z^{(l-1)})+b^{(l)}$

or

$a^{(l)}=f_{l-1}(W^{(l)}a^{(l-1)} +b^{(l)})$

Таким образом, нейронная сеть с прямой связью может передавать информацию слой за слоем, чтобы получить окончательный результат работы сети $a^{(L)}$. Всю сеть можно рассматривать как составную функцию $\phi(x; W, b)$, используя вектор x как вход $a^{(0)}$ первого слоя, а выход первого слоя $a^{( L)}$ как вывод всей функции.

$x=a^{(0)}\rightarrow z^{(1)}\rightarrow a^{(1)}\rightarrow z^{(2)}\rightarrow \hdots \rightarrow a^{(L-1 )}\rightarrow z^{(L)}\rightarrow a^{(L)}=\phi(x; W, b)$

Где W, b представляют веса соединений и смещения всех слоев в сети.

Среди них W, b представляют веса соединений и смещения всех слоев в сети.

Теорема универсального приближения

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

Теорема об универсальной аппроксимации [Цыбенко, 1989; Hornik et al., 1989]: Пусть $\phi(.)$ — непостоянная, ограниченная, монотонно возрастающая непрерывная функция, $\tau_D$ — D-мерный единичный гиперкуб $[0, 1] ^D$, $C(\tau_D)$ — множество непрерывных функций, определенных на $\tau_D$. Для любой заданной функции $f \in C(\tau_D)$ существует целое число M, набор действительных чисел $v_m, b_m \in \mathbb{R}$ и вектор вещественных чисел $w_m \in \mathbb {R }^D, m = 1, \hdots, M$, так что мы можем определить функции

$ F(x)=\sum_{m=1}^{M}v_m\phi(w_m^Tx+b_m) $

В качестве приближенной реализации функции f, а именно

$\mid F(x)-f(x) \mid ‹ \epsilon ,\forall x \in \tau_D$

Среди них $\epsilon›0$ — маленькое положительное число.

Общая теорема об аппроксимации по-прежнему верна для ограниченного замкнутого множества в вещественном пространстве $\mathbb{R}^D$.

Согласно общей теореме аппроксимации, для нейронной сети с прямой связью, состоящей из линейного выходного слоя и, по крайней мере, одного скрытого слоя, использующей функцию активации со свойством «сжимания», при достаточном количестве нейронов скрытого слоя ее можно аппроксимировать с произвольной точностью Любая функция ограниченного замкнутого множества, определенная в вещественном пространстве $\mathbb{R}^D$ [Funahashi et al., 1993; Хорник и др., 1989]. Так называемая функция «сжатия» относится к ограниченной функции, такой как сигмовидная функция, но было доказано, что общие свойства аппроксимации нейронных сетей также применимы к другим типам функций активации, таким как ReLU.

Общая теорема об аппроксимации лишь показывает, что вычислительная мощность нейронной сети может аппроксимировать заданную непрерывную функцию, но не дает, как найти такую ​​сеть и является ли она оптимальной. Кроме того, применительно к машинному обучению реальная функция отображения неизвестна, и изучение параметров обычно выполняется путем минимизации эмпирического риска и регуляризации. Из-за мощных возможностей нейронных сетей обучающую выборку легко переобучить.

Применительно к машинному обучению

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

В машинном обучении большое влияние на классификатор оказывают характеристики входной выборки. Взяв в качестве примера обучение с учителем, хорошие функции могут значительно повысить производительность классификатора. Следовательно, для получения хорошего эффекта классификации исходный вектор признаков выборки необходимо преобразовать в более эффективный вектор признаков $\phi(x)$. Этот процесс называется извлечением признаков.

Многослойную нейронную сеть с прямой связью можно рассматривать как нелинейную составную функцию $\phi:\mathbb{R}^D \rightarrow \mathbb{R}^{{D}'}$, отображающую вход $x \in \mathbb{ R}^D $ на выход $\phi(x)\in \mathbb{R}^{{D}'}$. Следовательно, многослойная нейронная сеть с прямой связью также может рассматриваться как метод преобразования признаков, а ее выход $\phi(x)$ используется как вход классификатора для классификации.

Для обучающей выборки (x, y) сначала используйте многослойную нейронную сеть с прямой связью, чтобы отобразить x в $\phi(x)$, а затем введите $\phi(x)$ в классификатор g(.), который

$\шляпа{у}=г(\фи(х);\тета)$

Среди них g(.) — линейный или нелинейный классификатор, $\theta$ — параметр классификатора g(.), а $\hat{y}$ — результат работы классификатора.

В частности, если классификатор g(.) является классификатором логистической регрессии или классификатором регрессии Softmax, то g(.) также можно рассматривать как последний слой сети, то есть нейронная сеть напрямую выводит условные вероятности различные категории $p( y \mid x)$.

Для задачи бинарной классификации $y\in \{0, 1 \}$ и использования логистической регрессии классификатор логистической регрессии можно рассматривать как последний слой нейронной сети. Другими словами, в последнем слое сети используется только один нейрон, и его активационная функция — логистическая функция. Выход сети можно напрямую использовать как условную вероятность категории y = 1,

$ p(y\mid x)=a^{(L)}$

Среди них $a ^{(L)} \in \mathbb{R} $ — значение активности нейронов слоя L.

Для задачи мультиклассификации $y \in \{1,…,C\}$, если используется регрессионный классификатор Softmax, это эквивалентно установке C нейронов в последний слой сети, а его функция активации есть Функция софтмакс. Выход последнего слоя (уровня L) сети можно использовать как условную вероятность каждого класса, а именно

$\шляпа{у}=softmax(z^{(L)})$

Где $z ^{(L)}\in \mathbb{R}^C$ — чистый вход L-го нейрона; $ \hat{y} \in \mathbb{R}^C $ - L-й нейрон Значение активности элемента, каждое измерение представляет прогнозируемую условную вероятность различных меток категории.

Изучение параметров

Если используется функция кросс-энтропийных потерь, для выборки (x, y) функция потерь имеет вид

$\mathcal{L}(y,\hat{y})=-y^Tlog(\hat{y}) $

Среди них $y \in \{0, 1\}^{C}$ — это векторное представление one-hot, соответствующее метке y.

Учитывая, что обучающая выборка $\mathcal{D}=\{x^{(n)},y^{(n)}\}_{n=1}^{N}$, установите для каждой выборки $x^ {(n)}$ является входом в нейронную сеть с прямой связью, а выходом сети является $\hat{y}^{(n)}$, а ее структурированная функция риска на наборе данных $\mathcal{D} $ это

$\mathcal{R}=\frac{1}{N}\sum_{n=1}^{N}\mathcal{L}(y^{(n)},\hat{y}^{(n) })+\frac{1}{2} \lambda\left \| W \right \|_{F}^{2}$

Где W и b соответственно представляют всю матрицу весов и вектор смещения в сети; $\слева \| W \right \|_{F}^{2}$ — член регуляризации для предотвращения переобучения; $\ lambda›0$ — это гиперпараметр. Чем больше $\lambda$, тем ближе W к 0. Здесь $\left \| W \right \|_{F}^{2}$ обычно используют норму Фробениуса:

$\слева \| W \right \|_{F}^{2}=\sum_{l=1}^{L}\sum_{i=1}^{M_l}\sum_{j=1}^{M_{l-1 }}(w_{ij}^{(l)})²$

С помощью критериев обучения и обучающих выборок параметры сети можно изучить с помощью градиентного спуска. На каждой итерации метода градиентного спуска параметры слоя l $W^{L}$ и $b^{L}$ обновляются следующим образом:

$W^{(l)} \leftarrow W^{(l)}-\alpha \frac{\partial R(W,b)}{\partial W^{(l)}}$

$ = W ^ {(l)} - \ alpha (\ frac {1} {N} \ sum_ {n = 1} ^ {N} (\ frac {\ partial \ mathcal {L} (y ^ {(n) },\hat{y}^{(n)})}{\partial W^{(l)}}+\lambda W^{(l)})$

$ b ^ {(l)} \leftarrow W ^ {(l)} - \ alpha \ frac {\ partial R (W, b)} {\ partial b ^ {(l)} $

$ = b ^ {(l)} - \ alpha (\ frac {1} {N} \ sum_ {n = 1} ^ {N} (\ frac {\ partial \ mathcal {L} (y ^ {(n) },\hat{y}^{(n)})}{\partial b^{(l)}})$

Где $\alpha$ — скорость обучения.

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

Алгоритм обратного распространения

Предполагая, что стохастический градиентный спуск используется для изучения параметров нейронной сети, по заданной выборке (x, y) введите ее в модель нейронной сети и получите вывод сети как $\hat{y}$. Предполагая, что функция потерь равна $\mathcal{L}(y,\hat{y})$, для изучения параметров необходимо вычислить производную функции потерь по каждому параметру.

Без ограничения общности вычислим частную производную параметров $W^{L}$ и $b^{L}$ в первом слое. Поскольку вычисление $\frac{\partial \mathcal{L}(y,\hat{y})}{\partial W^{(l)}}$ включает дифференцирование вектора в матрицу, это очень громоздко, поэтому мы сначала вычисляем $\mathcal{L}(y,\hat{y})$ относительно частной производной каждого элемента в матрице параметров $\frac{\partial \mathcal{L}(y,\hat{ y})}{\partial w_{ij}^{(l)}}$. Согласно цепному правилу,

$ \ frac {\ partial \ mathcal {L} (y, \ hat {y})} {\ partial w_ {ij} ^ {(l)}} = \ frac {\ partial z ^ {(l)}} { \ partial w_ {ij} ^ {(l)}} \ frac {\ partial \ mathcal {L} (y, \ hat {y})} {\ partial z ^ {(l)}} $

$ \ frac {\ partial \ mathcal {L} (y, \ hat {y})} {\ partial w ^ {(l)}} = \ frac {\ partial z ^ {(l)}} {\ partial b ^ {(l)}} \ frac {\ partial \ mathcal {L} (y, \ hat {y})} {\ partial z ^ {(l)}} $

Второй член в формуле (49) и формуле (50) представляет собой частную производную целевой функции по нейрону $z^{(l)}$ в слое l, называемую ошибкой, которую можно вычислить в один раз. Таким образом, нам нужно вычислить только три частные производные: ^ {(l)}} {\ partial b ^ {(l)}}, \ frac {\ partial \ mathcal {L} (y, \ hat {y})} {\ partial z ^ {(l)}} $.

Давайте вычислим эти три частные производные по отдельности.

  • Вычислить частную производную $\frac{\partial z^{(l)}}{\partial w_{ij}^{(l)}}$, поскольку $z^{(l)} = W^{(l)} a ^{(l-1)}+ b^{(l)}$, частная производная

$ \ frac {\ partial z ^ {(l)}} {\ partial w_ {ij} ^ {(l)}} = [ \ frac {\ partial z_ {1} ^ {(1)}} {\ partial w_ {ij} ^ {(l)}} , \ hdots, \ frac {\ partial z_ {i} ^ {(1)}} {\ partial w_ {ij} ^ {(l)}}, \ hdots, \ frac {\ парциальное z_ {M_l} ^ {(1)}} {\ парциальное w_ {ij} ^ {(l)}}] $

$ = [ 0, \ hdots, \ frac {\ partial (w_ {i:} ^ {(l)} a ^ {(l-1)} + b_ {i} ^ {l})} {\ partial w_ { ij}^{(l)}},\hdots,0]$

$=[ 0,\hdots,a_j^{(l-1)},\hdots,0]$

$\overset{\Delta}{=} 1_i(a_j^{(l-1)})\quad \in \mathbb{R}^{l \times M_l}$

Где $w_{i:}^{(l)}$ — i-я строка весовой матрицы $W^{(l)}$, а $1_i(a_j^{(l-1)})$ — i-я строка element Is $a_j^{(l-1)}$, а остальные являются векторами-строками из 0

  • Вычислите частную производную $\frac{\partial z^{(l)}}{\partial b^{(l)}}$ из-за разницы между $z^{(l)}$ и $b^{( l)}$ Функциональное соотношение $z^{(l)}= W^{(l)}a^{(l-1)} + b^{(l)}$, поэтому частная производная

$\frac{\partial z ^{(l)}}{\partial b^{(l)}}=I_{M_l} \qquad \in \mathbb{R}^{M_l \times M_l} $

Является единичной матрицей $M_l \times M_l$.

  • Вычислить частную производную $\frac{\partial \mathcal{L}(y,\hat{y})}{\partial z^{(l)}}$ Частную производную $\frac{\partial \mathcal{L }(y,\hat{y})}{\partial z^{(l)}}$ представляет влияние нейрона в слое l на конечную потерю, а также отражает чувствительность конечной потери к нейрону в слое l, поэтому его обычно называют членом ошибки нейрона в слое l, который используется $\delta^{(l)}$. значить.

$\delta^{(l)}\overset{\Delta}{=} \frac{\partial \mathcal{L}(y,\hat{y})}{\ partial z^{(l)}} \ qquad \in \mathbb{R}^{M_l} $

Член ошибки $\delta^{(l)}$ также косвенно отражает степень вклада различных нейронов в возможности сети и, таким образом, лучше решает проблему присвоения кредита (CAP).

Согласно $z^{(l+1)} = W^{(l+1)}a^{(l)} + b^{(l+1)}, $ имеет

$ \ frac {\ partial z ^ {(l + 1)}} {\ partial a ^ {(l)}} = (W ^ {(l + 1)}) ^ T \ in \ mathbb {R} ^ { M_l \times M_{l+1} } $

Согласно $a^{(l)}=f_l(z^{(l)})$, где $f_l(.)$ — функция побитового вычисления, поэтому

$ \ frac {\ partial a ^ {(l)}} {\ partial z ^ {(l)}} = \ frac {\ partial f_l (z ^ {(l)})} {\ partial z ^ {(l )}}$

$= diag({f}_l’(z^{(l)})) \qqiad \in \mathbb{R}^{M_l \times M_l}$

Следовательно, по цепному правилу член ошибки на уровне l равен

$\delta^{(l)} \overset{\Delta}{=} \frac{\partial \mathcal{L}(y,\hat{y})}{\partial z^{(l)}} $

$ = \ frac {\ partial a ^ {(l)}} {\ partial z ^ {(l)}}. \ frac {\ partial z ^ {(l + 1)}} {\ partial a ^ {(l) )}}. \ frac {\ partial \ mathcal {L} (y, \ hat {y})} {\ partial z ^ {(l + 1)}} $

$={f}_l'(z^{(l)})\odot ((W^{(l+1)})^T \delta^{(l+1)}) \quad \in \mathbb{ Р}^{М_л} $

среди них $\odot$ — оператор скалярного произведения векторов, что означает умножение каждого элемента.

Из формулы (63) видно, что член ошибки слоя l может быть рассчитан по члену ошибки слоя l+1, который представляет собой обратное распространение (BP) ошибки. Смысл алгоритма обратного распространения ошибки следующий: член ошибки (или чувствительность) нейрона в слое l представляет собой сумму весов членов ошибки всех нейронов в слое l+1, связанных с нейроном. Затем умножьте градиент функции активации нейронов.

После вычисления трех приведенных выше частных производных формулу (49) можно записать в виде

$ \ frac {\ partial \ mathcal {L} (y, \ hat {y})} {\ partial w_ {ij} ^ {(l)}} = 1_i (a_ {j} ^ {(l-1)} )\дельта^{(л)}$

$= [ 0 ,\hdots, a_{j}^{(l-1)},\hdots,0][ \delta^{(l)}_{1} ,\hdots, \delta^{(l) }_{i},\hdots,\delta^{(l)}_{M_l}]^T$

$ \delta_{i}^{(l)}a_{j}^{(l-1)}$

Среди них $\delta_{i}^{(l)}a_{j}^{(l-1)}$ эквивалентен вектору $\delta^{(l)}$ и вектору $a^{ (l-1) Элемент i, j внешнего произведения }$. Приведенную выше формулу можно ввести во внешнее произведение, см. формулу (А.28). Один шаг записывается как

$[ \frac{\partial \mathcal{L}(y,\hat{y})}{\partial W^{(l)}} ]_{ij}= [\delta^{(l)} (a ^{(l-1)})^T]_{ij} $

Следовательно, градиент $\mathcal{L}(y,\hat{y})$ относительно веса l-го слоя $W^{(l)}$ равен

$\frac{\partial \mathcal{L}(y,\hat{y})}{\partial W^{(l)}} = \delta^{(l)} (a^{(l-1) })^T \qquad \in \mathbb{R}^{M_l \times M_{l-1}}$

Точно так же градиент $\mathcal{L}(y,\hat{y})$ на смещении слоя l $b^{(l)}$ равен

$ \ frac {\ partial \ mathcal {L} (y, \ hat {y})} {\ partial b ^ {(l)}} = \ delta ^ {(l)} \ qquad \ in \ mathbb {R} ^{М_л}$

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

  • Упреждающий расчет чистого входа $z^{(l)} $ и значения активации $a^{(l)}$ для каждого слоя до последнего слоя;
  • Обратное распространение вычисляет член ошибки каждого слоя $\delta^{(l)}$;
  • Вычислите частные производные параметров каждого слоя и обновите параметры.

Алгоритм 1 дает процесс обучения стохастическому градиентному спуску с использованием алгоритма обратного распространения ошибки.

Автоматический расчет градиента

Параметры нейронной сети в основном оптимизируются методом градиентного спуска. Когда функция риска и структура сети определены, мы можем вручную использовать цепное правило, чтобы вычислить градиент функции риска для каждого параметра и реализовать его с помощью кода. Однако процесс ручного вывода и преобразования в компьютерную программу очень тривиален и подвержен ошибкам, что делает реализацию нейронных сетей очень неэффективной. Фактически градиент параметров может быть рассчитан компьютером автоматически. В настоящее время все основные фреймворки глубокого обучения включают функцию автоматического вычисления градиента. То есть мы можем только рассмотреть структуру сети и реализовать ее кодом. Градиент может быть рассчитан автоматически без ручного вмешательства, что может значительно повысить эффективность разработки.

Методы автоматического вычисления градиентов можно разделить на следующие три категории: числовое дифференцирование, символьное дифференцирование и автоматическое дифференцирование.

Численное дифференцирование

Численное дифференцирование — это использование численных методов для вычисления производной функции f(x). Производная точки x функции f(x) определяется как

$ {f} '(x) = \ lim _ {\ треугольник x \ rightarrow 0} \ frac {f (x + \ треугольник x) -f (x)} {\ треугольник x} $

Чтобы вычислить производную функции f(x) в точке x, можно добавить к x несколько ненулевых возмущений $\треугольника x$, и градиент функции f(x) можно вычислить непосредственно по приведенной выше формуле определение. Метод численного дифференцирования очень прост в реализации, но найти подходящее возмущение $\треугольник x$ очень сложно. Если размер $\triangle x$ слишком мал, это вызовет проблемы с числовыми вычислениями, например ошибки округления; если $\triangle x$ слишком велик, это увеличит ошибку усечения и сделает вычисление производной неточным. Следовательно, практичность численного дифференцирования относительно невелика.

В практических приложениях для расчета градиента часто используется следующая формула, которая может уменьшить ошибку усечения.

${f}’(x)=\lim_{\triangle x \rightarrow 0}\frac{f(x+\triangle x) -f(x -\triangle x)}{2 \triangle x}$

Еще одна проблема с численным дифференцированием — вычислительная сложность. Предполагая, что количество параметров равно N, каждый параметр необходимо возмущать отдельно и вычислять градиент. Предполагая, что вычислительная сложность каждого прямого распространения составляет $O(N)$, общая временная сложность вычисления численного дифференцирования составляет $O(N²)$.

Символическая дифференциация

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

Например, упрощение математических выражений:

$\text{ Ввод:} 3x-x + 2x + 1$

$ \text{ Вывод :} 4x+ 1.$

Символьное вычисление обычно заключается в использовании некоторых предопределенных правил для преобразования входного выражения посредством итерации или рекурсии. Когда результат преобразования больше не может использовать правило преобразования, вычисление останавливается.

Символьное дифференцирование может вычислять математическое представление градиента во время компиляции и в дальнейшем использовать методы символьного вычисления для оптимизации. Кроме того, преимуществом символьных вычислений является то, что символьные вычисления не зависят от платформы и могут выполняться на центральном или графическом процессоре. Символьное дифференцирование также имеет некоторые недостатки: 1) требуется много времени для компиляции, особенно для циклов, компиляция которых занимает много времени; 2) Для выполнения символьного дифференцирования, как правило, необходимо разработать специальный язык для выражения математических выражений и заранее объявить переменные (символы); 3) Трудно отлаживать программу.

Автоматическое дифференцирование

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

Основной принцип автоматического дифференцирования заключается в том, что все численные вычисления можно разложить на некоторые базовые операции, включая +, -, ×, / и некоторые элементарные функции exp, log, sin, cos и т. д., а затем использовать цепное правило для автоматического вычислить составной градиент функции.

Для простоты, вот пример общей составной функции в нейронных сетях, чтобы проиллюстрировать процесс автоматического дифференцирования. Пусть составная функция f(x; w, b) равна

$ f(x;w,b)=\frac{1}{exp ( — (wx + b)) + 1}$

Является единичной матрицей $M_l \times M_l$. Где x — входной скаляр, w и b — параметры веса и смещения соответственно.

Во-первых, мы разлагаем составную функцию f(x; w, b) на ряд основных операций и формируем вычислительный граф. График вычислений представляет собой графическое представление математических операций. Каждый неконечный узел графа вычислений представляет базовую операцию, а каждый конечный узел является входной переменной или константой. На рис. 8 показана схема вычисления составной функции f(x; w, b) при $x = 1, w = 0, b = 0$, где красные цифры по краям означают, что каждая из составных функций в прямом расчет Фактическое значение каждой переменной.

Рисунок 8 — Расчетный график составной функции 𝑓(𝑥; 𝑤, 𝑏)

Из схемы расчета видно, что составная функция f(x; w, b) состоит из 6 основных функций $h_i, 1 \geq i \geq 6$. Как показано в таблице 2, производная каждой базовой функции очень проста и может быть реализована по правилам

ФункцияПроизводная

h_1 = х \ умножить на ш

$\frac{\partial h_1}{\partial w}=x$

\frac{\partial h_1}{\partial x}=w$

$h_2 = h_1 +b$

$\frac{\partial h_2}{\partial h_1}=1 $

$ \frac{\partial h_2}{\partial b}=1$

$h_3 = h_2 \times -1 $

$\frac{\partial h_3}{\partial h_2}=-1$

$ h_4=exp(h_3)$

$\frac{\partial h_4}{\partial h_3}=exp(h_3)$

$h_5=h_4+1$

$\frac{\partial h_5}{\partial h_4}=1$

$h_6=1/h_5 $

$\frac{\partial h_6}{\partial h_5}=-\frac{1}{h²_5}$

Таблица 2 — 6 основных функций и их производные составной функции $f(x;w,b)$.

Производная всей составной функции $f'x;w,b)$ по параметрам w и b может быть получена путем перемножения всех производных на пути между узлами $f'x;w,b)$ на параметры 𝑤 и 𝑏 на графике, который

$\frac{\partial f(x;w,b)}{\partial w}=\frac{\partial f(x;w,b)}{\partial h_6}\frac{\partial h_6}{\partial h_5}\frac{\partial h_5}{\partial h_4}\frac{\partial h_4}{\partial h_3}\frac{\partial h_3}{\partial h_2}\frac{\partial h_2}{\partial h_1} \frac{\partial h_1}{\partial w}$

$\frac{\partial f(x;w,b)}{\partial b}=\frac{\partial f(x;w,b)}{\partial h_6}\frac{\partial h_6}{\partial h_5}\frac{\partial h_5}{\partial h_4}\frac{\partial h_4}{\partial h_3}\frac{\partial h_3}{\partial h_2}\frac{\partial h_2}{\partial h_1} \frac{\partial h_1}{\partial b}$

Взяв $\frac{\partial f(x;w,b)}{\partial w}$ в качестве примера, когда x = 1, w = 0, b = 0, мы можем получить

$ \ frac {\ partial f (x; w, b)} {\ partial w} \ mid_ {x = 1, b = 0, w = 0} = \ frac {\ partial f (x; w, b)} {\ парциальное h_6} \ гидроразрыва {\ парциальное h_6} {\ парциальное h_5} \ гидроразрыва {\ парциальное h_5} {\ парциальное h_4} \ гидроразрыва {\ парциальное h_4} {\ парциальное h_3} \ гидроразрыва {\ парциальное h_3} {\ частичное h_2}\frac{\partial h_2}{\partial h_1}\frac{\partial h_1}{\partial w} $

$= 1 \times -0.25 \times 1 \times 1 \times -1 \times 1 \times1$

$=0.25$

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

По порядку вычисления производной автоматическое дифференцирование можно разделить на два режима: прямой режим и обратный режим. Прямой режим В прямом режиме градиент рекурсивно вычисляется в том же направлении, что и направление расчета на графике расчета. Взяв $\frac{\partial f(x;w,b)}{\partial w}$ в качестве примера, когда x = 1, w = 0, b = 0, кумулятивная последовательность вычислений прямого режима выглядит следующим образом :

$

\begin{matrix}
\frac{\partial h_1}{\partial w}=x=1 \\
\frac{\partial h_2}{\partial w}= \frac{\partial h_2 }{\partial h_1} \frac{\partial h_1}{\partial w}=1\times 1=1 \\

\frac{\partial h_3}{\partial w} = \frac{\partial h_3}{\partial h_2} \frac{\partial h_2}{\partial w}=-1 \times 1\\

\vdots \qquad \vdots\\
\frac{\partial h_6}{\partial w} = \frac{\partial h_6}{\partial h_5} \frac{\partial h_5}{\partial w}= -0,25 \умножить на -1=0,25\\

\ гидроразрыва {\ парциальное е (х; ш, б)} {\ парциальное ш} = \ гидроразрыва {\ парциальное е (х; ш, Ь)} {\ парциальное h_6} \ гидроразрыва {\ парциальное h_6} {\ парциальное ш }=1\times 0,25=0,25
\end{matrix}

$

Обратный режим Обратный режим рекурсивно вычисляет градиент в направлении, противоположном направлению расчета на графике расчета. На примере $\frac{\partial f(x;w,b)}{\partial w}$ при x = 1, w = 0, b = 0 совокупная последовательность вычислений реверсивного режима выглядит следующим образом. :

$

\begin{matrix}
\frac{\partial f(x;w,b)}{\partial h_6}=1\\
\frac{\partial f(x;w,b)} {\ парциальное h_5} = \ гидроразрыва {\ парциальное е (х; ш, б)} {\ парциальное h_6} \ гидроразрыва {\ парциальное h_6} {\ парциальное h_5} = 1 \ раз -0,25 \\
\ гидроразрыва {\ парциальное е (х; ш, б)} {\ парциальное h_4} = \ гидроразрыва {\ парциальное е (х; ш, Ь)} {\ парциальное h_5} \ гидроразрыва {\ парциальное h_5} {\ парциальное h_4} = -0,25 \ умножить на 1 = -0,25 \\

\vdots \qquad \vdots \\
\frac{\partial f(x;w,b)}{\partial w}=\frac{\partial f(x;w,b)}{\partial h_1 }\frac{\partial h_1}{\partial w}=0,25 \times 1=0,25
\end{matrix}

$

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

Для общей функциональной формы $f:\mathbb{R}^N\rightarrow \mathbb{R}^M$ прямой режим должен пройти каждую входную переменную один раз, что в сумме требует N раз. Обратный режим требует одного обхода для каждого выхода, всего требуется M обходов. Когда N > M, реверсивный режим более эффективен. При обучении параметров нейронной сети с прямой связью функция риска имеет вид $f:\mathbb{R}\rightarrow \mathbb{R}^N$, а выход представляет собой скаляр, поэтому обратный режим является наиболее эффективным методом расчета. , только пересчитать заново.

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

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

Оптимизация

Изучение параметров нейронной сети сложнее, чем линейная модель. Основных причин две: 1) проблема невыпуклой оптимизации и 2) проблема исчезающего градиента.

Задача невыпуклой оптимизации

Задача оптимизации нейронной сети является задачей невыпуклой оптимизации. В качестве примера возьмем двухслойную нейронную сеть с простейшей структурой 1–1–1,

$y=\сигма(w_2\сигма(w_1x))$

Среди них $w_1$ и $w_2$ — сетевые параметры, а $\sigma(.)$ — логистическая функция.

Для входной выборки (1, 1) соответственно используются две функции потерь. Первая функция потерь — это потеря квадратичной ошибки: $\mathcal{L}(w_1,w_2)=(1-y)²$, первая. w_2)=логика$. Когда x = 1, y = 1, функции квадратичной ошибки и перекрестной энтропийной потери: $\mathcal{L}(w_1,w_2)=(1-y)²$ и $\mathcal{L}(w_1,w_2 )=log у$. Связь между функцией потерь и параметрами $w_1$ и $w_2$ показана на рисунке 10. Можно видеть, что обе функции потерь являются невыпуклыми функциями относительно параметров.

Рисунок 10. Функция потерь для нейронной сети $y=\sigma(w_2 \sigma(w_1x))$ .

Проблема исчезающего градиента

Итерационная формула обратного распространения ошибки в нейронной сети имеет вид

$ \delta^{(l)}={f}_l’(z^{(l)})\odot (W^{(l+1)})^T \delta^{(l+1)} $

Когда ошибка распространяется обратно из выходного слоя, каждый слой должен быть умножен на производную функции активации этого слоя. Когда мы используем функцию сигмовидного типа: логистическую функцию $\sigma(x)$ или функцию Tanh, ее производная равна

${\sigma}'(x)=\sigma(x)(1-)\sigma(x) \in [ 0, 0,25 ] $

${tanh}’(x)=1-(tanh(x))² \in [ 0,1 ]$

Диапазон производных функций сигмовидного типа меньше или равен 1, как показано на рисунке 11.

Рисунок 11 — Производные функций сигмовидного типа

Из-за насыщения сигмовидной функции производная области насыщения ближе к нулю. Таким образом, ошибка будет продолжать уменьшаться на каждом уровне передачи. Когда количество слоев сети очень велико, градиент будет затухать или даже исчезать, что затрудняет обучение всей сети. Это так называемая Проблема исчезающего градиента (Vanishing Gradient Problem), также известная как Проблема диффузии градиента.

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

Резюме и дальнейшее чтение

Нейронная сеть представляет собой типичную модель распределенной параллельной обработки, которая обрабатывает информацию посредством взаимодействия между большим количеством нейронов. Каждый нейрон посылает информацию о возбуждении и торможении другим нейронам [McClelland et al., 1986]. В отличие от персептронов, функции активации в нейронных сетях, как правило, являются непрерывными и производными функциями. Очень важно выбрать подходящую функцию активации в нейронной сети. [Ramachandran et al., 2017] разработали различные формы методов комбинирования функций и искали подходящие функции активации с помощью обучения с подкреплением и обнаружили, что функция Swish лучше справляется с несколькими задачами.

В таблице 3 показаны общие функции активации и их производные.

Функция активацииFunctionDerivative

Логистическая функция

$f(x)=\frac{1}{1+exp(-x)}$

${f}’(x)=f(x)(1-f(x))$

Тан функция

$f(x)=\frac{exp(x)-exp(-x)}{exp(x)+exp(-x)}$

${f}’(x)=1-f(x)²$

Функция ReLU

$f(x)=max(x,0)$

${f}’(x)=I(x>0)$

Функция ELU

$f(x)=max(x,0)+max(0,\gamma(exp(x)-1))$

${f}’(x)=I(x›0)+I(x\leq 0).\gamma exp(x)$

Функция SoftPlus

$f(x)=log(1+exp(x))$

${f}’(x)=\frac{1}{1+exp(-x)}$

Таблица 3 — Общие функции активации и их производные

Нейронная сеть с прямой связью, представленная в этой главе, представляет собой простейший тип сети. Нейроны в двух соседних слоях полностью связаны, также известные как полностью подключенная нейронная сеть (FCNN) или многослойный персептрон. . Нейронная сеть с прямой связью как метод машинного обучения представлена ​​во многих учебниках по распознаванию образов и машинному обучению, таких как «Распознавание образов и машинное обучение» [Bishop, 2007] и «Классификация образов» [Duda et al., 2001]. Подождите.

Как высокоэффективная нелинейная модель нейронная сеть с прямой связью может быть гарантирована общей теоремой аппроксимации. Подробное введение в общую теорему об аппроксимации см. в [Haykin, 2009].

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

TensorFlow Playground 1 предоставляет очень хорошую систему визуализации процесса обучения нейронной сети.