Недавно вышла одна очень интересная статья "Speaker Recognition from raw waveform with SincNet", в которой была описана end-to-end архитектура нейронной сети для распознавания говорящего по голосу. Ключевая особенность этой архитектуры — специальные одномерные сверточные слои, которые имеют всего два параметра с четкой интерпретацией. Интерпретируемость параметров нейронной сети — дело довольно затруднительное, поэтому эта статья привлекла мой интерес.



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


Отмечу, что все изображения, используемые в этом посте либо взяты из исходной статьи, либо их можно получить с помощью Jupyter Notebook'а, хранящегося в этом репозитории.


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


Мел-спектрограммы


Чтобы понять суть этой статьи, давайте сначала вспомним, что такое мел-спектрограмма, как ее получить и в чем ее смысл. Если эта тема вам знакома, то эта часть будет не очень интересной. Ее вычисляют по обычной спектрограмме, построенной с помощью оконного преобразования Фурье:


$F(k, m) = \sum\limits_{n=0}^{L - 1} x[n+m] w[n] e^{-i{{2 \pi}\over{L}} k n}$


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



Эксперименты ученых показали, что человеческое ухо более чувствительно к изменениям звука на низких частотах, чем на высоких. То есть, если частота звука изменится со 100 Гц на 120 Гц, человек с очень высокой вероятностью заметит это изменение. А вот если частота изменится с 10000 Гц на 10020 Гц, это изменение мы вряд ли сможем уловить.


В связи с этим была введена новая единица измерения высоты звука — мел. Она основана на психо-физиологическом восприятии звука человеком, и логарифмически зависит от частоты:


$mel = 1127.01048 \ln(1 + {{freq}\over{700}})$



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



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



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



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



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


При чем же здесь SincNet?


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


Именно эту задачу и решает предложенная авторами архитектура.


Авторы рассматривают в качестве фильтра следующую функцию:


$G(f, f_1, f_2) = rect({{f}\over{2 f_2}}) - rect({{f}\over{2 f_1}})$


$rect(t)$ в этой формуле — это прямоугольная функция. Такой фильтр задает диапазон частот от $f_1$ до $f_2$. Вот ее график:



С помощью обратного преобразования Фурье для этой функции можно получить ее аналог во временной области:


$g(n, f_1, f_2) = 2 f_2 sinc(2 \pi f_2 n) - 2 f_1 sinc(2 \pi f_1 n)$


$sinc(t) = {{sin(t)}\over{t}}$



Функция $g(t)$ — это импульсная характеристика идеального полосового фильтра, который нельзя реализовать практически, поэтому авторы усекают эту функцию окном Хэмминга. В цифровой обработке сигналов такой подход называется синтезом фильтров методом окон.


Усеченный окном вариант функции $g$ авторы предлагают использовать в качестве шаблона для всех сверток, применяемых к сырым аудио данным. Эта функция дифференцируема по параметрам $f_1$ и $f_2$, а значит ее можно использовать при оптимизации параметров сети методом обратного распространения ошибки.


По теореме о свертке, свертка исходного сигнала с функцией $g$ эквивалентна умножению спектра исходного сигнала на функцию $G$. Грубо говоря, выполняя свертку исходного сигнала с функцией $g$, мы "обращаем внимание" нейронной сети на данный диапазон частот в рассматриваемом сигнале.


Конечно, здесь не применяется преобразование Фурье и явно нейросети не сообщаются конкретные значения спектра в диапазоне $[f_1;f_2]$. По всей видимости, задача извлечения спектральных характеристик возлагается на следующие блоки, расположенные в нейронной сети.


Из достоинств такого подхода, авторы отмечают следующее:


  1. Быстрая сходимость
  2. Гораздо меньшее количество параметров. В классическом сверточном блоке количество параметров равно длине свертки. При описанном же подходе, количество параметров не зависит от длины свертки и равно 2
  3. Интерпретируемость параметров

Выводы


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


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

Комментарии (8)


  1. Daddy_Cool
    13.11.2019 22:21

    Спасибо за статью — очень интересно, можно бы и поразвернутей!
    Уточню кое-что:

    Эксперименты ученых показали, что человеческое ухо более чувствительно к изменениям звука на низких частотах, чем на высоких. То есть, если частота звука изменится со 100 Гц на 120 Гц, человек с очень высокой вероятностью заметит это изменение. А вот если частота изменится с 10000 Гц на 10020 Гц, это изменение мы вряд ли сможем уловить.
    В связи с этим была введена новая единица измерения высоты звука — мел.

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


    1. HardWrMan
      14.11.2019 05:24

      Ну дык графики восприятия звука для обеспечения тон-коррекции в звуковой аппаратуре существуют практически с истоков:
      image
      И в той же музыкальной школе кроме, может, камертона никто чистый синус без гармоник не слушает. А изменение уровня гармоник и приводит к изменению субъективного восприятия высоты тона.


      1. SADKO
        14.11.2019 10:22

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


  1. progchip666
    14.11.2019 09:12
    +1

    То есть, если частота звука изменится со 100 Гц на 120 Гц, человек с очень высокой вероятностью заметит это изменение. А вот если частота изменится с 10000 Гц на 10020 Гц, это изменение мы вряд ли сможем уловить.

    Неудачный пример. Во втором случае, просто процент, на который изменилась частота, существенно ниже. 20% и 0.2% это две огромные разницы и особенности уха в данном случае совершенно не при чём.


    1. HardWrMan
      14.11.2019 18:17

      Это правда, но тем не менее, при работе со звуком логарифмическая шкала частоты удобнее. Видимо это из-за природы удваивания подобнозвучащих частот (например ДО первой октавы ровно в 2 раза ниже по частоте ДО второй октавы). Но это не точно.


      1. progchip666
        14.11.2019 22:19

        C этим я не собираюсь спорить, просто ваш пример совершенно не иллюстрирует это утверждение.
        Аналогом вашему утверждению будет:«Ухо человека устроена так, что разницу между звуками в 100 и 120 Гц оно улавливает лучше чем между 100 и 100,2 Гц». Так это и без логарифмов ежу понятно.


  1. SADKO
    14.11.2019 10:11
    -1

    И что? В чём научная новизна? Ребята изобрели вэйвлеты :-) и причём тут обратное распространение ошибки.
    Или эта публикация ради публикации, или учёные в очередной раз гнусно надругались над журналистом.


  1. Celsius
    14.11.2019 11:08

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

    Взять, например MelNet, там очень здорово придумали с повышением размерности, но из-за невозможности применить сжатие гармоник, по скорости она не превосходит tacotron2