Здравствуйте, alex_ant, Вы писали:
_>Уважаемые товарищи, я интересуюсь искусственными нейронными сетями, а именно алгоритмом обучения многослойного персептрона обратным распространением ошибки. Предмет нейронные сети проходил в университете, но настолько детально нам проблему не преподавали. Имею несколько математических описаний этого алгоритма (учебники, Интернет) и пару программных реализаций, но разобраться пока не могу (очень много условностей и деталей в теории, и по 4 вложенных цикла, работающих с группами объектов, в примерах). Если кто-нибудь занимается нейросетями и хорошо представляет этот алгоритм, можно ли как-нибудь состыковаться и объяснить этот алгоритм «на пальцах»? Как сеть работает в прямом направлении мне понятно, непонятности появляются именно при обучении обратным распространением. Буду очень признателен, ибо бъюсь уже не один день.
--
Отсюда (
http://margo.student.utwente.nl/el/fuzzy/) можно скачать 3 файла fuzdsk*.zip, внутри есть неплохое введение в fuzzy logic (от Motorola). Там же есть доходчивое описание нейронных цепей, включая многослойный перцептон и описание алгоритма back propagation.
C уважением,
Геннадий Майко.
Здравствуйте, alex_ant, Вы писали:
> Если кто-нибудь занимается нейросетями и хорошо представляет этот алгоритм, можно ли как-нибудь состыковаться и объяснить этот алгоритм «на пальцах»? Как сеть работает в прямом направлении мне понятно, непонятности появляются именно при обучении обратным распространением. Буду очень признателен, ибо бъюсь уже не один день.
Не скажу, чтобы очень уж сильно ими занимался, но алгоритм представляю.
Веса входов (дендритов) каждого нейрона подстраиваются, исходя из их "вклада" в общую ошибку. Таким образом:
Для нейронов последнего (N) слоя ошибка известна — это разность между эталонным и полученными сигналами. Вычисляются поправки в веса входов, вычисляется дельта-значение (в формулах обычно обозначается дельтой, хотя сам термин не очень правильный, ИМХО), определяющее вклад каждого нейрона последнего слоя в ошибку[/*]
Берем предпоследний слой (N — 1), аналогично высчитывая ошибку в нем, исходя из дельта-значений нейронов последнего слоя. Аналогично п.1, проводим корректировки, подстраивая веса и высчитываая дельта-значения для всех нейронов этого слоя[/*]
Повторяем п. 2 для N — 2 слоя, N — 3, и т. д. [/*]
Это один шаг "подстройки". При обучении на множестве входных векторов, они должны подаваться в случайном порядке (чтобы сеть вместо них не запомнила их последовательность). После подачи каждого образа осуществляется подстройка всей сети.
О шаге обучения. Его можно выбрать константным, хотя обычно выбирают постепено уменьшающимся, что позволяет точнее приблизиться к глобальному минимуму функции сети. Чтобы избежать попадания в локальные минимумы мне известо три способа:
Иногда увеличивать шаг до достаточно большого значения — позволит "проскочить" локальный минимум[/*]
Всегда прибавлять к шагу некоторое случайное значение — в теории, должно также позволить избежать локального минимума =)[/*]
Иногда просто разбалансировать сеть
, изменяя ее веса на случайные небольшие значения.[/*]
Вот вроде и все. Могу дать сорцы ООП (!) алгоритма. Могу попробовать объяснить именно его =)
... << RSDN@Home 1.1.4 stable SR1 rev. 568 with тишина...>>
Уважаемые товарищи, я интересуюсь искусственными нейронными сетями, а именно алгоритмом обучения многослойного персептрона обратным распространением ошибки. Предмет нейронные сети проходил в университете, но настолько детально нам проблему не преподавали. Имею несколько математических описаний этого алгоритма (учебники, Интернет) и пару программных реализаций, но разобраться пока не могу (очень много условностей и деталей в теории, и по 4 вложенных цикла, работающих с группами объектов, в примерах). Если кто-нибудь занимается нейросетями и хорошо представляет этот алгоритм, можно ли как-нибудь состыковаться и объяснить этот алгоритм «на пальцах»? Как сеть работает в прямом направлении мне понятно, непонятности появляются именно при обучении обратным распространением. Буду очень признателен, ибо бъюсь уже не один день.