vault backup: 2026-05-08 10:27:04
This commit is contained in:
@@ -0,0 +1,242 @@
|
||||
---
|
||||
status: stable
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
- backpropagation
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-08
|
||||
title: Backpropagation для однослойного перцептрона
|
||||
---
|
||||
|
||||
# Backpropagation для однослойного перцептрона
|
||||
|
||||
Эта заметка фиксирует математический вывод градиентов для алгоритма [[Обратное распространение ошибки]] на примере сети с одним скрытым слоем. Общая схема для произвольного числа слоёв вынесена в [[Backpropagation для многослойной нейронной сети]].
|
||||
|
||||
Bias для краткости не записан: его градиент считается так же, как градиент веса при входе, равном $1$.
|
||||
|
||||
## Обозначения
|
||||
|
||||
> [!note] Обозначения
|
||||
> $x_j$ - $j$-й вход
|
||||
> $w_{ij}^{(1)}$ - вес от входа $j$ к скрытому нейрону $i$
|
||||
> $w_{li}^{(2)}$ - вес от скрытого нейрона $i$ к выходу $l$
|
||||
> $S_i^{(1)}$ - взвешенная сумма на входе нейрона $i$ в первом слое
|
||||
> $u_i$ - выход нейрона $i$ первого слоя после активации
|
||||
> $S_l^{(2)}$ - взвешенная сумма на входе нейрона $l$ во втором слое
|
||||
> $y_l$ - выход нейрона $l$ второго слоя
|
||||
> $d_l$ - истинное значение
|
||||
> $F$ - функция активации
|
||||
> $\delta$ - локальная ошибка нейрона
|
||||
|
||||
## Прямой проход
|
||||
|
||||
$$
|
||||
\begin{align*}
|
||||
S_i^{(1)} &= \sum\limits_{j=1}^{n}w_{ij}^{(1)}x_j \\
|
||||
u_i &= F(S_i^{(1)}) \\
|
||||
S_l^{(2)} &= \sum\limits_{i=1}^{k}w_{li}^{(2)}u_i \\
|
||||
y_l &= F(S_l^{(2)}) \\
|
||||
E &= \frac{1}{2}\sum\limits_{l=1}^{m}(y_l-d_l)^2
|
||||
\end{align*}
|
||||
$$
|
||||
|
||||
## Обратный проход для выходного слоя
|
||||
|
||||
Для веса $w_{li}^{(2)}$ используется правило цепочки:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{li}^{(2)}} =
|
||||
\frac{\partial E}{\partial y_l}
|
||||
\cdot
|
||||
\frac{\partial y_l}{\partial S_l^{(2)}}
|
||||
\cdot
|
||||
\frac{\partial S_l^{(2)}}{\partial w_{li}^{(2)}}
|
||||
$$
|
||||
|
||||
Компоненты производной:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial y_l}=y_l-d_l
|
||||
$$
|
||||
|
||||
$$
|
||||
\frac{\partial y_l}{\partial S_l^{(2)}}=F'(S_l^{(2)})
|
||||
$$
|
||||
|
||||
$$
|
||||
\frac{\partial S_l^{(2)}}{\partial w_{li}^{(2)}}=u_i
|
||||
$$
|
||||
|
||||
Итог:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{li}^{(2)}}=(y_l-d_l)*F'(S_l^{(2)})*u_i
|
||||
$$
|
||||
|
||||
Введём локальную ошибку выходного нейрона:
|
||||
|
||||
$$
|
||||
\delta_l^{(2)}=(y_l-d_l)*F'(S_l^{(2)})
|
||||
$$
|
||||
|
||||
Тогда:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{li}^{(2)}}=\delta_l^{(2)}u_i
|
||||
$$
|
||||
|
||||
## Обратный проход для скрытого слоя
|
||||
|
||||
Теперь нужна производная ошибки по весу первого слоя:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{ij}^{(1)}}
|
||||
$$
|
||||
|
||||
Вес $w_{ij}^{(1)}$ влияет на $E$ не напрямую, а через все выходные нейроны:
|
||||
|
||||
$$
|
||||
w_{ij}^{(1)} \rightarrow u_i \rightarrow y_l \rightarrow E
|
||||
$$
|
||||
|
||||
По правилу цепочки нужно просуммировать вклады всех путей от скрытого нейрона $i$ к выходным нейронам:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{ij}^{(1)}} =
|
||||
\sum\limits_{l=1}^{m}
|
||||
\frac{\partial E}{\partial y_l}
|
||||
\cdot
|
||||
\frac{\partial y_l}{\partial u_i}
|
||||
\cdot
|
||||
\frac{\partial u_i}{\partial w_{ij}^{(1)}}
|
||||
$$
|
||||
|
||||
Первый множитель:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial y_l}=y_l-d_l
|
||||
$$
|
||||
|
||||
Производная выхода $y_l$ по выходу скрытого нейрона $u_i$:
|
||||
|
||||
$$
|
||||
\frac{\partial y_l}{\partial u_i}
|
||||
=
|
||||
\frac{\partial y_l}{\partial S_l^{(2)}}
|
||||
\cdot
|
||||
\frac{\partial S_l^{(2)}}{\partial u_i}
|
||||
$$
|
||||
|
||||
Так как:
|
||||
|
||||
$$
|
||||
S_l^{(2)}=\sum\limits_{i=1}^{k}w_{li}^{(2)}u_i
|
||||
$$
|
||||
|
||||
то:
|
||||
|
||||
$$
|
||||
\frac{\partial y_l}{\partial u_i}
|
||||
=
|
||||
F'(S_l^{(2)})*w_{li}^{(2)}
|
||||
$$
|
||||
|
||||
Производная выхода скрытого нейрона $u_i$ по весу $w_{ij}^{(1)}$:
|
||||
|
||||
$$
|
||||
\frac{\partial u_i}{\partial w_{ij}^{(1)}}
|
||||
=
|
||||
\frac{\partial u_i}{\partial S_i^{(1)}}
|
||||
\cdot
|
||||
\frac{\partial S_i^{(1)}}{\partial w_{ij}^{(1)}}
|
||||
$$
|
||||
|
||||
Так как:
|
||||
|
||||
$$
|
||||
S_i^{(1)}=\sum\limits_{j=1}^{n}w_{ij}^{(1)}x_j
|
||||
$$
|
||||
|
||||
то:
|
||||
|
||||
$$
|
||||
\frac{\partial u_i}{\partial w_{ij}^{(1)}}
|
||||
=
|
||||
F'(S_i^{(1)})*x_j
|
||||
$$
|
||||
|
||||
Собираем:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{ij}^{(1)}} =
|
||||
\sum\limits_{l=1}^{m}
|
||||
(y_l-d_l)*
|
||||
F'(S_l^{(2)})*
|
||||
w_{li}^{(2)}*
|
||||
F'(S_i^{(1)})*
|
||||
x_j
|
||||
$$
|
||||
|
||||
Вводим локальную ошибку скрытого нейрона:
|
||||
|
||||
$$
|
||||
\delta_i^{(1)}
|
||||
=
|
||||
\sum\limits_{l=1}^{m}
|
||||
(y_l-d_l)*
|
||||
F'(S_l^{(2)})*
|
||||
w_{li}^{(2)}*
|
||||
F'(S_i^{(1)})
|
||||
$$
|
||||
|
||||
Или через ошибку выходного слоя $\delta_l^{(2)}$:
|
||||
|
||||
$$
|
||||
\delta_i^{(1)}
|
||||
=
|
||||
F'(S_i^{(1)})*
|
||||
\sum\limits_{l=1}^{m}
|
||||
\delta_l^{(2)}*
|
||||
w_{li}^{(2)}
|
||||
$$
|
||||
|
||||
Тогда:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{ij}^{(1)}}=\delta_i^{(1)}x_j
|
||||
$$
|
||||
|
||||
## Итоговые формулы
|
||||
|
||||
Для слоя $r$ общий шаблон такой:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{ij}^{(r)}}=\delta_i^{(r)}a_j^{(r-1)}
|
||||
$$
|
||||
|
||||
где $a_j^{(r-1)}$ - выход предыдущего слоя. Для первого слоя $a_j^{(0)}=x_j$, для второго слоя $a_i^{(1)}=u_i$.
|
||||
|
||||
Для выходного слоя:
|
||||
|
||||
$$
|
||||
\delta_l^{(2)}=(y_l-d_l)F'(S_l^{(2)})
|
||||
$$
|
||||
|
||||
Для скрытого слоя:
|
||||
|
||||
$$
|
||||
\delta_i^{(1)}
|
||||
=
|
||||
F'(S_i^{(1)})
|
||||
\sum\limits_{l=1}^{m}
|
||||
\delta_l^{(2)}w_{li}^{(2)}
|
||||
$$
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Обратное распространение ошибки]]
|
||||
- [[Backpropagation для многослойной нейронной сети]]
|
||||
- [[Нейронные сети]]
|
||||
- [[Линейные модели]]
|
||||
Reference in New Issue
Block a user