Кластер с конкурентоспособной нейронной сетью

Нейроны в конкурентоспособном слое распределяют себя, чтобы распознать часто представляемые входные векторы.

Архитектура

Архитектуру для конкурентоспособной сети показывают ниже.

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 изучение правила (learnk)

Веса нейрона победы (строка входной матрицы веса) настроены с Kohonen, изучив правило. Если i th победы нейрона, элементы i th строка входной матрицы веса настроены как показано ниже.

IiW1,1(q)=IiW1,1(q1)+α(p(q)IiW1,1(q1))

Правило Kohonen позволяет весам нейрона изучать входной вектор, и из-за этого это полезно в приложениях для распознавания.

Таким образом нейрон, вектор веса которого был самым близким к входному вектору, обновляется, чтобы быть четным ближе. Результат состоит в том, что нейрон победы, более вероятно, выиграет соревнование в следующий раз, когда подобный вектор представлен, и менее вероятно победить, когда совсем другой входной вектор представлен. Когда все больше входных параметров представлено, каждый нейрон в слое, самом близком к группе входных векторов скоро, настраивает свой вектор веса к тем входным векторам. В конечном счете, если будет достаточно нейронов, каждый кластер подобных входных векторов будет иметь нейрон, что выходные параметры 1, когда вектор в кластере представлен при выводе 0 во все другие времена. Таким образом конкурентоспособная сеть учится категоризировать входные векторы, которые она видит.

Функция learnk используется, чтобы выполнить Kohonen, изучая правило в этом тулбоксе.

Сместите изучение правила (learncon)

Одно из ограничений конкурентоспособных сетей - то, что некоторые нейроны не могут всегда выделяться. Другими словами, некоторые векторы веса нейрона могут начаться далекий от любых входных векторов и никогда не выигрывать соревнование, неважно, сколько времени обучение продолжено. Результат состоит в том, что их веса не добираются, чтобы учиться, и они никогда не побеждают. Эти неудачные нейроны, называемые мертвыми нейронами, никогда не выполняют полезную функцию.

Чтобы остановить это, используйте смещения, чтобы дать нейроны, которые только редко выигрывают соревнование (если когда-либо) преимущество перед нейронами та победа часто. Положительное смещение, добавленное к отрицательному расстоянию, делает удаленный нейрон более вероятно, чтобы победить.

Чтобы сделать это задание, рабочее среднее значение нейрона выходные параметры сохранено. Это эквивалентно процентам времен, каждый выход равняется 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 двухэлементных входных векторов представлена + маркеры.

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

Попробуйте Конкурентоспособное Обучение видеть динамический пример конкурентоспособного изучения.