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
След. >
>>
Главная
|
Материалы
|
Справочник
|
Гостевая книга
|
Форум
|
Ссылки
|
О сайте
Вопросы и замечания направляйте нам по
Copyright © 2001-2022, www.gotai.net