Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование игр, графики и искусственного интеллекта > Обучение сети встречного распростронения


Автор: Devider 1.4.2014, 21:16
Я извиняюсь за дебильный вопрос, но уже вывихнул мозг.
В книге Уоссернама (стр 62, 3 абзац) http://neuronets.chat.ru/nets.html про обучение сетей встречного распространения (слоя Кохонена) написано, что есть алгоритм оптимизации под названием метод выпуклой комбинации, при котором все(!?!) веса задают равными 

Wi,j = 1/sqrt(n), 

где n - количество входов/компонент векторов. 
В дальнейшем предлагается каждой компоненте входного вектора Х делать

X i = A * Xi + (1-A)/sqrt(n),

где A очень мало и в процессе обучения увеличивается.

Как же искать нейрон-победитель для обучения? Ведь если все веса всех нейноров равны, то и на выходе у всех будет одно и то же значение!

Автор: Mirkes 3.4.2014, 16:13
Круто! Думаю Кохонен бы уржался smile
Меня всегда восхищала полная математическая безграмотность Уосермана:
"Предварительная обработка входных векторов
Весьма желательно (хотя и не обязательно) нормализовать входные векторы перед тем, как предъявлять их сети. Это выполняется с помощью деления каждой компоненты входного вектора на длину вектора. Эта длина находится извлечением квадратного корня из суммы квадратов компонент вектора."

Любой, сколько-нибудь грамотный человек понимает, что нормировка, о которой идет речь, проецирует данные на гиперсферу, тем самым снижая размерность и КАК ПРАВИЛО уничтожая часть информации.

Теперь по делу.

Сначала У предлагает сделать все нейроны Кохонена одинаковыми и все входные сигналы почти одинаковыми.
Далее начинается обучение.
Если победитель определен однозначно - отлично учим и идем дальше.
Если победителей несколько (в начальный момент - все),  то выбираем ЛЮБОГО из победителей и учим его.
Идея очень простая - сначала предлагается свалить все в одну кучу и позволить векторам данных растаскивать нейроны из одной точки. В принципе идея должна работать, хотя времена обучения должны быть большими.
Грубо говоря делаете пару эпох с очень маленьким а. Потом постепенно его увеличиваете (скажем процентов на 10 за эпоху). Через некоторое количество эпох забываете об этом коэффициенте совсем (делаете равным 1).

Однако про обучение сетей КОхонена я бы рекомендовал почитать работы самого Кохонена. Там и алгоритмы боле шустрые описаны.

Автор: Mirkes 3.4.2014, 16:33
Пожалуй предыдущий пост получился слишком эмоциональным.
Сначала первый комментарий: то что в рассматриваемой вами главе называют слоем Кохонена широко известно под названием k средних (k means). Так что лучше поискать описание того как учить по этим названиям.

Теперь по поводу безграмотности Уосесрмана.  На рисунке ниже приведены данные, включающие три четко разделенных облака точек 1, 2 и 3. Нулем обозначено начало координат. Если произвести нормировку, рекомендованную автором книги, то мы получим одно облако, размазанное по всей сфере (второй рисунок). Как вы полагаете, сможет любая нейронная сеть (включая человека) разделить после этого облака данных? На втором рисунке буквой z обозначена смесь точек 1 и 2, а буквой w - смесь 2 и 3.



1  1  1           2 2 2          3 3 3
1  1  1           2 0 2          3 3 3
1  1  1           2 2 2          3 3 3


                    z 2 w
                    z 0 w
                    z 2 w

Автор: Devider 11.4.2014, 14:46
Спасибо (сорри, несколько зарпоздавшее) за объяснения!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)