![]() |
|
Модераторы: Rickert |
![]()
|
|
| Deliverer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 12.6.2013 Репутация: нет Всего: нет |
Здравствуйте. Я захотел реализовать алгоритм обратного распространения. Вроде бы разобрался, закодил, но… Возникает ошибка следующего характера: после прогона всех образов обучающей выборки, начинаю проверку и подаю на вход сети снова, последовательно, образы обучающей выборки и происходит следующее: выход нейронов последнего скрытого слоя почти не изменяется и лежит в диапазоне желаемого выхода последней обучающей выборки + - 0,09.
Пример: Желаемый выход последней обучающей выборки 0, 64, Выходы при тесте - 0, 635, 0, 637, 0, 643 и т.д. В качестве учителя использовалась функция y=x^2. Было создано 9 примеров обучения. Сеть имела следующую конфигурацию: 1 вход, 3 скрытых слоя 4-5-1. Изменение числа слоев и увеличение количества нейронов до 1000 результата никакого не дали. Подозреваю, что накосячил в алгоритме, прошу меня перепроверить: 1. Произвожу прямой проход,нахожу локальное поле нейрона получаю выход нейрона. Активационная функция - экспоненциальный сигмоид. Когда рассчитаны все нейроны слоя, произвожу запись значений выходного слоя во входы нейронов следующего слоя. 2. Рассчитываю ошибку выходного слоя. Из требуемого значения вычитаю фактическое. Нахожу производную функции экспоненциального сигмоида. Считаю локальный градиент перемножением производной на ошибку. Получаю сумму перемножений всех входов нейрона на локальный градиент, и умножаю её на скорость коррекции =0,5(варьирование этого параметра не помогает) . Далее к каждому весу прибавляю значение коррекции. 3. Рассчитываю значение коррекции для оставшихся скрытых слоев, делаю следующее: Получаю сумму перемножений значений весовых коэффициентов синаптических связей входов нейронов следующего слоя, связанных с рассчитываемым нейроном, с локальным градиентом нейрона, вес входа которого беру. Если j –текущий слой, k- следующий, то Fsumm+=Wjk*Gradient Умножаю fsumm на производную активационной функции Получаю локальный градиент нейрона. 4. Получаю сумму перемножений всех входов нейрона на локальный градиент, и умножаю её на скорость коррекции =0,5(варьирование этого параметра не помогает) . Далее к каждому весу прибавляю значение коррекции. Непосредственной вычислительной ошибки, такой как банальная путаница в индексах массива у меня нет. Правильность расчетов я проверил. Очень прошу подать мне идеи для нахождения ошибки |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
имелось в виду последнего образа обучающей выборки? То есть вы проводите обучение сети после прогона каждого образа? Если я не ошибаюсь, то это не правильно. Нужно считать суммарную ошибку по всей выборке и только после прогона всех образов проводить обучение. Обучение проводить маленькими шагами, иначе вы будете прыгать по стенкам локального минимума. Думаю из-за того что вы проводите обучение после каждого образа, из-за этого и получается что сеть обучается на последнем поданном образе. |
|||
|
||||
| Deliverer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 12.6.2013 Репутация: нет Всего: нет |
Да, именно это и имею ввиду. Как я понял из книги Хайкина, такого не должно быть в независимости от типа обучения - последовательного или пакетного... |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
Вы видимо попадаете в локальный минимум из которого сеть не может выбраться. Попробуйте поменять порядок образов, сделать другую выборку, использовать пакетный способ обучения, уменьшить шаг обучения. Ну и если после этих манипуляций результата не будет, тогда можно думать дальше
|
|||
|
||||
| Deliverer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 12.6.2013 Репутация: нет Всего: нет |
Я попробовал функцию y=x+2 и получил в итоге тоже самое. Попробую, конечно, обучить в пакетном режиме, хотя большого смысла не вижу. |
|||
|
||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |