[Примечания к исследованию чертежей искусственного интеллекта] Сеть глубокой прямой связи (3)

Мы уже получили некоторые знания о сетях глубокого прямого распространения в курсе машинного обучения Эндрю Нга. Эта глава в основном представляет собой краткое изложение главы 6 Цветочной книги «Глубокого обучения»: Сети глубокого прямого распространения. Я надеюсь, что, прочитав эту главу, вы сможете вспомнить некоторые ссылки или детали курса машинного обучения, которые будут полезны для понимания этой статьи.

Справочные примечания:
Предварительное исследование нейронных сетей прямого распространения — Книга цветов глубокого обучения Глава 6 (1)
Подробное объяснение функции потерь нейронной сети, выходного слоя, скрытого слоя — Глубокое обучение Глава 6 (2)
Алгоритм обратного распространения ошибки — Глубокое обучение Глава 6 Глава шестая ( 3)



Обратное распространение ошибки и другие дифференциальные алгоритмы

Когда мы используем нейронную сеть прямого распространения для приема входных данных xxx и выведите результатy ^ \hat yй^Когда информация течет вперед через сеть, от входного слоя к выходному слою. Мы называем этот процесс распространения прямым распространением . Во время процесса обучения прямое распространение течет вперед от входа к скрытому слою и к выходу. Процесс, который будет в конечном итоге создадим скалярную функцию стоимости J ( θ ) J(\theta)J ( θ ) . И наоборот, мы также можем позволить информации из функции стоимости течь обратно через сеть, чтобы вычислить градиент, процесс, который мы называемобратным распространением ошибки.

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

Принцип обратного распространения ошибки очень прост, он использует цепное правило производных:

Для y = g ( x ), z = f ( g ( x ) ) = f ( y ) существует dzdx = dzdydydx. Для y = g (x), z = f (g (x)) = f (y) , Там\frac{dz}{dx}=\frac{dz}{dy}\frac{dy}{dx}для тебя"="г ( Икс ) ,я"="ж ( г ( Икс ))"="f ( y ) , естьд хд з"="д йд зд хд да

В обобщенном виде это
▽ xz = ( ∂ y ∂ x ) T ▽ yz ( ▽ xz представляет собой градиент вывода z относительно x) \triangledown_xz=(\frac{\partial y}{\partial x})^T\ треугольник вниз_yz(\triangledown_xz представляет градиент производной z по x)хя"="(х у)Тдаг ( хz представляет собой градиент производной z по x )

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

Правило цепочки реализует обратное распространение ошибки

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

Вставьте сюда описание изображения

Затем, согласно цепному правилу, мы хотим вычислить градиент от z до w, тогда мы имеем
: ж ′ ( ш ) знак равно ж ′ ( ж ( ж ( ш ) ) ) ж ′ ( ж ( ш ) ) ж ′ ( ш ) \ гидроразрыва {\ частичный z} {\ частичный ш} \\ = \ гидроразрыва {\ частичный z}{ \partial y}\frac{\partial y}{\partial x}\frac{\partial x}{\partial w}\\ =f'(y)f'(x)f'(w)\ \ =f '(f(f(w)))f'(f(w))f'(w)ш z"="у zх уш х"="ж (у)ж (Икс)ж (ш)"="ж (ж(ж(ш)))ж (ж(ш))ж (ш)

Окончательная функциональная форма — это только f (w) f(w)f ( w ) и его производная функция n-го порядка, преимущество состоит в том, что это сокращает время хранения и работы.

Чтобы представить алгоритм в кратких обозначениях, мы используем вычислительный граф для представления нашей нейронной сети.Каждый узел представляет собой входной узел, узел скрытого слоя или выходной узел, а каждое ребро представляет собой операцию между узлами, например Для H = max {0, WX + b} H=max\{ {0,WX+b}\}ЧАС"="ма Икс { 0 ,Ш Х+b } , такая функция ReLU может быть представлена ​​следующим рисунком:
Вставьте сюда описание изображения

(В приведенном выше графе вычислений входной узел эквивалентен операции вычисления, например U ( 1 ) U^{(1)}ты( 1 ) соответствует умножению матриц,U (2) U^{(2)}ты( 2 ) соответствует сложению)

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

Предположим, мы вычисляем ni n_iняИспользуйте u (1) u^{(1)} для входных узловты( 1 ) ктебе ( ni ) u^{(n_i)}ты( ня) отображается на итоговый выход потерьu ( n ) u^{(n)}ты( n ) , то цель обратного распространения ошибки состоит в том, чтобы выяснить, дляi ∈ { 1 , 2.... ni } i \in \ { {1,2....n_i}\}я{ 1 ,2.... ня} все градиенты. Предположим, что связь между каждым промежуточным узлом и всеми родительскими узлами его предыдущего слоя равнаu ( i ) = f ( i ) ( A ( i ) ) u^{(i)}=f^{(i)}(\Bbb А ^ {(я)})ты( я )"="ж( я ) (А( i ) ), гдеA ( i ) = P a ( ты ( i ) ) \Bbb A^{(i)}=Pa(u^{(i)})А( я )"="Па ( ты _( я ) )Представитель( я ) u^{(i)}тыНабор всех родительских узлов ( i )
, где каждый узел передает функциюf (i) f^{(i)}ж( i ) применяется к набору переменныхA (i) \Bbb A^{(i)}А( я )上上计расчет( я ) u^{(i)}ты( я )の值,А ( я ) \Bbb A^{(i)}А( i ) содержит предыдущий узелu (j) u^{(j)}тыЗначение ( j ) удовлетворяет условиюj < i j<iдж<ij ∈ P a ( ты ( я ) ) знак равно А ( я ) j \in Pa(u^{(i)})=\Bbb A^{(i)}джПа ( ты _( я ) )"="А( i ) входом графика вычислений является векторxxx и присваивается первомуni n_iняЧастичная точка от u ( 1 ) до u ( ni ) u^{(1)} до u^{(n_i)}ты( 1 ) тебе_( ня) , выход графа вычислений может быть из последнего (выход j) узлаu (n) u^{(n)}ты( н ) Читать. Тогда алгоритм прямого распространения можно выразить так:
Вставьте сюда описание изображения


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

对于回向传过程,设计链式法则有:
∂ ты ( п ) ∂ ты ( j ) знак равно ∑ я : j ∈ P а ( ты ( я ) ) ∂ ты ( п ) ∂ ты ( я ) ∂ ты ( я ) ∂ ты ( j ) \frac{\partial u^{(n)}}{\partial u^{(j)}}=\sum_{i:j \in Pa(u^{(i)})} \frac{\partial u^{(n)}}{\partial u^{(i)}}\frac{\partial u^{(i)}}{\partial u^{(j)}}ты( Дж )ты( н )"="я : j PA ( ты _( я ) )ты( я )ты( н )ты( Дж )ты( я )
То есть для узла u ( j ) u^{(j)}ты( j ) (j принадлежит всем родительским узлам i), его производная равна всем его дочерним узламiiя相对于u (j) u^{(j)}тыПроизводная от ( j ) и u ( n ) u^{(n)}ты( n ) Сумма произведений по отношению к производным дочерних узлов.

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

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

∂ z ∂ ш знак равно ∂ z ∂ y ∂ y ∂ Икс ∂ Икс ∂ ш (обратное распространение ошибки) знак равно ж ′ ( y ) ж ′ ( Икс ) ж ′ ( ш ) знак равно ж ′ ( ж ( ж ( ш ) ) ) ж ′ ( ж ( ш ) ) ж ′ ( ш ) (прямое распространение) \ frac {\partial z}{\partial w} \\ =\frac{\partial z}{\partial y}\frac{\partial y} \partial x}\frac{\partial x}{\partial w}(обратное распространение)\\ =f'(y)f'(x)f'(w)\\ =f'(f( f(w) ))f'(f(w))f'(w)(прямое распространение)ш z"="у zх уш х( обратное распространение ошибки )"="ж (у)ж (Икс)ж (ш)"="ж (ж(ж(ш)))ж (ж(ш))ж (w)(прямое распространение)

Если вы не используете обратное распространение ошибки, чтобы получить ∂ zy ∂ w \frac{\partial zy}{\partial w}ш зыТогда нам нужно выполнить всего шесть операций, тогда как для использования обратного распространения ошибки требуется всего три операции.

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


Расчет обратного распространения ошибки в полностью подключенном MLP

Давайте рассмотрим конкретный граф, связанный с полностью связным многоуровневым MLP.Приведенный ниже алгоритм дает соответствующее прямое распространение, которое сопоставляет параметры с параметрами, связанными с одной обучающей выборкой (входной, целевой) (x, y) Контролируемые потери функция L ( y ^ , y ) L(\hat y,y)Л (й^,y ),其中y ^ \hat yй^Это когда ххВыходные данные нейронной сети, когда x предоставляется в качестве входных данных.

Это расчет прямого распространения и функции стоимости типичной глубокой нейронной сети, функция потерь L ( y ^ , y ) L(\hat y,y)Л (й^,y ) зависит от выходаy ^ \hat yй^и цель yyй . Чтобы получить общую стоимостьJJJ функция потерь может быть добавлена ​​с помощью регуляризационного членаΩ ( θ ) \Omega(\theta)Ω ( θ ),使用θ \ thetaθ содержит все параметры (весовую матрицу и параметры смещения). В этой демонстрации используется только один входной образецxx.x для практического применения следует использовать небольшие партии.

Вставьте сюда описание изображения

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

Обратный расчет вышеупомянутой нейронной сети не только использует входные данные xxx и цельyyй . Расчет ведется для каждого слояkkk all создает пары переменных активацииa ( k ) a^{(k)}аГрадиент ( k ) рассчитывается в обратном направлении, начиная с выходного слоя до достижения первого скрытого слоя. Эти градиенты можно рассматривать как руководство относительно того, как следует регулировать выходные данные каждого слоя, чтобы уменьшить ошибку.Согласно этим градиентам можно получить градиенты параметров каждого слоя. Градиенты весов и смещений можно использовать немедленно как часть обновления стохастического градиента (обновления можно выполнять сразу после расчета градиентов) или использовать с другими алгоритмами оптимизации на основе градиента.

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

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

Символьно-числовой метод можно понимать как точно такое же вычисление, как и в символьно-числовом графе, с ключевым отличием в том, что символьно-числовой метод не показывает график вычислений справа.

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

Пример обратного распространения ошибки для MLP

Теперь мы задаем скрытый слой сети H = max { 0 , XW ( 1 ) } H=max\{ { 0,XW^{(1)}}\}ЧАС"="ма Икс { 0 ,Х Вт( 1 ) }, здесь для простоты параметр смещенияbbb , теперь задана функция стоимости:

J знак равно JMLE + λ ( ∑ я , j ( W я , j ( 1 ) ) 2 + ∑ я , j ( W я , j ( 2 ) ) 2 ) J = J_ {MLE}+\lambda\bigg(\displaystyle \sum_{i,j}(W^{(1)}_{i,j})^2+\displaystyle\sum_{i,j}(W^{(2)}_{i,j})^ 2\бигг)Дж"="ДжМ Л Е+л (я , дж( Втя , дж( 1 ))2+я , дж( Втя , дж( 2 ))2 )

График его расчета выглядит следующим образом.Новые узлы после расчета будут представлены новыми символами:
Вставьте сюда описание изображения
Вывести градиент вручную очень затруднительно.К счастью, у нас есть алгоритм обратного распространения ошибки, который может автоматически генерировать градиенты. Мы можем описать поведение алгоритма обратного распространения ошибки, посмотрев на диаграмму прямого распространения ошибки выше:

Для обучения мы хотим вычислить ▽ w ( 1 ) J \triangledown_{w^{(1)}}Jш( 1 )J▽ w ( 2 ) J \triangledown_{w^{(2)}}Jш( 2 )J , в сочетании с изображением мы можем знать, что оно представляет собой два разных пути отJJ.J поддерживает веса: один через стоимость перекрестной энтропии (слева), а другой через стоимость распада веса (справа). Стоимость снижения веса относительно проста, она всегда дляW ( i ) W^{(i)}Вт( i ) Вклад верхней лестницы2 λ W ( я ) ( λ ( W ( i ) ) 2 поиск ) 2\lambda W^{(i)}(\lambda (W^{(i)})^2 поиск (директор )2 л Вт( я ) (λ(W( я ) )2 Производная)
Вставьте сюда описание изображения

Другой путь стоимости перекрестной энтропии немного сложнее, пусть GGG — ненормализованная логарифмическая вероятностьU (2) U^{(2)}тыГрадиент ( 2 ) затем делится на две ветви. На более короткой ветви справа правило обратного распространения ошибки для второй переменной матричного умножения может использоваться для преобразования HTGH^TGЧАСT Gдобавляется кW ( 2 ) W^{(2)}Вт( 2 ) по градиенту.

Другой, более длинный путь постепенно спускается по сети. Во-первых, алгоритм обратного распространения ошибки использует правило обратного распространения ошибки первой переменной матричного умножения для вычисления ▽ HJ = GW ( 2 ) T \triangledown_{H}J=GW^{(2)T}ХДж"="Г В( 2 ) T , то операция ReLU использует правило обратного распространения ошибки для вычисленияU (1) U^{(1)}тыЧасть градиента ( 1 ) , которая меньше 0, очищается. Запишите приведенный выше результат какG ′ G'г . Последнимшагом обратного распространения ошибки является использование обратного распространения ошибки для второй переменной операции matmul.ИксТ Г Добавить кW ( 1 ) W^{(1)}Вт( 1 ) по градиенту.

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

Supongo que te gusta

Origin blog.csdn.net/milu_ELK/article/details/129523020
Recomendado
Clasificación