Азербайджан |
Нелинейный классификатор. Многослойный персептрон
5.4.2.1 Алгоритм обратной волны. Суть – аппроксимация непрерывной дифференцируемой функцией за счет замены функции активации "сигмовидной" функцией:
![f(x)=\frac{1}{1+e^{-ax}}](/sites/default/files/tex_cache/746eeaf7091b46224d4f77fd2119593a.png)
![f'(x)=\frac{1}{(1+e^{-ax})^2}\cdot ae^{-ax}=a\left(\frac{1}{1+e^{-ax}}-\frac{1}{1+e^{-ax}}\right)=af(x)(1-f(x))](/sites/default/files/tex_cache/573040852466ce7acfcaca9fd1f83b7c.png)
![J(W)\rightarrow\min](/sites/default/files/tex_cache/d9b1c0c5492a803fca397b7275fc00ff.png)
5.4.2.2. Метод градиентного спуска решения задачи минимизации.
Пусть .
Тогда метод градиентного спуска выглядит так:
![\Delta W = -\mu\frac{dJ}{dW},](/sites/default/files/tex_cache/e3243bdd9475dc05845c6258e4a117bc.png)
![\mu](/sites/default/files/tex_cache/c9faf6ead2cd2c2187bd943488de1d0a.png)
![\frac{dJ}{dW_j^r}](/sites/default/files/tex_cache/fc436f5f09731696b22c6921689fde33.png)
5.4.2.3. Вычисление градиента. Аргумент функции активации -ого
нейрона
-ого слоя
![V_j^r=\sum_{k=1}^{k_{r-1}}W_{jk}^r y_k^{r-1}(i)+W_{j0}^r=\sum_{k=0}^{k_{r-1}}W_{jk}^r y_k^{r-1}(i)](/sites/default/files/tex_cache/80ba57ef70d0af0815fddbb607a259e5.png)
![y_0^{r-1}(i)=1](/sites/default/files/tex_cache/fdd6dc1ffe4de673af9433a19c190162.png)
Во входном слое, при .
В выходном слое, при
.
![\begin{gathered}
\varepsilon(i)=\frac12\sum_{m=1}^{k_L}(e_m(i))^2=\frac12\sum_{m=1}^{k_L}(f(V_m^L(i))-y_m(i))^2=
\varepsilon(V_m^L(i))=\varepsilon(V_m^L(W_m^L),i)\\
\frac{\partial\varepsilon(i)}{\partial W_j^L}=
\frac{\partial\varepsilon(i)}{\partial V_j^L}\cdot
\frac{\partial V_j^L}{\partial W_j^L}
\end{gathered}](/sites/default/files/tex_cache/763c0888f0c92f97b478aa942a012a71.png)
![\frac{\partial V_j^L}{\partial W_j^L}=y^{r-1}(i)](/sites/default/files/tex_cache/40a9b179c7735e2292008accbb8cb72a.png)
![j](/sites/default/files/tex_cache/363b122c528f54df4a0446b6bab05515.png)
![(r-1)](/sites/default/files/tex_cache/0d7fb19792d5c08853cfa1afa1701c6e.png)
![\frac{\partial\varepsilon(i)}{\partial V_j^L}=(f(V_j^L(i))-y_j(i))\cdot f'(V_j^L(i))=e_j(i)\cdot f'(V_j^L(i))](/sites/default/files/tex_cache/bd076102c8737f58f468d9ccf61465da.png)
![\frac{\partial\varepsilon(i)}{\partial V_j^L}=y^{r-1}(i)\cdot e_j(i)\cdot f'(V_j^L(i))](/sites/default/files/tex_cache/23937d8556fb27fd3ee98edab19786a2.png)
Рассмотрим скрытый слой . Имеется зависимость:
![\begin{gathered}
V_k^r=V_k^r(V_j^{r-1}) \\
\frac{\partial\varepsilon(i)}{\partial V_j^{r-1}(i)}=\sum_{k-1}^{k_r}
\frac{\partial\varepsilon(i)}{\partial V_k^r(i)}\cdot
\frac{\partial V_k^r(i)}{\partial V_j^{r-1}(i)} \\
\frac{\partial V_k^r(i)}{\partial V_j^{r-1}(i)}=
\frac{\partial}{\partial V_j^{r-1}(i)}
\left[\sum_{m=0}^{k_{r-1}}W_{km}^r y_m^{r-1}(i)\right],
\end{gathered}](/sites/default/files/tex_cache/247a62903b3c2a287f5b967f7d009809.png)
![y_m^{r-1}(i)=f(V_m^{r-1}(i))](/sites/default/files/tex_cache/26dc0e498ebcc41ab93caedfbb1e2a12.png)
![\begin{gathered}
\frac{\partial V_k^r(i)}{\partial V_j^{r-1}(i)}=W_{kj}^r
\frac{\partial y_j^{r-1}(i)}{\partial V_j^{r-1}(i)}=
W_{kj}^r f'(V_j^{r-1}(i)) \\
\frac{\partial\varepsilon(i)}{\partial V_j^{r-1}(i)}=
\left[\sum_{k-1}^{k_r}\frac{\partial\varepsilon(i)}{\partial V_k^r(i)}W_{kj}^r\right]
\cdot f'(V_j^{r-1}(i))
\end{gathered}](/sites/default/files/tex_cache/5c971085b92c19ead2490d347506173c.png)
5.4.2.4. Описание алгоритма.
0. Начальное приближение. Случайно выбираются веса небольших значений: .
1. Прямой проход. Для каждого вектора прецедента ,
вычисляются все
.
Вычисляется текущее значение ценовой функции
:
![\begin{aligned}
&\text{Цикл по } i=1,2,\ldots,N \text{ (по прецедентам):} \\
&\qquad\text{Вычислить:} \\
&\qquad y_k^0(i)=x_k(i), \; k=1,2,\ldots,k_0 \\
&\qquad y_0^0(i)=1. \\
&\qquad\text{Цикл по } r=1,2,\ldots,L \text{ (по слоям):} \\
&\qquad\qquad\text{Цикл по } j=1,2,\ldots,k_r \text{ (по нейронам в слое):} \\
&\qquad\qquad\qquad V_j^r(i)=\sum_{k=0}^{k_{r-1}}W_{jk}^r y_k^{r-1}(i) \\
&\qquad\qquad\qquad y_j^r(i)=f(V_j^r(i)) \\
&\qquad\qquad\text{Конец цикла по } j. \\
&\qquad\text{Конец цикла по } r. \\
&\text{Конец цикла по } i. \\
&J(W)=\sum_{i=1}^N\frac12(y_j^L(i)-y_j(i))^2
\end{aligned}](/sites/default/files/tex_cache/ba0f39ca12f11f561948049124b41359.png)
2. Обратный проход. Для каждого значения
и
вычисляется
.
Затем последовательно необходимо вычислить
для всех
и
:
![\begin{aligned}
&\text{Цикл по } i=1,2,\ldots,k_r \text{ (по нейронам в слое):} \\
&\qquad\text{Вычислить:} \\
&\qquad e_j(i)=y_j^L(i)-y_j(i) \\
&\qquad \delta_j^L(i)=e_j(i)\cdot f'(V_j^{r-1}(i)) \\
&\qquad\text{Цикл по } r=L,L-1,\ldots,2 \text{ (по слоям):} \\
&\qquad\qquad\text{Цикл по } j=1,2,\ldots,k_r \text{ (по нейронам в слое):} \\
&\qquad\qquad\qquad e_j^{r-1}(i)=\sum_{k=1}^(k_r}\delta_k^r(i)\cdot W_{kj}^r \\
&\qquad\qquad\qquad \delta_j^{r-1}(i)=e_j^{r-1}(i)\cdot f'(V_j^{r-1}(i)) \\
&\qquad\qquad\text{Конец цикла по } j. \\
&\qquad\text{Конец цикла по } r. \\
&\text{Конец цикла по } i.
\end{aligned}](/sites/default/files/tex_cache/db30f581f3ecf55e4018138b4d59339c.png)
3. Пересчет весов.
Для всех и
,
где
.
- Останов алгоритма может происходить по двум критериям: либо
стала меньше порога, либо градиент стал очень мал.
- От выбора
зависит скорость сходимости. Если
мало, то скорость сходимости также мала. Если
велико, то и скорость сходимости высока, но при такой скорости можно пропустить
.
- В силу многоэкстремальности существует возможность спустить в локальный минимум. Если данный минимум по каким-то причинам не подходит, надо начинать алгоритм с другой случайной точки.
- Данный алгоритм быстрее, чем алгоритм с обучением.