Оглавление.Введение. Общие вопросы компьютерного распознавания и порождения речи.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. Рассчитываем вектор
7.1.1.2. Рассчитываем величину ΔWi,j,k= ηδi,kOi-1,j,
7.1.1.3. Корректируем величину весового коэффициента, добавляя
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), по которым и определяем звук ( каждому звуку сопоставляется уникальная комбинация выходов до начала процесса обучения, и, собственно по ней мы на этапе обучения и определяем, правильно ли определен звук). |