Московский государственный университет имени М.В.Ломоносова
Опубликован: 30.04.2008 | Доступ: свободный | Студентов: 1613 / 248 | Оценка: 4.24 / 3.92 | Длительность: 14:56:00
Специальности: Математик
Лекция 5:

Нелинейный классификатор. Многослойный персептрон

< Лекция 4 || Лекция 5: 1234 || Лекция 6 >

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

f(x)=\frac{1}{1+e^{-ax}}
Вычислим производную функции:
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))
При данном чисто формальном приеме вектора признаков уже могут отображаться не только в вершины, но и внутрь гиперкуба. Необходимо решить задачу минимизации:
J(W)\rightarrow\min

5.4.2.2. Метод градиентного спуска решения задачи минимизации. Пусть W=\{W-j^k;\;j=1,2,\ldots,k_r;\;r=1,2,\ldots,L\}. Тогда метод градиентного спуска выглядит так:

\Delta W = -\mu\frac{dJ}{dW},
где \mu а – шаг градиентного спуска. Очевидно, для его реализации необходимо уметь вычислять градиент \frac{dJ}{dW_j^r}.

5.4.2.3. Вычисление градиента. Аргумент функции активации j -ого нейрона r -ого слоя

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)
принимает различные значения в зависимости от индекса прецедента. В данном случае y_0^{r-1}(i)=1.

Во входном слое, при r=1\quad y_k^{r-1}(i)=x_k(i),\;k=1,2,\ldots,k_0. В выходном слое, при r=L\quad y_k^r(i)=\widehat{y}_k(i),\;k=1,2,\ldots,k_L.

Рассмотрим выходной слой r=L.

\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}
\frac{\partial V_j^L}{\partial W_j^L}=y^{r-1}(i) – не зависит от j -ого номера нейрона в слое, т.е. имеем одинаковый вектор производных для всех нейронов (r-1) -ого слоя.
\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))
Следовательно, для последнего слоя \frac{\partial\varepsilon(i)}{\partial V_j^L}=y^{r-1}(i)\cdot e_j(i)\cdot f'(V_j^L(i))

Рассмотрим скрытый слой r<L. Имеется зависимость:

\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}
но y_m^{r-1}(i)=f(V_m^{r-1}(i)), следовательно:
\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}
Сумма, заключенная в квадратных скобках, известна из предыдущего шага.

5.4.2.4. Описание алгоритма.

0. Начальное приближение. Случайно выбираются веса небольших значений: W_{jk}^r,\;r=1,2,\ldots,L,\;j=1,2,\ldots,k_r,\;k=0,1,2,\ldots,k_{r-1}.

1. Прямой проход. Для каждого вектора прецедента x(i), i=1,2,\ldots,N, вычисляются все V_j^r(i),\;y_j^r(i)=f(V_j^r(i)),\;j=1,2,\ldots,k_r,\;r=1,2,\ldots,L. Вычисляется текущее значение ценовой функции J(W):

\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}

2. Обратный проход. Для каждого значения i=1,2,\ldots,N и j=1,2,\ldots,k_L вычисляется \frac{\partial\varepsilon(i)}{\partial V_j^L(i)}. Затем последовательно необходимо вычислить \frac{\partial\varepsilon(i)}{\partial V_j^r(i)} для всех r=L-1,\ldots,1 и j=1,2,\ldots,k_r:

\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}

3. Пересчет весов. Для всех r=1,2,\ldots,L и j=1,2,\ldots,k_r \;W_j^r(new)=W_j^r(old)+\Delta W_j^r, где \Delta W_j^r=-\mu\sum_{i=1}^N\frac{\partial\varepsilon(i)}{\partial V_j^r(i)}y^{r-1}(i).

  • Останов алгоритма может происходить по двум критериям: либо J(W) стала меньше порога, либо градиент стал очень мал.
  • От выбора \mu зависит скорость сходимости. Если \mu мало, то скорость сходимости также мала. Если \mu велико, то и скорость сходимости высока, но при такой скорости можно пропустить \min.
  • В силу многоэкстремальности существует возможность спустить в локальный минимум. Если данный минимум по каким-то причинам не подходит, надо начинать алгоритм с другой случайной точки.
  • Данный алгоритм быстрее, чем алгоритм с обучением.
< Лекция 4 || Лекция 5: 1234 || Лекция 6 >