Оглавление.

Введение. Общие вопросы компьютерного распознавания и порождения речи.

1. Программирование звука в Windows.

2. Основы цифровой обработки звуковых сигналов.

3. Определение параметров речевого сигнала.

4. Алгоритмы распознавания.

5. Использование Microsoft Speech API 5.1 для синтеза и распознавания речи.

6. Использование Microsoft Speech API 4.0 для синтеза речи.

Ссылки.

Об авторе.

Компьютерное распознавание и порождение речи

Глава 4. Алгоритмы распознавания.

Назад В начало главы Дальше

Алгоритмы обратного распространения.

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

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

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

Рассматриваем “классический вариант” многослойной сети, где синаптические связи могут определяться любыми действительными числами, а выход нейрона – действительными числами из интервала от 0 до 1. В качестве активационной функции используем сигмоид. Число слоев произвольное.


1. Определяем M матриц весовых коэффициентов W размером NxN, где M – число слоев, N – число нейронов в одном слое. Wi, j, k будет обозначать вес j-го входа k-го нейрона в i-м слое. Инициализируем матрицы некоторыми малыми случайными ( не одинаковыми ) значениями.

2. Подаем на входы сети определенные значения X, для которых известны правильные значения выходов сети Y*.

3. Вычисляем значения выходов сети для текущего состояния матриц W. То есть для входного вектора X вычисляется выходной вектор Y. Для этого необходимо последовательно вычислить выход для каждого слоя сети с первого по последний. Для i-го слоя в векторном виде это можно записать так:

Oi=F(ХWi), если i – не первый слой.

Oi=F(Oi-1Wi), если i – не первый слой.

где Oi – вектор выхода i-го слоя, F – активационная функция, X – вектор входов, Oi-1 – вектор выхода (i-1)-го слоя, Wi – матрица весовых коэффициентов i-го слоя.

4. Вычисляем вектор ΔY=Y-Y*

5. Если ΔY меньше заданной погрешности, переходим к шагу 9.

6. Для слоя с номером M (т.е. в последнем слое) производим следующие операции:

6.1. Для всех нейронов в слое с номера 1 по N производим следующие операции:

6.1.1. Для всех весов нейрона с номера 1 по N производим следующие операции:

6.1.1.1. Рассчитываем вектор δM=X(1-X)ΔY

6.1.1.2. Рассчитываем величину ΔWM,j,k=ηδM,kOi-1,j,

где η – коэффициент скорости обучения (от 0.01 до 1.0)

6.1.1.3. Корректируем величину весового коэффициента, добавляя к WM, j, k величину ΔWM,j,k

7. Для слоев с номером M-1 по первый последовательно производим следующие операции:

7.1. Для всех нейронов в слое с номера 1 по N производим следующие операции:

7.1.1. Для всех весов нейрона с номера 1 по N производим следующие операции:

7.1.1.1. Рассчитываем вектор

N
δi=Oi+1(1-Oi+1)[δi+1,jWi+1, j, k]
k=1

7.1.1.2. Рассчитываем величину ΔWi,j,k= ηδi,kOi-1,j,
где ? – коэффициент скорости обучения (от 0.01 до 1.0)

7.1.1.3. Корректируем величину весового коэффициента, добавляя
к WM, j, k величину ?WM,j,k

8. Переход к шагу 3.

9. Конец (обучение окончено).


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

Это алгоритм может быть усовершенствован. Например, выяснилось, что обычный диапазон для входов и выходов от 0 до 1 не является оптимальным. Из за того, что ?Wi,j,k прямо пропорционален выходному уровню нейрона, нулевой выходной уровень приводит к нулевому значению ?Wi,j,k, то есть величина веса не изменяется и обучение не происходит. Выход состоит в приведении входов к значениям от -0.5 до 0.5. Активационная функция должна приобрести вид:

F(S) = (-0.5)+1/(1+e-s).

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


Распознавание речи. Обработка текстов на естественном языке.
Hosted by uCoz