![]() |
|
![]() ![]() ![]() |
|
gmkraprike |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.11.2008 Репутация: нет Всего: нет |
Добрый день. Уровень моего вопроса весьма примитивен, однако, он остается вопросом.
В книге Р.Каллана встречается задача обучения одного нейрона: ЗАДАЧА: Обучив нейрон на входящих образцах (x,y), найти прямую, для которой сумма квадратов ошибок для всех точек будет наименьшей. Ошибкой является расстояние от точки до прямой. Убедиться в том, что найденная прямая будет почти идентичная прямой, найденной методом наименьших квадратов. ДАНО: 1) Набор точек x=[0.30,0.35,0.40,0.50,0.60,0.80,0.95,1.10]; y=[1.60,1.40,1.40,1.60,1.70,2.00,1.70,2.10]; 2) Нейрон с линейной активностью, с двумя входами: “x” и “1” с соответствующими весами “m” и “c” (параметры уравнения прямой); и одним выходом “y”. Начальные коэффициенты m=0.5 , c=0.5; 3) Правило обучение берется Видроу-Хоффа(дельта-правило) с нормой обучения 0.3 4) Замечание, что “обучение закончится после рассмотрения каждой точки 10000 раз”. МОЙ ВОПРОС: На первом графике ниже я вывел все 8 линий, проходящие через набор точек. Данный расклад соответствует 1ой эпохе. Линия, найденная методом наименьших квадратов (m=0.7172 c=1.2392) находится почти тютелька в тютельку на линии 4. По прошествии ~70 эпох веса перестали настраиваться и стали равны Line m c 1 0.9116 1.3229 2 0.8374 1.1109 3 0.8228 1.0744 4 0.8668 1.1624 5 0.8729 1.1726 6 0.9338 1.2486 7 0.7176 1.0210 8 0.8599 1.1504 Как мы видим: 1) Только прямая №7 очень приблизительно похожа на искомую. Вопрос: По какому результату оценивать работы сети? 2) Нет единого ответа НС. Насколько я понимаю, в конце обучения m и c должны “устояться” в одном лице. Вопрос: Как же m и c могут устояться, если процедура обучения (в итерации) отдельной прямой не закончится, пока она не подтянет прямую вплотную к себе (к рассматриваемой точке (x/y)) от прямой предыдущей итерации? То есть даже, когда на больших эпохах изменения перестанут происходить, прямые все равно будет проходить через свои точки, что мы и видим на втором графике. График 1 (Эпоха 1) ![]() *********** График 2 (Эпоха 70) ![]() PS Ссылка на мою matlab процедуру http://webfile.ru/2378609 |
|||
|
||||
dereyly |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 217 Регистрация: 16.6.2006 Репутация: 1 Всего: 4 |
Может быть у вас ошибка в понимание что нейронная сеть как и МНК адаптируется к набору точек.... для НС не существует 8 вариантов решения а есть только 1 варинат когда НС адаптируется ко всем примерам... если приводить пример из вашего кода, то вместо
должно быть как-то так
Это сообщение отредактировал(а) dereyly - 11.11.2008, 17:52 |
||||
|
|||||
gmkraprike |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.11.2008 Репутация: нет Всего: нет |
Добрый вечер.
"для НС не существует 8 вариантов решения а есть только 1 варинат когда НС адаптируется ко всем примерам" Вот этого я и жду от НС. В итоге обучения, насколько я понимаю, параметры (веса) должны стабилизироваться на чем то одном (для всех входов). У меня же они получились разными, для каждого входа. PS А то, что вы предложили с кодом - ситуация следующая: Данный код покажет "m" и "с" последней прямой, проходящей через точку с номером 8. Но ведь, остальные прямые (проходящие через остальные точки) будут (факт!) при своих "m" и "с", отличных от последней прямой. Как быть? Это сообщение отредактировал(а) gmkraprike - 11.11.2008, 18:13 |
|||
|
||||
dereyly |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 217 Регистрация: 16.6.2006 Репутация: 1 Всего: 4 |
Еще раз посмотрел на ваш код
В процедуре обучения вы пытаетесь адаптироваться к ОДНОМУ примеру, что неправильно... НС во время своей работы обучается на всем множестве и качество обучение определяется среднеквадратичной ошибкой по ВСЕМ примерам |
|||
|
||||
gmkraprike |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.11.2008 Репутация: нет Всего: нет |
dereyly, если у вас еще остались нервы, пожалуйста, укажите еще раз (по возможности подробнее) на ту грань, которую я до сих пор не вижу, ибо не понимаю физическую часть того момента, о котором вы говорите в последнем посте. Для меня сейчас стадия обучения( весов) НС включается, когда к ней приходит очередной входной вектор. И, действительно, момента знаменитого обобщения НС в такой картине я не вижу.
Если вас не затруднит - внесите ясность. PS Литературой я располагаю, но на этот вопрос-"стенку",ответа я не нашел. |
|||
|
||||
dereyly |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 217 Регистрация: 16.6.2006 Репутация: 1 Всего: 4 |
Ну если рассмотреть ваш код
то неправильно в данном случае пытаться ошибку для одного примера сделать почти нулевой, единственное чего вы добьетесь это прямая будет проходить через данную точку т.е. ЦИКЛ этот нужно удалить ну и коэффициент обучения сделать поменьше, к примеру 0.03 после этого обучение должно заработать среднеквадратичная ошибка которую мы уменьшаем с помощью правила Видроу-Хоффа можно записать так
где bl это ошибка конкретного примера, а b среднеквадратичная *ф-ия ind=randperm(length(x)); это тоже самое что и for i=1:8 но рандомно как несложно понять что НС с одним элементом не достигнет наперед заданной точности 0.005 а достигнет лишь ошибки выдаваемой МНК... и из графика hist это видно... так же можно как критерий остановки выбрать неизменность ошибки |
||||
|
|||||
VictorTsaregorodtsev |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 3 Всего: 8 |
gmkraprike
русским языком, ибо далек от матлаба: 1. Обучение - два цикла, внешний - по числу эпох (до 10000 или иного числа, или пока не будет достигнута нужная суммарная/средняя по примерам ошибка), а внутренний - по числу примеров (в данном случае - до 8). 2. Коэффициент обучения я бы не до 0.03, а еще на пару порядков снизил ;) 3. Коэффициент обучения можно прикинуть (да и для проверки правильности проги это тоже подойдет), обучая какой-либо единственный пример - квадрат его ошибки должен сходиться до 10^-6 - 10^-8 и менее без особых проблем, при запуске с разными начальными весами синапсов сети (особо отмечаю - прогу надо несколько раз протестировать на рандомных коэффициентах, а не просто на паре 0.5, 0.5, как у Вас в первом посте). Если обучение не сходится, начинает скакать вокруг более высокого уровня, то надо уменьшать коэффициент и/или проверять заново всю прогу на корректность. В одну единственную точку ответ сети должен вставать сколь угодно точно и при этом намертво. 4. Во второй раз повторяю (см. п.1) и тут уже говорилось, что не стоит учить до упора единственный пример и потом переходить к другому - сетка должна видеть все примеры (т.е. перебирать один за другим) и иметь достаточно малый коэффициент обучения, чтобы обучение одному примеру НЕ СЛОМАЛО навык решения предыдущих. 5. Указанные в первом посте точки-эталоны требуют нормировки (нормализации). Если у Каллана ничего об этом нет - то Каллана в топку, однозначно! ЗЫ. На форуме бываю редко, чисто ради саморекламы. Поэтому вопросы можно не задавать ![]() |
|||
|
||||
gmkraprike |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.11.2008 Репутация: нет Всего: нет |
Господа, очень признателен за вашу выдержку и детальность в объяснении - большая пища для дальнейшего разбора.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |