1. Общие сведения о нейронных сетях

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


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


Модели НС могут быть программного и аппаратного исполнения. В дальнейшем речь пойдет о первом типе.

Рис. 1. Искусственный нейрон


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


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

Рис. 2. Активационные функции:

а) функция единичного скач­ка;

б) линейный порог (гис­те­ре­зис);

в) сигмоид – гипербо­ли­ческий тангенс;

г) сигмоид


Текущее состояние нейрона определяется, как взвешенная сумма его входов:



Выход нейрона есть функция его состояния:


y = f(s)


Нелинейная функция f называется активационной и может иметь различный вид, как показано на рисунке 2.


Одной из наиболее распространенных является нелинейная функция с насыщением, так называемая логистическая функция или сигмоид (т.е. функция S-образного вида):



При уменьшении сигмоид становится более пологим, в пределе при =0 вырождаясь в горизонтальную линию на уровне 0.5, при увеличении сигмоид приближается по внешнему виду к функции единичного скачка с порогом T в точке x=0. Из выражения для сигмоида очевидно, что выходное значение нейрона лежит в диапазоне [0,1]. Одно из ценных свойств сигмоидной функции – простое выражение для ее производной, применение которого будет рассмотрено в дальнейшем.



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

Рис. 3. Простая НС


В качестве примера простейшей НС рассмотрим трехней­ронную НС (рис.3). На n входов поступают некие сигналы, проходящие по синапсам на 3 нейрона, образующие единственный слой этой НС и выдающие три выходных сигнала:


, j=1...3


Очевидно, что все весовые коэффициенты синапсов одного слоя нейронов можно свести в матрицу W, в которой каждый элемент wij задает величину i-ой синаптической связи j-ого нейрона. Таким образом, процесс, происходящий в НС, может быть записан в матричной форме:


Y=F(XW)


где X и Y – соответственно входной и выходной сигнальные векторы, F(V) – активационная функция, применяемая поэлементно к компонентам вектора V.


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


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


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


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

2. Обучение нейронной сети

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

2.1. Обучение с учителем

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


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


Согласно методу наименьших квадратов, минимизируемой целевой функцией ошибки НС является величина:


(1)


где – реальное выходное состояние нейрона j выходного слоя N нейронной сети при подаче на ее входы p-го образа; djp – идеальное (желаемое) выходное состояние этого нейрона.

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


(2)


Здесь wij – весовой коэффициент синаптической связи, соединяющей i-ый нейрон слоя n-1 с j-ым нейроном слоя n, – коэффициент скорости обучения, 0<<1.


(3)


Здесь под yj, как и раньше, подразумевается выход нейрона j, а под sj – взвешенная сумма его входных сигналов, то есть аргумент активационной функции. Так как множитель dyj/dsj является производной этой функции по ее аргументу, из этого следует, что производная активационной функция должна быть определена на всей оси абсцисс. В связи с этим функция единичного скачка и прочие активационные функции с неоднородностями не подходят для рассматриваемых НС. В них применяются такие гладкие функции, как гиперболический тангенс или классический сигмоид с экспонентой. В случае гиперболического тангенса


(4)


Третий множитель sj/wij, очевидно, равен выходу нейрона предыдущего слоя yi(n-1).

Что касается первого множителя в (3), он легко раскладывается следующим образом:


(5)


Здесь суммирование по k выполняется среди нейронов слоя n+1.

Введя новую переменную


(6)


мы получим рекурсивную формулу для расчетов величин j(n) слоя n из величин k(n+1) более старшего слоя n+1.


(7)


Для выходного же слоя


(8)


Теперь мы можем записать (2) в раскрытом виде:


(9)


Иногда для придания процессу коррекции весов некоторой инерционности, сглаживающей резкие скачки при перемещении по поверхности целевой функции, (9) дополняется значением изменения веса на предыдущей итерации


(10)


где – коэффициент инерционности, t – номер текущей итерации.

Таким образом, полный алгоритм обучения НС с помощью процедуры обратного распространения строится так:

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


(11)


где M – число нейронов в слое n-1 с учетом нейрона с постоянным выходным состоянием +1, задающего смещение; yi(n-1)=xij(n) – i-ый вход нейрона j слоя n.

yj(n) = f(sj(n)), где f() – сигмоид (12)

yq(0)=Iq, (13)

где Iq – q-ая компонента вектора входного образа.

2. Рассчитать (N) для выходного слоя по формуле (8).

Рассчитать по формуле (9) или (10) изменения весов w(N) слоя N.

3. Рассчитать по формулам (7) и (9) (или (7) и (10)) соответственно (n) и w(n) для всех остальных слоев, n=N-1,...1.

4. Скорректировать все веса в НС


(14)


5. Если ошибка сети существенна, перейти на шаг 1. В противном случае – конец.


С

Рис. 4. Диаграмма сигналов в сети при обучении по

алгоритму обратного распространения

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


Из выражения (9) следует, что когда выходное значение yi(n-1) стремится к нулю, эффективность обучения заметно снижается. При двоичных входных векторах в среднем половина весовых коэффициентов не будет коррек­тироваться поэтому область возможных значений выходов нейронов [0,1] желательно сдвинуть в пределы [-0.5,+0.5], что достигается простыми модификациями логистических функций. Например, сигмоид с экспонентой преобразуется к виду


(15)


Теперь коснемся вопроса емкости НС, то есть числа образов, предъявляемых на ее входы, которые она способна научиться распознавать. Для сетей с числом слоев больше двух, он остается открытым. Для НС с двумя слоями, то есть выходным и одним скрытым слоем, детерминистская емкость сети Cd оценивается так:


Nw/Nylog(Nw/Ny) (16)


где Nw – число подстраиваемых весов, Ny – число нейронов в выходном слое.


Следует отметить, что данное выражение получено с учетом некоторых ограничений. Во-первых, число входов Nx и нейронов в скрытом слое Nh должно удовлетворять неравенству Nx+Nh>Ny. Во-вторых, Nw/Ny>1000. Однако вышеприведенная оценка выполнялась для сетей с активационными функциями нейронов в виде порога, а емкость сетей с гладкими активационными функциями, например – (15), обычно больше. Кроме того, фигурирующее в названии емкости прилагательное "детерминистский" означает, что полученная оценка емкости подходит абсолютно для всех возможных входных образов, которые могут быть представлены Nx входами. В действительности распределение входных образов, как правило, обладает некоторой регулярностью, что позволяет НС проводить обобщение и, таким образом, увеличивать реальную емкость. Так как распределение образов, в общем случае, заранее не известно, мы можем говорить о такой емкости только предположительно, но обычно она раза в два превышает емкость детерминистскую.


Рассматриваемая НС имеет несколько "узких мест". Во-первых, в процессе обучения может возникнуть ситуация, когда большие положительные или отрицательные значения весовых коэффициентов сместят рабочую точку на сигмоидах многих нейронов в область насыщения. Малые величины производной от логистической функции приведут в соответствие с (7) и (8) к остановке обучения, что парализует НС. Во-вторых, применение метода градиентного спуска не гарантирует, что будет найден глобальный, а не локальный минимум целевой функции. Эта проблема связана еще с одной, а именно – с выбором величины скорости обучения. Доказательство сходимости обучения в процессе обратного распространения основано на производных, то есть приращения весов и, следовательно, скорость обучения должны быть бесконечно малыми, однако в этом случае обучение будет происходить неприемлемо медленно. С другой стороны, слишком большие коррекции весов могут привести к постоянной неустойчивости процесса обучения. Поэтому в качестве обычно выбирается число меньше 1, но не очень маленькое, например, 0.1, и оно, вообще говоря, может постепенно уменьшаться в процессе обучения. Кроме того, для исключения случайных попаданий в локальные минимумы иногда, после того как значения весовых коэффициентов застабилизируются, кратковременно сильно увеличивают, чтобы начать градиентный спуск из новой точки. Если повторение этой процедуры несколько раз приведет алгоритм в одно и то же состояние НС, можно более или менее уверенно сказать, что найден глобальный максимум, а не какой-то другой.

3. Программа SimpleNet

3.1. Общие сведения

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


Таким образом, можно рассматривать следующие конфигурации сетей:

1) сеть Кохонена с K нейронами;

2) сеть прямого распространения с одним слоем из N нейронов;

3) сеть Кохонена, выходы которой поступают на входы нейронов сети прямого распространения.


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


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


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

3

Рис. 5. Внешний вид программы SimpleNet

1

2

4

5

.2. Интерфейс программы

В

3

6

7

нешний вид окна программы показан на рисунке 5. Цифрами обозначены следующие области.


1. Окно визуализации сети

Здесь отображается структура активной в данный момент сети. Цветом показано значение выходов нейронов: в сети Кохонена активный нейрон – красный, а в слое сети прямого распространения цвет плавно меняется от чёрного – соответствует нулевому выходу – до жёлтого – соответствует единичному выходу. Самый верхний нейрон имеет индекс 0, чем ниже показан нейрон в слое, тем больше его индекс.


2. Окно отображения входов и выходов сети

В это окно выводится значение входного и выходного вектора. Если первый слой – слой Кохонена, то значение входного вектора нормируется по длине и отображается уже новое значение. Для сети Кохонена указан номер активного нейрона.


3. Веса нейронов

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


4. Конфигурация сети

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

1) количество входов сети;

2) количество нейронов в слое сети Кохонена;

3) количество нейронов в слое сети прямого распространения;

4) Коэффициент S-образной функции активации нейронов в слое прямого распространения.


5. Обучение НС

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


6. Операции с НС

С помощью кнопок «Загрузить» и «Сохранить» можно вызвать диалог открытия или сохранения файла структуры сети и весов нейронов.


7. Входы НС

В этом окне можно выбрать файл с векторами входов, а также выбрать один из входов из выбранного ранее файла.

4. Примеры использования программы

4.1. Формат файла

Файлы с обучающими выборками и входами сети представляют собой текстовые файлы, где вектора задаются строками текстового файла, а компоненты векторов – значениями в строке (столбцами), разделёнными символом табуляции (одним) или «;». Для обозначения дробной части нужно использовать символ «.» или «,».


Диапазон компонент входных векторов для сети Кохонена может принимать значения [-1; 1], а для сети прямого распространения – [0; 1]. При обучении сети прямого распространения желаемые выходы также должны лежать в диапазоне значений [0; 1].


Пример файла, содержащего четыре входных вектора для сети, имеющей два входа:


0.1 0.8

1 -0.2

0.3 -1

-0.8 0.1


Данный файл задаёт входные вектора (0.1; 0.8), (1; -0.2), (0.3; -1) и (-0.8; 0.1).


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


Пример файла, содержащего четыре обучающих выборки для сети, имеющей два входа и один выход:


0.1 0.8 0

1 -0.2 0.33

0.3 -1 0.66

-0.8 0.1 1


Здесь НС будет обучаться для входа (0.1; 0.8) выдавать значение 0, для входа (1; -0.2) выдавать значение 0.33 и так далее.

4.2. Обучение НС

Разберём два примера обучения НС. В каждом примере НС будут иметь по два входа, поэтому удобно воспользоваться одним файлом с входами сети. Создадим файл «input_1-2.txt» и запишем в него следующие значения:


0 1

1 0

0 -1

-1 0


0.1 0.8

1 -0.2

0.3 -1

-0.8 0.1


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


Во всех примерах будут использоваться следующие параметры обучения НС:

циклов обучения сети Кохонена: 100;

циклов обучения сети прямого распространения: 1000;

скорость обучения сети Кохонена: 0.1;

скорость обучения сети прямого распространения: 0.3.


Пример 1.

В этом примере НС будет распознавать направление входного вектора и выдавать пару чисел, соответствующую этому направлению. Для данного примера указываем следующие параметры сети:

количество входов сети: 2;

нейронов в слое Кохонена: 8;

нейронов в слое прямого распространения: 2;

коэффициент S-образной функции активации: 1.0.


Далее создаём файл с обучающими выборками «sample_1.txt»:


0 1 0.00 1.00

1 0 0.33 0.66

0 -1 0.66 0.33

-1 0 1.00 0.00


Выбираем файл входов сети «input_1-2.txt» и файл с обучающими выборками «sample_1.txt», обучаем нейронную сеть.


Если всё сделано правильно (см. рис. 5), то при установке входов от нулевого до третьего, то есть от направления (0; 1) к (-1; 0), выход сети должен меняться от (0.00; 1.00) до (1.00; 0.00). При этом выбор входов с четвёртого по седьмой, то есть немного искажённые варианты первых четырёх, должен давать тот же результат на выходе.


Пример 2.

В этом примере НС будет распознавать направление входного вектора и выдавать унарное значение направления. То есть нулевому направлению – выход (1; 0; 0; 0), первому – (0; 1; 0; 0) и так далее. НС в данном случае будет играть роль дешифратора направления. Для данного примера указываем следующие параметры сети:

количество входов сети: 2;

нейронов в слое Кохонена: 8;

нейронов в слое прямого распространения: 4;

коэффициент S-образной функции активации: 1.0.


Далее создаём файл с обучающими выборками «sample_2.txt»:


0 1 1 0 0 0

1 0 0 1 0 0

0 -1 0 0 1 0

-1 0 0 0 0 1


Выбираем файл входов сети «input_1-2.txt» и файл с обучающими выборками «sample_2.txt», обучаем нейронную сеть.

Е

Рис. 6. Дешифратор направления

сли всё сделано правильно, то при установке входов от нулевого до третьего, то есть от направления (0; 1) к (-1; 0), номер выхода сети, близкий к единице, должен соответствовать номеру направления. При этом выбор входов с четвёртого по седьмой, то есть немного искажённые варианты первых четырёх, должен давать тот же результат на выходе. Внешний вид программы с НС этого примера показан на рис. 6.

10




Случайные файлы

Файл
37553.rtf
103733.rtf
145722.doc
3127.rtf
4108-1.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.