Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка3.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

2.6.1. Метод обратного распространения ошибки

Рис. 7. Многослойный перцептрон

На Рис. 7 изображена нейронная сеть. У сети есть входы x1,...,xn, выходы Outputs и внутренние узлы. Перенумеруем все узлы (включая входы и выходы) числами от 1 до N. Обозначим через wi,j вес, стоящий на ребре, соединяющем i-ый и j-ый узлы, а через oi — выход i-го узла. Если у нас m тестовых примеров с целевыми значениями выходов , d = 1..m, k Є Outputs, то функция ошибки выглядит так:

. (2.6)

Веса модифицируются стохастическим градиентным спуском, то есть будем подправлять веса после каждого тестового примера. Нам нужно двигаться в сторону, противоположную градиенту, то есть добавлять к каждому весу wi,j

, (2.7)

где функция ошибки для d-ого тестового примера

. (2.8)

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

, (2.9)

где сумма берется по входам j-го узла. Поэтому

. (2.10)

Аналогично, Sj влияет на общую ошибку только в рамках выхода j-го узла oj. Поэтому

(2.11)

Если же j-й узел — не на последнем уровне, то у него есть выход, который поступает на входы нейронов следующего слоя. Обозначим эти входы как Children(j) узла j. В этом случае

, (2.12)

и

. (2.13)

Ну а — это в точности аналогичная поправка, но вычисленная для узла следующего уровня (будем обозначать ее через δk — от Δk она отличается отсутствием множителя (−ηxi,j). Поскольку мы научились вычислять поправку для узлов последнего уровня и выражать поправку для узла более низкого уровня через поправки более высокого, можно уже писать алгоритм. Именно из-за этой особенности вычисления поправок алгоритм называется алгоритмом обратного распространения ошибки. Краткое резюме проделанной работы:

- для узла последнего уровня

δj = − oj(1 − oj)(tj − oj) (2.14)

- для внутреннего узла сети

(2.15)

- для всех узлов

Δwi,j = − ηδjxi,j

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

Алгоритм:

  1. Инициализировать wij маленькими случайными значениями.

  2. Повторить пункт 2 необходимое количество раз, пока сеть не перестанет ошибаться: Для всех d от 1 до m:

    1. Подать на вход сети и подсчитать выходы oi каждого узла.

    2. Для всех k Є Outputs δk = ok(1 − ok)(tk − ok).

    3. Для каждого уровня l, начиная с предпоследнего: Для каждого узла j уровня l вычислить .

    4. Для каждого ребра сети {i, j} wi,j = wi,j + ηδjxi,j.

Очевидно, что если ti > oi весовые коэффициенты будут увеличены и тем самым уменьшат ошибку. В противном случае они будут уменьшены, и oi тоже уменьшится, приближаясь к ti.

  1. Выдать значения wij.

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