Вопрос

Обновление: лучшая формулировка проблемы.

Я пытаюсь понять алгоритм обратной обработки с нейронной сетью XOR в качестве примера. Для этого случая есть 2 входных нейронов + 1 смещение, 2 нейроны в скрытом слое + 1 смещение и 1 выходной нейрон.

 A   B  A XOR B
 1    1   -1
 1   -1    1
-1    1    1
-1   -1   -1

A sample XOR neural network
(источник: Wikimedia.org.)

я использую Стохастическая задняя обработка.

После чтения немного больше, я обнаружил, что ошибка выходного устройства распространяется на скрытые слои ... изначально это было запутано, потому что когда вы попадаете на входной слой нейронной сети, то каждый нейрон получает настройку ошибок от обеих нейронов в скрытом слое. В частности, способ распределения ошибки сложно сначала понять.

Шаг 1 Рассчитайте вывод для каждого экземпляра ввода.
Шаг 2 Рассчитайте ошибку между выходным нейроном (S) (в нашем случае есть только одно) и целевое значение (ы):
Step 2
Шаг 3 Мы используем ошибку с шага 2, чтобы рассчитать ошибку для каждого скрытого блока h:
Step 3

«Вес х» - это вес между скрытым модулем H и выходом K, ну это сбивает с толку, потому что входной блок не имеет прямой массы, связанного с выходом. После нескольких часов рассмотрев на формулу, я начал думать о том, что означает суммирование, и я начинаю прийти к выводу, что каждый входной вес нейрона, который соединяется с нейронами скрытого слоя, умножена на выходную ошибку и суммирую Отказ Это логический вывод, но формула кажется немного запутанной, поскольку это ясно говорит «вес KH» (между выходным слоем K и скрытым слоем H).

Я понимаю все правильно здесь? Кто-нибудь может подтвердить это?

Что o (h) входного слоя? Мое понимание состоит в том, что каждый входной узел имеет два выхода: тот, который переходит на первый узел скрытого слоя и один, который переходит во второй узел скрытый слой. Какой из двух выходов должен быть подключен к O(h)*(1 - O(h)) Часть формулы?
Step 3

Это было полезно?

Решение

Учебник, который вы разместили здесь, на самом деле это неправильно. Я дважды проверил его против двух стандартных книг епископа и двух моих рабочих реализаций. Я укажу ниже, где именно.

Важно помнить, что вы всегда ищете производные функции ошибки относительно единицы или веса. Первые - это Deltas, последний - это то, что вы используете для обновления ваших весов.

Если вы хотите понять обратнопорацию, вы должны понимать правило цепочки. Это все о правиле сети здесь. Если вы не знаете, как это работает точно, проверьте в Википедии - это не так сложно. Но как только вы понимаете производные, все падают на месте. Обещать! :)

∂E / ∂W может быть составлен в ∂E / ∂o ∂o / ∂W через правило цепи. ∂O / ∂W легко рассчитывается, поскольку это просто производная активация / вывод устройства по весам. ∂e / ∂o на самом деле то, что мы называем deltas. (Я предполагаю, что E, O и W здесь векторы / матрицы)

У нас есть их для выходных единиц, поскольку именно здесь мы можем рассчитать ошибку. (В основном у нас есть функция ошибки, которая сводится к Delta of (t_k - o_k), например, для квадратичной функции ошибки в случае линейных выходов и кросс-энтропии в случае для логистических выходов.)

Вопрос сейчас есть, как мы получаем производные для внутренних подразделений? Ну, мы знаем, что вывод единицы является суммой всех входящих единиц, взвешенных их весами и применение функции передачи впоследствии. Так o_k = f (сумма (w_kj * o_j, для всех j)).

Так что мы делаем, вывод O_K относительно O_J. Поскольку delta_j = ∂e / ∂o_j = ∂e / ∂o_k ∂o_k / ∂o_j = delta_k ∂o_k / o_j. Так что дано delta_k, мы можем рассчитать delta_j!

Давай сделаем это. o_k = f (сумма (w_kj * o_j, для всех j)) => ∂o_k / ∂o_j = f '(сумма (w_kj * o_j, для всех j)) * w_kj = f' (z_k) * w_kj.

Для случая функции системы Sigmoidal это становится Z_K (1 - Z_K) * W_KJ. (Вот ошибка в руководстве, автор говорит O_K (1 - O_K) * W_KJ!)

Другие советы

Я не уверен, что в том, что ваш вопрос, но я на самом деле прошел этот учебник, и я могу заверить вас, кроме одного очевидного опечатка, нет ничего неверного.

Я сделаю предположение, что ваш вопрос заключается в том, что вы путаете о том, как обратная обработка скрытый Дельта получена. Если это действительно ваш вопрос, пожалуйста, рассмотрите

alt text
(источник: Pandamatak.com.)

Вы, вероятно, смущены тем, как автор получает это уравнение. Это на самом деле простое применение многомерного правила цепи. А именно, (далее следует из Википедия)

«Предположим, что каждый аргумент z = f (u, v) представляет собой функцию двумя переменной, такой, что u = h (x, y) и v = g (x, y) и что эти функции все дифференцируются. Тогда Правило цепочки было бы похоже:

alt text

alt text "

Теперь представьте, что вытягивание правила цепочки в соответствии с аргументом индукции

Е (z '1, Z '2.., Z 'N.) где Z 'k. Это вывод предварительной активации kth выходного слоя, а z 'k.(W.ji.) то есть сказать, что E - это функция самого Z 'и Z - это функция Wji. (если это не имеет смысла к вам сначала думать Очень тщательно о том, как NN установка.) Применение правила цепи непосредственно расширено до n переменных:

ΔE (z '1, Z '2.., Z 'N.)/Δw.ji. = Σk. ΔE./Δz 'k. Δz 'k./Δw.ji.

Это самый важный шаг, автор снова применяет правило цепи снова, на этот раз в пределах суммы для расширения Δz 'k./Δw.ji. термин, то есть

Δz 'k./Δw.ji. = Δz 'k./Δo.j Δo.j/Δz.j Δz.j/Δw.ji..

Если у вас есть трудности понять правило цепочки, вам может потребоваться пройти курс на многомерном исчислении или прочитать такой раздел в учебнике.

Удачи.

Что я читаю с уравнения шага 3:

  1. O_h = последний вывод этого скрытого устройства (O_H на входном уровне является фактическим входным значением)
  2. W_KH = вес соединения между этим скрытым модулем и единицей следующего слоя (к выходу)
  3. delta_k = Ошибка блока следующего слоя (к выходу, тот же блок, что и предыдущая пуля)

Каждое устройство имеет только один вывод, но каждая связь между выходом и следующим слоем взвешена. Таким образом, выходной выход такой же, но на приемном конце каждый блок получит другое значение, если вес ссылок отличается. O_H всегда относится к значению этого нейрона для последней итерации. Ошибка не распространяется на входной слой, как по определению, вход не имеет «ошибки» как SE.

Ошибка должна быть рассчитана слой слоя, начиная с выходной стороны, поскольку нам нужны значения ошибок слоя N + 1 для расчета слоя N. Вы правы, нет прямого соединения между входом и выходом в обратной обработке.

Я верю, что уравнение правильно, если контртузирует. Что, вероятно, сбивает с толку, состоит в том, что при распространении вперед для каждого блока мы должны учитывать все единицы и ссылки слева от устройства (входные значения), но для распространения ошибок (обратная обработка) должна была учитывать единицы справа (вывод) значение) блока обрабатывается.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top