Недавно вышла одна очень интересная статья "Speaker Recognition from raw waveform with SincNet", в которой была описана end-to-end архитектура нейронной сети для распознавания говорящего по голосу. Ключевая особенность этой архитектуры — специальные одномерные сверточные слои, которые имеют всего два параметра с четкой интерпретацией. Интерпретируемость параметров нейронной сети — дело довольно затруднительное, поэтому эта статья привлекла мой интерес.
Если заинтересовало описание идеи этой статьи, а также почему эта идея близка по смыслу к построению мел-спектрограмм, то милости прошу под кат.
Отмечу, что все изображения, используемые в этом посте либо взяты из исходной статьи, либо их можно получить с помощью Jupyter Notebook'а, хранящегося в этом репозитории.
Авторами описываемой статьи был выложен исходный код на гитхаб, с ним можно ознакомиться здесь.
Мел-спектрограммы
Чтобы понять суть этой статьи, давайте сначала вспомним, что такое мел-спектрограмма, как ее получить и в чем ее смысл. Если эта тема вам знакома, то эта часть будет не очень интересной. Ее вычисляют по обычной спектрограмме, построенной с помощью оконного преобразования Фурье:
Суть этой операции в последовательном применении преобразования Фурье к коротким кусочкам речевого сигнала, домноженным на некоторую оконную функцию. Результат применения оконного преобразования — это матрица, где каждый столбец является спектром короткого участка исходного сигнала. Посмотрите на пример ниже:
Эксперименты ученых показали, что человеческое ухо более чувствительно к изменениям звука на низких частотах, чем на высоких. То есть, если частота звука изменится со 100 Гц на 120 Гц, человек с очень высокой вероятностью заметит это изменение. А вот если частота изменится с 10000 Гц на 10020 Гц, это изменение мы вряд ли сможем уловить.
В связи с этим была введена новая единица измерения высоты звука — мел. Она основана на психо-физиологическом восприятии звука человеком, и логарифмически зависит от частоты:
Собственно, мел-спектрограмма — это обычная спектрограмма, где частота выражена не в Гц, а в мелах. Переход к мелам осуществляется с помощью применения мел-фильтров к исходной спектрограмме. Мел-фильтры представляют из себя треугольные функции, равномерно распределенные на мел-шкале. В качестве примера здесь изображены 10 мел-фильтров (на практике их берут больше, здесь их мало для наглядности):
При переводе в частотную шкалы, те же самые фильтры будут выглядеть так:
Каждый столбец исходной спектрограммы скалярно умножается на каждый мел-фильтр (размещенный на частотной шкале), после чего получается вектор чисел, по размеру равный количеству фильтров. На картинке ниже изображен один из столбцов спектрограммы (значения амплитуды переведены в логарифмический масштаб для наглядности, то, что на картинке кодировалось цветом, здесь отражено по оси ординат) и два мел-фильтра, с помощью которых строится мел-спектрограмма:
В результате таких преобразований значения из низких частот спектрограммы остаются практически неизменными на мел-спектре, а в высоких частотах происходит усреднение значений из более широкого диапазона. В качестве примера предлагаю посмотреть на мел-спектрограмму, построенную по предыдущей спектрограмме с использованием 64 мел-фильтров:
Резюмируя все вышесказанное: на мел-спектрограмме сохраняется больше информации, которая хорошо воспринимается и различается человеком, чем на обычной спектрограмме. Иными словами, такое представление звука больше сфокусировано на низких частотах, и меньше — на высоких.
При чем же здесь SincNet?
Вспомним, что мел-шкала была создана на основе человеческого психо-физического восприятия звука. Но что если мы хотим выбрать другие полосы частот, которые нас интересуют больше чем остальные в какой-либо конкретной задаче? Как выбрать самый лучший набор фильтров для решения какой-либо задачи?
Именно эту задачу и решает предложенная авторами архитектура.
Авторы рассматривают в качестве фильтра следующую функцию:
в этой формуле — это прямоугольная функция. Такой фильтр задает диапазон частот от до . Вот ее график:
С помощью обратного преобразования Фурье для этой функции можно получить ее аналог во временной области:
Функция — это импульсная характеристика идеального полосового фильтра, который нельзя реализовать практически, поэтому авторы усекают эту функцию окном Хэмминга. В цифровой обработке сигналов такой подход называется синтезом фильтров методом окон.
Усеченный окном вариант функции авторы предлагают использовать в качестве шаблона для всех сверток, применяемых к сырым аудио данным. Эта функция дифференцируема по параметрам и , а значит ее можно использовать при оптимизации параметров сети методом обратного распространения ошибки.
По теореме о свертке, свертка исходного сигнала с функцией эквивалентна умножению спектра исходного сигнала на функцию . Грубо говоря, выполняя свертку исходного сигнала с функцией , мы "обращаем внимание" нейронной сети на данный диапазон частот в рассматриваемом сигнале.
Конечно, здесь не применяется преобразование Фурье и явно нейросети не сообщаются конкретные значения спектра в диапазоне . По всей видимости, задача извлечения спектральных характеристик возлагается на следующие блоки, расположенные в нейронной сети.
Из достоинств такого подхода, авторы отмечают следующее:
- Быстрая сходимость
- Гораздо меньшее количество параметров. В классическом сверточном блоке количество параметров равно длине свертки. При описанном же подходе, количество параметров не зависит от длины свертки и равно 2
- Интерпретируемость параметров
Выводы
Фильтров, с помощью которых преобразуются спектрограммы, существуют много. Например, кроме описанных мел-фильтров, есть еще барк-фильтры (почитать можно здесь и здесь). По крайней мере барк — это тоже психофизическая величина, подобранная "под человека".
В своем исследовании авторы предложили метод, по которому можно заставить нейронную сеть самостоятельно выбрать наиболее подходящие диапазоны частот в процессе обучения в зависимости от набора данных. Как по мне, это очень похоже на процесс построения мел-спектрограммы, при котором больший приоритет отдается низким частотам. Вот только мел-спектрограммы придумали на основе человеческого восприятия звука, а в предложенном методе нейросеть сама решает, что важно, а что нет.
Комментарии (8)
progchip666
14.11.2019 09:12+1То есть, если частота звука изменится со 100 Гц на 120 Гц, человек с очень высокой вероятностью заметит это изменение. А вот если частота изменится с 10000 Гц на 10020 Гц, это изменение мы вряд ли сможем уловить.
Неудачный пример. Во втором случае, просто процент, на который изменилась частота, существенно ниже. 20% и 0.2% это две огромные разницы и особенности уха в данном случае совершенно не при чём.HardWrMan
14.11.2019 18:17Это правда, но тем не менее, при работе со звуком логарифмическая шкала частоты удобнее. Видимо это из-за природы удваивания подобнозвучащих частот (например ДО первой октавы ровно в 2 раза ниже по частоте ДО второй октавы). Но это не точно.
progchip666
14.11.2019 22:19C этим я не собираюсь спорить, просто ваш пример совершенно не иллюстрирует это утверждение.
Аналогом вашему утверждению будет:«Ухо человека устроена так, что разницу между звуками в 100 и 120 Гц оно улавливает лучше чем между 100 и 100,2 Гц». Так это и без логарифмов ежу понятно.
SADKO
14.11.2019 10:11-1И что? В чём научная новизна? Ребята изобрели вэйвлеты :-) и причём тут обратное распространение ошибки.
Или эта публикация ради публикации, или учёные в очередной раз гнусно надругались над журналистом.
Celsius
14.11.2019 11:08Странно, что не оптимизировали подход до конца. Можно ведь генерировать мел-окно, пихать в вектор и подавать нейросети. Затем, после обучения, удалить самые бесполезные параметры. В результате, на нейросеть будет меньше нагрузка и она сама будет меньше, а значит быстрее.
Взять, например MelNet, там очень здорово придумали с повышением размерности, но из-за невозможности применить сжатие гармоник, по скорости она не превосходит tacotron2
Daddy_Cool
Спасибо за статью — очень интересно, можно бы и поразвернутей!
Уточню кое-что:
То что абсолютное изменение частоты в разных диапазонах воспринимается по разному — это давно известно и в общем очевидно, а вот что субъективное ощущение высоты звука зависит не только от частоты звука (что бы на не говорили в музыкальной школе), а еще и от громкости и тембра — вот это некоторая новость — вот для измерения этой субъективной величины и придумали этот «мел».
Субъективная громкость кстати тоже зависит от частоты, а не только от амплитуды.
HardWrMan
Ну дык графики восприятия звука для обеспечения тон-коррекции в звуковой аппаратуре существуют практически с истоков:
И в той же музыкальной школе кроме, может, камертона никто чистый синус без гармоник не слушает. А изменение уровня гармоник и приводит к изменению субъективного восприятия высоты тона.
SADKO
Неее, всё гораздо интересней, по-хорошему для решения задач распознавания звуков а-ля человек, нужно плясать не от субъективного восприятия, а от самого устройства сенсора, которое весьма занятно.
Скажем так, сигналов без гармоник мы не слышим в принципе, ибо смысл механических элементов внутреннего уха не только в согласовании импеданса и регулировки чувствительности, они ещё и гармоники производят. В итоге частотное разрешение получается сильно выше чем количество рецепторов позволяет.