最近在arXiv上看到一篇关于深度学习在音频信号处理中的进展的文章,感觉写的不错,所以根据自己的理解和大家分享一下。如果有些地方博主理解的不对,或者解释不清,可以在下面评论,博主会一一回复。
论文链接:Deep Learning for Audio Signal Processing
摘要
这篇文章是奥尔堡大学,Google等几个研究机构的一篇关于深度学习在音频信号处理中的进展的综述。这篇文章主要从语音(Speech)、音乐(Music)和环境声(Environmental Sounds)三个领域出发,分析它们之间的相似点和不同点,以及一些跨领域的通用方法描述。具体而言,作者在音频特征表示(log-mel spectra, raw waveforms)和网络模型(CNN, RNN, CRNN)进行了详细的分析,对每个领域的技术演进以及深度学习应用场景进行了大概的描述。最后,作者总结了深度学习在音频信号处理领域一些关键问题和未来的研究方向。
综述
目前为止,深度学习一共经历了三次浪潮:1)1957年的感知算法的提出;2)1986年反向传播算法的提出;3)2012年深度学习在图像识别领域上的成功突破,使得深度学习的发展呈现的蓬勃的景象,并广泛应用在其他领域,比如基因组学、量子化学、自然语言处理,推荐系统等。相比于图像处理领域,声音信号处理领域是深度学习成功应用的又一个大方向,尤其是语音识别,很多大公司都在做这个方向。和图像不同,声音信号是一维的序列数据,尽管可以通过像FFT这样的频域转换算法转换为二维频谱,但是它的两个维度也是有特定的含义(纵轴表示频率,横轴表示时间帧),不能直接采用图像的形式进行处理,需要有领域内特定的处理方法。
问题描述
根据任务目标的类型可以划分为不同的任务类型,图一所示。首先,目标可以是一个全局的单标签,可以每个时间帧都有一个标签,也可以是一个自有长度的序列。其次,每个标签可以为一个单一的类别,可以为多个类别,也可以是一个数值。
预测一个全局的单标签的任务称为序列分类(Sequence Classification),这个标签可以为一个语言,说话人,音乐键或者声音场景等。当目标为多个类别的集合时,称为多标签序列分类(Multi-label Sequence Classification)。当目标是一个连续的数值时,称为序列回归(sequence regression)。实际上,回归任务通常是可以离散化并且转化为分类任务,比如,连续坐标的定位任务是一个回归任务,但是当把定位区间划分为几个范围,就可以当做分类任务来处理。
声音特征
在音频信号处理领域,构建适当的特征表示和分类模型通常被作为两个分离的问题。这种做法的一个缺点是人工构建的特征可能对于目标任务可能不是最优的。深度神经网络具有自动提取特征的能力,因此可以将上述两个问题进行联合优化。例如,在语音识别中,Mohamed [1] 等人认为深度神经网络的低层提取一些适应说话人的特征,而高层提取类别间的判别信息。
过去几十年里,MFCC曾被广泛使用在音频分析任务中。MFCC提取步骤:使用FFT提取幅度谱,应用Mel滤波进行Mel频域的转换,使用log进行非线性变换,使用DCT进行系数特征的提取。然而,因为DCT变换会损失声音的结构信息,因此在深度模型中表现的并不是很好,目前使用最多的特征是log-mel spectrogram或者constant Q spectrogram,后者通常应用在音乐信息检索任务中。关于两者的相似点和不同点,博主会在另一篇博客详细介绍,这里就不过多赘述。
为了不依赖人工设计的固定的滤波器(比如Mel滤波),一些研究关注于可学习的滤波器。这里解释一下滤波器为什么可以设计成可学习的?我们要知道,对声音进行滤波的实质就是对其进行不同的权重加成,这些权重完全可以由神经网络来学出来,不需要人共设计。更进一步,我们抛弃FFT变换,Mel滤波(可学习)这些步骤,直接让神经网络对声音序列(raw waveform)进行特征学习,完全摒弃了之前所有的特征工程的操作。尽管使用声音序列作为神经网络的输入有大量的工作,也取得了不错的效果,但是它也存在问题,这个我们后面再讲。
声音模型
给定声音表示,我们可以使用很多模型对其进行分析,包括MLP,CNN,RNN及其他们的变种网络。
对于MLP,一般输入的一维的系数向量,比如展平的MFCC等。MLP每次学习都是针对全局的特征;
对于CNN,可输入的特征类型很多。输入是一维的声音序列,可以使用1-D CNN进行学习,输入是二维的频谱图,可以使用2-D CNN进行学习。CNN的主要特点是可以进行局部特征提取,学习局部特征的关联性,比如相邻帧的关系,相邻特征(频率维度)的关系等。另外,CNN的权重共享的网络结构使得它的参数量很小,模型复杂度低。
对于RNN,主要是时间帧上的短时和长时的相关性(依赖性)进行建模。RNN主要对那些时间上相关性较强的序列数据有很好的效果,比如语音的前后逻辑是一个很重要的信息。通常,RNN和CNN会结合来使用,先通过CNN来进行高维特征的提取,再使用RNN对时间相关性进行建模。尽管RNN在一些任务上表现很好,但是也存在一些问题,因为RNN的长时依赖性,使得其很容易出现梯度消失的问题。同时,在GPU优化上也不如CNN,因此训练速度通常会有些慢。
实际上,声音相关的很多任务是序列到序列的转换,而通常这些任务的复杂性比较大,传统的方法是将其拆分成一个个的子任务进行处理。比如,语音识别是一个语音序列到文字序列的转换过程,通常需要将其拆分成声学,发音,语言建模等子任务。深度模型具有很强的建模能力(容量),很多研究关注于构建直接将输入序列映射为输出序列的端到端模型,也就是目前的Sequence-to-Sequence模型。目前的大多数Sequence-to-Sequence模型都是基于CTC以及注意力机制的,比较有代表性的是Google提出的listen, attend and spell(LAS)模型。
另外,GAN在音频信号处理上也有很多应用,比如语音增强的SEGAN,生成声音的WaveNet以及一些声源分离、音乐乐器转换领域的GAN结构。
之前我们谈到的大部分声音特征都是幅度谱或者幅度谱转化的特征。但是在有些领域中,声音的相位谱也是一个很重要的特征,比如声音合成。实际上,相位谱可以通过Griffin-Lim算法来转化,但是这些估计的相位不足以获得很好的合成性能。换个思路,我们可以通过神经网络对幅度谱和相位谱同时进行学习,也可以直接使用FFT的复数矩阵进行学习(Bengio在2017年提出过一个Deep Complex Networks),当然也可以直接对声音序列进行学习。
数据
深度学习的表征能力需要庞大的数据来支撑。对于声音处理领域,语音相关的开源数据集很多,尤其是英文的;音乐相关的也有很多开源数据集,比如Million Song Dataset和MusicNet;环境声相关的数据集最大的就是AudioSet了,超过200万个音频片段,但是基本都是Weakly-label的。因此,我们实际使用中,数据还是很有限的,尤其是对与环境声来说。下面是我整理的关于语音、音乐和环境声的大部分开源数据链接地址:
Speech Recognition :
Music Information Retrieval : /millionsong/
Environmental Sound Classification : /~heittolt/datasets
迁移学习是一个比较高效的方法,指的是在大数据集上进行模型预训练,然后在目标领域进行微调适应。数据增强或者数据生成是另一个能够解决或者缓解数据有限的问题的方法。数据增强主要是根据现有数据进行参数化的调整从而生成新的数据,典型的数据增强方法是Time Stretch和Pitch Shift,分别在时间维度和频率维度进行操作。数据生成可以通过GAN或者自动编码器等生成模型进行数据的生成。除此之外,还可以通过数据的混合以及对应标签的混合来生成虚拟数据,提高模型鲁棒性 [3]。
应用
语音识别
语音识别指的是将语音信号转化为文字序列,它是所有基于语音交互的基础。对于语音识别而言,高斯混合模型(GMM)和马尔科夫模型(HMM)曾占据了几十年的发展历史。这些模型有很多优点,最重要的就是他们可以进行数学描述,研究人员可以有理有据的推导出适用某个方向的可行性办法。大约在1990年左右,判别模型获得了比基于最大似然估计的方法(GMM)更好的性能。尤其在2012年以后,深度学习在语音识别领域获得了很大的发展,CNN,RNN,CRNN等结构在语音识别性能上取得了一次次的突破。随着研究的深入,已经硬件设备的不断更新,一些端到端模型取得了state of the art的性能,比较有代表性的是之前提到的sequence-to-sequence模型(CTC,LAS)。随着语音识别性能的不断提升,工业界也产出了很多应用成果,比如虚拟助手:Google Home, Amazon Alexa and Microsoft Cortana;语音转录:YouTube的字幕生成等。
音乐信息检索
和语音不同,音乐通常包含很广泛的声源信息,并且在不同音乐源之间存在这复杂的依赖关系。音乐相关任务通常包含低级分析(起始和偏移检测,基频估计),节奏分析(节拍跟踪,仪表识别,下拍跟踪,速度估计),谐波分析(键检测,旋律提取,和弦估计), 高级分析(乐器检测,乐器分离,转录,结构分割,艺术家识别,类型分类,情绪分类)和高级比较(封面歌曲识别,音乐相似性估计,分数对齐)。上述这些任务通常通过人工设计算法,提取特征并且关联一个浅层的分类器。为了增强模型表征能力,获得更好的性能,上述任务可以通过深度神经网络单独训练或者联合训练。音乐相关的应用也很多,比如歌曲检索,乐器检索等。
环境声识别
有关环境声的任务主要有三类:声音场景识别、声音事件检测和标注。其中,声音场景分类就是将一段音频预测为某一个声音类别,是经典的分类任务;声音事件检测主要评估一段声音流某一类或者某几类声音在时间维度上的起始点和终止点;声音标注和分类任务相似,主要是预测多个声音类别的活动性,具体而言,给你一段声音,让你判断这段声音包含哪些声音类别,这些判断可能会包含更加细粒度的分类,比如判断发动机声音是汽车发动机还是摩托车发动机。环境声相关的应用包括声音监控,多媒体信息检索,可穿戴设备等。
定位和跟踪
利用多通道信号可以对声源位置进行跟踪和定位。跟踪和定位的主要设备条件是麦克风阵列,通常包含线性阵列、环形阵列和球形阵列等。麦克风阵列采集的信号一般是多通道的(和阵元数量相关)。传统定位方法可分为基于到达时延、基于空间谱估计和基于波束成型的方法。比如,MUSIC算法是一种基于空间谱估计的定位算法,它通过计算不同通道的协方差矩阵,对协方差矩阵进行特征分解,构造信号子空间和噪声子空间,然后进行空间谱的构建,最后进行谱峰搜索,确定声源位置。对于深度学习而言,是通过神经网络学习输入特征到输出声源位置的一个映射关系。通常输入特征可以选择幅度谱、相位谱以及相关矩阵等,网络结构可视情况选择MLP、CNN、CRNN等。定位和跟踪相关的应用包括监控、智能家居、智能会议室等。
声源分离
指的是在多声源混合的信号中提取单一的目标声源。主要应用在一些鲁棒声音识别的预处理以及音乐编辑和重谱。
声音增强
通常为语音增强,指的是通过减小噪声来提高语音质量。主要技术是去噪自编码器、CNN、RNN、GAN(SEGAN)等。
生成模型
根据数据集中的声音属性特征来生成新的数据,要求这些数据不能和原始数据集一样、要具有多样性并且训练和生成时间要很小,理想情况下是实时的。
总结和展望
特征
MFCC是声音处理领域最常见的声音特征,但是MFCC在深度模型中性能不是很好。log-mel spectrogram是目前基于深度模型的最常用的特征,其次是复数谱和声音序列。声音序列避免了人工提取特征的步骤,这应该充分利用深度模型的特征学习能力,提取更强的表征特征。然而,直接使用声音序列对于模型的训练成本提出了更高的要求,另外对数据本身也有要求(其中一点就是数据量要大),在实际应用中也难以实现。实际上,目前大部分声音相关的任务的最好的系统是基于log-mel spectrogram的。
作者也列举了几个开放的研究问题:
- Mel spectrogram 是不是声音相关任务中最好的特征表示?
- 什么情况下使用声音序列更好?
- 是否可以通过带有可学习参数的spectrogram使性能更好?
- 如果我们从声音序列中学习特征,那么这个特征是不是在任务中能够具有很好的泛化性?
模型
在语音识别、音乐信息检索和环境声识别领域中,深度学习都取代了传统的方法。在这些领域中,CNN、RNN和CRNN都取得了很好的效果,但是哪一种更好没有明确的定论。这两种或者三种网络根据其结构对输入数据进行不同形式的建模,比如CNN主要是局部特征的提取,RNN主要是时间维度相关性的学习,CRNN则是结合了两个网络的特征。
关于模型的开放研究问题:
- 在什么设定下,哪一种网络性能更好?
数据要求
除了语音识别领域,其他声音相关的任务都面临开放数据集小的问题。前面也提高过几个数据集,比如环境声的AudioSet,有200万个声音片段,但是这些声音都是weakly label的,实际上很难使用。在计算机视觉领域,针对特定领域开放数据集小的问题,可以通过ImageNet预训练模型,然后在目标领域进行适应性的调整。但是在声音处理领域,这样大型的预训练数据集是没有的。
数据方面的开放研究问题:
- 音频领域的等效问题是什么?
- 能否构建一个包含语音、音乐、环境声的大型声音数据集用于迁移学习,以解决很多领域的分类问题?
- 预训练模型如何使用少量数据适应新任务,比如新的语言、新的音乐风格、新的声音场景等?
除此之外,在计算复杂度(成本)和模型的可解释性也应该得到更多的关注。
参考文献
[1] A. Mohamed, G. Hinton, and G. Penn, “Understanding how Deep Belief Networks Perform Acoustic Modelling,” in ICASSP, 2012.
[2] C. Trabelsi, O. Bilaniuk, Y. Zhang, D. Serdyuk, S. Subramanian, J. F. Santos, S. Mehri, N. Rostamzadeh, Y. Bengio, and C. J. Pal, “Deep complex networks,” arXiv:1705.09792, 2017.
[3] Y. Tokozume, Y. Ushiku, and T. Harada, “Learning from between-class examples for deep sound recognition,” in ICLR, 2018.
[4] H. Purwins, B. Li, T. Virtanen, J. Schlüter, S. Chang, T. Sainath, "Deep learning for audio signal processing", arXiv:1905.00078, 2019.