Представление информации для нейронок, часть 2





🔉Звук / Цифровой сигнал

По базовой теории есть вот эта обзорная статья. Есть и курсы.



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



Вообще говоря, этого достаточно для нейросетей, см. например WaveNet. Проблема тут та же самая, что и с пикселями в картинках: чисел слишком много. Типичная частота дискретизации 44100 Гц, что за минуту даёт 2.6кк чисел.





🔉Звук / Мел-спектрограмма

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



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



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



По сути мы вернулись... к картинкам. Теперь у нас двумерный массив чисел, который можно обрабатывать точно так же, как и картинки, опираясь на свёртки. По размерности входов мы даже выигрываем при большой продолжительности БПФ-окошек и малом количестве частотных интервалов. Это гораздо нагляднее описывает сигнал, чем одномерный набор амплитуд.



Такого рода входы и выходы используются в Tacotron и Whisper, например. Проблема тут в том, что модели на основе таких входов и выходов требуют чистых данных (условно, записей студийного качества), а таких данных мало.





🔉Звук / Токены

И жили бы так и жили, но вот не давал людям покоя успех текстовых языковых моделей. Но где взять дискретные токены? Возьмём автоэнкодеры из картиночных латентов, но будем сжимать не в двумерную картинку, а в последовательность 😐



В случае EnCodec, например, на секунду аудио получаем 150 кусочков латента. А для того, чтобы получить именно дискретные токены, используем векторное квантование.



Теперь уже хватает моделей, которые используют токены из кодеков: AudioLM, VALL-E, Bark, и как будто бы их число будет только увеличиваться. Польза тут очевидна: такие токены более устойчивы к шуму, контекст с ними гораздо меньше, и их проще моделировать.





🎬Видео

Видео — это последовательность картинок. Поэтому там всё то же самое, что и в картинках: патчи и латенты. В Sora, например, это патчи латентов 😮‍💨





Остались ещё табличные данные, для которых трансформеры вполне неплохи, но я за этим вообще не слежу, и не уверен, что там есть какие-то прикольные штуки. Свои латенты, впрочем, там тоже есть.