Нейрокомпьютерные вычисления на основе самоорганизующейся карты Кохонена

Нейросетевые технологии, история возникновения нейронных сетей. Основные виды и применение искусственных нейронных сетей. Самоорганизующаяся карта Кохонена, задачи, решаемые с ее помощью. Создание компьютерной имитационной модели нейронной сети Кохонена.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 12.01.2012
Размер файла 2,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Идея сети Кохонена принадлежит финскому ученому Тойво Кохонену (1982 год). Основной принцип работы сетей - введение в правило обучения нейрона информации относительно его расположения.[7]

В основе идеи сети Кохонена лежит аналогия со свойствами человеческого мозга. Кора головного мозга человека представляет собой плоский лист и свернута складками. Таким образом, можно сказать, что она обладает определенными топологическими свойствами (участки, ответственные за близкие части тела, примыкают друг к другу и все изображение человеческого тела отображается на эту двумерную поверхность).

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

Наиболее распространенное применение сетей Кохонена - решение задачи классификации без учителя, т.е. кластеризации.[29]

Напомним, что при такой постановке задачи нам дан набор объектов, каждому из которых сопоставлена строка таблицы (вектор значений признаков). Требуется разбить исходное множество на классы, т.е. для каждого объекта найти класс, к которому он принадлежит. В результате получения новой информации о классах возможна коррекция существующих правил классификации объектов.

Сеть Кохонена при разведочном анализе данных способна распознавать кластеры в данных, а также устанавливать близость классов. Таким образом, пользователь может улучшить свое понимание структуры данных, чтобы затем уточнить нейросетевую модель. Если в данных распознаны классы, то их можно обозначить, после чего сеть сможет решать задачи классификации. Сети Кохонена можно использовать и в тех задачах классификации, где классы уже заданы, - тогда преимущество будет в том, что сеть сможет выявить сходство между различными классами.

Сеть Кохонена при обнаружение новых явлений распознает кластеры в обучающих данных и относит все данные к тем или иным кластерам. Если после этого сеть встретится с набором данных, непохожим ни на один из известных образцов, то она не сможет классифицировать такой набор и тем самым выявит его новизну.[7]

Карты Кохонена применяются в основном, для двух целей. Первая из них - наглядное упорядочивание многопараметрической информации. На практике обычно используются одномерные и двумерные карты. Кластеры, задаваемые узлами карты, содержат группы в некотором смысле похожих наблюдений, которым может быть приписан групповой семантический смысл. Одним из новых эффективных применений сети Кохонена является построение тематической карты электронных сообщений в глобальных компьютерных сетях. При помощи такой карты пользователь получает возможность свободной навигации в бесконечном потоке сообщений, в соответствии с индивидуальным кругом интересов. В применении к моделированию технических систем, карты Кохонена могут использоваться для выявления различий в режимах поведения системы, при этом могут выявляться аномальные режимы. Важно, что при этом могут быть обнаружены неожиданные скопления близких данных, последующая интерпретация которых пользователем может привести к получению нового знания об исследуемой системе.[6]

Вторая группа технических применений связана с предобработкой данных. Карта Кохонена группирует близкие входные сигналы X, а требуемая функция Y=G(X) строится на основе применения обычной нейросети прямого распространения (например, многослойного персептрона или линейной звезды Гроссберга) к выходам нейронов Кохонена. Такая гибридная архитектура была предложена Р. Хехт-Нильсеном, она получила название сети встречного распространения. Нейроны слоя Кохонена обучаются без учителя, на основе самоорганизации, а нейроны распознающих слоев адаптируются с учителем итерационными методами. При использовании линейных выходных нейронов значения их весов могут быть получены безитерационно, непосредственным вычислением псевдо-обратной матрицы по Муру-Пенроузу.

Сеть встречного распространения, являющаяся развитием сети Кохонена, дает кусочно-постоянное представление модели Y=G(X), поскольку при вариации вектора X в пределах одного кластера на слое соревнующихся нейронов Кохонена возбуждается один и тот же нейрон-победитель. В случае сильно зашумленных данных, такое представление обладает хорошими регуляризирующими свойствами. При этом процедура обучения сети встречного распространения заметно быстрее, чем, например, обучение многослойного персептрона стандартным методом обратного распространения ошибок [11].

Другой альтернативой традиционным многослойным моделям является переход к нейросетям простой структуры, но с усложненными процессорными элементами. В частности, можно рассмотреть нейроны высоких порядков, активирующим сигналом для которых является взвешенная сумма входов, их попарных произведений, произведений троек и т.д., вплоть до порядка k.

Каждый процессорный элемент k-го порядка способен выполнить не только линейное разделение областей в пространстве входов, но также и произвольное разделение, задаваемое полилинейной функцией нескольких аргументов. Семейство решающих правил, определяемых нелинейным нейроном значительно богаче, чем множество линейно разделимых функций. На рисунке 9 приведен пример решающего правила, задаваемого одним нейроном второго порядка, для классической линейно неразделимой задачи "исключающее ИЛИ".[14]

Рисунок 9. - Решающее правило для задачи "исключающее ИЛИ".

Важным достоинством нейронов высокого порядка является возможность строить нейросетевые модели без скрытых слоев, воспроизводящие широкий класс функций. Такие нейроархитектуры не требуют длительного итерационного обучения, оптимальные веса даются решением уравнений регрессии. Другой отличительной чертой является возможность эффективной аппаратной (электронной или оптической) корреляций высокого порядка.[7] Так, например, существуют нелинейные среды, оптические свойства которых определяются полиномиальной зависимостью от амплитуды электрического поля световой волны. Потенциально, устройства, основанные на таких средах, могут обеспечить высокие скорости вычислений со свойственной оптическим компьютерам супер-параллельностью вычислений.

2.3 Технология самообучения нейронной сети Кохонена

Сеть Кохонена, в отличие от многослойной нейронной сети, очень проста; она представляет собой два слоя: входной и выходной. Ее также называют самоорганизующей картой. Элементы карты располагаются в некотором пространстве, как правило, двумерном. Сеть Кохонена изображена на рисунке 10.[6]

Рисунок 10. - Сеть Кохонена.

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

Предварительная обработка входных векторов. Весьма желательно (хотя и не обязательно) нормализовать входные векторы перед тем, как предъявлять их сети. Это выполняется с помощью деления каждой компоненты входного вектора на длину вектора. Эта длина находится извлечением квадратного корня из суммы квадратов компонент вектора. В алгебраической записи:[7]

Эта формула превращает входной вектор в единичный вектор с тем же самым направлением, т. е. в вектор единичной длины в n-мерном пространстве. Она обобщает хорошо известный случай двух измерений, когда длина вектора равна гипотенузе прямоугольного треугольника, образованного его х и у компонентами, как это следует из известной теоремы Пифагора. На рисунке 10(а) такой двумерный вектор V представлен в координатах х-у, причем координата х равна четырем, а координата y - трем. Квадратный корень из суммы квадратов этих компонент равен пяти. Деление каждой компоненты вектора V на пять дает вектор V с компонентами 4/5 и 3/5, где V указывает в том же направлении, что и V, но имеет единичную длину.

На рисунке 10(б) показано несколько единичных векторов. Они оканчиваются в точках единичной окружности (окружности единичного радиуса), что имеет место, когда у сети лишь два входа. В случае трех входов векторы представлялись бы стрелками, оканчивающимися на поверхности единичной сферы. Эти представления могут быть перенесены на сети, имеющие произвольное число входов, где каждый входной вектор является стрелкой, оканчивающейся на поверхности единичной гиперсферы (полезной абстракцией, хотя и не допускающей непосредственной визуализации).

а) б)

Рисунок 10. - (а) - единичный входной вектор, (б) - двумерные единичные векторы на единичной окружности

При обучении слоя Кохонена на вход подается входной вектор и вычисляются его скалярные произведения с векторами весов, связанными со всеми нейронами Кохонена. Нейрон с максимальным значением скалярного произведения объявляется «победителем» и его веса подстраиваются. Так как скалярное произведение, используемое для вычисления величин NET, является мерой сходства между входным вектором и вектором весов, то процесс обучения состоит в выборе нейрона Кохонена с весовым вектором, наиболее близким к входному вектору, и дальнейшем приближении весового вектора к входному. Снова отметим, что процесс является самообучением, выполняемым без учителя. Сеть самоорганизуется таким образом, что данный нейрон Кохонена имеет максимальный выход для данного входного вектора. Уравнение, описывающее процесс обучения имеет следующий вид:

wн = wс + (x - wс),

где wн - новое значение веса, соединяющего входную компоненту х с выигравшим нейроном; wс - предыдущее значение этого веса; - коэффициент скорости обучения, который может варьироваться в процессе обучения.[31]

Каждый вес, связанный с выигравшим нейроном Кохонена, изменяется пропорционально разности между его величиной и величиной входа, к которому он присоединен. Направление изменения минимизирует разность между весом и его входом.

На рисунке 11 этот процесс показан геометрически в двумерном виде. Сначала находится вектор X - Wс, для этого проводится отрезок из конца W в конец X. Затем этот вектор укорачивается умножением его на скалярную величину , меньшую единицы, в результате чего получается вектор изменения д. Окончательно новый весовой вектор Wн является отрезком, направленным из начала координат в конец вектора д. Отсюда можно видеть, что эффект обучения состоит во вращении весового вектора в направлении входного вектора без существенного изменения его длины.

Переменная б является коэффициентом скорости обучения, который вначале обычно равен ~ 0,7 и может постепенно уменьшаться в процессе обучения. Это позволяет делать большие начальные шаги для быстрого грубого обучения и меньшие шаги при подходе к окончательной величине.

Если бы с каждым нейроном Кохонена ассоциировался один входной вектор, то слой Кохонена мог бы быть обучен с помощью одного вычисления на вес. Веса нейрона-победителя приравнивались бы к компонентам обучающего вектора ( = 1).

Рисунок 11. - Вращение весового вектора в процессе обучения (WH - вектор новых весовых коэффициентов, Wс - вектор старых весовых коэффициентов)

Как правило, обучающее множество включает много сходных между собой входных векторов, и сеть должна быть обучена активировать один и тот же нейрон Кохонена для каждого из них. В этом случае веса этого нейрона должны получаться усреднением входных векторов, которые должны его активировать. Постепенное уменьшение величины уменьшает воздействие каждого обучающего шага, так что окончательное значение будет средней величиной от входных векторов, на которых происходит обучение. Таким образом, веса, ассоциированные с нейроном, примут значение вблизи «центра» входных векторов, для которых данный нейрон является «победителем».[32]

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

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

Допустим, что имеется несколько множеств входных векторов, все множества сходные, но должны быть разделены на различные классы. Сеть должна быть обучена активировать отдельный нейрон Кохонена для каждого класса. Если начальная плотность весовых векторов в окрестности обучающих векторов слишком мала, то может оказаться невозможным разделить сходные классы из-за того, что не будет достаточного количества весовых векторов в интересующей нас окрестности, чтобы приписать по одному из них каждому классу входных векторов.[31]

Наоборот, если несколько входных векторов получены незначительными изменениями из одного и того же образца и должны быть объединены в один класс, то они должны включать один и тот же нейрон Кохонена. Если же плотность весовых векторов очень высока вблизи группы слегка различных входных векторов, то каждый входной вектор может активировать отдельный нейрон Кохонена. Это не является катастрофой, так как слой Гроссберга может отобразить различные нейроны Кохонена в один и тот же выход, но это расточительная трата нейронов Кохонена.

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

Одно из решений, известное под названием метода выпуклой комбинации, состоит в том, что все веса приравниваются одной и той же величине:

,

где п - число входов и, следовательно, число компонент каждого весового вектора. Благодаря этому все весовые векторы совпадают и имеют единичную длину. Каждой же компоненте входа Х придается значение

,

где п - число входов. В начале очень мало, вследствие чего все входные векторы имеют длину, близкую к , и почти совпадают с векторами весов. В процессе обучения сети постепенно возрастает, приближаясь к единице. Это позволяет разделять входные векторы и окончательно приписывает им их истинные значения. Весовые векторы отслеживают один или небольшую группу входных векторов и в конце обучения дают требуемую картину выходов. Метод выпуклой комбинации хорошо работает, но замедляет процесс обучения, так как весовые векторы подстраиваются к изменяющейся цели. Другой подход состоит в добавлении шума к входным векторам. Тем самым они подвергаются случайным изменениям, схватывая в конце концов весовой вектор. Этот метод также работоспособен, но еще более медленен, чем метод выпуклой комбинации.[31]

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

Еще один метод наделяет каждый нейрон Кохонена «Чувством справедливости». Если он становится победителем чаще своей законной доли времени (примерно , где k - число нейронов Кохонена), он временно увеличивает свой порог, что уменьшает его шансы на выигрыш, давая тем самым возможность обучаться и другим нейронам.

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

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

В методе интерполяции целая группа нейронов Кохонена, имеющих наибольшие выходы, может передавать свои выходные сигналы в слой Гроссберга. Число нейронов в такой группе должно выбираться в зависимости от задачи, и убедительных данных относительно оптимального размера группы не имеется. Как только группа определена, ее множество выходов NET рассматривается как вектор, длина которого нормализуется на единицу делением каждого значения NET на корень квадратный из суммы квадратов значений NET в группе. Все нейроны вне группы имеют нулевые выходы.[14]

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

Метод обучения Кохонена обладает полезной и интересной способностью извлекать статистические свойства из множества входных данных. Как показано Кохоненом [7], для полностью обученной сети вероятность того, что случайно выбранный входной вектор (в соответствии с функцией плотности вероятности входного множества) будет ближайшим к любому заданному весовому вектору, равна , где k - число нейронов Кохонена. Это является оптимальным распределением весов на гиперсфере. (Предполагается, что используются все весовые векторы, что имеет место лишь в том случае, если используется один из обсуждавшихся методов распределения весов.)

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

Другое принципиальное отличие карт Кохонена от других моделей нейронных сетей - иной подход к обучению, а именно - неуправляемое или неконтролируемое обучение.[32] Этот тип обучения позволяет данным обучающей выборки содержать значения только входных переменных. Сеть Кохонена учится понимать саму структуру данных и решает задачи кластеризации.

Глава 3. Компьютерная имитационная модель нейронной сети

Кохонена

3.1 Ограничения, накладываемые на имитационную модель

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

К ограничениям, накладываемым на компьютерную модель программы, можно отнести тот факт, что сеть имеет только два слоя.

Большое количество нейронов в скрытых слоях обеспечивают большую емкость сети. В данной программе в скрытом слое располагается четыре нейрона, поэтому классифицирующие возможности сети составляют четыре класса. Каждый нейрон имеет по 25 входов и связан с 25-ю входами сети в целом (нулевой слой)

Так же к ограничениям относится тот факт, что в программе можно использовать до ста нейронов. Это ограничение возникает за счет логических размеров дисплея 1024х768 (нет возможности разместить большее число нейронов).

Динамический диапазон входов и выходов задается от -0,5 до 0,5, это улучшает характеристики обучаемой сети за счет того, что при двоичных входных векторах половина входов в среднем будет равна 0, и веса, с которыми они связаны, не будут обучатся. В данном случае эта проблема решена с учетом изменения входных и выходных значений и добавлении смещения к сжимаемой функции, чтобы она так же принимала значение 0,5. Программа разработана для операционной системы Windows и требует для своей работы компьютер архитектуры X86 класса Pentium.

3.2 Реализация имитационной модели нейронной сети Кохонена в виде

компьютерной программы

В программе «Kohonen», моделирующей самоорганизующуюся карту Кохонена, сеть обучается методом «Победитель забирает все».

Каждый нейрон сети имеет нелинейную функцию активации. В данной программе используется сигмоидальная функция активации:

function TNeuron.act:real;

begin

act:=-0.5+1/(1+exp(-alpha*s));

end;

Наличие нелинейности играет очень важную роль, так как в противном случае отображение «входов - выходов» сети можно свести к обычному однослойному персептрону.

В программе обучение, путем метода Кохонена, представлено процедурой Learn:

procedure TForm1.Learn_btnClick(Sender: TObject);

var i,winner:integer;

begin

Work_btnClick(self);

winner:=koh;

for i:=1 to nrn[winner].ndendro do

nrn[winner].w[i]:=nrn[winner].w[i]+koh_a*(nrn[winner].x[i]-nrn[winner].w[i]);

FormPaint(self);

end;

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

Для функционирования процесса обучения необходима процедура Tick:

procedure TNeuron.tick;

var i:integer;

begin

s:=0; for i:=1 to ndendro do s:=s+x[i]*w[i];

a:=act;

end;

3.3 Описание сеанса работы с компьютерной программой

Разработанная программа по обучению двухслойной сети методом Кохонена имеет вид:

Рисунок 12. - Внешний вид программы «Kohonen»

Управление программой осуществляется четырьмя кнопками:

- генерация случайного входного образа;

- нормирование входного образа;

- обычное функционирование (прямой проход);

- обучение (корректировка весов) нейронов сети.

Реакция программы на нажатие кнопок показана на рисунках 13 - 16.

Рисунок 13. - Результат нажатия на кнопку RND

Рисунок 14. - Результат нажатия на кнопку Norm

Рисунок 15. - Результат нажатия на кнопку Work

Рисунок 16. - Результат нажатия на кнопку Learn

Заключение

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

Широкое применение нейронных сетей дало науке новый метод работы с информацией - «добычу данных» - то есть искусство работы с информацией, построенное на поиске и отборе полезной информации и выявление существующих закономерностей.

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

Цель данной дипломной работы была достигнута, т.е. реализована работа компьютерной имитационной модели нейронной сети Кохонена с удобным графическим пользовательским интерфейсом. Программа «Kohonen» решает задачу выявления скрытых закономерностей в входных наборах данных. Программа носит скорее демонстрационный, чем практический характер и, поэтому, может использоваться только в учебных целях.

Поставленные задачи при выполнении квалификационной работы были полностью реализованы: 1) изучена история, основные виды, свойства, обучение и применение искусственных нейронных сетей; 2) подробно рассмотрены примеры задач, которые решаются при помощи нейронной сети Кохонена (приведены конкретные примеры); 3) создана компьютерная имитационная модель, моделирующая самоорганизующуюся карту Кохонена (представлен сеанс работы программы).

Библиографический список используемой литературы

1. Боровиков В.П. Ивченко Г.И. Нейронные сети. STATISTICA Neural Networks. Пер. с англ. - М.: Радио и связь, 2000.

2. Вороновский Г.К., Махотило К.В., Сергеев С.А., Петрашев С.Н. Генетические алгоритмы, искусственные нейронные сети и проблемы виртуальной реальности. Х: Основа - 1997.

3. Головко В.А. Нейроинтеллект: Теория и применения. Книга 1. Организация и обучение нейронных сетей с прямыми и обратными связями - Брест:БПИ, 1999.

4. Горбань А., Д. Россиев. Нейронные сети на персональном компьютере. //Новосибирск: Наука, 1996.

5. Горбань А.Н., В.Л. Дунин-Барковский, А.Н. Кирдин и др. Нейроинформатика - Новосибирск: Наука. Сибирское предприятие РАН, 1998.

6. Горбунов А. Применение самоорганизующихся карт в бизнесе и финансах. «Банковские Технологии», №4 1999.

7. Дебок Г., Кохонен Т., Анализ финансовых данных с помощью самоорганизующихся карт / Пер. с англ. - М.: «Альпина», 2001.

8. Дуда Р. Харт П. Распознавание образов и анализ сцен. - М.: Мир, 1976.

9. Дунин-Барковский В.Р. Нейрокомпьютер - Новосибирск. «Наука». Сибирская издательская фирма РАН, 1998.

10. Ежов А.А., Шумский С.А. Нейрокомпьютинг и его применения в экономике и бизнесе. М:1998.

11. Короткий С. "Нейронные сети: Алгоритм обратного распространения" 1992.

12. Короткий С. "Нейронные сети: Основные положения" , 1994.

13. Круглов В.В., Дли М.И., Голунов Р.Ю. Нечеткая логика и искусственные нейронные сети: Учебное пособие. - М.: Издательство Физико-математической литературы, 2001.

14. Медведев В.С. Потемкин В.Г. Нейронные сети. MATLAB 6, под ред. В.Г. Потемкина - М.: Диалог - МИФИ, 2002.

15. Минаев Ю.Н. Филимонова О.Ю. Бенамеур Лиес. Методы и алгоритмы решения задач идентификации в условиях неопределенности в нейросетевом логическом базисе. - М.: Горячая линия - Телеком, 2003.

16. Минский М., Пейперт С. Персептроны. М.: МИР, 1971.

17. Осовский С. Нейронные сети для обработки информации. Пер. с польского - М.: Финансы и статистика, 2002.

18. Попов Э.В. Искусственный интеллект: в 3-х книгах. Системы общения и экспертные системы - М: Радио и связь, 1990.

19. Потемкин В.Г. Система инженерных и научных расчетов MATLAB 5.x, - в 2-х т. - М.: Диалог - МИФИ, 1999.

20. Розенблат Ф. Принципы нейродинамики.// М.: МИР, 1965.

21. Сизиков В.С. Устойчивые методы обработки результатов измерений. С-Петербург, 1999.

22. Сотник С.Л. Конспект лекций по курсу "основы проектирования систем искусственного интеллекта". М: 1998.

23. Стариков А. Нейронные сети как средство добычи данных. Материалы семинара лаборатории BaseGroup, 2000.

24. Т. Кохонен, "Ассоциативная память", М.: Мир, 1980.

25. Терехов С.А. Лекции по теории и приложениям искусственных нейронных сетей. Снежинск, 1998.

26. Терехов С.А. Типовые задачи для информационного моделирования с использованием нейронных сетей. Снежинск, 2000.

27. Уоссермен Ф. Нейрокомпьютерная техника. - М.: Мир, 1992.

28. Форсайт Дж., Малькольм М., Моулер К. Машинные методы математических вычислений. Пер. с англ. под ред. Х. Д. Икрамова. - М.: Мир 1980.

29. Фролов Ю.В. Маркетинговые исследования потребителей товаров на основе применения самоорганизующихся карт признаков. М: 2000.

30. Хайкин С. Нейронные сети: полный курс, 2-е издание. Пер. с англ. - М.: Издательский дом «Вильямс», 2006.

31. Харламов А.А., Ермаков А.Е., Кузнецов Д.М. Технология обработки текстовой информации с опорой на семантическое представление на основе иерархических структур из динамических нейронных сетей, управляемых механизмом внимания // Информационные технологии. - 1998.

32. Цыпкин Я.З. Основы теории обучающихся систем. - М.: Наука, 1970.

нейронный сеть кохонен модель

Приложение

Компьютерная программа «Kohonen» моделирующая самоорганизующуюся карту Кохонена

unit unit1;

{$mode objfpc}{$H+}

interface

uses

Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,

Buttons, ExtCtrls;

type

TNeuron=class

ndendro:integer;

w:array[1..100] of real;

x:array[1..100] of real;

s:real; a:real; alpha:real;

vw:array[1..100] of TEdit;

pb:TPaintBox;

function act:real;

procedure tick;

procedure draw;

end;

TCell=class

n:integer; cb:TEdit;

state:real;

in_nrn:TNeuron;

nrn:array[1..100] of TNeuron;

pnt:array[1..100,1..2] of integer;

procedure tick;

procedure draw;

end;

{ TForm1 }

TForm1 = class(TForm)

RND_btn: TButton;

Work_btn: TButton;

Learn_btn: TButton;

Norm_btn: TButton;

procedure FormCreate(Sender: TObject);

procedure FormPaint(Sender: TObject);

procedure Learn_btnClick(Sender: TObject);

procedure Norm_btnClick(Sender: TObject);

procedure RND_btnClick(Sender: TObject);

procedure Work_btnClick(Sender: TObject);

private

{ private declarations }

nrn:array[1..100] of TNeuron;

Cell,C_out:array[1..100] of TCell;

public

{ public declarations }

n,cells:integer;

koh_a:real;

function koh:integer;

end;

var

Form1: TForm1;

implementation

function TNeuron.act:real;

begin

act:=-0.5+1/(1+exp(-alpha*s));

end;

procedure TNeuron.tick;

var i:integer;

begin

s:=0; for i:=1 to ndendro do s:=s+x[i]*w[i];

a:=act;

end;

procedure TNeuron.draw;

var i:integer;

begin

pb.canvas.pen.color:=clBlack;

pb.canvas.rectangle(1,1,pb.width-1,pb.height-1);

for i:=1 to ndendro do vw[i].text:=FloatToStr(w[i]);

end;

procedure TCell.tick;

var i:integer;

begin

if in_nrn<>nil then state:=in_nrn.a;

for i:=1 to n do

if pnt[i][1]<>0 then nrn[pnt[i][1]].x[pnt[i][2]]:=state;

end;

procedure TCell.draw;

var i:integer;

begin

cb.text:=FloatToStr(state);

if in_nrn<>nil then

begin

form1.Canvas.pen.color:=clBlack;

form1.Canvas.pen.width:=2;

form1.Canvas.MoveTo(in_nrn.pb.left+in_nrn.pb.width,

in_nrn.pb.top+in_nrn.pb.height div 2);

form1.Canvas.LineTo(cb.left,cb.top+10);

end;

for i:=1 to n do

if pnt[i][1]<>0 then

begin

Form1.Canvas.Pen.Color:=clBlack;

Form1.Canvas.Pen.width:=1;

Form1.Canvas.MoveTo(cb.left+cb.width,cb.top+cb.height div 2);

Form1.Canvas.LineTo(nrn[pnt[i][1]].vw[pnt[i][2]].left,

nrn[pnt[i][1]].vw[pnt[i][2]].top+nrn[pnt[i][1]].vw[pnt[i][2]].height div 2);

end;

end;

{ TForm1 }

procedure TForm1.RND_btnClick(Sender: TObject);

var i:integer;

begin

for i:=1 to cells do cell[i].state:=random*2-1;

FormPaint(self);

end;

procedure TForm1.Work_btnClick(Sender: TObject);

var i,h:integer;

begin

Norm_btnClick(self);

for i:=1 to cells do cell[i].tick;

for i:=1 to n do nrn[i].tick;

h:=koh;

for i:=1 to n do c_out[i].tick;

FormPaint(self);

end;

procedure TForm1.Norm_btnClick(Sender: TObject);

var i:integer; s:real;

begin

s:=0;

for i:=1 to cells do s:=s+sqr(cell[i].state);

s:=sqrt(s);

if s<>0 then

for i:=1 to cells do cell[i].state:=cell[i].state/s;

FormPaint(self);

end;

function TForm1.koh:integer;

var i,mi:integer; max:real;

begin

mi:=1; max:=nrn[mi].a;

for i:=1 to n do

if nrn[i].a>max then begin mi:=i; max:=nrn[mi].a; end;

for i:=1 to n do nrn[i].a:=0;

nrn[mi].a:=max;

koh:=mi;

end;

procedure TForm1.Learn_btnClick(Sender: TObject);

var i,winner:integer;

begin

Work_btnClick(self);

winner:=koh;

for i:=1 to nrn[winner].ndendro do

nrn[winner].w[i]:=nrn[winner].w[i]+koh_a*(nrn[winner].x[i]-nrn[winner].w[i]);

FormPaint(self);

end;

procedure TForm1.FormCreate(Sender: TObject);

var i,j:integer;

begin

randomize;

n:=4; cells:=25; koh_a:=0.1;

//neurons

for i:=1 to n do

begin

nrn[i]:=TNeuron.Create;

nrn[i].pb:=TPaintBox.Create(Form1);

nrn[i].pb.parent:=Form1;

nrn[i].ndendro:=cells;

nrn[i].pb.width:=50;

nrn[i].pb.height:=nrn[i].ndendro*20;

nrn[i].pb.left:=400+(i-1)*(nrn[i].pb.width+30);

nrn[i].pb.top:=50;

nrn[i].alpha:=2;

for j:=1 to nrn[i].ndendro do

begin

nrn[i].w[j]:=random*2-1;

nrn[i].x[j]:=0;

nrn[i].vw[j]:=TEdit.Create(Form1); nrn[i].vw[j].parent:=Form1;

nrn[i].vw[j].enabled:=false; nrn[i].vw[j].tag:=j;

nrn[i].vw[j].left:=nrn[i].pb.left+2;

nrn[i].vw[j].top:=nrn[i].pb.top+(j-1)*20+2;

nrn[i].vw[j].width:=nrn[i].pb.width-5; nrn[i].vw[j].height:=15;

nrn[i].vw[j].text:=FloatToStr(nrn[i].w[j]);

end;

end;

//cells

for i:=1 to cells do

begin

cell[i]:=TCell.Create; cell[i].n:=n;

cell[i].cb:=TEdit.Create(Form1); cell[i].cb.enabled:=false;

cell[i].cb.parent:=Form1;

cell[i].cb.left:=10+60*(i mod 5);

cell[i].cb.top:=50+25*((i-1) div 5);

cell[i].cb.width:=50;

cell[i].cb.text:=FloatToStr(0.5);

cell[i].in_nrn:=nil;

for j:=1 to cell[i].n do cell[i].nrn[j]:=nrn[j];

for j:=1 to cell[i].n do

begin

cell[i].pnt[j][1]:=j; //neuron num

cell[i].pnt[j][2]:=i; //dendro num

end;

end;

//cells out

for i:=1 to n do

begin

c_out[i]:=TCell.Create; c_out[i].n:=0;

c_out[i].cb:=TEdit.Create(Form1); c_out[i].cb.enabled:=false;

c_out[i].cb.parent:=Form1;

c_out[i].cb.left:=400+(i-1)*(nrn[i].pb.width+30);

c_out[i].cb.top:=10;

c_out[i].cb.width:=50;

c_out[i].in_nrn:=nrn[i];

end;

end;

procedure TForm1.FormPaint(Sender: TObject);

var i:integer;

begin

for i:=1 to n do nrn[i].draw;

for i:=1 to n do c_out[i].draw;

for i:=1 to cells do cell[i].draw;

end;

initialization

{$I unit1.lrs}

end.

Размещено на Allbest.ru


Подобные документы

  • Сущность, структура, алгоритм функционирования самообучающихся карт. Начальная инициализация и обучение карты. Сущность и задачи кластеризации. Создание нейронной сети со слоем Кохонена при помощи встроенной в среды Matlab. Отличия сети Кохонена от SOM.

    лабораторная работа [36,1 K], добавлен 05.10.2010

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

    реферат [162,9 K], добавлен 30.09.2013

  • Возможности программ моделирования нейронных сетей. Виды нейросетей: персептроны, сети Кохонена, сети радиальных базисных функций. Генетический алгоритм, его применение для оптимизации нейросетей. Система моделирования нейронных сетей Trajan 2.0.

    дипломная работа [2,3 M], добавлен 13.10.2015

  • Построение векторной модели нейронной сети. Проектирование и разработка поискового механизма, реализующего поиск в полнотекстовой базе данных средствами нейронных сетей Кохонена с применением модифицированного алгоритма расширяющегося нейронного газа.

    курсовая работа [949,0 K], добавлен 18.07.2014

  • История возникновения, примеры использования и основные виды искусственных нейронных сетей. Анализ задач, решаемых при помощи Персептрона Розенблатта, создание схемы имитационной модели в среде Delphi. Исходные коды компьютерной программы Perseptron.

    дипломная работа [933,1 K], добавлен 18.12.2011

  • Сущность и понятие кластеризации, ее цель, задачи, алгоритмы; использование искусственных нейронных сетей для кластеризации данных. Сеть Кохонена, самоорганизующиеся нейронные сети: структура, архитектура; моделирование кластеризации данных в MATLAB NNT.

    дипломная работа [3,1 M], добавлен 21.03.2011

  • Понятие искусственного нейрона и искусственных нейронных сетей. Сущность процесса обучения нейронной сети и аппроксимации функции. Смысл алгоритма обучения с учителем. Построение и обучение нейронной сети для аппроксимации функции в среде Matlab.

    лабораторная работа [1,1 M], добавлен 05.10.2010

  • Принципы и система распознавание образов. Программное средство и пользовательский интерфейс. Теория нейронных сетей. Тривиальный алгоритм распознавания. Нейронные сети высокого порядка. Подготовка и нормализация данных. Самоорганизующиеся сети Кохонена.

    курсовая работа [2,6 M], добавлен 29.04.2009

  • Реалізація сегментації позичальників методом карт Кохонена за допомогою пакету Deductor Studio. Послідовність дій, які необхідно провести для аналізу даних у Deductor Studio. Результат сегментації на картах Кохонена та характеристика кожного сегменту.

    контрольная работа [1017,1 K], добавлен 29.09.2010

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

    презентация [582,1 K], добавлен 25.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.