Обратное распространение - Backpropagation

В машинном обучении , обратное распространение ( backprop , BP ) широко используются алгоритм для обучения Feedforward нейронных сетей . Обобщения обратного распространения существуют для других искусственных нейронных сетей (ИНС) и для функций в целом. Все эти классы алгоритмов обычно называются «обратным распространением». В установке нейронной сети , обратное распространение вычисляет градиент от функции потерь относительно весов сети для одного ввода-вывод , например, и делает это эффективно , в отличии от наивного непосредственного вычисления градиента по отношению к каждому весу по отдельности. Эта эффективность делает возможным использование градиентных методов для обучения многослойных сетей, обновления весов для минимизации потерь; Обычно используются градиентный спуск или такие варианты, как стохастический градиентный спуск . Алгоритм обратного распространения ошибки работает, вычисляя градиент функции потерь по отношению к каждому весу по правилу цепочки , вычисляя градиент по одному слою за раз, выполняя итерацию назад от последнего уровня, чтобы избежать избыточных вычислений промежуточных членов в цепном правиле; это пример динамического программирования .

Термин обратное распространение строго относится только к алгоритму вычисления градиента, а не к тому, как градиент используется; однако этот термин часто используется в широком смысле для обозначения всего алгоритма обучения, включая способ использования градиента, например, стохастический градиентный спуск. Обратное распространение обобщает вычисление градиента в правиле дельты , которое является однослойной версией обратного распространения, и, в свою очередь, обобщается с помощью автоматического дифференцирования , где обратное распространение является частным случаем обратного накопления (или «обратного режима»). Термин обратное распространение и его общее использование в нейронных сетях было объявлено в Rumelhart, Hinton & Williams (1986a) , затем разработано и популяризировано в Rumelhart, Hinton & Williams (1986b) , но этот метод был независимо повторно открыт много раз, и у него было много предшественников. к 1960-м годам; см. § История . Современный обзор дан в учебнике по глубокому обучению Goodfellow, Bengio & Courville (2016) .

Обзор

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

  • : input (вектор признаков)
  • : целевой вывод
    Для классификации выходными данными будет вектор вероятностей классов (например,, а целевой выход - это конкретный класс, закодированный с помощью переменной one-hot / dummy (например, ).
  • : функция потерь или "функция стоимости"
    Для классификации это обычно перекрестная энтропия (XC, log loss ), тогда как для регрессии это обычно квадратичная потеря ошибок (SEL).
  • : количество слоев
  • : веса между слоем и , где - вес между -м узлом в слое и -м узлом в слое
  • : функции активации на уровне
    Для классификации последний слой обычно является логистической функцией для двоичной классификации и softmax (softargmax) для классификации нескольких классов, в то время как для скрытых слоев это традиционно была сигмоидальная функция (логистическая функция или другие) для каждого узла (координаты), но сегодня более разнообразен, с обычным выпрямителем ( рампа , ReLU ).

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

Общая сеть представляет собой комбинацию композиции функций и умножения матриц :

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

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

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

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

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

Умножение матриц

Для базового случая сети с прямой связью, где узлы на каждом уровне подключены только к узлам непосредственно следующего уровня (без пропуска каких-либо слоев), и есть функция потерь, которая вычисляет скалярные потери для окончательного вывода, обратное распространение может быть понимается просто умножением матриц. По сути, обратное распространение оценивает выражение для производной функции стоимости как произведение производных между каждым слоем справа налево - «в обратном направлении» - с градиентом весов между каждым слоем, являющимся простой модификацией частичных произведений (« ошибка, распространяющаяся в обратном направлении ").

Для пары вход-выход потери составляют:

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

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

Этими членами являются: производная функции потерь; производные функций активации; и матрицы весов:

Градиент - это транспонирование производной выхода по входу, поэтому матрицы транспонируются, а порядок умножения меняется на противоположный, но элементы остаются теми же:

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

Введение вспомогательной величины для частичных продуктов (умножение справа налево), интерпретируемой как «ошибка на уровне » и определяемой как градиент входных значений на уровне :

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

Тогда градиент весов в слое равен:

Фактор заключается в том, что веса между уровнем и уровнем влияют на уровень пропорционально входам (активациям): входы фиксированы, веса меняются.

Можно легко вычислить рекурсивно как:

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

По сравнению с наивным вычислением форвардов (используя для иллюстрации):

есть два ключевых отличия от обратного распространения ошибки:

  1. С точки зрения вычислений, можно избежать очевидного дублирования слоев и не только.
  2. Умножение, начиная с - распространение ошибки в обратном направлении - означает, что каждый шаг просто умножает вектор ( ) на матрицы весов и производных активаций . Напротив, умножение вперед, начиная с изменений на более раннем уровне, означает, что каждое умножение умножает матрицу на матрицу . Это намного дороже и соответствует отслеживанию каждого возможного пути изменения в одном слое вперед к изменениям в слое (для умножения на , с дополнительными умножениями для производных активаций), что излишне вычисляет промежуточные величины того, как вес изменения влияют на значения скрытых узлов.

Присоединенный граф

Для более общих графиков и других расширенных вариантов обратное распространение можно понимать в терминах автоматического дифференцирования , где обратное распространение является частным случаем обратного накопления (или «обратного режима»).

Интуиция

Мотивация

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

Обучение как проблема оптимизации

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

Простая нейронная сеть с двумя входными блоками (каждый с одним входом) и одним выходным блоком (с двумя входами)

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

В качестве примера рассмотрим проблему регрессии, используя квадратную ошибку как потерю:

где E - несоответствие или ошибка.

Рассмотрим сеть на одном тренировочном случае: . Таким образом, входные и равны 1 и 1 соответственно, а правильный выход, t равен 0. Теперь, если соотношение между выходом y сети по горизонтальной оси и ошибкой E по вертикальной оси, результатом будет парабола. Минимальная часть параболы соответствует выходным у которого сводит к минимуму ошибки E . Для одного обучающего случая минимум также касается горизонтальной оси, что означает, что ошибка будет равна нулю, и сеть может выдать выходной сигнал y, который точно соответствует целевому выходному значению t . Следовательно, проблема отображения входов в выходы может быть сведена к задаче оптимизации поиска функции, которая будет производить минимальную ошибку.

Поверхность ошибки линейного нейрона для одного обучающего случая

Однако выход нейрона зависит от взвешенной суммы всех его входов:

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

В этом примере после введения обучающих данных функция потерь становится

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

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

Вывод

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

куда

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

Для каждого нейрона его выход определяется как

где функция активации является нелинейной и дифференцируемым (даже если РЕЛ не в одной точке). Исторически используемой функцией активации является логистическая функция :

который имеет удобную производную:

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

Нахождение производной ошибки

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

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

 

 

 

 

( Уравнение 1 )

В последнем множителе правой части вышеизложенного только один член в сумме зависит от , так что

 

 

 

 

( Уравнение 2 )

Если нейрон находится в первом слое после входного, это справедливо .

Производная выхода нейрона по отношению к его входу - это просто частная производная функции активации:

 

 

 

 

( Уравнение 3 )

что для случая функции логистической активации :

Это причина того, что обратное распространение требует, чтобы функция активации была дифференцируемой . (Тем не менее, функция активации ReLU , которая недифференцируема при 0, стала довольно популярной, например, в AlexNet )

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

 

 

 

 

( Уравнение 4 )

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

Однако, если он находится в произвольном внутреннем слое сети, нахождение производной по менее очевидно.

Рассматривая функцию, в которой входами являются все нейроны, получающие входные данные от нейрона ,

и взяв полную производную по , получается рекурсивное выражение для производной:

 

 

 

 

( Уравнение 5 )

Следовательно, производная по может быть вычислена, если известны все производные по выходным сигналам следующего слоя - ближайшим к выходному нейрону. [Обратите внимание, что если какой-либо из нейронов в наборе не был подключен к нейрону , они были бы независимы от него, и соответствующая частная производная при суммировании обратилась бы в нуль до 0.]

Подставляя уравнение. 2 , уравнение. 3 Уравнение 4 и Уравнение. 5 в уравнении. 1 получаем:

с участием

if - это логистическая функция, а ошибка - это квадратная ошибка:

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

Функция потерь

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

Предположения

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

Пример функции потерь

Позвольте быть векторами в .

Выберите функцию ошибки, измеряющую разницу между двумя выходами. Стандартный выбор - квадрат евклидова расстояния между векторами и :

Затем функцию ошибок по обучающим примерам можно записать как среднее значение потерь по отдельным примерам:

Ограничения

Градиентный спуск может найти локальный минимум вместо глобального минимума.
  • Градиентный спуск с обратным распространением не гарантирует нахождение глобального минимума функции ошибок, а только локального минимума; Кроме того, у него есть проблемы с переходом через плато в ландшафте функций ошибок. Эта проблема, вызванная невыпуклостью функций ошибок в нейронных сетях, долгое время считалась серьезным недостатком, но Yann LeCun et al. утверждают, что во многих практических задачах это не так.
  • Обучение обратному распространению не требует нормализации входных векторов; однако нормализация может улучшить производительность.
  • Обратное распространение требует, чтобы производные функций активации были известны во время проектирования сети.

История

Термин обратное распространение и его общее использование в нейронных сетях было объявлено в Rumelhart, Hinton & Williams (1986a) , затем разработано и популяризировано в Rumelhart, Hinton & Williams (1986b) , но этот метод был независимо повторно открыт много раз, и у него было много предшественников. к 1960-м годам.

Основы непрерывного обратного распространения ошибки были выведены в контексте теории управления Генри Дж. Келли в 1960 году и Артуром Э. Брайсоном в 1961 году. Они использовали принципы динамического программирования . В 1962 году Стюарт Дрейфус опубликовал более простой вывод, основанный только на цепном правиле . Брайсон и Хо описали его как метод многоступенчатой ​​динамической оптимизации системы в 1969 году. Обратное распространение было получено несколькими исследователями в начале 60-х годов и реализовано для работы на компьютерах еще в 1970 году Сеппо Линнаинмаа . Пол Вербос был первым в США, кто предложил использовать его для нейронных сетей после его глубокого анализа в своей диссертации 1974 года. Хотя это и не применялось к нейронным сетям, в 1970 году Линнаинмаа опубликовал общий метод автоматического дифференцирования (AD). Хотя это вызывает споры, некоторые ученые считают, что на самом деле это был первый шаг к разработке алгоритма обратного распространения. В 1973 году Дрейфус адаптирует параметры контроллеров пропорционально градиентам ошибок. В 1974 г. Вербос упомянул возможность применения этого принципа к искусственным нейронным сетям, а в 1982 г. применил метод AD Линнаинмаа к нелинейным функциям.

Позже метод Вербоса был переоткрыт и описан в 1985 году Паркером, а в 1986 году - Рамелхартом , Хинтоном и Уильямсом . Рамелхарт, Хинтон и Уильямс экспериментально показали, что этот метод может генерировать полезные внутренние представления входящих данных в скрытых слоях нейронных сетей. Ян Лекун предложил современную форму алгоритма обучения с обратным распространением для нейронных сетей в своей докторской диссертации в 1987 году. В 1993 году Эрик Ван выиграл международный конкурс по распознаванию образов с помощью обратного распространения.

В 2000-х он потерял популярность, но вернулся в 2010-х, извлекая выгоду из дешевых и мощных вычислительных систем на базе графических процессоров . Это особенно характерно для исследований в области распознавания речи , машинного зрения , обработки естественного языка и изучения структуры языка (в которых оно использовалось для объяснения множества явлений, связанных с изучением первого и второго языков).

Обратное распространение ошибок было предложено для объяснения таких компонентов ERP человеческого мозга, как N400 и P600 .

Смотрите также

Примечания

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

дальнейшее чтение

внешние ссылки