Изменения

Перейти к: навигация, поиск

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

40 байт добавлено, 06:17, 5 апреля 2019
Нет описания правки
:<math>E=(t-y)^2, </math> где <math>E</math> ошибка.
В качестве примера, рассмотрим сеть с одним тренировочным объектом: <math>(1, 1, 0)</math>, таким образом, значения <math>x_1</math> и <math>x_2</math> равны 1, а <math>t</math> равна равно 0. Теперь, если действительный ответ <math>y</math> изобразить на графике на горизонтальной оси, а ошибку <math>E</math> на вертикальной, результатом будет парабола. Минимум параболы соответствует ответу <math>y</math>, который минимизирует ошибку <math>E</math>. Для одиночного тренировочного объекта, минимум также касается горизонтальной оси, следовательно ошибка будет нулевая и сеть может выдать ответ <math>y</math> который точно соответствует ожидаемому ответу <math>t</math>. Следовательно, задача преобразования входных значений в выходные может быть сведена к задаче оптимизации, заключающейся в поиске функции, которая даст минимальную ошибку. [[File:Error surface of a linear neuron for a single training case.png|right|thumb|250px|График ошибки для нейрона с линейной функцией активации и одним тренировочным объектом]]
В таком случае, выходное значение нейрона {{---}} взвешенная сумма всех его входных значений:
==Дифференцирование для однослойной сети==
Метод градиентного спуска включает в себя вычисление дифференциала квадратичной функции ошибки относительно весов сети. Обычно это делается с помощью метода обратного распространения ошибки. Предположим, что выходной нейрон один,<ref group="заметка">Их может быть несколько, тогда ошибка {{---}} это квадратичная норма вектора разницы.</ref> тогда квадратичная функция ошибки:
: <math>E = \tfrac 1 2 (t - y)^2,</math> где <math>E</math> {{---}} квадратичная ошибка, <math>t</math> {{---}} требуемый ответ для обучающего образца, <math>y</math> {{---}} действительный ответ сети.
:<math>o_j = \varphi(\text{net}_j) = \varphi\left(\sum_{k=1}^n w_{kj}o_k\right).</math>
Входные значения <math>\text{net}_j</math> нейрона {{---}} это взвешенная сумма выходных значений <math>o_k</math> предыдущих нейронов. Если нейрон в первом слове после входного слоя, то <math>o_k</math> входного слоя {{---}} это просто входные значения <math>x_k</math> сети. Количество входных значений нейрона <math>n</math>. Переменная <math>w_{kj}</math> обозначает вес на ребре между нейроном <math>k</math> предыдущего слоя и нейроном <math>j</math> текущего слоя.
Функция активации <math>\varphi</math> нелинейна и дифференцируема. Одна из распространенных функций активации {{---}} сигмоида:
: <math>\frac{\partial \text{net}_j}{\partial w_{ij}} = \frac{\partial}{\partial w_{ij}} \left(\sum_{k=1}^n w_{kj} o_k\right) = \frac{\partial}{\partial w_{ij}} w_{ij} o_i= o_i.</math>
Если нейрон в первом слое после входного, то <math>o_i</math> {{---}} это просто <math>x_i</math>.
Производная выходного значения нейрона <math>j</math> по его входному значению {{---}} это просто частная производная функции активации (предполагается что в качестве функции активации используется сигмоида):
: <math>\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))</math>
32
правки

Навигация