Нейроны в конкурентоспособном слое распределяют себя, чтобы распознать часто представляемые входные векторы.
Архитектуру для конкурентоспособной сети показывают ниже.
‖ dist
‖ окружает эту фигуру, принимает входной вектор p и входную матрицу IW1,1 веса, и производит вектор, имеющий элементы S1. Элементы являются отрицанием расстояний между входным вектором и векторами i IW1,1, сформированными из строк входной матрицы веса.
Вычислите сетевой вход n1 конкурентоспособного слоя путем нахождения отрицательного расстояния между входным вектором p и векторами веса и добавления смещений b. Если все смещения являются нулем, максимальный сетевой вход, который может иметь нейрон, 0. Это происходит, когда входной вектор p равняется вектору веса того нейрона.
Конкурентоспособная передаточная функция принимает сетевой входной вектор для слоя и возвращает нейрон выходные параметры 0 для всех нейронов за исключением победителя, нейрон, сопоставленный с самым положительным элементом сетевого входа n1. Вывод победителя равняется 1. Если все смещения 0, то нейрон, вектор веса которого является самым близким к входному вектору, имеет наименее отрицательный сетевой вход и, поэтому, выигрывает соревнование, чтобы вывести 1.
Причины использования смещений с конкурентоспособными слоями введены в Правиле Изучения Смещения (learncon).
Можно создать конкурентоспособную нейронную сеть с функциональным competlayer
. Простой пример показывает, как это работает.
Предположим, что вы хотите разделить следующие четыре двухэлементных вектора на два класса.
p = [.1 .8 .1 .9; .2 .9 .1 .8]
p = 0.1000 0.8000 0.1000 0.9000 0.2000 0.9000 0.1000 0.8000
Существует два вектора около источника и два вектора около (1,1).
Во-первых, создайте 2D нейрон конкурентоспособный слой.:
net = competlayer(2);
Теперь у вас есть сеть, но необходимо обучить ее делать задание классификации.
В первый раз, когда сеть обучена, ее веса будут инициализированный к центрам входных диапазонов с функциональным midpoint
. Можно проверять, смотрите, что эти начальные значения используют количество нейронов и входных данных:
wts = midpoint(2,p)
wts = 0.5000 0.5000 0.5000 0.5000
Эти веса являются действительно значениями в средней точке области значений (от 0 до 1) входных параметров.
Начальные смещения вычисляются initcon
, который дает
biases = initcon(2)
biases = 5.4366 5.4366
Вспомните, что каждый нейрон конкурирует, чтобы ответить на входной вектор p. Если смещения являются всем 0, нейрон, вектор веса которого является самым близким к p, получает самый высокий сетевой вход и, поэтому, выигрывает соревнование и выходные параметры 1. Все другие нейроны выводят 0. Вы хотите настроить нейрон победы, чтобы подвинуть его поближе к входу. Правило изучения сделать это обсуждено в следующем разделе.
Веса нейрона победы (строка входной матрицы веса) настроены с Kohonen, изучив правило. Если i th победы нейрона, элементы i th строка входной матрицы веса настроены как показано ниже.
Правило Kohonen позволяет весам нейрона изучать входной вектор, и из-за этого это полезно в приложениях для распознавания.
Таким образом нейрон, вектор веса которого был самым близким к входному вектору, обновляется, чтобы быть еще ближе. Результат состоит в том, что нейрон победы, более вероятно, выиграет соревнование в следующий раз, когда подобный вектор представлен, и менее вероятно победить, когда совсем другой входной вектор представлен. Когда все больше входных параметров представлено, каждый нейрон в слое, самом близком к группе входных векторов скоро, настраивает свой вектор веса к тем входным векторам. В конечном счете, если будет достаточно нейронов, каждый кластер подобных входных векторов будет иметь нейрон, что выходные параметры 1, когда вектор в кластере представлен при выводе 0 во все другие времена. Таким образом конкурентоспособная сеть учится категоризировать входные векторы, которые она видит.
Функциональный learnk
используется, чтобы выполнить Kohonen, изучая правило в этом тулбоксе.
Одно из ограничений конкурентоспособных сетей - то, что некоторые нейроны не могут всегда выделяться. Другими словами, некоторые векторы веса нейрона могут начаться далекий от любых входных векторов и никогда не выигрывать соревнование, неважно, сколько времени обучение продолжено. Результат состоит в том, что их веса не добираются, чтобы учиться, и они никогда не побеждают. Эти неудачные нейроны, называемые мертвыми нейронами, никогда не выполняют полезную функцию.
Чтобы остановить это, используйте смещения, чтобы дать нейроны, которые только редко выигрывают соревнование (если когда-либо) преимущество перед нейронами та победа часто. Положительное смещение, добавленное к отрицательному расстоянию, делает удаленный нейрон более вероятно, чтобы победить.
Чтобы сделать это задание, рабочее среднее значение нейрона выходные параметры сохранено. Это эквивалентно процентам времен, каждый вывод равняется 1. Это среднее значение используется, чтобы обновить смещения с функцией изучения learncon
так, чтобы смещения часто активных нейронов стали меньшими, и смещения нечасто активных нейронов становятся больше.
Когда смещения нечасто активных нейронов увеличиваются, входной пробел, на который те нейроны отвечают увеличения. Когда тот входной пробел увеличивается, нечасто активный нейрон отвечает и перемещается к большему количеству входных векторов. В конечном счете нейрон отвечает на то же количество векторов как другие нейроны.
Это имеет два хороших эффекта. Во-первых, если нейрон никогда не выигрывает соревнование, потому что его веса далеки от любого из входных векторов, его смещение в конечном счете становится достаточно большим так, чтобы он мог победить. Когда это происходит, это перемещается к некоторой группе входных векторов. Если веса нейрона переместились в группу входных векторов, и нейрон побеждает последовательно, его смещение уменьшится к 0. Таким образом проблема мертвых нейронов разрешена.
Второе преимущество смещений состоит в том, что они обеспечивают каждый нейрон, чтобы классифицировать примерно тот же процент входных векторов. Таким образом, если область входного пробела будет сопоставлена с большим числом входных векторов, чем другая область, более плотно заполненная область привлечет больше нейронов и будет классифицирована в меньшие подразделы.
Темпы обучения для learncon
обычно устанавливаются порядок величины или более меньшие, чем для learnk
, чтобы убедиться, что рабочее среднее значение точно.
Теперь обучите сеть в течение 500 эпох. Можно использовать или train
или adapt
.
net.trainParam.epochs = 500; net = train(net,p);
Обратите внимание на то, что train
для конкурентоспособных сетей использует учебный функциональный trainru
. Можно проверить это путем выполнения следующего кода после создания сети.
net.trainFcn
ans = trainru
В течение каждой эпохи все учебные векторы (или последовательности) каждый представлены однажды в различном произвольном порядке с сетью и весом и смещают значения, обновленные после каждого отдельного представления.
Затем, предоставьте исходные векторы, как введено к сети, моделируйте сеть, и наконец преобразуйте ее выходные векторы, чтобы классифицировать индексы.
a = sim(net,p); ac = vec2ind(a)
ac = 1 2 1 2
Вы видите, что сеть обучена, чтобы классифицировать входные векторы в две группы, тех около источника, класса 1, и тех близких (1,1), класса 2.
Может быть интересно посмотреть на итоговые веса и смещения.
net.IW{1,1}
ans = 0.1000 0.1500 0.8500 0.8500
net.b{1}
ans = 5.4367 5.4365
(Вы можете получить различные ответы, когда вы запускаете эту проблему, потому что случайный seed используется, чтобы выбрать порядок векторов, представленных сети для обучения.) Обратите внимание на то, что первый вектор (сформированный из первой строки матрицы веса) около входных векторов близко к источнику, в то время как вектор, сформированный из второй строки матрицы веса, близко к входным векторам около (1,1). Таким образом сеть была обучена — только путем представления его входным параметрам — чтобы классифицировать их.
Во время обучения каждый нейрон в слое, самом близком к группе входных векторов, настраивает свой вектор веса к тем входным векторам. В конечном счете, если существует достаточно нейронов, каждый кластер подобных входных векторов имеет нейрон, что выходные параметры 1, когда вектор в кластере представлен при выводе 0 во все другие времена. Таким образом конкурентоспособная сеть учится категоризировать вход.
Конкурентоспособные слои могут быть поняты лучше, когда их векторы веса и входные векторы показывают графически. Схема ниже показов 48 двухэлементных входных векторов представлена с маркерами +
.
Входные векторы выше, кажется, попадают в кластеры. Можно использовать конкурентоспособную сеть восьми нейронов, чтобы классифицировать векторы в такие кластеры.
Попробуйте democ1
, чтобы видеть динамический пример конкурентоспособного изучения.