Аккаунт WeChat: ilulaoshi / Личный сайт:lulaoshi.info
Нейронные модели и нейронные сети
В биологической нейронной сети нейрон (нейрон, также известный как единица) соединен с несколькими нейронами. Когда нейрон возбуждается, он посылает химические вещества к связанным нейронам, что, в свою очередь, изменяет потенциал связанных нейронов. потенциал нейрона превышает порог (Threshold), нейрон активируется до возбужденного состояния, которое, в свою очередь, посылает химические вещества другим нейронам. Модель нейронной сети в области машинного обучения опирается на некоторые идеи из биологии.
В левой части рисунка ниже представлено биологическое представление нейрона, который получает сигналы от дендритов (дендриты) и посылает сигналы по аксону (аксону). Аксоны продолжают соединяться с нижестоящими нейронами через синапсы.
В правой части рисунка ниже показано моделирование нейронных сетей в области машинного обучения. Средняя часть — текущий нейрон, левая — подключенный к ней нейрон верхнего слоя, текущий нейрон получает входной сигнал от нейрона верхнего слоя. Между двумя слоями нейронов есть веса связи., вес умножается на входной сигнал, и сигнал верхнего нейрона передается вниз через вес соединения. Вес можно узнать, а вес контролирует влияние на него сигнала верхнего слоя, если вес положительный, значит, он более возбуждающий, а если вес отрицательный, значит, сигнал дороги заторможенный. Текущий нейрон суммирует полученные входные значения, полученная сумма сравнивается с порогом нейрона, а затем функция активации используется для генерации выходных данных. Принцип активации реальных нейронов более сложный, он, с одной стороны, зависит от потенциального порога, а с другой стороны, также контролирует время активации. Функция активации в машинном обучении упрощена и не контролирует время активации.
Рисунок 1 Модель нейрона
В биологической нервной системе существует более одного типа нейронов, и один сигнал не может контролироваться одним значением веса.Более того, нейроны могут реализовывать множество нелинейных функций активации, а также можно контролировать время активации.Это время очень важен для нервной системы... Короче говоря, биологические нейроны представляют собой сложную, динамическую и нелинейную систему.Очевидно, что нейронная модель машинного обучения сильно упрощена.
Соединяя множество таких нейронов в определенную иерархию, получается нейронная сеть. На рисунке ниже представлена нейронная сеть с трехмерными функциями. Крайний левый — входные данные, называемый входным слоем (Input Layer), крайний правый — выходные данные, называемый выходным слоем (Output Layer), средний слой не связан напрямую с входом и выходом, часто называемый скрытым слоем (скрытый слой).
Рисунок 2 Нейронная сеть
мы используемПредставляет функцию активации. Общие функции активации: ? \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 Общие функции активации
Сигмовидная функция или также известная как логистическая функция, которую мы представили в логистической регрессии, будетВход сжимается между 0 и 1. После сигмовидной функции большие отрицательные числа будут близки к 0, а большие положительные числа будут близки к 1. Эти характеристики сигмовидной функции могут хорошо объяснить модель нейрона, 0 означает отсутствие возбуждения, 1 означает возбуждение. Ранние нейронные сети любят использовать сигмовидную функцию в качестве функции активации, но у сигмоидной функции есть и некоторые недостатки, и современные нейронные сети ее почти больше не используют. Логистическая регрессия использует сигмовидную функцию, а логистическая регрессия считается очень простой нейронной сетью.
Нейронная сеть с прямой связью
Рисунок 2 представляет собой простейший вид нейронной сети.Прямое распространение входного слоя сети влияет на скрытый слой, а дальнейшее прямое распространение скрытого слоя влияет на выходной слой.Такая сеть называется нейронной сетью прямого распространения. В некоторых местах его также называют многослойным персептроном (MLP). В нейронной сети с прямой связью данные передаются в одном направлении от входного слоя к выходному слою без какого-либо цикла в середине.Эта сеть прямого распространения отличается от рекуррентной нейронной сети.
векторизованное представление
Продолжая брать сеть на рисунке 2 в качестве примера, вход в сеть представляет собой трехмерный вектор, каждый узел скрытого слоя принимаетввод, суммированный, чтобы получить, после функции активации выход.
В многослойной нейронной сети необходимо различать, какой слой какой. В следующей формуле квадратные скобкиУказывает, к какому слою относится параметр. В этом примере имеется только один скрытый слой.Выражать.
? 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-мерный выходной вектор.:
? \boldsymbol{a}^{[1]} = \begin{bmatrix} а_{1}^{[1]} \ а_{2}^{[1]} \ а_{3}^{[1]} \ а_{4}^{[1]} \end{bmatrix} ? положить этот векторОтправить на выходной слой:
? z^{[2]} = {W^{[2]}}\boldsymbol{a}^{[1]} +b^{[2]} \quad \quad a^{[2]} = g(z^{[2]}) ?
используется в формулахПредставляет параметры выходного слоя (уровень 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]}) ?
Пакетный расчет обучающей выборки
Приведенный выше вывод основан на одной выборке, и данные начинаются с входного слоя и распространяются вперед. В реальных расчетах окончательный результат обычно получается путем пакетного расчета нескольких образцов обучающей выборки. В следующей формуле мы начинаем со скобокпредставляет собой первый в тренировочном набореобразцы,Следующий образец, функция первого измерения этого образца:.
Если в обучающей выборке три выборки, то: ? \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{выровнено} ? Один образец представляет собой вектор-столбец, мы объединяем один образец в матрицу по столбцу, чтобы получить матрицу: ? X=\begin{bmatrix} |&|&|&\ \boldsymbol{x}^{(1)}&\boldsymbol{x}^{(2)}&\boldsymbol{x}^{(3)}\ |&|&|&\ \end{bmatrix} ? парная матрицаМы используемВыполнены расчеты, векторизованное представление: ? Z^{[1]}=\begin{bmatrix} |&|&|&\ \boldsymbol{г}^{1}&\boldsymbol{z}^{1}&\boldsymbol{z}^{1}\ |&|&|&\ \end{bmatrix} =W^{[1]}X+\boldsymbol{b}^{[1]} ?
Алгоритм обратного распространения
Нейронные сети обычно используют алгоритм обратного распространения (Back Propagation, также известный как алгоритм BP).
Мы по-прежнему берем в качестве примера предыдущую сеть, входной слой — трехмерный вектор, а выходной — одномерный скаляр. Для одной выборки в обучающей выборке, результирующая среднеквадратическая ошибка: ? L = \frac{1}{2}(\hat{y}^{(i)} - y^{(i)})^2 ? здесьдля удобства,представляет прогнозируемое значение модели,является истинным значением.
Рисунок 4 Символьное представление параметров в нейронной сети
Мы продолжаем использовать метод градиентного спуска для обновления различных параметров в модели.Параметры модели включают выходной слой (слой 2)и, скрытый слой (слой 1)и. для любого заданного уровня сети, метод обновления параметров в этом слое выглядит следующим образом, гдеэто скорость обучения. ? \begin{выровнено} W ^ {[l]} &= W ^ {[l]} - \ alpha \ frac {\ partial L} {\ partial W ^ {[l]}} \ b ^ {[l]} &= b ^ {[l]} - \ alpha \ frac {\ partial L} {\ partial b ^ {[l]}} \ \end{выровнено} ? При использовании градиентного спуска наиболее важным шагом является получение градиента соответствующего параметра:и. Сначала мы находим параметры в слое 2., этот параметр соединяет первый узел уровня 1 и единственный узел уровня 2, а индекс 11 указывает на первый узел уровня 1 и первый узел уровня 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{выровнено} ? Вывод этой формулы делится на три части: Первая частьэто квадрат ошибки парыВывод, часть II,так как, поэтому эта часть в основном предназначена для получения функции активации; последняя часть связана с,. Из этих трех частей,- член ошибки, который можно вычислить непосредственно;является производной функции активации.Если функция активации является сигмоидой, существуют, эта часть также может быть вычислена; последняя частьрассчитывается во время распространения вперед. Видно, что при нахождении градиента мы сначала должны применить распространение вперед,,, и подставив эти значения в формулу градиента, получимТекущий градиент. Таким же образом мы можем получитьГрадиенты других компонентов.
Если мы хотим далее найти первый уровеньградиент , например, где, мы можем перейти к применению цепного правила. Мы знаем, что функция потерьЗависит от уровня 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{выровнено} ? у нас естьсуществуетГрадиенты компонентов, градиенты других компонентов также могут быть рассчитаны таким образом. Конечно, мы хотим максимально векторизовать эти формулы, чтобы получить параллельное ускорение.
скорость обученияОн управляет компенсацией обновления каждой итерации алгоритма.Если скорость обучения слишком велика, она будет легко колебаться, а если слишком мала, скорость сходимости будет слишком медленной.
Предполагая, что мы получили градиент каждого параметра, мы можем использовать стохастический градиентный спуск для обновления параметров. Вывод, который мы только что сделали, основан на функции потерь одного образца.На практике обычно используется идея мини-пакета, то есть алгоритм мини-пакета SGD, который использует пакет образцов для итеративного обновления градиента каждый время.
Процесс алгоритма обратного распространения BP выглядит следующим образом:
- Произвольно выберите образцы размера Mini-batch во всем обучающем наборе, предоставьте образцы входному слою и распространяйте вперед слой за слоем, чтобы получить параметры каждого слоя.
- Получается градиент каждого параметра, и расчет градиента обычно начинается с выходного слоя и распространяется обратно. Обновите параметры на основе этих градиентов.
Повторяйте вышеуказанные два шага несколько раз, пока не будет достигнуто условие остановки.
При обучении с помощью Mini-batch SGD однократное чтение всего тренировочного набора называется эпохой. Предполагая, что в обучающем наборе 1000 образцов и размер мини-пакета равен 10, для того, чтобы каждый образец участвовал в обучении, требуется 100 мини-пакетов обновлений параметров в одном раунде.
Здесь мы делаем некоторые выводы, связанные с градиентом, но на самом деле мы пытаемся понять, что происходит внутри этих сред глубокого обучения. Будь то TensorFlow или PyTorch, важной задачей этих сред глубокого обучения является помощь в автоматическом дифференцировании и выводе.
использованная литература
- Эндрю Нг: Конспект лекций CS229
- Ян Гудфеллоу, Йошуа Бенджио и Аарон Курвиль: Глубокое обучение
- Чжоу Чжихуа: «Машинное обучение»
- На данный момент 231 you.GitHub.IO/neural-net…
- ml-cheatsheet.readthedocs.io/en/latest/
- «Практическое глубокое обучение»
- Тан Шусен Что/погружение-в-Д…
- кит данных China.GitHub.IO/pumpkin-Booh…