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

Алгоритм оптимизации для искусственных нейронных сетей

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

Это эффективное применение цепного правила к нейронным сетям. Обратное распространение вычисляет градиент функции потерь относительно весов сети для одного примера вход-выход, и делает это эффективно , вычисляя градиент по одному слою за раз, итерируя в обратном порядке от последнего слоя, чтобы избежать избыточных вычислений промежуточных членов в цепном правиле; это может быть получено с помощью динамического программирования . [2] [3] [4]

Строго говоря, термин обратное распространение относится только к алгоритму эффективного вычисления градиента, а не к тому, как градиент используется; но этот термин часто используется в широком смысле для обозначения всего алгоритма обучения — включая то, как используется градиент, например, с помощью стохастического градиентного спуска , или как промежуточный шаг в более сложном оптимизаторе, таком как адаптивная оценка момента . [5] Локальная минимальная сходимость, взрывной градиент, исчезающий градиент и слабый контроль скорости обучения являются основными недостатками этих алгоритмов оптимизации. Оптимизаторы Гессе и квази-Гессиана решают только задачу локальной минимальной сходимости, а обратное распространение работает дольше. Эти проблемы заставили исследователей разработать гибридные [6] и дробные [7] алгоритмы оптимизации.

Обратное распространение имело несколько открытий и частичных открытий, с запутанной историей и терминологией. Подробности см. в разделе истории. Некоторые другие названия техники включают «обратный режим автоматического дифференцирования » или « обратное накопление ». [8]

Обзор

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

  • x {\displaystyle x} : вход (вектор признаков)
  • y {\displaystyle y} : целевой выход
    Для классификации выходными данными будет вектор вероятностей классов (например, , а целевыми данными будет конкретный класс, закодированный с помощью унитарной / фиктивной переменной (например, ). ( 0.1 , 0.7 , 0.2 ) {\displaystyle (0.1,0.7,0.2)} ( 0 , 1 , 0 ) {\displaystyle (0,1,0)}
  • C {\displaystyle C} : функция потерь или «функция стоимости» [a]
    Для классификации это обычно кросс-энтропия (XC, log loss ), тогда как для регрессии это обычно квадратичная ошибка потерь (SEL).
  • L {\displaystyle L} : количество слоев
  • W l = ( w j k l ) {\displaystyle W^{l}=(w_{jk}^{l})} : веса между слоем и , где - вес между -ым узлом в слое и -ым узлом в слое [b] l 1 {\displaystyle l-1} l {\displaystyle l} w j k l {\displaystyle w_{jk}^{l}} k {\displaystyle k} l 1 {\displaystyle l-1} j {\displaystyle j} l {\displaystyle l}
  • f l {\displaystyle f^{l}} : функции активации на уровне l {\displaystyle l}
    Для классификации последним слоем обычно является логистическая функция для бинарной классификации и softmax (softargmax) для многоклассовой классификации, в то время как для скрытых слоев это традиционно была сигмоидальная функция (логистическая функция или другие) для каждого узла (координаты), но сегодня она более разнообразна, и распространенным является выпрямитель ( ramp , ReLU ).
  • a j l {\displaystyle a_{j}^{l}} : активация -го узла в слое . j {\displaystyle j} l {\displaystyle l}

При выводе обратного распространения другие промежуточные величины используются путем их введения по мере необходимости ниже. Члены смещения не рассматриваются специально, поскольку они соответствуют весу с фиксированным входом 1. Для обратного распространения конкретная функция потерь и функции активации не имеют значения, пока они и их производные могут быть оценены эффективно. Традиционные функции активации включают сигмоиду, tanh и ReLU . С тех пор были предложены также Swish , [9] mish , [10] и другие функции активации.

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

g ( x ) := f L ( W L f L 1 ( W L 1 f 1 ( W 1 x ) ) ) {\displaystyle g(x):=f^{L}(W^{L}f^{L-1}(W^{L-1}\cdots f^{1}(W^{1}x)\cdots ))}

Для обучающего набора будет набор пар вход-выход, . Для каждой пары вход-выход в обучающем наборе потеря модели на этой паре равна стоимости разницы между прогнозируемым выходом и целевым выходом : { ( x i , y i ) } {\displaystyle \left\{(x_{i},y_{i})\right\}} ( x i , y i ) {\displaystyle (x_{i},y_{i})} g ( x i ) {\displaystyle g(x_{i})} y i {\displaystyle y_{i}}

C ( y i , g ( x i ) ) {\displaystyle C(y_{i},g(x_{i}))}

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

Обратное распространение вычисляет градиент для фиксированной пары вход-выход , где веса могут меняться. Каждый отдельный компонент градиента может быть вычислен по правилу цепочки; но делать это отдельно для каждого веса неэффективно. Обратное распространение эффективно вычисляет градиент, избегая дублирующих вычислений и не вычисляя ненужные промежуточные значения, вычисляя градиент каждого слоя — в частности, градиент взвешенного входа каждого слоя, обозначенного как — сзади вперед. ( x i , y i ) {\displaystyle (x_{i},y_{i})} w j k l {\displaystyle w_{jk}^{l}} C / w j k l , {\displaystyle \partial C/\partial w_{jk}^{l},} δ l {\displaystyle \delta ^{l}}

Неформально, ключевым моментом является то, что поскольку единственный способ, которым вес в влияет на потерю, — это его влияние на следующий слой, и он делает это линейно , — это единственные данные, которые вам нужны для вычисления градиентов весов на слое , а затем градиенты весов предыдущего слоя могут быть вычислены и повторены рекурсивно. Это позволяет избежать неэффективности двумя способами. Во-первых, это позволяет избежать дублирования, поскольку при вычислении градиента на слое нет необходимости пересчитывать все производные на последующих слоях каждый раз. Во-вторых, это позволяет избежать ненужных промежуточных вычислений, поскольку на каждом этапе он напрямую вычисляет градиент весов относительно конечного выхода (потери), а не ненужно вычисляет производные значений скрытых слоев относительно изменений в весах . W l {\displaystyle W^{l}} δ l {\displaystyle \delta ^{l}} l {\displaystyle l} δ l 1 {\displaystyle \delta ^{l-1}} l {\displaystyle l} l + 1 , l + 2 , {\displaystyle l+1,l+2,\ldots } a j l / w j k l {\displaystyle \partial a_{j'}^{l'}/\partial w_{jk}^{l}}

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

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

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

Для пары вход-выход потери составляют: ( x , y ) {\displaystyle (x,y)}

C ( y , f L ( W L f L 1 ( W L 1 f 2 ( W 2 f 1 ( W 1 x ) ) ) ) ) {\displaystyle C(y,f^{L}(W^{L}f^{L-1}(W^{L-1}\cdots f^{2}(W^{2}f^{1}(W^{1}x))\cdots )))}

Чтобы вычислить это, нужно начать с ввода и работать вперед; обозначим взвешенный ввод каждого скрытого слоя как , а выход скрытого слоя как активацию . Для обратного распространения активация, а также производные (оцененные в ) должны быть кэшированы для использования во время обратного прохода. x {\displaystyle x} z l {\displaystyle z^{l}} l {\displaystyle l} a l {\displaystyle a^{l}} a l {\displaystyle a^{l}} ( f l ) {\displaystyle (f^{l})'} z l {\displaystyle z^{l}}

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

d C d a L d a L d z L d z L d a L 1 d a L 1 d z L 1 d z L 1 d a L 2 d a 1 d z 1 z 1 x , {\displaystyle {\frac {dC}{da^{L}}}\cdot {\frac {da^{L}}{dz^{L}}}\cdot {\frac {dz^{L}}{da^{L-1}}}\cdot {\frac {da^{L-1}}{dz^{L-1}}}\cdot {\frac {dz^{L-1}}{da^{L-2}}}\cdot \ldots \cdot {\frac {da^{1}}{dz^{1}}}\cdot {\frac {\partial z^{1}}{\partial x}},}

где — диагональная матрица. d a L d z L {\displaystyle {\frac {da^{L}}{dz^{L}}}}

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

d C d a L ( f L ) W L ( f L 1 ) W L 1 ( f 1 ) W 1 . {\displaystyle {\frac {dC}{da^{L}}}\circ (f^{L})'\cdot W^{L}\circ (f^{L-1})'\cdot W^{L-1}\circ \cdots \circ (f^{1})'\cdot W^{1}.}

Градиент представляет собой транспонированную производную выходного сигнала относительно входного сигнала, поэтому матрицы транспонируются, а порядок умножения меняется на обратный, но записи остаются теми же: {\displaystyle \nabla }

x C = ( W 1 ) T ( f 1 ) ( W L 1 ) T ( f L 1 ) ( W L ) T ( f L ) a L C . {\displaystyle \nabla _{x}C=(W^{1})^{T}\cdot (f^{1})'\circ \ldots \circ (W^{L-1})^{T}\cdot (f^{L-1})'\circ (W^{L})^{T}\cdot (f^{L})'\circ \nabla _{a^{L}}C.}

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

Вводим вспомогательную величину для частичных произведений (умножение справа налево), интерпретируемую как «ошибка на уровне » и определяемую как градиент входных значений на уровне : δ l {\displaystyle \delta ^{l}} l {\displaystyle l} l {\displaystyle l}

δ l := ( f l ) ( W l + 1 ) T ( f l + 1 ) ( W L 1 ) T ( f L 1 ) ( W L ) T ( f L ) a L C . {\displaystyle \delta ^{l}:=(f^{l})'\circ (W^{l+1})^{T}\cdot (f^{l+1})'\circ \cdots \circ (W^{L-1})^{T}\cdot (f^{L-1})'\circ (W^{L})^{T}\cdot (f^{L})'\circ \nabla _{a^{L}}C.}

Обратите внимание, что — это вектор, длина которого равна количеству узлов на уровне ; каждый компонент интерпретируется как «стоимость, приписываемая (значению) этого узла». δ l {\displaystyle \delta ^{l}} l {\displaystyle l}

Тогда градиент весов в слое равен: l {\displaystyle l}

W l C = δ l ( a l 1 ) T . {\displaystyle \nabla _{W^{l}}C=\delta ^{l}(a^{l-1})^{T}.}

Фактор заключается в том, что веса между уровнем и уровнем воздействия пропорциональны входам (активациям): входы фиксированы, веса изменяются. a l 1 {\displaystyle a^{l-1}} W l {\displaystyle W^{l}} l 1 {\displaystyle l-1} l {\displaystyle l} l {\displaystyle l}

Их можно легко вычислить рекурсивно, двигаясь справа налево, как: δ l {\displaystyle \delta ^{l}}

δ l 1 := ( f l 1 ) ( W l ) T δ l . {\displaystyle \delta ^{l-1}:=(f^{l-1})'\circ (W^{l})^{T}\cdot \delta ^{l}.}

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

По сравнению с наивным вычислением вперед (с использованием примера for): δ l {\displaystyle \delta ^{l}}

δ 1 = ( f 1 ) ( W 2 ) T ( f 2 ) ( W L 1 ) T ( f L 1 ) ( W L ) T ( f L ) a L C δ 2 = ( f 2 ) ( W L 1 ) T ( f L 1 ) ( W L ) T ( f L ) a L C δ L 1 = ( f L 1 ) ( W L ) T ( f L ) a L C δ L = ( f L ) a L C , {\displaystyle {\begin{aligned}\delta ^{1}&=(f^{1})'\circ (W^{2})^{T}\cdot (f^{2})'\circ \cdots \circ (W^{L-1})^{T}\cdot (f^{L-1})'\circ (W^{L})^{T}\cdot (f^{L})'\circ \nabla _{a^{L}}C\\\delta ^{2}&=(f^{2})'\circ \cdots \circ (W^{L-1})^{T}\cdot (f^{L-1})'\circ (W^{L})^{T}\cdot (f^{L})'\circ \nabla _{a^{L}}C\\&\vdots \\\delta ^{L-1}&=(f^{L-1})'\circ (W^{L})^{T}\cdot (f^{L})'\circ \nabla _{a^{L}}C\\\delta ^{L}&=(f^{L})'\circ \nabla _{a^{L}}C,\end{aligned}}}

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

  1. Вычисления с точки зрения избегают очевидного дублирования умножения слоев и т. д. δ l 1 {\displaystyle \delta ^{l-1}} δ l {\displaystyle \delta ^{l}} l {\displaystyle l}
  2. Умножение, начиная с – распространение ошибки назад – означает, что каждый шаг просто умножает вектор ( ) на матрицы весов и производных активаций . Напротив, умножение вперед, начиная с изменений на более раннем слое, означает, что каждое умножение умножает матрицу на матрицу . Это намного дороже и соответствует отслеживанию каждого возможного пути изменения в одном слое вперед к изменениям в слое (для умножения на , с дополнительными умножениями для производных активаций), что без необходимости вычисляет промежуточные величины того, как изменения веса влияют на значения скрытых узлов. a L C {\displaystyle \nabla _{a^{L}}C} δ l {\displaystyle \delta ^{l}} ( W l ) T {\displaystyle (W^{l})^{T}} ( f l 1 ) {\displaystyle (f^{l-1})'} l {\displaystyle l} l + 2 {\displaystyle l+2} W l + 1 {\displaystyle W^{l+1}} W l + 2 {\displaystyle W^{l+2}}

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

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

Интуиция

Мотивация

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

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

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

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

Первоначально, до обучения, веса будут установлены случайным образом. Затем нейрон учится на обучающих примерах , которые в этом случае состоят из набора кортежей , где и являются входами для сети, а t является правильным выходом (выходом, который сеть должна выдать с учетом этих входов, когда она обучена). Исходная сеть, заданная и , вычислит выход y , который, вероятно, отличается от t (при заданных случайных весах). Функция потерь используется для измерения расхождения между целевым выходом t и вычисленным выходом y . Для задач регрессионного анализа квадрат ошибки может использоваться в качестве функции потерь, для классификации может использоваться категориальная перекрестная энтропия . ( x 1 , x 2 , t ) {\displaystyle (x_{1},x_{2},t)} x 1 {\displaystyle x_{1}} x 2 {\displaystyle x_{2}} x 1 {\displaystyle x_{1}} x 2 {\displaystyle x_{2}} L ( t , y ) {\displaystyle L(t,y)}

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

L ( t , y ) = ( t y ) 2 = E , {\displaystyle L(t,y)=(t-y)^{2}=E,}

где E — расхождение или ошибка.

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

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

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

y = x 1 w 1 + x 2 w 2 , {\displaystyle y=x_{1}w_{1}+x_{2}w_{2},}

где и — веса на соединении от входных единиц к выходному блоку. Таким образом, ошибка также зависит от входящих весов нейрона, что в конечном итоге и необходимо изменить в сети для обеспечения обучения. w 1 {\displaystyle w_{1}} w 2 {\displaystyle w_{2}}

В этом примере после введения обучающих данных функция потерь становится ( 1 , 1 , 0 ) {\displaystyle (1,1,0)}

E = ( t y ) 2 = y 2 = ( x 1 w 1 + x 2 w 2 ) 2 = ( w 1 + w 2 ) 2 . {\displaystyle E=(t-y)^{2}=y^{2}=(x_{1}w_{1}+x_{2}w_{2})^{2}=(w_{1}+w_{2})^{2}.}

Тогда функция потерь принимает форму параболического цилиндра с основанием, направленным вдоль . Поскольку все наборы весов, удовлетворяющие , минимизируют функцию потерь, в этом случае для сходимости к уникальному решению требуются дополнительные ограничения. Дополнительные ограничения могут быть созданы либо путем задания определенных условий для весов, либо путем введения дополнительных обучающих данных. E {\displaystyle E} w 1 = w 2 {\displaystyle w_{1}=-w_{2}} w 1 = w 2 {\displaystyle w_{1}=-w_{2}}

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

Вывод

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

E = L ( t , y ) {\displaystyle E=L(t,y)}

где

L {\displaystyle L} это потеря для выходного и целевого значения , y {\displaystyle y} t {\displaystyle t}
t {\displaystyle t} является целевым выходом для обучающей выборки, и
y {\displaystyle y} — это фактический выход выходного нейрона.

Для каждого нейрона его выход определяется как j {\displaystyle j} o j {\displaystyle o_{j}}

o j = φ ( net j ) = φ ( k = 1 n w k j x k ) , {\displaystyle o_{j}=\varphi ({\text{net}}_{j})=\varphi \left(\sum _{k=1}^{n}w_{kj}x_{k}\right),}

где функция активации нелинейна и дифференцируема по области активации (ReLU не дифференцируема в одной точке). Исторически используемая функция активации — это логистическая функция : φ {\displaystyle \varphi }

φ ( z ) = 1 1 + e z {\displaystyle \varphi (z)={\frac {1}{1+e^{-z}}}}

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

d φ d z = φ ( z ) ( 1 φ ( z ) ) {\displaystyle {\frac {d\varphi }{dz}}=\varphi (z)(1-\varphi (z))}

Вход нейрона — это взвешенная сумма выходов предыдущих нейронов. Если нейрон находится в первом слое после входного слоя, то входного слоя — это просто входы сети. Количество входных единиц нейрона равно . Переменная обозначает вес между нейроном предыдущего слоя и нейроном текущего слоя. net j {\displaystyle {\text{net}}_{j}} o k {\displaystyle o_{k}} o k {\displaystyle o_{k}} x k {\displaystyle x_{k}} n {\displaystyle n} w k j {\displaystyle w_{kj}} k {\displaystyle k} j {\displaystyle j}

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

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

Вычисление частной производной ошибки по весу выполняется с использованием цепного правила дважды: w i j {\displaystyle w_{ij}}

В последнем множителе правой части вышеприведенного выражения только один член суммы зависит от , так что net j {\displaystyle {\text{net}}_{j}} w i j {\displaystyle w_{ij}}

Если нейрон находится в первом слое после входного слоя, то это просто . o i {\displaystyle o_{i}} x i {\displaystyle x_{i}}

Производная выхода нейрона по его входу — это просто частная производная функции активации: j {\displaystyle j}

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

o j net j = net j φ ( net j ) = φ ( net j ) ( 1 φ ( net j ) ) = o j ( 1 o j ) {\displaystyle {\frac {\partial o_{j}}{\partial {\text{net}}_{j}}}={\frac {\partial }{\partial {\text{net}}_{j}}}\varphi ({\text{net}}_{j})=\varphi ({\text{net}}_{j})(1-\varphi ({\text{net}}_{j}))=o_{j}(1-o_{j})}

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

Первый фактор легко оценить, если нейрон находится в выходном слое, потому что тогда и o j = y {\displaystyle o_{j}=y}

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

E o j = E y = y 1 2 ( t y ) 2 = y t {\displaystyle {\frac {\partial E}{\partial o_{j}}}={\frac {\partial E}{\partial y}}={\frac {\partial }{\partial y}}{\frac {1}{2}}(t-y)^{2}=y-t}

Однако если находится в произвольном внутреннем слое сети, нахождение производной по менее очевидно. j {\displaystyle j} E {\displaystyle E} o j {\displaystyle o_{j}}

Рассматривая как функцию, входами которой являются все нейроны, получающие входные данные от нейрона , E {\displaystyle E} L = { u , v , , w } {\displaystyle L=\{u,v,\dots ,w\}} j {\displaystyle j}

E ( o j ) o j = E ( n e t u , net v , , n e t w ) o j {\displaystyle {\frac {\partial E(o_{j})}{\partial o_{j}}}={\frac {\partial E(\mathrm {net} _{u},{\text{net}}_{v},\dots ,\mathrm {net} _{w})}{\partial o_{j}}}}

и взяв полную производную по , получаем рекурсивное выражение для производной: o j {\displaystyle o_{j}}

Следовательно, производную по можно вычислить, если известны все производные по выходам следующего слоя – тех, что ближе к выходному нейрону. [Обратите внимание, если бы какой-либо из нейронов в наборе не был подключен к нейрону , они были бы независимы от , а соответствующая частная производная при суммировании обратилась бы в ноль.] o j {\displaystyle o_{j}} o {\displaystyle o_{\ell }} L {\displaystyle L} j {\displaystyle j} w i j {\displaystyle w_{ij}}

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

E w i j = E o j o j net j net j w i j = E o j o j net j o i {\displaystyle {\frac {\partial E}{\partial w_{ij}}}={\frac {\partial E}{\partial o_{j}}}{\frac {\partial o_{j}}{\partial {\text{net}}_{j}}}{\frac {\partial {\text{net}}_{j}}{\partial w_{ij}}}={\frac {\partial E}{\partial o_{j}}}{\frac {\partial o_{j}}{\partial {\text{net}}_{j}}}o_{i}}
E w i j = o i δ j {\displaystyle {\frac {\partial E}{\partial w_{ij}}}=o_{i}\delta _{j}}

с

δ j = E o j o j net j = { L ( t , o j ) o j d φ ( net j ) d net j if  j  is an output neuron, ( L w j δ ) d φ ( net j ) d net j if  j  is an inner neuron. {\displaystyle \delta _{j}={\frac {\partial E}{\partial o_{j}}}{\frac {\partial o_{j}}{\partial {\text{net}}_{j}}}={\begin{cases}{\frac {\partial L(t,o_{j})}{\partial o_{j}}}{\frac {d\varphi ({\text{net}}_{j})}{d{\text{net}}_{j}}}&{\text{if }}j{\text{ is an output neuron,}}\\(\sum _{\ell \in L}w_{j\ell }\delta _{\ell }){\frac {d\varphi ({\text{net}}_{j})}{d{\text{net}}_{j}}}&{\text{if }}j{\text{ is an inner neuron.}}\end{cases}}}

если — логистическая функция, а ошибка — квадратичная ошибка: φ {\displaystyle \varphi }

δ j = E o j o j net j = { ( o j t j ) o j ( 1 o j ) if  j  is an output neuron, ( L w j δ ) o j ( 1 o j ) if  j  is an inner neuron. {\displaystyle \delta _{j}={\frac {\partial E}{\partial o_{j}}}{\frac {\partial o_{j}}{\partial {\text{net}}_{j}}}={\begin{cases}(o_{j}-t_{j})o_{j}(1-o_{j})&{\text{if }}j{\text{ is an output neuron,}}\\(\sum _{\ell \in L}w_{j\ell }\delta _{\ell })o_{j}(1-o_{j})&{\text{if }}j{\text{ is an inner neuron.}}\end{cases}}}

Чтобы обновить вес с помощью градиентного спуска, необходимо выбрать скорость обучения, . Изменение веса должно отражать влияние на увеличения или уменьшения . Если , увеличение увеличивает ; наоборот, если , увеличение уменьшает . Новый вес добавляется к старому, а произведение скорости обучения и градиента, умноженное на , гарантирует, что изменяется таким образом, что всегда уменьшается . Другими словами, в уравнении, приведенном ниже, всегда изменяется таким образом, что уменьшается: w i j {\displaystyle w_{ij}} η > 0 {\displaystyle \eta >0} E {\displaystyle E} w i j {\displaystyle w_{ij}} E w i j > 0 {\displaystyle {\frac {\partial E}{\partial w_{ij}}}>0} w i j {\displaystyle w_{ij}} E {\displaystyle E} E w i j < 0 {\displaystyle {\frac {\partial E}{\partial w_{ij}}}<0} w i j {\displaystyle w_{ij}} E {\displaystyle E} Δ w i j {\displaystyle \Delta w_{ij}} 1 {\displaystyle -1} w i j {\displaystyle w_{ij}} E {\displaystyle E} η E w i j {\displaystyle -\eta {\frac {\partial E}{\partial w_{ij}}}} w i j {\displaystyle w_{ij}} E {\displaystyle E}

Δ w i j = η E w i j = η o i δ j {\displaystyle \Delta w_{ij}=-\eta {\frac {\partial E}{\partial w_{ij}}}=-\eta o_{i}\delta _{j}}

Градиентный спуск второго порядка

Используя матрицу Гессе производных второго порядка функции ошибки, алгоритм Левенберга–Марквардта часто сходится быстрее, чем градиентный спуск первого порядка, особенно когда топология функции ошибки сложна. [12] [13] Он также может находить решения при меньшем количестве узлов, для которых другие методы могут не сходиться. [13] Гессе можно аппроксимировать информационной матрицей Фишера . [14]

В качестве примера рассмотрим простую сеть прямого распространения. На -ом слое имеем , где — предварительные активации, — активации, — весовая матрица. При наличии функции потерь обратное распространение первого порядка утверждает, что , а обратное распространение второго порядка утверждает, что , где — символ дельта Дирака . l {\displaystyle l} x i ( l ) , a i ( l ) = f ( x i ( l ) ) , x i ( l + 1 ) = j W i j a j ( l ) {\displaystyle x_{i}^{(l)},\quad a_{i}^{(l)}=f(x_{i}^{(l)}),\quad x_{i}^{(l+1)}=\sum _{j}W_{ij}a_{j}^{(l)}} x {\displaystyle x} a {\displaystyle a} W {\displaystyle W} L {\displaystyle L} L a j ( l ) = j W i j L x i ( l + 1 ) , L x j ( l ) = f ( x j ( l ) ) L a j ( l ) {\displaystyle {\frac {\partial L}{\partial a_{j}^{(l)}}}=\sum _{j}W_{ij}{\frac {\partial L}{\partial x_{i}^{(l+1)}}},\quad {\frac {\partial L}{\partial x_{j}^{(l)}}}=f'(x_{j}^{(l)}){\frac {\partial L}{\partial a_{j}^{(l)}}}} 2 L a j 1 ( l ) a j 2 ( l ) = j 1 j 2 W i 1 j 1 W i 2 j 2 2 L x i 1 ( l + 1 ) x i 2 ( l + 1 ) , 2 L x j 1 ( l ) x j 2 ( l ) = f ( x j 1 ( l ) ) f ( x j 2 ( l ) ) 2 L a j 1 ( l ) a j 2 ( l ) + δ j 1 j 2 f ( x j 1 ( l ) ) L a j 1 ( l ) {\displaystyle {\frac {\partial ^{2}L}{\partial a_{j_{1}}^{(l)}\partial a_{j_{2}}^{(l)}}}=\sum _{j_{1}j_{2}}W_{i_{1}j_{1}}W_{i_{2}j_{2}}{\frac {\partial ^{2}L}{\partial x_{i_{1}}^{(l+1)}\partial x_{i_{2}}^{(l+1)}}},\quad {\frac {\partial ^{2}L}{\partial x_{j_{1}}^{(l)}\partial x_{j_{2}}^{(l)}}}=f'(x_{j_{1}}^{(l)})f'(x_{j_{2}}^{(l)}){\frac {\partial ^{2}L}{\partial a_{j_{1}}^{(l)}\partial a_{j_{2}}^{(l)}}}+\delta _{j_{1}j_{2}}f''(x_{j_{1}}^{(l)}){\frac {\partial L}{\partial a_{j_{1}}^{(l)}}}} δ {\displaystyle \delta }

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

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

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

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

Математическое выражение функции потерь должно удовлетворять двум условиям для того, чтобы его можно было использовать в обратном распространении. [15] Первое заключается в том, что его можно записать как среднее по функциям ошибок для отдельных обучающих примеров. Причина этого предположения в том, что алгоритм обратного распространения вычисляет градиент функции ошибок для одного обучающего примера, который необходимо обобщить до общей функции ошибок. Второе предположение заключается в том, что его можно записать как функцию выходов нейронной сети. E = 1 n x E x {\textstyle E={\frac {1}{n}}\sum _{x}E_{x}} E x {\textstyle E_{x}} n {\textstyle n} x {\textstyle x}

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

Пусть будут векторами в . y , y {\displaystyle y,y'} R n {\displaystyle \mathbb {R} ^{n}}

Выберите функцию ошибки, измеряющую разницу между двумя выходами. Стандартный выбор — квадрат евклидова расстояния между векторами и : Функция ошибки по обучающим примерам может быть записана как среднее значение потерь по отдельным примерам: E ( y , y ) {\displaystyle E(y,y')} y {\displaystyle y} y {\displaystyle y'} E ( y , y ) = 1 2 y y 2 {\displaystyle E(y,y')={\tfrac {1}{2}}\lVert y-y'\rVert ^{2}} n {\textstyle n} E = 1 2 n x ( y ( x ) y ( x ) ) 2 {\displaystyle E={\frac {1}{2n}}\sum _{x}\lVert (y(x)-y'(x))\rVert ^{2}}

Ограничения

Градиентный спуск может найти локальный минимум вместо глобального минимума.
  • Градиентный спуск с обратным распространением не гарантирует нахождение глобального минимума функции ошибки, а только локального минимума; кроме того, у него есть проблемы с пересечением плато в ландшафте функции ошибки. Эта проблема, вызванная невыпуклостью функций ошибки в нейронных сетях, долгое время считалась серьезным недостатком, но Янн ЛеКун и др. утверждают, что во многих практических задачах это не так. [16]
  • Обучение методом обратного распространения не требует нормализации входных векторов; однако нормализация может улучшить производительность. [17]
  • Обратное распространение требует, чтобы производные функций активации были известны на этапе проектирования сети.

История

Прекурсоры

Обратное распространение ошибки выводилось неоднократно, поскольку по сути это эффективное применение цепного правила (впервые записанного Готфридом Вильгельмом Лейбницем в 1676 году) [18] [19] к нейронным сетям.

Термин «обратное распространение исправления ошибок» был введен в 1962 году Фрэнком Розенблаттом , но он не знал, как это реализовать. [20] В любом случае, он изучал только нейроны, выходы которых представляли собой дискретные уровни, которые имели только нулевые производные, что делало обратное распространение невозможным.

Предшественники обратного распространения появились в теории оптимального управления с 1950-х годов. Ян Лекун и др. приписывают работу Понтрягина и других 1950-х годов в теории оптимального управления, особенно метод сопряженного состояния , как непрерывную версию обратного распространения. [21] Хехт-Нильсен [22] приписывает алгоритм Роббинса–Монро (1951) [23] и работу Артура Брайсона и Ю-Чи Хо « Прикладное оптимальное управление» (1969) предвестниками обратного распространения. Другими предшественниками были Генри Дж. Келли 1960, [2] и Артур Э. Брайсон (1961). [3] В 1962 году Стюарт Дрейфус опубликовал более простой вывод, основанный только на цепном правиле . [24] [25] [26] В 1973 году он адаптировал параметры контроллеров пропорционально градиентам ошибок. [27] В отличие от современного обратного распространения, эти предшественники использовали стандартные вычисления матрицы Якоби от одного этапа к предыдущему, не рассматривая ни прямые связи между несколькими этапами, ни потенциальный дополнительный прирост эффективности из-за разреженности сети. [28]

Алгоритм обучения ADALINE (1960) был градиентным спуском с квадратичной ошибкой потери для одного слоя. Первый многослойный персептрон (MLP) с более чем одним слоем, обученным стохастическим градиентным спуском [23], был опубликован в 1967 году Шуничи Амари . [29] MLP имел 5 слоев, с 2 обучаемыми слоями, и он научился классифицировать шаблоны, не разделяемые линейно. [28]

Современное обратное распространение

Современное обратное распространение впервые было опубликовано Сеппо Линнайнмаа как «обратный режим автоматического дифференцирования » (1970) [30] для дискретных связанных сетей вложенных дифференцируемых функций. [31] [32] [33]

В 1982 году Пол Вербос применил обратное распространение к многослойным перцептивам способом, который стал стандартным. [34] [35] Вербос описал, как он разработал обратное распространение в интервью. В 1971 году, во время своей докторской диссертации, он разработал обратное распространение для математизации «потока психической энергии» Фрейда . Он неоднократно сталкивался с трудностями при публикации работы, и ему это удалось только в 1981 году. [36] Он также утверждал, что «первое практическое применение обратного распространения было для оценки динамической модели для прогнозирования национализма и социальных коммуникаций в 1974 году» им самим. [37]

Около 1982 года [36] : 376  Дэвид Э. Румельхарт независимо разработал [38] : 252  обратное распространение и обучил этому алгоритму других в своем исследовательском кругу. Он не ссылался на предыдущие работы, поскольку не знал о них. Сначала он опубликовал алгоритм в статье 1985 года, а затем в статье Nature 1986 года экспериментальный анализ этой техники. [39] Эти статьи стали часто цитируемыми, способствовали популяризации обратного распространения и совпали с возрождающимся исследовательским интересом к нейронным сетям в 1980-х годах. [11] [40] [41]

В 1985 году этот метод был также описан Дэвидом Паркером. [42] [43] Янн Лекун предложил альтернативную форму обратного распространения для нейронных сетей в своей докторской диссертации в 1987 году. [44]

Градиентный спуск занял значительное время, чтобы достичь признания. Некоторые ранние возражения были следующими: не было никаких гарантий, что градиентный спуск может достичь глобального минимума, только локального минимума; нейроны были «известны» физиологам как создающие дискретные сигналы (0/1), а не непрерывные, и в случае дискретных сигналов нет градиента, который можно было бы взять. См. интервью с Джеффри Хинтоном , [36], который был награжден Нобелевской премией по физике 2024 года за свой вклад в эту область. [45]

Первые успехи

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

В 1987 году NETtalk научился преобразовывать английский текст в произношение. Сейновски пробовал обучать его как с помощью обратного распространения, так и с помощью машины Больцмана, но обнаружил, что обратное распространение значительно быстрее, поэтому он использовал его для финального NETtalk. [36] : 324  Программа NETtalk стала популярной и успешной, появившись в шоу Today . [46]

В 1989 году Дин А. Померло опубликовал ALVINN — нейронную сеть, обученную автономному вождению с использованием обратного распространения ошибки. [47]

В 1989 году была опубликована программа LeNet для распознавания рукописных почтовых индексов.

В 1992 году TD-Gammon достигла наивысшего человеческого уровня игры в нарды. Это был агент обучения с подкреплением с нейронной сетью с двумя слоями, обученный методом обратного распространения. [48]

В 1993 году Эрик Ван выиграл международный конкурс по распознаванию образов с помощью обратного распространения ошибки. [49] [50]

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

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

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

В 2023 году команда Стэнфордского университета реализовала алгоритм обратного распространения на фотонном процессоре . [55]

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

Примечания

  1. ^ Используйте для функции потерь, чтобы разрешить использовать для количества слоев C {\displaystyle C} L {\displaystyle L}
  2. ^ Это соответствует Нильсену (2015) и означает, что (слева) умножение на матрицу соответствует преобразованию выходных значений слоя во входные значения слоя : столбцы соответствуют входным координатам, строки соответствуют выходным координатам. W l {\displaystyle W^{l}} l 1 {\displaystyle l-1} l {\displaystyle l}
  3. ^ Этот раздел в значительной степени следует и обобщает работу Нильсена (2015).
  4. ^ Производная функции потерь является ковектором , поскольку функция потерь является скалярной функцией нескольких переменных.
  5. ^ Функция активации применяется к каждому узлу отдельно, поэтому производная — это просто диагональная матрица производной на каждом узле. Это часто представляется как произведение Адамара с вектором производных, обозначаемым как , что математически идентично, но лучше соответствует внутреннему представлению производных как вектора, а не диагональной матрицы. ( f l ) {\displaystyle (f^{l})'\odot }
  6. ^ Поскольку умножение матриц линейно, производная умножения на матрицу — это просто матрица: . ( W x ) = W {\displaystyle (Wx)'=W}
  7. ^ Можно заметить, что многослойные нейронные сети используют нелинейные функции активации, поэтому пример с линейными нейронами кажется неясным. Однако, хотя поверхность ошибки многослойных сетей гораздо сложнее, локально их можно аппроксимировать параболоидом. Поэтому для простоты и более легкого понимания используются линейные нейроны.
  8. ^ Выходных нейронов может быть несколько, в этом случае ошибка представляет собой квадрат нормы вектора разности.

Ссылки

  1. ^ Лилликрап, Тимоти П.; Санторо, Адам; Маррис, Люк; Акерман, Колин Дж.; Хинтон, Джеффри (июнь 2020 г.). «Обратное распространение и мозг». Nature Reviews Neuroscience . 21 (6): 335– 346. doi :10.1038/s41583-020-0277-3. ISSN  1471-0048.
  2. ^ ab Келли, Генри Дж. (1960). «Градиентная теория оптимальных траекторий полета». ARS Journal . 30 (10): 947–954 . doi :10.2514/8.5282.
  3. ^ ab Bryson, Arthur E. (1962). "Градиентный метод оптимизации многоэтапных процессов распределения". Труды Гарвардского университета. Симпозиум по цифровым компьютерам и их приложениям, 3–6 апреля 1961 г. Кембридж: Издательство Гарвардского университета. OCLC  498866871.
  4. ^ Goodfellow, Bengio & Courville 2016, стр. 214, «Эта стратегия заполнения таблиц иногда называется динамическим программированием ».
  5. ^ Goodfellow, Bengio & Courville 2016, стр. 200, «Термин обратное распространение часто неправильно понимается как означающий весь алгоритм обучения для многослойных нейронных сетей. Обратное распространение относится только к методу вычисления градиента, в то время как другие алгоритмы, такие как стохастический градиентный спуск, используются для выполнения обучения с использованием этого градиента».
  6. ^ Мохапатра, Рохан; Саха, Снеханшу; Коэльо, Карлос А. Коэльо; Бхаттачарья, Анвеш; Дхавала, Сома С.; Саха, Шрипарна (апрель 2022 г.). «AdaSwarm: расширение оптимизаторов на основе градиента в глубоком обучении с помощью Swarm Intelligence». Транзакции IEEE по новым темам вычислительного интеллекта . 6 (2): 329–340 . arXiv : 2006.09875 . дои : 10.1109/TETCI.2021.3083428. ISSN  2471-285Х.
  7. ^ Абдулкадыров, Руслан И.; Ляхов, Павел А.; Бабошина, Валентина А.; Нагорнов, Николай Н. (2024). «Повышение точности распознавания образов нейронных сетей методом дробного градиентного спуска». IEEE Access . 12 : 168428– 168444. doi : 10.1109/ACCESS.2024.3491614 . ISSN  2169-3536.
  8. ^ ab Goodfellow, Bengio & Courville (2016, стр. 217–218), «Описанный здесь алгоритм обратного распространения — это всего лишь один из подходов к автоматическому дифференцированию. Это особый случай более широкого класса методов, называемых накоплением обратного режима ».
  9. ^ Рамачандран, Праджит; Зоф, Баррет; Ле, Куок В. (2017-10-27). «Поиск функций активации». arXiv : 1710.05941 [cs.NE].
  10. ^ Мисра, Диганта (2019-08-23). ​​«Миш: Саморегуляризованная немонотонная функция активации». arXiv : 1908.08681 [cs.LG].
  11. ^ ab Rumelhart, David E. ; Hinton, Geoffrey E. ; Williams, Ronald J. (1986a). "Изучение представлений с помощью обратного распространения ошибок". Nature . 323 (6088): 533– 536. Bibcode :1986Natur.323..533R. doi :10.1038/323533a0. S2CID  205001834.
  12. ^ Тан, Хонг Хуэй; Лим, Кинг Хан (2019). «Обзор методов оптимизации второго порядка в обратном распространении искусственных нейронных сетей». Серия конференций IOP: Материаловедение и инженерия . 495 (1): 012003. Bibcode : 2019MS&E..495a2003T. doi : 10.1088/1757-899X/495/1/012003 . S2CID  208124487.
  13. ^ ab Вильямовски, Богдан; Ю, Хао (июнь 2010 г.). «Улучшенные вычисления для обучения Левенберга–Марквардта» (PDF) . IEEE Transactions on Neural Networks and Learning Systems . 21 (6).
  14. ^ Мартенс, Джеймс (август 2020 г.). «Новые идеи и перспективы метода естественного градиента». Журнал исследований машинного обучения (21). arXiv : 1412.1193 .
  15. ^ Нильсен (2015), «Какие предположения нам нужно сделать относительно нашей функции стоимости... для того, чтобы можно было применить обратное распространение? Первое предположение, которое нам нужно, заключается в том, что функцию стоимости можно записать как среднее... по функциям стоимости... для отдельных обучающих примеров... Второе предположение, которое мы делаем относительно стоимости, заключается в том, что ее можно записать как функцию выходных данных нейронной сети...»
  16. ^ ЛеКун, Янн ; Бенджио, Йошуа; Хинтон, Джеффри (2015). «Глубокое обучение» (PDF) . Nature . 521 (7553): 436– 444. Bibcode : 2015Natur.521..436L. doi : 10.1038/nature14539. PMID  26017442. S2CID  3074096.
  17. ^ Бакленд, Мэтт; Коллинз, Марк (2002). Методы искусственного интеллекта для программирования игр . Бостон: Premier Press. ISBN 1-931841-08-X.
  18. ^ Лейбниц, Готфрид Вильгельм Фрайхерр фон (1920). Ранние математические рукописи Лейбница: Перевод с латинских текстов, опубликованных Карлом Иммануэлем Герхардтом с критическими и историческими примечаниями (Лейбниц опубликовал цепное правило в мемуарах 1676 года). Open Court Publication Company. ISBN 9780598818461.
  19. ^ Родригес, Омар Эрнандес; Лопес Фернандес, Хорхе М. (2010). «Семиотическое размышление о дидактике правила цепочки». Любитель математики . 7 (2): 321–332 . doi : 10.54870/1551-3440.1191 . S2CID  29739148 . Проверено 4 августа 2019 г.
  20. ^ Розенблатт, Франк (1962). Принципы нейродинамики . Spartan, Нью-Йорк. С.  287–298 .
  21. ^ ЛеКун, Янн и др. «Теоретическая основа для обратного распространения». Труды летней школы по коннекционистским моделям 1988 года . Том 1. 1988.
  22. ^ Хехт-Нильсен, Роберт (1990). Нейрокомпьютинг. Архив Интернета. Рединг, Массачусетс.: Addison-Wesley Pub. Co. стр.  124–125 . ISBN 978-0-201-09355-1.
  23. ^ ab Robbins, H. ; Monro, S. (1951). "Метод стохастической аппроксимации". Анналы математической статистики . 22 (3): 400. doi : 10.1214/aoms/1177729586 .
  24. ^ Дрейфус, Стюарт (1962). «Численное решение вариационных задач». Журнал математического анализа и приложений . 5 (1): 30–45 . doi : 10.1016/0022-247x(62)90004-5 .
  25. ^ Дрейфус, Стюарт Э. (1990). «Искусственные нейронные сети, обратное распространение и процедура градиента Келли-Брайсона». Журнал руководства, управления и динамики . 13 (5): 926–928 . Bibcode : 1990JGCD...13..926D. doi : 10.2514/3.25422.
  26. ^ Мизутани, Эйдзи; Дрейфус, Стюарт; Нисио, Кеничи (июль 2000 г.). «О выводе обратного распространения MLP из формулы оптимального управления градиентом Келли-Брайсона и ее применении» (PDF) . Труды Международной объединенной конференции IEEE по нейронным сетям.
  27. ^ Дрейфус, Стюарт (1973). «Вычислительное решение задач оптимального управления с задержкой по времени». Труды IEEE по автоматическому управлению . 18 (4): 383– 385. doi :10.1109/tac.1973.1100330.
  28. ^ ab Шмидхубер, Юрген (2022). «Аннотированная история современного ИИ и глубокого обучения». arXiv : 2212.11279 [cs.NE].
  29. ^ Амари, Шуничи (1967). «Теория адаптивного классификатора шаблонов». IEEE Transactions . EC (16): 279–307 .
  30. ^ Линнайнмаа, Сеппо (1970). Представление кумулятивной ошибки округления алгоритма как разложения Тейлора локальных ошибок округления (Мастерс) (на финском языке). Университет Хельсинки. С.  6–7 .
  31. ^ Линнаинмаа, Сеппо (1976). «Разложение Тейлора накопленной ошибки округления». BIT Numerical Mathematics . 16 (2): 146– 160. doi :10.1007/bf01931367. S2CID  122357351.
  32. ^ Гриванк, Андреас (2012). «Кто изобрел обратный режим дифференциации?». Истории оптимизации . Documenta Matematica, Дополнительный том ISMP. С.  389–400 . S2CID  15568746.
  33. ^ Гриванк, Андреас; Вальтер, Андреа (2008). Оценка производных: принципы и методы алгоритмического дифференцирования, второе издание. SIAM. ISBN 978-0-89871-776-1.
  34. ^ Werbos, Paul (1982). "Применение достижений в нелинейном анализе чувствительности" (PDF) . Моделирование и оптимизация систем . Springer. стр.  762–770 . Архивировано (PDF) из оригинала 14 апреля 2016 г. . Получено 2 июля 2017 г. .
  35. ^ Вербос, Пол Дж. (1994). Корни обратного распространения: от упорядоченных производных к нейронным сетям и политическому прогнозированию . Нью-Йорк: John Wiley & Sons. ISBN 0-471-59897-6.
  36. ^ abcd Андерсон, Джеймс А.; Розенфельд, Эдвард, ред. (2000). Говорящие сети: устная история нейронных сетей. MIT Press. doi : 10.7551/mitpress/6626.003.0016. ISBN 978-0-262-26715-1.
  37. ^ PJ Werbos, «Обратное распространение во времени: что оно делает и как это делать», в Трудах IEEE, т. 78, № 10, стр. 1550-1560, октябрь 1990 г., doi : 10.1109/5.58337
  38. ^ Олазаран Родригес, Хосе Мигель. Историческая социология исследований нейронных сетей . Кандидатская диссертация. Эдинбургский университет, 1991.
  39. ^ Rumelhart; Hinton; Williams (1986). «Изучение представлений с помощью обратного распространения ошибок» (PDF) . Nature . 323 (6088): 533– 536. Bibcode : 1986Natur.323..533R. doi : 10.1038/323533a0. S2CID  205001834.
  40. ^ Rumelhart, David E. ; Hinton, Geoffrey E. ; Williams, Ronald J. (1986b). "8. Learning Internal Representations by Error Propagation" . В Rumelhart, David E. ; McClelland, James L. (ред.). Parallel Distributed Processing : Explorations in the Microstructure of Cognition . Vol. 1 : Foundations. Cambridge: MIT Press. ISBN 0-262-18120-7.
  41. ^ Алпайдин, Этем (2010). Введение в машинное обучение. MIT Press. ISBN 978-0-262-01243-0.
  42. ^ Паркер, ДБ (1985). Изучение логики: отливка коры человеческого мозга в кремний. Центр вычислительных исследований в области экономики и управления (отчет). Кембридж, Массачусетс: Массачусетский технологический институт. Технический отчет TR-47.
  43. ^ Герц, Джон (1991). Введение в теорию нейронных вычислений . Крог, Андерс., Палмер, Ричард Г. Редвуд-Сити, Калифорния: Addison-Wesley. стр. 8. ISBN 0-201-50395-6. OCLC  21522159.
  44. ^ Ле Кун, Янн (1987). Modeles connexionnistes de l'apprentissage (Эти докторские диссертации). Париж, Франция: Университет Пьера и Марии Кюри.
  45. ^ "Нобелевская премия по физике 2024 года". NobelPrize.org . Получено 13 октября 2024 г.
  46. ^ Sejnowski, Terrence J. (2018). Революция глубокого обучения . Кембридж, Массачусетс Лондон, Англия: The MIT Press. ISBN 978-0-262-03803-4.
  47. ^ Померло, Дин А. (1988). "ALVINN: автономное наземное транспортное средство в нейронной сети". Достижения в области нейронных систем обработки информации . 1. Морган-Кауфманн.
  48. ^ Саттон, Ричард С.; Барто, Эндрю Г. (2018). «11.1 TD-Gammon». Обучение с подкреплением: Введение (2-е изд.). Кембридж, Массачусетс: MIT Press.
  49. ^ Шмидхубер, Юрген (2015). «Глубокое обучение в нейронных сетях: обзор». Neural Networks . 61 : 85–117 . arXiv : 1404.7828 . doi :10.1016/j.neunet.2014.09.003. PMID  25462637. S2CID  11715509.
  50. ^ Ван, Эрик А. (1994). «Прогнозирование временных рядов с использованием коннекционистской сети с внутренними линиями задержки». В Вайгенде, Андреас С.; Гершенфельд , Нил А. (ред.). Прогнозирование временных рядов: прогнозирование будущего и понимание прошлого . Труды передового исследовательского семинара НАТО по сравнительному анализу временных рядов. Том 15. Чтение: Addison-Wesley. стр.  195–217 . ISBN 0-201-62601-2. S2CID  12652643.
  51. ^ Чанг, Франклин; Делл, Гэри С.; Бок, Кэтрин (2006). «Становление синтаксическим». Psychological Review . 113 (2): 234– 272. doi :10.1037/0033-295x.113.2.234. PMID  16637761.
  52. ^ Janciauskas, Marius; Chang, Franklin (2018). «Входные и возрастные вариации в изучении второго языка: коннекционистский учет». Cognitive Science . 42 (Suppl Suppl 2): ​​519– 554. doi :10.1111/cogs.12519. PMC 6001481 . PMID  28744901. 
  53. ^ «Расшифровка силы обратного распространения: глубокое погружение в передовые методы нейронных сетей». janbasktraining.com . 30 января 2024 г.
  54. ^ Фиц, Хартмут; Чанг, Франклин (2019). «Языковые ERP отражают обучение через распространение ошибок прогнозирования». Когнитивная психология . 111 : 15–52 . doi :10.1016/j.cogpsych.2019.03.002. hdl : 21.11116/0000-0003-474D-8 . PMID  30921626. S2CID  85501792.
  55. ^ "Фотонные чипы сдерживают энергетический аппетит обучения ИИ - IEEE Spectrum". IEEE . Получено 25.05.2023 .

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

  • Гудфеллоу, Ян ; Бенджио, Йошуа ; Курвилль, Аарон (2016). «6.5 Обратное распространение и другие алгоритмы дифференциации». Глубокое обучение. MIT Press. стр.  200–220 . ISBN 9780262035613.
  • Нильсен, Майкл А. (2015). «Как работает алгоритм обратного распространения». Нейронные сети и глубокое обучение. Determination Press.
  • Маккаффри, Джеймс (октябрь 2012 г.). «Обратное распространение нейронных сетей для программистов». Журнал MSDN .
  • Рохас, Рауль (1996). "Алгоритм обратного распространения" (PDF) . Нейронные сети: систематическое введение . Берлин: Springer. ISBN 3-540-60505-3.
  • Учебник по нейронной сети обратного распространения в Викиверситете
  • Бернацкий, Мариуш; Влодарчик, Пшемыслав (2004). «Принципы обучения многослойной нейронной сети с использованием обратного распространения ошибки».
  • Карпати, Андрей (2016). "Лекция 4: Обратное распространение, нейронные сети 1". CS231n . Стэнфордский университет. Архивировано из оригинала 2021-12-12 – через YouTube .
  • «Что на самом деле делает обратное распространение?». 3Blue1Brown . 3 ноября 2017 г. Архивировано из оригинала 2021-12-12 – через YouTube .
  • Путта, Судип Раджа (2022). «Еще один вывод обратного распространения в матричной форме».
Retrieved from "https://en.wikipedia.org/w/index.php?title=Backpropagation&oldid=1269494408"