Как нейронная сеть SincNet выделяет значимые частоты в звуке через Back Propagation

    Недавно вышла одна очень интересная статья "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. Интерпретируемость параметров

    Выводы


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


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

    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

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

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

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

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

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

        Неудачный пример. Во втором случае, просто процент, на который изменилась частота, существенно ниже. 20% и 0.2% это две огромные разницы и особенности уха в данном случае совершенно не при чём.
          0
          Это правда, но тем не менее, при работе со звуком логарифмическая шкала частоты удобнее. Видимо это из-за природы удваивания подобнозвучащих частот (например ДО первой октавы ровно в 2 раза ниже по частоте ДО второй октавы). Но это не точно.
            0
            C этим я не собираюсь спорить, просто ваш пример совершенно не иллюстрирует это утверждение.
            Аналогом вашему утверждению будет:«Ухо человека устроена так, что разницу между звуками в 100 и 120 Гц оно улавливает лучше чем между 100 и 100,2 Гц». Так это и без логарифмов ежу понятно.
          –3

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

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

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

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое