GotAI.NET

Форум: Проблемы искусственного интеллекта

 

Регистрация | Вход

 Все темы | Новая тема Стр.1 (5)След. > >>   Поиск:  
 Автор Тема: Обратное распространение ошибки
tac
Сообщений: 2601
Обратное распространение ошибки
Добавлено: 25 июл 08 18:06
SOS!
Пришлось мне реализовать этот наитупейший алгоритм обратного распространения ... (не по своей воле, но надо же с ним наконец разделаться) Кто знает помогите ... я чего то не доганяю
Вот здесь есть программка (кем то написанная) http://forum.vingrad.ru/forum/topic-201714.html
незнаю зароботала она у кого нибудь она или нет, но у меня не в какую - несходится и все ... У меня есть вариант для С#, где кое что подправленно (думаю в лучшую сторону) ... буду благодарен, кто поймет и раскажет, а еще лучше откорректирует программу, чтобы она была рабочей и многослойный перцептрон сходился бы ....
[Ответ][Цитата]
daner
Сообщений: 4593
На: Обратное распространение ошибки
Добавлено: 25 июл 08 18:53
Во-первых, алгоритм не тупой. А подобные высказывания лично вас характеризуют с не лучшей стороны.

Во-вторых, вот ссылка на программу которая реализует BP на C#. Не проверял, но уверен, что она работает как надо.
http://www.codeproject.com/KB/cs/BackPropagationNeuralNet.aspx

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

Так же, могу посоветовать вам статью Википедии, в которой очень компактно приведен алгоритм ВР на псевдокоде. (Внимание: Статьи на обоих языках различны)
РУССКИЙ
АНГЛИЙСКИЙ
[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 25 июл 08 19:26
Спасибо за ответ.

1. Это старая история поэтому прошу не спешите с выводами .. можете почитать здесь http://forum.membrana.ru/forum/articles.html?parent=1056572078&page=374 и здесь http://forum.membrana.ru/forum/scitech.html?parent=1053122123&page=0

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

3. Пожалуйсто присылайте сюда tac@inbox.lv я разбирусь в любом коде

А с википедией ну, там теория всем хорошо известная, в русской и я руку приложил
[Ответ][Цитата]
daner
Сообщений: 4593
На: Обратное распространение ошибки
Добавлено: 26 июл 08 0:31
я вам выслал и свой код и по ссылке.

почитал ваши рассуждения... не знаю, простите, но они какие-то пустые.
Не вижу вообще никакого смысла сравнивать Перцепторон и ВP.
Не понимаю, с чего взяли, что перцептрон линейный?
на сколько мне известно, в нем функция ступени используется. Какая же это линейность?
Что касается чистой линейности... ну это для сети не подходит по совершенно банальной причине. Линейная активная фукция приведет всю сеть к эквиваленту сети в один уровень.
т.е. С линейной функцией активации делать сеть больше чем на один слой -- бессмысленно.
Что касается Перцептрона со ступенью.... ну так это не дефференцируемая функция!!!! Как вы собираетесь обучать сеть в несколько уровней с такой убожеской функцией?
Поэтому и применяют сигмоид. Вот и все. О чем тут сильно рассуждать? А вы начели там какие-то концепции, Розенблатт, Минский...
Они вообще свои книги писали когда алгоритма обучения еще не было. (на сколько я знаю)

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

Короче, я так и не понял, претензий к BP и его глупости.

П.С.
Шуклин видимо когда вас сюда посылал имел ввиду Виктора Царегородцева. .
Так что... подождите, он наверняка вам доходчиво объяснит, в чем вы заблуждаетесь по нейронным сетям. (ну или я заблуждаюсь)
[Ответ][Цитата]
daner
Сообщений: 4593
На: Обратное распространение ошибки
Добавлено: 26 июл 08 0:32
кстати, я в свое время писал код с нуля чисто по теории. все работало.
Так что если вы теорию понимаете от и до... проблем не должно быть.
[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 26 июл 08 3:43
Посмотрел я Ваш код (код с другого сайта не стал компилится, какая то ошибка я не стал разбиратся) - ваш хотя бы робочий - это обрадовало Но как всегда не надолго ... Я может плохо разобрался но тогда поясните ...
1. У вас по умолчанию 4 входа 5 элементов в среднем слое и один выходной
2. Но вот, что странно - на каждой итерации Вы подоете один НОВЫЙ пример - и так 3000 итераций с 3000 примерами ... ТАК ? После этого вы тестируете на 50 примерах (50 раз нажимая кнопку Тест), снова новая пара стимул-реакция ...

И видно - у Вас нет НИ КАКОГО схождения ... т.е. ошибка прыгает как сумашедшая ...

Ладно на тестовых примерах это можно оставить в покое - это мне пока не важно ...

НО на тех 3000 - не должно быть ни малейшей ошибки (скажем с точностью 0.01) - судя по програме Вы этого даже не проверяли, и именно это у меня не получалось на этом алгоритме обратного распространения ...

Может быть Вам легче переделать программу, что проверять не на тестовых примерах а на тех же самых, что при обучении ? И получить следующую оценку - 1. Обучаем (Жмем кнопку Learning) 2. Жмем новую кнопку с прогонкой еще раз всех 3000 примеров 3. !!! Получаем сколько из этих 3000 совпадают с точностью 0.01 ... ???
Именно такой процесс называют ОДНОЙ итерацией ... Их нужно провернуть порядка 10000, и соответственно поднять число элементов среднего слоя около 3000. Вот тогда начнем сравнивать ...
Покаже (ЕСЛИ я прав в том, что разобрался) можно считать, что Ваш алгоритм на столько же не работает, как и тот который я указывал для начала ... все-же взгляните на него - там по крайней мере все просто и элегантно и понятно, что человек хотел получить ... только вот не работает, и не знаю почему - или обратное распространение не рабочее (что наверное вряд ли, хотя все возможно), либо алгоритм в чем то все же ошибочен - только в чем (сделан в точности по теории)?





[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 26 июл 08 3:59
Эка у Вас все просто "О чем тут сильно рассуждать?"

Не буду Вас сильно разубеждать, а то еще обидетесь Но пару замечаний сделаю:

1. Они вообще свои книги писали когда алгоритма обучения еще не было
-- О здрасти - и им милионы выдавали за красивые глазки ... Был алгоритм коррекции ошибки и несколько их варианций - придумал Розенблатт - http://ru.wikipedia.org/wiki/Метод_коррекции_ошибки

2. "Что касается Перцептрона со ступенью.... ну так это не дефференцируемая функция!!!! Как вы собираетесь обучать сеть в несколько уровней с такой убожеской функцией?"
--- С одним уровнем вы знаете как ? Если нет см. предыдущий пункт, Если два - первый выбираем случайно и не обучаем, второй опять же по Метод_коррекции_ошибки - это и есть перцептрон ... можете посмотреть мою статью здесь http://ru.wikipedia.org/wiki/Перцептрон

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

Да - считаю ! Потому, что Розенблат это как раз доказал, вернее он доказал, что достаточно Перцептрона (см. статью) с одним случайным фиксированным слоем и одним обучаемым достаточно на все случаи жизни.

Дальше в мои рассуждениях на мембране как раз разговор об этом доказательстве - если оно ЕСТЬ (но никто мне его не показал) - т.е. для чего нужны два и более обучаемых слоев, то опять же можно легко обойтись без этого один слой (второй) обучается методов коррекции ошибки, а первый методом гамма подкрепления (обучение без учителя)

Вот Вам и притензии ...

P.S. "с чего взяли, что перцептрон линейный?" я такого ни когда не говорил, наоборот мне не раз заявляли, что перцептрон якобы не может решить задачу XOR





[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 26 июл 08 4:05
"Шуклин видимо когда вас сюда посылал имел ввиду Виктора Царегородцева. .
Так что... подождите, он наверняка вам доходчиво объяснит, в чем вы заблуждаетесь по нейронным сетям. (ну или я заблуждаюсь)"

Да, доходчиво мне давно не объясняли - ради этого буду ждать !!!
[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 26 июл 08 4:26
Вот, вроде сам немного переделал (добавил кнопку, которая устанавливает intr = 1;, т.е. после обучения снова тестируем с первого примера), то что и ожидалось:

Для примера первых 4 результата:

1. Требуем: 0,58 Сеть дает: 15,74 (во время обучения - 1 итерация в классическом смысле), 0,36 (после обучения)

2. 0,97 - (-28,3) - 0,18
3. 0,11 - (36,62) - (-0,06)
4. 0,4 - (-29,53) - 0,62

У Вас цифры могут отличатся, т.к. Вы зачем то всунули РНД, да еще так что на каждую загрузку разная сеть - получить стабильные результаты просто не возможно ...

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

[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 26 июл 08 4:30
"прогнать как я и говорил 10000 раз и при 3000 элементах среднего слоя"

Я надеюсь Вы понимаете, что это 10000 раз по 3000 раз (нажатий на Вашу кнопку Тест),
и не при 5 элементах, а при 3000 (а у Вас даже больше 100 поставить нельзя) ... Вот а когда Вы заснете ожидая результата, тогда уже поговорим не о теоритических притензиях, а о практических ...
[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 26 июл 08 4:54
Кстати,
не переваривают такой код
N[l, n] = l != outputLayer? F(sum) : sum;

Правильно я понимаю, что это тоже самое, что

if (l != outputLayer)
N[l, n] = F(sum);
else
N[l, n] = sum


Кстати, а почему такое отличие для второго и первого слоя, что получается, что сигмоида только в выходном нейроне, а в средних нейронах просто сумма ?
[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 26 июл 08 5:04
Да, и у Вас действительно, другой алгоритм ... это наверное все меняет ...

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

2. Ошибку вы считаете по раному для первого и второго слоя ....

Буду думать ...

в любом случае - огромное спасибо ...

[Ответ][Цитата]
daner
Сообщений: 4593
На: Обратное распространение ошибки
Добавлено: 26 июл 08 15:48
1. Я писал это полтора года назад. Думаете я помню почему я делал то или иное?
2. У меня было конкретное задание, изучать плохо предсказуемую статистическую функцию.
Причем изучать надо было ... типа в on-line. Отсюда и размер итерации только один пример и старт функции с РНД, так как иначе это уже был бы "мухлеж". А то что на кнопку надо 50 раз нажимать... так по-моему там и автоматическое нажимание было, впрочем я не помню.
3. Схождение сети всегда оценивается по тестовой группе, а не по обучаемой, так как нужно еще успеть остановиться при overfeeding-е, который можно заметить только по тестовой группе.
4. Да, сеть не 100% стандартная. НО, там есть еще один класс, который более стандартный (т.е. в нем все слои одинаковы).
В этой же реализации, выходной слой отличается от остальных. Он не имеет функции активации, т.е. она равна ID(x)=х, а дальше все по теории.
5. Сеть отлично сходилась даже с 5-ю нейронами внутреннего слоя. В конце концов, проектную статью с описанием параметров и результатов их влияния я вам тоже выслал.
Конечно она сходилась не по абсолютному значению, а по относительному. Причем меня устраивало схождение "средне арифметической ошибки", так что скачки не очень волновали.
Кроме того, до этого был еще один проект по распознаванию цифр и эта сеть работала на нем уже в более стандартном виде (каждая итерация прогон всей учебной группы и т.д.). Сходилась она тоже отлично.
6. Про код вы поняли правильно. То что вы это не перевариваете, меня не особо трогает.

7. При Розенблатте, на сколько я знаю, не было алгоритма обучения многослойной сети. А то что Минский писал о самом Перцептроне... так оно и есть. ХОR он в одиночку не изучает. Нужно несколько нейронов для этого.
8. Одного слоя сети "на все случае жизни" точно не хватит. Искать статьи с доказательством нет желания, это не моя область и не хочу на это время тратить. Но на мой взгляд, это очевидно (особенно из теоремы Колмогорова). О том что 3-ех слойная сеть с бесконечным слоем представляет любые непрерывные функции, было доказано (если не ошибаюсь) только в 88 году, каким-то японцем.
9. Для многослойной сети есть серьезные проблему с не деференцируемыми функциями. Очень сложно оценить ошибку, которая должна распространиться назад. Поэтому, я не совсем врубаюсь, как работает ваш алгоритм (но правда не читал его и не думаю что буду в ближайшее время). Честно признаюсь, с другими алгоритмами обучения сети, кроме пары разновидностей BP, я не знаком. Надо будет как-нибудь заняться и почитать о них.
[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 26 июл 08 19:28
Ответьте на простой вопрос: Многослойный перцептрон обученый по алгоритму обратного распространения должен (может) ли ОШИБАТЬСЯ (с определенной точностью) после обучения на обучаемой выборке ? Да или Нет ?

[Ответ][Цитата]
tac
Сообщений: 2601
На: Обратное распространение ошибки
Добавлено: 26 июл 08 19:30
"3. Схождение сети всегда оценивается по тестовой группе, а не по обучаемой"

Это полный бред ... Что в таком случае Вы называете схождение ?
[Ответ][Цитата]
 Стр.1 (5): [1]  2  3  4  5След. > >>