Методические указания
по проведению лабораторной работы N1

"Программирование искусственного нейрона"

по курсу

"Искусственные нейронные сети"

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

Теоретическая часть

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

Здесь u - взвешенная сумма входных сигналов, вычисляемая по формуле

u=sum[j=0:N](wj*xj).

Выходной сигнал y вычисляется с использованием униполярной сигмоидальной функции активации в виде

y=f(u)=1/(1+exp(-b*u)),
где b - коэффициент "крутизны" функции.

Ниже представлены графики этой функции для различных значений b.

Производная униполярной сигмоидальной функции по аргументу u имеет вид

df(u)/du=b*f(u)*(1-f(u)).

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

Далее везде будем использовать значение b = 1.

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

E(W)=sum[k=1:p]((1/2)*(yk-dk)2),
где dk - ожидаемое значение выходного сигнала нейрона при подаче на его вход k-ой обучающей выборки, k=1, ..., p.

Методы обучения искусственных нейронов и сетей на их основе описаны в учебном пособии "Искусственные нейронные сети". В теоретической части данной лабораторной работы используется метод градиента для обучения нейрона в режиме "оффлайн" и правило Видроу-Хоффа для обучения нейрона в режиме "онлайн".

Классификация одномерных данных

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

k12345 678910
xk0.01.02.03.0 4.06.08.010.012.014.0
dk0000 011111

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

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

Тот же график при "взгляде сверху" имеет следующий вид.

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

Тогда в режиме обучения "оффлайн" для w0=-5,0 график зависимости целевой функции E(w1) от w1 выглядит следующим образом.

Для w0=-1,0 зависимость целевой функции от w1 имеет вид.

А для w0=1,0 та же зависимость имеет вид.

Обучение нейрона в режиме "оффлайн"

Обучение нейрона реализуется методом градиента по следующей формуле

W(t+1)=W(t)-nu*дE(t)/дW,
где nu - коэффициент обучения, а t - номер цикла обучения (шага поисковой оптимизации). В нашем одномерном случае формула принимает вид
w1(t+1)=w1(t)-nu*дE(t)/дw1.

График зависимости производной целевой функции дE/дw1 для w0=-5 имеет следующий вид.

Основными проблемами в реализации метода градиента являются следующие две:

В простейшем варианте метода градиента коэффициент nu выбирается постоянной величиной из диапазона (0, 1], а процесс поиска минимума завершается при выполнении условия |дE(t)/дW| < eps, где eps - константа, определяющая точность отыскания минимума.

Ниже представлена траектория поиска для значений w0=-5, w1(0)=0, nu=0,1, eps=0,01. Количество шагов поиска - 14.

На следующем рисунке дана траектория поиска для значений w0=-5, w1(0)=2,0, nu=0,2, eps=0,001. Количество шагов поиска - 11.

Однако, выбор начального значения адаптируемого веса w1(0)=10,0 на относительно большом расстоянии от точки экстремума резко увеличивает необходимое количество циклов обучения (до 914), что иллюстрируется траекторией поиска, показанной на следующем рисунке.

Очевидное объяснение этому факту - "пологость" целевой функции (малость абсолютной величины градиента) в удалении от точки экстремума, что обусловлено сигмоидальностью функции активации нейрона.

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

Рисунок ниже показывает фрагмент траектории поиска при следующих условиях: w0=-5, w1(0)=1,2, nu=0,5.

Отметим, что при данном значении nu процесс обучения медленно, но сходится.

При значении коэффициента обучения nu=0,6 сходимости обучения достичь не удается, что иллюстрирует следующий рисунок.

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

Хорошие результаты демонстрирует следующая стратегия адаптации коэффициента nu.

  1. В текущем t-ом цикле обучения вычисляется новое значение вектора входных весов нейрона W'(t+1) по стандартной формуле W'(t+1)=W(t)-nu*дE(t)/дW и сравниваются значения целевой функции в точках W(t) и W'(t+1).
  2. Если E(W'(t+1)) < E(W(t)), то W(t+1)=W'(t+1) и счетчик числа подряд идущих удачных применений величины nu увеличивается на 1. Если этот счетчик превышает наперед заданную величину (например, 2), то значение nu удваивается, а счетчик сбрасывается в 0. Далее t++ и переход к п. 1.
  3. Если E(W'(t+1)) => E(W(t)), то значение коэффициента nu уменьшается вполовину, а счетчик числа подряд идущих удачных применений величины nu сбрасывается в 0. Далее переход к п.1.
  4. Процесс обучения завершается при условии nu < numin, где numin - константа (например, 0,001), заданная перед началом обучения.

Ниже показана траектория поиска минимума целевой функции для упоминавшейся выше задачи с w1(0)=10,0. Для решения задачи потребовалось 30 циклов обучения, при этом величина nu сначала увеличилась от начального значения 0,6 до 76,8, потом упала до 0,000586.

Обучение нейрона в режиме "онлайн"

Обучение в данном режиме подразумевает корректировку входных весов нейрона после предъявления каждого обучающего вектора. При этом минимизируемая целевая функция имеет следующий вид:

E(W)=(1/2)*(yk-dk)2.

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

k12345 678910
x1k0.00.90.0 0.50.41.01.1 0.00.60.5
x2k0.00.00.9 0.40.51.00.0 1.10.50.6
dk0000 011111

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

Для обучения нейрона в режиме "онлайн" воспользуемся простейшим правилом Видроу-Хоффа, согласно которому корректировка входного веса осуществляется по формуле

wj(t+1)=wj(t)-xkj* (yk(t)-dkj)

В качестве условия завершения обучения примем |xkj*(yk(t)-dkj)|<eps для всех k в цикле обучения t.

Анализ обучающих данных показывает "тесное соседство" векторов, принадлежащих двум разным кластерам, это заставляет увеличивать "крутизну" сигмоидальной функции. Поэтому пусть b=10,0.

Решение задачи классификации двухмерных данных трехмерным сигмоидальным нейроном для следующих начальных данных: w0=-0,9, w1=-0,5, w2=0,3, eps=0,1, потребовало 16 циклов обучения и дало следующий результат: w0=-4,192, w1=4.164, w2=4.247.

Полученным значениям соответстует функция классификации нейрона y([x1,x2]T), график которой представлен ниже.

Примечание. Выбранное нами большое значение коэффициента b превратило сигмоидальный нейрон фактически в персептрон.

Практическая часть

1. Лабораторная работа выполняется в среде ОС Linux с использованием компилятора gcc/g++ языка программирования C/C++. Для создания графических иллюстраций рекомендуется использовать утилиту gnuplot.

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

Номер вариантаТип нейрона
1Персептрон
2Сигмоидальный нейрон
3Радиальный нейрон
4Инстар Гроссберга
5Нейроны WTA
Перед началом разработки программы обязательно уточнить все детали задания у преподавателя.

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

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

Вариант 1 обучающих данных
Вариант 2 обучающих данных
Вариант 3 обучающих данных
Вариант 4 обучающих данных
Вариант 5 обучающих данных
Вариант 6 обучающих данных
Вариант 7 обучающих данных
Вариант 8 обучающих данных

5. Выполнить все модификации в программе и исходных данных, указанные преподавателем.

6. Оформить отчет по лабораторной работе с использованием языка разметки HTML (все иллюстрации должны быть представлены в формате png).

Содержание отчета

1. Описание реализованной модели нейрона и процедуры его обучения.

2. Рисунок, иллюстрирующий распределение в пространстве [x1,x2]T обучающих данных.

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

4. Графическое представление результатов обучения нейрона (например, график зависимости выходного сигнала нейрона от входных данных [x1,x2]T).

5. Исходный текст программы.