При уменьшении a сигмоид становится более пологим, в пределе при a=0 вырождаясь в горизонтальную линию на уровне 0.5, при увеличении a сигмоид приближается по внешнему виду к функции единичного скачка с порогом T в точке x=0. Из выражения для сигмоида очевидно, что выходное значение нейрона лежит в диапазоне [0,1]. Одно из ценных свойств сигмоидной функции – простое выражение для ее производной.
Рисунок 2 - а) функция единичного скачка; б) линейный порог (гистерезис); в) гиперболический тангенс; г) сигмоид
Следует отметить, что сигмоидная функция дифференцируема на всей оси абсцисс, что используется в некоторых алгоритмах обучения. Кроме того она обладает свойством усиливать слабые сигналы лучше, чем большие, и предотвращает насыщение от больших сигналов, так как они соответствуют областям аргументов, где сигмоид имеет пологий наклон.
Для построения алгоритма обучения необходимо знать производную ошибки по каждому из весов сети:
. (4)Таким образом, вклад в общую ошибку каждого веса вычисляется локально, простым умножением невязки нейрона
на значение соответствующего входа. (Из-за этого, в случае, когда веса изменяют по направлению скорейшего спуска , такое правило обучения называют дельта-правилом.)Входы каждого слоя вычисляются последовательно от первого слоя к последнему во время прямого распространения сигнала:
, (5)а невязки каждого слоя вычисляются во время обратного распространения ошибки от последнего слоя (где они определяются по выходам сети) к первому:
. (6)- распознавание образов;
- классификация;
- прогнозирование;
- экспертные системы.
Рассмотрим алгоритм сети обратного распространения ошибки подробнее.
Входной набор данных, на котором сеть должна быть обучена, подается на входной слой сети (рисунок3), и сеть функционирует в нормальном режиме (т.е. вычисляет выходные данные).
скрытый слой |
входной слой |
0,6 |
0,331 |
0,278 |
0,7 |
прямое распространение сигнала |
Рисунок 4 - Модифицирование весовых коэффициентов выходного слоя (обратное распространение ошибки)
Затем таким же образом модифицируются весовые коэффициенты скрытого слоя, на этот раз сравниваются выходные сигналы нейронов скрытого слоя и входные сигналы нейронов выходного слоя (рисунок 5), целью данного сравнения является формирование вектора ошибки для скрытого слоя.
Рисунок 5 - Модифицирование весовых коэффициентов скрытого слоя (обратное распространение ошибки)
Если в сети существует входной слой (именно слой, а не ряд входных значений), то проводятся аналогичные действия и с ним.
Следует заметить, что ошибка может быть распространена на любой желаемый уровень (т.е. в нейронной сети может быть неограниченное количество скрытых слоев, для которых рассчитывается вектор ошибки по одной и той же схеме).
Сеть обучается путем предъявления каждого входного набора данных и последующего распространения ошибки. Этот цикл повторяется много раз. Например, для распознавания цифры от 0 до 9, сначала обрабатывается символ "0", символ "1" и так далее до "9", затем весь цикл повторяется много раз. Не следует поступать иначе, а именно, обучать сеть по отдельности сначала символу "0" (n-ое количество раз), потом "1", потом "2" и т.д., т.к. сеть вырабатывает очень "четкие" весовые коэффициенты для последнего входного набора (то есть для "9"), "забывая" предыдущие. Например, к тысячному повтору обучения символу "1" теряются весовые коэффициенты для распознавания символа "0". Повторяя весь цикл для всего набора входных данных, мы предполагаем, что каждый символ оказывает равноправное влияние на значения весовых коэффициентов.
Таким образом, полный алгоритм обучения НС с помощью процедуры обратного распространения строится так:
1. Инициализировать пороговые значения и весовые коэффициенты небольшими случайными величинами (не более 0.4).
2.Подать на входы сети один из возможных образов и в режиме обычного функционирования НС, когда сигналы распространяются от входов к выходам.
3.Вычислить ошибки для выходного слоя. При этом используем следующую формулу для каждого i-ого значения выходного слоя:
Ei = (ti - ai).ai.(1 - ai) (7)
Здесь Ei - ошибка для i-ого узла выходного слоя,
ai - активность данного узла,
ti - требуемая активность для него же (т.е. требуемое выходное значение).
Используем значения ошибок выходного слоя для определения ошибок в скрытом слое. Формула практически та же, но теперь не определены желаемые выходные значения. Вычислить взвешенную сумму значений ошибок выходного слоя по формуле:
Ei = ai. (1 - ai). Σj Ej.wij(8)
Смысл переменных по сравнению с формулой (9) изменился незначительно. индекс i используется для нейронов скрытого слоя (а не выходного), Ei, следовательно, значение ошибки для нейрона скрытого слоя, и ai - сигнал на выходе нейрона. Индекс j относится к нейронам выходного слоя: wij - вес (весовой коэффициент) связи между i-ым скрытым нейроном и j-ым выходным нейроном, а Ej - значение ошибки для выходного нейрона j. Суммирование проводится для всех весов связей между отдельно взятым i-ым нейроном и всеми нейронами выходного слоя.
Обратим внимание, что сумма включает в себя взвешенные связи только между рассматриваемым в данный момент нейроном скрытого слоя и всеми нейронами выходного слоя.
Полученные значения ошибок для выходного слоя будем использовать для изменения весовых коэффициентов между скрытым и выходным слоями. Вычислить все значения ошибок до модификации весовых коэффициентов, так как в формуле присутствуют и старые значения весов.
Применяем уравнение:
new wij = old wij + ηδj.xi(9)
где wij - вес связи между нейроном i скрытого слоя и нейроном j выходного;
δj - приращение ошибки для выходного нейрона j;
xi - сигнал на выходе скрытого нейрона i;
η - константа.
Константа используется для того, чтобы обучение не проводилось слишком быстро, то есть весовые коэффициенты не изменялись слишком сильно за один шаг обучения (что является причиной прыжков сходимости при обучении сети).
Пороговые уровни нейронов также инициализируются небольшими случайными числами и нуждаются в обучении. Пороговые уровни трактуются так же, как и весовые коэффициенты, за исключением того, что входные значения для них всегда равны -1 (знак минуса - т.к. уровни вычитаются во время функционирования сети):
new threshold = old threshold + ηδj.(-1) (10)
или (в более удобном виде):
new threshold = old threshold - ηδj (11)
1.3 Постановка задачи
Задачей данного курсового проекта является создание программы распознавания слов естественного языка с использованием нейросетей. Для ее выполнения была выбрана нейронная сеть обратного распространения ошибки, которая будет реализована на языке программирования C# в виде класса. Класс будет содержать конструктор, на который будут подаваться значения следующих параметров:
- обучающая выборка;
- тестовая выборка;
- количество нейронов скрытого слоя;
- коэффициент обучения;
- момент;
- количество эпох обучения.
Для перевода обучающих и тестовых слов в двоичный вид, а также сохранения слов-исключений в хеш-таблице будут предусмотрены отдельные классы.
Также будет создан класс, производящий разбиение текста на отдельные лексемы и их распознавание средствами нейросети и хеш-таблицы.
Соответственно, для решения поставленной задачи необходимо создание четырех классов: