Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.06.2009, 14:29
гость

 
Сообщений: n/a

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

В итоге для каждой новой выборки подстраивается только ближайший к выходу слой, а остальные остаются как есть.

Это я так напортачил или это действительно проблема?

Потому что из формул для обычной сигмоиды получается:

F = 1/(1+exp(-NET))
NET = sum( W*x )
0 < F < 1

Для производной:

F' = exp(-NET)/(1+exp(-NET))^2 = F(1-F)
0 < F' < 0.25

Корректировка весов для n-ого слоя, ближнего к выходу:
sigma(n,i) = F'(n,i)*(F(n,i) - Target(i))
,где (n,i) означает i-ый нейрон в n-ом слое, для остальных слоев
sigma(k,i) = F'(k,i)*sum( W(k,i,j)*sigma(k+1,j), j = 1,I)
,где W(k,i,j) - веса между i-ым нейроном в k-ом слое i-ым и j-ым нейроном в (k+1)-ом, считаем, что в слое I нейронов

Пусть max(F(n,i)-Target(i)) = E и |F'| < C, тогда sigma(n,i) можно оценить как
|max(sigma(n))| < C*E

А для sigma(k,i) можно записать
|sigma(k,i)| < C*I*max(W)*|max(sigma(k+1))|

Пусть max(W) = w. Разматывая неравенство до |max(sigma(n))| получим
|sigma(k,i)| < (C*I*w)^(n-k)*C*E

Откуда следует что sigma в каждом следующем слое сжимается множетелем C*I*w. Так как вход на нейрон NET можно оценить как
|NET = sum( W(k,j,i)*x(j), j = 1,I )| < max(W)*I, т.е.
|NET| < I*w
То перепишем C*I*w, раскрыв C как
C*I*w = I*w*exp(-I*w)/(1+exp(-I*w))^2

Возьмем I*w = x и начертив G(x) = x*exp(-x)/(1+exp(-x))^2 получим что она достигает максимума в точке 1.618 (кстати, золотое сечение! ) и максимум равен 0.2 - то есть sigma всегда сжимается.

Отсюда получается что sigma лучше было бы домножать на 5, а для слоев шириной I подбирать веса в диапазоне
max|W| < 1.618/I

Есть ли тут ошибка?
  #2  
Старый 09.07.2009, 16:33
гость

 
Сообщений: n/a

с 1.618 и с 0.2 я погорячился, но значения где-то рядом
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема классификации Sapfeer Графы 2 23.02.2010 10:47
проблема реализации шифрования файлов Rsa Дмитрий Криптография 28 22.08.2009 15:14
Проблема со строками в с++ гость Реализация, исходники, языки 16 15.05.2009 15:14
Проблема при отображении скриптов Elder_Nosferatu Реализация, исходники, языки 3 26.12.2008 20:31
проблема с использованием русского алфавита в с++ elle Реализация, исходники, языки 9 17.03.2008 21:19