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

машинное обучение
Нейронные сети с прямой связью

Аккаунт WeChat: ilulaoshi / Личный сайт:lulaoshi.info

Нейронные модели и нейронные сети

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

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

В правой части рисунка ниже показано моделирование нейронных сетей в области машинного обучения. Средняя часть — текущий нейрон, левая — подключенный к ней нейрон верхнего слоя, текущий нейрон получает входной сигнал от нейрона верхнего слояx\boldsymbol{x}. Между двумя слоями нейронов есть веса связи.w\boldsymbol{w}, вес умножается на входной сигнал, и сигнал верхнего нейрона передается вниз через вес соединения. Вес можно узнать, а вес контролирует влияние на него сигнала верхнего слоя, если вес положительный, значит, он более возбуждающий, а если вес отрицательный, значит, сигнал дороги заторможенный. Текущий нейрон суммирует полученные входные значения, полученная сумма сравнивается с порогом нейрона, а затем функция активации используется для генерации выходных данных. Принцип активации реальных нейронов более сложный, он, с одной стороны, зависит от потенциального порога, а с другой стороны, также контролирует время активации. Функция активации в машинном обучении упрощена и не контролирует время активации.

图1 神经元模型Рисунок 1 Модель нейрона

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

Соединяя множество таких нейронов в определенную иерархию, получается нейронная сеть. На рисунке ниже представлена ​​нейронная сеть с трехмерными функциями. Крайний левый — входные данные, называемый входным слоем (Input Layer), крайний правый — выходные данные, называемый выходным слоем (Output Layer), средний слой не связан напрямую с входом и выходом, часто называемый скрытым слоем (скрытый слой).

图2 神经网络Рисунок 2 Нейронная сеть

мы используемg(z)g(z)Представляет функцию активации. Общие функции активации: ? \begin{выровнено} g(z) &= \frac{1}{1+\exp{(-z)}} \quad \quad (сигмоид) \ g(z) &= max(z, 0) \quad \quad \quad \quad (ReLU) \ g(z) &= \frac{e^z - e^z}{e^z + e^z} \quad \quad \quad \quad \quad (tanh) \end{выровнено} ? Форма этих функций активации показана на следующем рисунке:

图3 常见激活函数Рисунок 3 Общие функции активации

Сигмовидная функция или также известная как логистическая функция, которую мы представили в логистической регрессии, будет(,+)(-\infty, +\infty)Вход сжимается между 0 и 1. После сигмовидной функции большие отрицательные числа будут близки к 0, а большие положительные числа будут близки к 1. Эти характеристики сигмовидной функции могут хорошо объяснить модель нейрона, 0 означает отсутствие возбуждения, 1 означает возбуждение. Ранние нейронные сети любят использовать сигмовидную функцию в качестве функции активации, но у сигмоидной функции есть и некоторые недостатки, и современные нейронные сети ее почти больше не используют. Логистическая регрессия использует сигмовидную функцию, а логистическая регрессия считается очень простой нейронной сетью.

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

Рисунок 2 представляет собой простейший вид нейронной сети.Прямое распространение входного слоя сети влияет на скрытый слой, а дальнейшее прямое распространение скрытого слоя влияет на выходной слой.Такая сеть называется нейронной сетью прямого распространения. В некоторых местах его также называют многослойным персептроном (MLP). В нейронной сети с прямой связью данные передаются в одном направлении от входного слоя к выходному слою без какого-либо цикла в середине.Эта сеть прямого распространения отличается от рекуррентной нейронной сети.

векторизованное представление

Продолжая брать сеть на рисунке 2 в качестве примера, вход в сеть представляет собой трехмерный векторx\boldsymbol{x}, каждый узел скрытого слоя принимаетx\boldsymbol{x}ввод, суммированный, чтобы получитьz\boldsymbol{z}, после функции активации выходa\boldsymbol{a}.

В многослойной нейронной сети необходимо различать, какой слой какой. В следующей формуле квадратные скобки[][]Указывает, к какому слою относится параметр. В этом примере имеется только один скрытый слой.[1][1]Выражать.

? z_{1}^{[1]} = {W_1^{[1]}}^T\boldsymbol{x} +b_1^{[1]} \quad \quad a_{1}^{[1]} = g(z_{1}^{[1]}) \ \vdots \ z_{4}^{[1]} = {W_4^{[1]}}^T\boldsymbol{x} +b_4^{[1]} \quad \quad a_{4}^{[1]} = g(z_{4}^{[1]}) ?

Данные проходят через скрытый слой, чтобы получить 4-мерный выходной вектор.a[1]\boldsymbol{a}^{[1]}:

? \boldsymbol{a}^{[1]} = \begin{bmatrix} а_{1}^{[1]} \ а_{2}^{[1]} \ а_{3}^{[1]} \ а_{4}^{[1]} \end{bmatrix} ? положить этот векторa[1]\boldsymbol{a}^{[1]}Отправить на выходной слой:

? z^{[2]} = {W^{[2]}}\boldsymbol{a}^{[1]} +b^{[2]} \quad \quad a^{[2]} = g(z^{[2]}) ?

используется в формулах[2][2]Представляет параметры выходного слоя (уровень 2). Выходной слой представляет собой одномерный скаляр.a[2]a^{[2]}, который представляет окончательный результат прогнозирования.

Для приведенного выше расчета первое, что приходит на ум, это использоватьforпетля, ноforПараллелизм циклов не очень эффективен. В нейронных сетях мы должны стараться избегать использованияforцикла, вместо этого вычисления должны быть векторизованы. Многие программы ЦП и ГП оптимизированы для векторных вычислений. Процесс расчета использования вектора для представления скрытого слоя:

? \boldsymbol{z}^{[1]}= W^{[1]}\boldsymbol{x}+\boldsymbol{b}^{[1]} \quad \quad \boldsymbol{a}^{[1]}=g(\boldsymbol{z}^{[1]}) ?

Конкретный демонтаж это:

? \begin{bmatrix} z^{[1]}_1 \ \vdots \ \vdots\ z^{[1]}_4 \end{bmatrix} = \begin{bmatrix}-{W^{[1]}_1}^T - \ -{W^{[1]}_2}^T -\\vdots\ -{W^{[1]}_4}^T -\end{bmatrix} \begin{bmatrix}x_1\x_2\x_3 \end{bmatrix} + \begin{bmatrix} b^{[1]}_1 \ b^{[1]}_2 \ \vdots\ b^{[1]}_4\end{bmatrix} ?

Процесс расчета выходного слоя:

? z^{[2]} = W^{[2]} \boldsymbol{a}^{[1]} + \boldsymbol{b}^{[2]} \quad \quad a^{[2]} = g(z^{[2]}) ?

Пакетный расчет обучающей выборки

Приведенный выше вывод основан на одной выборке, и данные начинаются с входного слоя и распространяются вперед. В реальных расчетах окончательный результат обычно получается путем пакетного расчета нескольких образцов обучающей выборки. В следующей формуле мы начинаем со скобок()()представляет собой первый в тренировочном набореiiобразцы,XXСледующий образецx(i)\boldsymbol{x}^{(i)}, функция первого измерения этого образца:x1(i)x^{(i)}_1.

Если в обучающей выборке три выборки, то: ? \begin{выровнено} \boldsymbol{г}^{1} &= W^{[1]}\boldsymbol{x}^{(1)}+\boldsymbol{b}^{[1]}\ \boldsymbol{z}^{1} &= W^{[1]}\boldsymbol{x}^{(2)}+\boldsymbol{b}^{[1]}\ \boldsymbol{z}^{1} &= W^{[1]}\boldsymbol{x}^{(3)}+\boldsymbol{b}^{[1]}\ \end{выровнено} ? Один образец представляет собой вектор-столбец, мы объединяем один образец в матрицу по столбцу, чтобы получить матрицуXX: ? X=\begin{bmatrix} |&|&|&\ \boldsymbol{x}^{(1)}&\boldsymbol{x}^{(2)}&\boldsymbol{x}^{(3)}\ |&|&|&\ \end{bmatrix} ? парная матрицаXXМы используемz[1]=W[1]x+b[1]\boldsymbol{z}^{[1]}= W^{[1]}\boldsymbol{x}+\boldsymbol{b}^{[1]}Выполнены расчеты, векторизованное представление: ? Z^{[1]}=\begin{bmatrix} |&|&|&\ \boldsymbol{г}^{1}&\boldsymbol{z}^{1}&\boldsymbol{z}^{1}\ |&|&|&\ \end{bmatrix} =W^{[1]}X+\boldsymbol{b}^{[1]} ?

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

Нейронные сети обычно используют алгоритм обратного распространения (Back Propagation, также известный как алгоритм BP).

Мы по-прежнему берем в качестве примера предыдущую сеть, входной слой — трехмерный вектор, а выходной — одномерный скаляр. Для одной выборки в обучающей выборке(x(i),y(i))(\boldsymbol{x}^{(i)}, y^{(i)}), результирующая среднеквадратическая ошибка: ? L = \frac{1}{2}(\hat{y}^{(i)} - y^{(i)})^2 ? здесь12\frac{1}{2}для удобства,y^\hat{y}представляет прогнозируемое значение модели,yyявляется истинным значением.

图4 神经网络中各参数符号表示Рисунок 4 Символьное представление параметров в нейронной сети

Мы продолжаем использовать метод градиентного спуска для обновления различных параметров в модели.Параметры модели включают выходной слой (слой 2)W[2]W^{[2]}иb[2]b^{[2]}, скрытый слой (слой 1)W[1]W^{[1]}иb[1]\boldsymbol{b}^{[1]}. для любого заданного уровня сетиll, метод обновления параметров в этом слое выглядит следующим образом, гдеα\alphaэто скорость обучения. ? \begin{выровнено} W ^ {[l]} &= W ^ {[l]} - \ alpha \ frac {\ partial L} {\ partial W ^ {[l]}} \ b ^ {[l]} &= b ^ {[l]} - \ alpha \ frac {\ partial L} {\ partial b ^ {[l]}} \ \end{выровнено} ? При использовании градиентного спуска наиболее важным шагом является получение градиента соответствующего параметра:LW[l]\frac{\partial L}{\partial W^{[l]}}иLb[l]\frac{\partial L}{\partial b^{[l]}}. Сначала мы находим параметры в слое 2.W11[2]W^{[2]}_{11}, этот параметр соединяет первый узел уровня 1 и единственный узел уровня 2, а индекс 11 указывает на первый узел уровня 1 и первый узел уровня 2. Обратите внимание, что параметрW11[2]W^{[2]}_{11}Первый влияет на суммирующий член второго слояz[2]z^{[2]}, а затем повлиять на выходное значениеy^=a[2]=g(z[2])\hat{y} = a^{[2]} = g(z^{[2]}). В приведенной ниже формуле для расчета градиента мы применяем цепное правило из исчисления. ? \begin{выровнено} \ гидроразрыв {\ парциальное L} {\ парциальное W ^ {[2]}{11}} &= \frac{\partial L}{\partial a^{[2]}} \cdot \frac{\partial a^{[2]}}{\partial z^{[2]}} \cdot \frac{\partial z^{[2]}}{\partial W^{[2]}{11}} \ &= \frac{\partial [\frac{1}{2} (\hat{y}^{(i)} - y^{(i)})^2]}{\partial a^{[2]}} \cdot g'(z^{[2]}) \cdot a^{[1]}{1} \ &= (\hat{y}^{(i)} - y^{(i)}) \cdot g'(z^{[2]}) \cdot a^{[1]}{1} \end{выровнено} ? Вывод этой формулы делится на три части: Первая частьLa[2]\frac{\partial L}{\partial a^{[2]}}это квадрат ошибки парыa[2]a^{[2]}Вывод, часть IIa[2]z[2]\frac{\partial a^{[2]}}{\partial z^{[2]}},так какa=g(z)a = g(z), поэтому эта часть в основном предназначена для получения функции активации; последняя часть связана сz[2]=W[2]a[1]+b[2]z^{[2]} = W^{[2]}\boldsymbol{a}^{[1]} + b^{[2]},z[2]W11[2]=a1[1]\frac{\partial z^{[2]}}{\partial W^{[2]}_{11}} = a^{[1]}_1. Из этих трех частей,(y^(i)y(i)) (\hat{y}^{(i)} - y^{(i)})- член ошибки, который можно вычислить непосредственно;g'(z[2])g'(z^{[2]})является производной функции активации.Если функция активации является сигмоидой, существуютg'(z)=g(z)(1g(z))g'(z) = g(z)(1-g(z)), эта часть также может быть вычислена; последняя частьa1[1]a^{[1]}_{1}рассчитывается во время распространения вперед. Видно, что при нахождении градиента мы сначала должны применить распространение впередa[1]\boldsymbol{a}^{[1]},z[2]z^{[2]},y^(i)\hat{y}^{(i)}, и подставив эти значения в формулу градиента, получимW11[2]W^{[2]}_{11}Текущий градиент. Таким же образом мы можем получитьW[2]W^{[2]}Градиенты других компонентов.

Если мы хотим далее найти первый уровеньW[1]W^{[1]}градиент , например, гдеW21[1]W^{[1]}_{21}, мы можем перейти к применению цепного правила. Мы знаем, что функция потерьLLЗависит от уровня 2, который, в свою очередь, зависит от уровня 1. ? \begin{выровнено} \ гидроразрыв {\ парциальное L} {\ парциальное W ^ {[1]}{21}} &= \frac{\partial L}{\partial a^{[2]}} \cdot \frac{\partial a^{[2]}}{\partial z^{[2]}} \cdot \frac{\partial z^{[2]}}{\partial a^{[1]}{1}} \cdot \frac{\partial a^{[1]}{1}}{\partial z^{[1]}{1}} \cdot \frac{\partial z^{[1]}{1}}{\partial W^{[1]}{21}} \ &= (\hat{y}^{(i)} - y^{(i)}) \cdot g'(z^{[2]}) \cdot W^{[2]}{11} \cdot g'(z^{[1]}{1}) \cdot x^{(i)}_{2} \end{выровнено} ? у нас естьW[1]W^{[1]}существуетx2x_2Градиенты компонентов, градиенты других компонентов также могут быть рассчитаны таким образом. Конечно, мы хотим максимально векторизовать эти формулы, чтобы получить параллельное ускорение.

скорость обученияαе(0,1)\alpha \in (0, 1)Он управляет компенсацией обновления каждой итерации алгоритма.Если скорость обучения слишком велика, она будет легко колебаться, а если слишком мала, скорость сходимости будет слишком медленной.

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

Процесс алгоритма обратного распространения BP выглядит следующим образом:

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

Повторяйте вышеуказанные два шага несколько раз, пока не будет достигнуто условие остановки.

При обучении с помощью Mini-batch SGD однократное чтение всего тренировочного набора называется эпохой. Предполагая, что в обучающем наборе 1000 образцов и размер мини-пакета равен 10, для того, чтобы каждый образец участвовал в обучении, требуется 100 мини-пакетов обновлений параметров в одном раунде.

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

использованная литература

  1. Эндрю Нг: Конспект лекций CS229
  2. Ян Гудфеллоу, Йошуа Бенджио и Аарон Курвиль: Глубокое обучение
  3. Чжоу Чжихуа: «Машинное обучение»
  4. На данный момент 231 you.GitHub.IO/neural-net…
  5. ml-cheatsheet.readthedocs.io/en/latest/
  6. «Практическое глубокое обучение»
  7. Тан Шусен Что/погружение-в-Д…
  8. кит данных China.GitHub.IO/pumpkin-Booh…