原文链接:A Tutorial on Deep Learning for Music Information Retriveal
深度学习在音乐信息检索(MIR)方向的应用介绍(上)
5 解决MIR问题: 实践建议
本节,我们更聚焦在实践上的建议上,通过一些深度学习模型的例子和建议,同时也讨论一些实践上的问题。
5.1 数据预处理
输入数据预处理对于有效训练一个神经网络是很重要的。有人可能会说神经网络可以学习任何类型的数据啊。但是,增加训练的权重需要更多的训练数据,而且一些预处理对训练速度有很大的影响。
进一步讲,音频数据需要一些指定的预处理。当使用2D表征的大小(magnitudes)时,对数映射( X X X-> l o g ( X + ϵ ) log(X+ \epsilon) log(X+ϵ) )被广泛使用来控制数据的分布,并且具有更好的表现。此外,音频数据预处理还是个开放问题。谱白化(spectral whitening)可以使用频率补偿不同的能量值。然而在音乐打标签的卷积网络中[13]它没有带来提升。使用2D卷积网络时,在计算机视觉里的局部差异归一化方法并没有带来提升,MIR问题上可能也是同样结论。
最后,有人可能想要优化信号处理的参数,比如FFT数量和mel滤波器数量,窗的大小,步长(hop)大小,采样率等。正如3.2节所说,降低数据的大小对于高效训练来说是很重要的。为了降低数据大小,音频信号一般被下采样到8-16kHz。然后我们可以尝试使用Kapre[20],Pescador(http://pescador.readthedocs.io),Fuel[113],Muda[71],等工具进行实时预处理。否则,在实践中预计算和存储可能会出现问题。
5.2 聚合信息
时间相关/时间无关(time-varying/time-invariant)问题需要不同的网络结构。就像在表1中
表1
决策时间尺度小的问题也就是时间相关问题,需要每个单元时间内(一般是短的时间帧)有一个预测结果。相反,决策时间尺度大的问题,需要有一种方法来聚合小的时间尺度的特征。经常使用的方法有:1、池化,2、具有步长的卷积,3、多对一的循环层
1.池化
对于卷积层,常见的做法是在时间轴上使用max-pooling层(4.3.1节也有讨论)。一个特殊的例子是在最后一层做一个全局池化[66]。
2. 具有步长的卷积(strided convolutions)
具有步长的卷积意思是步长大于1的卷积。这个的效果与max-pooling类似。我们应当小心的设置步长使得它不要大于卷积核的大小,这样输入的所有数据才会被卷积覆盖到。
3. 循环层:
循环层可以在任意轴做特征总结。他们加入了可训练的参数,所以就算更复杂,并且比前两者需要更多数据。前两者是逐渐降低数据维度,而循环层一般是用多对一。因此,它用在最后一层而不是中间层[17]。
5.3 网络的深度
在设计网络时,我们会发现有时决定网络深度的可能是经验也可能是随意的设置。网络应该足够的深才能捕捉到输入和输出之间的关系。如果这个关系可以用一个公式模拟,那么网络的深度应该足够实现这个公式。幸运的是,训练一个很深的网络变的越来越容易[101,41,40]。
对于卷积网络,在MIR领域它的深度越来越深,其它领域也是如此。比如,音乐打标签的网络和边界检测网络,还有和弦识别的网络在2014年用的是2层卷积[26],[90],[46],但是最近的研究中常常用5层或者以上的卷积层[15,68,52]。
RNNs的深度也增长的较慢。这个在MIR领域是趋势,可能是因为1、多层的循环层并不是按照层级关系来归纳特征,2、由于循环链接,循环层已经很深了,i.e.,它是在时间轴上的深,因此层数相对于卷积网络来说没有那么重要。
5.4 输入层(First layer to input)
参考上图看
- d1: 就像之前说的,全连接层并不是频率无关的。在输出时,全连接层移除了频率轴上的空间性,因为整个频率范围被映射到了一个标量。
- d2: 矩阵乘以输入的操作,与d1一样但是使用多帧来做输入
- c1:使用 F × 1 F\times1 F×1大小的卷积核,那么它就与d1是等价的了。 F × W F\times W F×W大小的卷积核,并且 W > 1 W>1 W>1时,就等价于d2
- c2: 很多近期的深度神经网络结构在频谱图上使用2维卷积层。这层的输出是 N N N个特征图,这些特征图保留了各个轴上的空间性。 还有个特殊的用法是使用2维卷积层来增强某些模式的重要性[70],其中为了更好的识别和弦 5 × 5 5\times 5 5×5的卷积核压缩了瞬态(transient)。根据任务目标的不同,它也可以增强瞬态[16]也可以同时做两者——去拟合一个harmonic-percussive分离(可以理解为分离具有基频和没有基频的声音)
- r1: 它将输入帧映射到另个维度,与d1相同。因为循环层可以使用很多邻近帧,所以使用r1的前提和使用d2的非常像
5.5 中间层
- d1, d2, c1, r1: 重复使用这些层,增加模型的非线性度。注意叠加具有上下文的层可以使得网络可以“看”到更多的上下文。举个例子,对于全连接层,每个都加上邻近的4帧作为输入(2帧过去2帧未来),那么 y 2 [ t ] y_2[t] y2[t] ,也就是第二层的输出是一个关于 x 2 [ t − 2 : t + 2 ] = y 1 [ t − 2 : t + 2 ] x_2[t-2 :t+2] = y_1[t-2:t+2] x2[t−2:t+2]=y1[t−2:t+2]的函数,也就是关于 x 1 [ t − 4 : t + 4 ] x_1[t-4:t+4] x1[t−4:t+4]的函数。
- c2: 很多结构包含多余一个的卷积层,想上面描述的一样,叠加的卷积层可以让网络“看”到(输入的)更大范围。
- p1, p2: 池化层一般会跟在卷积层后面。
输出层
全连接层总是用作输出层,在输出层,节点个数
V
V
V会被设为分类的类别个数或者预测值的维度。例如,如果任务是要将音乐分成10个流派,就会使用具有10个节点的全连接层(使用softmax作为激活函数),其中每个节点代表属于这个流派的概率,真实值一般会以one-hot的形式给出。
图13:对于时间无关和时间相关问题的模型结构建议。注意d1和d2可以互换。
5.7 模型建议
在图13中,两个流程图展示了常常用来解决时间相关(上半部分)和时间无关(下半部分)的MIR问题。就像第4节所说的,特征提取器和分类器之间没有严格的界限。
图13中的结构仅仅有两层(池化层一般不计算在内)特征提取阶段,一层在分类阶段。实际应用中,根据问题和数据集大小,网络深度可以加大。
5.7.1 时间相关(time-varying)问题
- DNN: d1-d2-d2-d1: 这个结构在[51]中用来学习色谱(chroma)特征,其中连续的15帧被输入到3层的DNN,输出包含12个节点(每个音高一个)。因为任务目标是分辨音高,网络不应该的音高无关的,所以我们使用了全连接层而不是卷积层。因为复音也要考虑,它就成为了多标签(multi-label)的分类问题。因此,sigmoid激活函数用在了输出层,每个节点代表一个色谱(chromagram)值[0,1]。
- Conv2D: c2-c2-p1-c2-c2-p1-c2-p1-d1-d1-d1: 在[88]中的歌声检测任务中作者使用了5层的2维卷积核的卷积层和3层全连接(此处不考虑batch normalization层)。因为问题是个二分类(有没有人声),输出层有一个节点,它的激活函数是sigmoid,1代表有0代表没有。在2016ISMIR会议,作者展示了训练好的网络对于人声的调频也会有反应。人声的音高是变化的,因此卷积层带来的音高无关性对这个问题的解决很有帮助
- Bidirectional RNN: r1-r1-d1: 深度双向LSTM也被用来做歌声检测[61]。网络的深度会影响表现,4层的网络在[2,3,4,5]层结构中表现最好。尽管[61]并没有与单向的网络比较,但我们认为双向结构还是有帮助的,因在 t t t时刻是否有人声与邻近帧是有关的。在[61]中,预处理阶段包含了harmonic-percussive分离[105],以便增强人声旋律。我们也可以增加其他的与任务相关的预处理,尽管由于计算量大,这种做法并不常见。
5.7.2 时间无关(time-invariant)问题
- Conv1d: c1-p1-c1-p1-d1-d1-d1: 第一层的1维卷积极大的降低了输入的大小( F × T F\times T F×T—> 1 × T 1\times T 1×T, 因为卷积核的高度等于 F F F)。因此,这个模型比较节省算力[17]。它是用在MIR领域的较早的结构,比如在[26]音乐打标签任务中。注意,池化仅仅在时间轴上作用,因为频率轴没有隐含任何空间意义。这个模型的局限来自它的卷积核大小;因为卷积层无法学习到卷积核内的变化,因此它无法学到局部的模式(在频率轴的局部)
- Conv2d: c2-p2-c2-p2-c2-p2-d2: 通过叠加2维卷积和下采样,网络可以在不同的尺度下学习频谱图。前面的层学到局部的模式,然后在更深的层中被结合起来。最终,网络覆盖了整个输入的范围,并且允许少量的变形。2维卷积的卷积网络用在很多分类和回归问题上,比如音乐打标签[15],头音检测[90],边界检测[108],歌声检测[88]。
- CRNN: c2-p2-c2-p2-r1-r2-d1: 这个结构结合了卷积层和循环层[17]。前面的卷积层捕捉局部模式,然后池化层降低大小。最后循环层综合了一下前面的特征图。[17]中的分析说明了网络在做时间轴上信息总结的时候受益于它的循环层,获得了最好的表现。CRNN还被用于情绪识别,并且获得了state-of-the-art水平[69]。
6. 结论
本文展示了一个使用深度学习做MIR研究的教程。使用深度学习解决问题其实也就是加载数据并且将它喂给网络。由于计算密集性,对一个网络的参数的穷举不是一个可行的方案,因此,我们应该带着对领域知识的了解和深度学习技术的了解仔细的设计网络的结构。
我们复习了深度学习的基本知识,并且复习了MIR。然后我们总结了一些比较流行的层结构:全连接、卷积、循环还解释了它们在MIR场景下的意义。带着对这些层的了解我们可以设计一个网络结构来解决指定问题。最后,我们总结了使用深度学习解决MIR问题更加实际的方面。虽然提出的结构都是解决特定问题的,它们也可被用来解决其他问题。
深度学习在不同的领域已经获得了state-of-the-art的结果,在某些方面甚至超越了人类,比如图像识别[41]和玩游戏[99]。我们非常相信深度学习还有巨大潜力,更多的MIR研究将会依赖于深度学习方法。