Понимание обратной связи нейронной сети

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

Я пытаюсь понять алгоритм обратного распространения с нейронной сетью 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 вычисляет ошибку между выходным нейроном (нейронами) (в нашем случае существует только один), и целевое значение (значения):
Step 2
Шаг 3 мы используем ошибку от Шага 2 для вычисления ошибки для каждой скрытой единицы h:
Step 3

'Вес kh' является весом между скрытой единицей h и устройством вывода k, хорошо это сбивает с толку, потому что входной единице не связали прямой вес с устройством вывода. После того, чтобы уставиться на формулу в течение нескольких часов я начал думать о том, что означает суммирование, и я начинаю приходить к выводу, что каждый входной вес нейрона, который соединяется с нейронами скрытого слоя, умножает на ошибка на выходе и подводят итог. Это - логический вывод, но формула кажется немногим путающим, так как она ясно говорит что 'вес kh' (между выходным уровнем k и скрытым слоем h).

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

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

47
задан Glorfindel 12 June 2019 в 04:08
поделиться

3 ответа

В руководстве, которое вы разместили здесь, на самом деле все сделано неправильно. Я дважды проверил его по двум стандартным книгам Бишопа и двум моим рабочим реализациям. Ниже я укажу, где именно.

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

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

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

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

Теперь вопрос в том, как это сделать. получаем производные по внутренним блокам? Что ж, мы знаем, что выход единицы - это сумма всех входящих единиц, взвешенных по их весу, с последующим применением передаточной функции. Итак, o_k = f (sum (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.

В случае сигмоидальной передаточной функции это становится z_k (1 - z_k) * w_kj. ( Вот ошибка в учебнике, автор говорит o_k (1 - o_k) * w_kj! )

31
ответ дан 26 November 2019 в 19:56
поделиться

Я прочитал из уравнения шага 3:

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

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

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

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

3
ответ дан 26 November 2019 в 19:56
поделиться

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

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

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

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

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

alt text

alt text "

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

E (z ' 1 , z ' 2 , .., z' n ) где z ' k - результат предварительной активации k-го выходного слоя, и z ' k (w ji ), то есть E является функцией z', а сам z 'является функцией w ji ( если это не имеет для вас смысла, сначала подумайте очень внимательно о том, как настраивается 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 .

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

Удачи.

8
ответ дан 26 November 2019 в 19:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: