CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Нейронная сеть - обучение ИНС с помощью алгоритма обратного распространения

Нейронная сеть — введение
Принцип обучения многослойной нейронной сети с помощью алгоритма обратного распространения

Рассмотрим процесс обучения нейронной сети с использованием алгоритма обратного распространения ошибки (backpropagation).

Для иллюстрации этого процесса используем нейронную сеть состоящую из трёх слоёв и имеющую два входа и один выход:
здесь, автор считает слои по-другому и не учитывает «2 нейрона» входного слоя

ИНС
Каждый нейрон состоит из двух элементов.
Первый элемент – дендриты — добавляют весовые коэффициенты ко входным сигналам.
Второй элемент – тело — реализует нелинейную функцию, т.н. функцию активации нейрона.
Сигнал е – это взвешенная сумма входных сигналов
у = f (е)
— выходной сигнал нейрона.


Чтобы обучить нейронную сеть мы должны подготовить обучающие данные(примеры).
В нашем случае, тренировочные данные состоят из входных сигналов (х1 и х2) и желаемого результата z.
Обучение – это последовательность итераций (повторений).
В каждой итерации весовые коэффициенты нейронов подгоняются с использованием новых данных из тренировочных примеров.
Изменение весовых коэффициентов и составляют суть алгоритма, описанного ниже.

Каждый шаг обучения начинается с воздействия входных сигналов из тренировочных примеров. После этого мы можем определить значения выходных сигналов для всех нейронов в каждом слое сети.
Иллюстрации ниже показывают, как сигнал распространяется по сети.
Символы W(Xm)n представляют вес связи между сетевым входом Xm и нейрона n во входном слое.
Символы y(n) представляют выходной сигнал нейрона n.




Распространение сигнала через скрытый слой.
Символы Wmn представляют весовые множители связей между выходом нейрона m и входом нейрона n в следующем слое.


Распространение сигнала через выходной слой

На следующем шаге алгоритма, выходной сигнала сети y сравнивается с желаемым выходным сигналом z, который хранится в тренировочных данных.
Разница между этими двумя сигналами называется ошибкой d выходного слоя сети.


Невозможно непосредственно вычислить сигнал ошибки для внутренних нейронов, потому что выходные значения этих нейронов, неизвестны.
На протяжении многих лет был неизвестен эффективный метод для обучения многослойной сети.
Только в середине восьмидесятых годов был разработан алгоритм обратного распространения ошибки.
Идея заключается в распространении сигнала ошибки d (вычисленного в шаге обучения) обратно на все нейроны, чьи выходные сигналы были входящими для последнего нейрона.


Весовые коэффициенты Wmn, используемые для обратного распространения ошибки, равны тем же коэффициентам, что использовались во время вычисления выходного сигнала. Только изменяется направление потока данных (сигналы передаются от выхода ко входу).
Этот процесс повторяется для всех слоёв сети. Если ошибка пришла от нескольких нейронов — она суммируются:



Когда вычисляется величина ошибки сигнала для каждого нейрона – можно скорректировать весовые коэффициенты каждого узла ввода(дендрита) нейрона.
В формулах ниже df(e)/de — является производной от функции активации нейрона (чьи весовые коэффициенты корректируются).
как помним, для активационной функции типа сигмоид

           1
S(x) = -----------
       1 + exp(-x)
производная выражается через саму функцию:
S'(x) = S(x)*(1 - S(x))
, что позволяет существенно сократить вычислительную сложность метода обратного распространения ошибки.

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








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

продолжение следует...

Ссылки
Оригинал статьи (на английском)
http://ru.wikipedia.org/wiki/Метод_обратного_распространения_ошибки
en.wikipedia.org/wiki/Backpropagation
Нейросеть в 11 строчек на Python

По теме
Нейронная сеть — введение
Пример работы самоорганизующейся инкрементной нейронной сети SOINN
  • +3
  • 7 июля 2011, 08:01
  • noonv

Комментарии (19)

RSS свернуть / развернуть
+
+1
Спасибо. Наглядно, в той книжке, по которой я изучал, было слишком скучно и без картинок. )))
avatar

DiverOfSky

  • 7 июля 2011, 11:01
+
0
Ждем продолжение!
avatar

xalyavius

  • 19 июля 2011, 12:12
+
0
СПАСИБО!!! Это мега круто! Пятнадцать минут у монитора заменили семестр целой дисциплины у скучного и серьёзного препода )))
Присоединяюсь к остальным — Ждем продолжение!
avatar

SinauRus

  • 5 августа 2011, 19:24
+
0
здесь, автор считает слои по-другому и не учитывает «2 нейрона» входного слоя автор правильно считает. Входной слой вообще слоем не считается(в многослойных сетях)
avatar

sakkaba

  • 27 марта 2012, 22:00
комментарий был удален

+
0
Отлично! Огромное спасибо.
А нельзя ли так же доходчиво рассказать про карты Кохонена? Очень хотелось бы не ломая мозгов понять еще один нейро-алгоритм: т.н. «Расширяющийся нейронный газ».
Вообще, пора уже издать книжку типа «Нейросети Для Чайников». Я бы купил.
avatar

Fedor

  • 23 декабря 2012, 22:19
+
+1
Что-то я не понял, когда считаем новый вес, к старому прибавляем произведение шага, ошибки, а вот с производной что-то не понятное написано :( может кто словами написать что там делается?
avatar

fobes

  • 19 марта 2015, 19:50
+
0
Идея обучения ИНС, состоит в нахождении весовых коэффициентов синапсов, за счёт распространения сигналов ошибки от выхода ИНС к её входам.
Для корректировки весовых коэффициентов, используется метод градиентного спуска, откуда и появляется производная.
avatar

noonv

  • 23 марта 2015, 10:11
+
+1
Как так выходит на вход подаются определенные значения больше 1, а на результирующем нейроне мы значения прогоняем через сигмоиду и как может выйти что-то больше 1?
avatar

Mefgalm

  • 1 мая 2015, 18:47
+
0
Как раз и выходит, что для того чтобы подавать данные на вход ИНС, их предварительно нужно нормировать, чтобы они были представлены числом от 0 до 1.
avatar

noonv

  • 4 мая 2015, 21:49
+
0
Спасибо за читабельную статью! =) Не могу понять, w'=w + h * D * f'(e) *x, правильно ли я написал формулу, если да, то что вставлять вместо E в f'( )?
avatar

kukuklan

  • 29 октября 2015, 01:26
+
0
Сигнал е – это взвешенная сумма входных сигналов
avatar

admin

  • 29 октября 2015, 11:29
+
0
Трудно вспоминать школьный курс по физ.мату если с ним не работал около 10 лет… Но все же очень хочу разобраться: Я проанализировал все по-пунктам (может что-то упустил). описан функционал под уже обученную сеть? Как на первом значении для обучения получить вес W, если на примере сети
3->4->2
(кол-во нейронов в слое) ми имеем всего лишь
Xn и Yn


hiddenlayer === (f1(e),f2(e),f3(e),f4(e)) 
4 нейрона.
Разбираю пока на примере линейной зависимости без порога активации:
(x1=1,x2=1,x3=1) => _ _ _ _ _ _ _ _ _ _ < outputlayer (y1=0.17,y2=1)>
(x1=0,x2=1,x3=1) => < hiddenlayer >  => < outputlayer (y1=0.07,y2=0.42)>
(x1=1,x2=0,x3=1) => _ _ _ _ _ _ _ _ _ _ < outputlayer (y1=0.15,y2=0.85)>
(x1=1,x2=1,x3=0) => _ _ _ _ _ _ _ _ _ _ < outputlayer (y1=0.12,y2=0.71)>
(x1=0,x2=0,x3=0) => _ _ _ _ _ _ _ _ _ _ < outputlayer (y1=0,y2=0)>
avatar

x_link

  • 8 декабря 2015, 09:26
+
0
Всё конечно очень здорово, но есть одно «НО». При расчёте делта её нужно умножать на производную от функции активации, в связи с чем дельта4, дельта5 и т.д. будут рассчитаны неверно.
avatar

TuMePJlaH

  • 18 февраля 2016, 10:38
+
0
Поясните пожалуйста, почему?
avatar

Taraun

  • 4 февраля 2017, 14:02
+
0
Стоит добавить, что в таком виде сеть, как правило, не используется. Необдходимо добавить порог срабатывания (нейроны «смещения»). Без них вряд ли удастся обучить сеть даже простому XORу, не говоря уже о более сложных задачах.
avatar

moggiozzi

  • 16 октября 2016, 11:46
+
0
Абсолютно верное замечание.
avatar

noonv

  • 20 марта 2017, 10:18
+
0
Исходя из формулы расчета ошибки и формулы расчета нового веса, получается, что если изначально сгенерировать матрицу с нулевыми весами, то её не получится обучить?
w46 = 0
d4 = w46*d6 = 0
Подставляем ноль в формулу вычисления нового веса, где происходит умножение производной от взвешенной сумму на вход и на ошибку, и снова получаем ноль. Вес не поменяется. Я где-то ошибся?
avatar

MrGod

  • 19 марта 2017, 11:07
+
0
Правильное замечание.
Как уже отметили выше — в данной схеме не хватает сигнала смещения/сдвига (bias) для каждого нейрона (слоя).
f = w*x + b

Bias характеризует значение в нуле (т.е. выполняет «смещение» результата, когда x=0).
Нейронные сети для начинающих. Часть 2
avatar

noonv

  • 20 марта 2017, 10:19

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.