《Deep Learning Techniques for Music Generation – A Survey》深度学习用于音乐生成——书籍阅读笔记(五)Chapter 4.4

4.4 Common Issues and Techniques (共同问题及技术)

4.4.1 Global vs Time Slice 数据表示的时间粒度
  • Global——在第一种情况下,没有时间序列的概念,也没有明确的时间概念。深度神经网络处理的数据粒度是一个整体;这时的网络架构一般不是循环地(一般是前馈结构或者是一个自编码器AE)。例如MiniBach (见7.1.1.1)和DeepHear(见7.1.3.1)
  • Time step(time slice)——这是第二种情况,是最常见的情况;输入是音乐的局部的时间片段,是对应于时间步的;深度神经网络处理的数据粒度是一个时间步;时间步经常设置为最短的音符时值,也可以设置得更长一些。
  • Note step——这是第三种情况,是不常见的情况,是Walder在[113]中提出的;这种方法中没有固定的时间步。深度神经网络处理的数据粒度是一个音符。

可以推论:在global情况中,训练时和生成时输入的音乐数据需要是固定长度的(同样的时间步数);而在其他两周情况中,序列的长度是可变的,训练时输入、生成时输入、生成的输出的实际长度都可能不同。

4.4.2 Note Ending 表示音符的结束

怎么去表示一个音符是否结束了呢?在MIDI的数据表示中,音符的结束明确地用一个Note Off音符事件来表示。在piano roll的表示中,音符的结束没有明确的表示,所以我们可能难以分辨两个重复的四分音符和一个二分音符。在[21]中,Eck and Schmidhuber提出了两种方法来解决这个问题:

  • 一是最常用的一种,将一个时间步分为一分为二,用一个特殊的tag来标记音符的结束。优点是不需要改变输入和目标数据的数据结构。
  • 另外一个方法是利用一个特定的计算单元来确定音符的开端,Todd在[106]中使用了该方法
4.4.3 Time Quantization 时间量化

一些全局的时间量化,比如之前提到的数据表示中时间步大小的定义;Eck and Schmidhuber还提出了两种可选的方法:

  • 常用地,将时间步设置为数据集中音乐最小的音符时值,比如十六分音符。这种“leveling down”的一个直接结果是,处理的时间步数与实际音符的持续时间无关;
  • 另外一种,是Mozer在他的CONCERT系统中提出的[77] (见Section 7.3.1.1),他对音符时值使用了分布式编码,以使在网络处理时间步时可以处理一个任意时值的音符。用一个时间步表示一个音符,而不是按时间最小单位将一个音符表示到多个时间步,网络在学习全局结构时需要跨越的时间步长大大减少。Walder处理音符的粒度的方式与之相似,时间(时间步)没有统一的离散化,也不需要离散化。
4.4.4 Feature Extraction 特征提取

上述的数据表示即可以作为神经网络的输入,或者可以进行初步的特征提取以便用更加压缩的形式来表示数据。这可能是一个可探究的部分,用以获得训练和生成时的效率和准确率。基于特征的表示更适合于indexing data例如7.11.1.1中的基于查询音乐单元的系统。

这一系列的特征可以手动或者自动定义:在手动定义的特征中,bag-of-words是NLP中国一个通用的策略,它也可以用于其他数据类型,包括音乐数据,见7.11.1.1。

也有一些复杂的方法用于神经网络来自动计算向量表示,以尽可能的保留items之间的关系。在文本中的向量表示叫做word embeddings。最近一个NLP中相关的模型是Word2Vec模型[70]。在[68]中,演化成了Chord2Vec模型用以对和弦进行向量编码。

4.4.5 Input Encoding 输入编码

表示形式选定之后,怎么将数据表示(一系列的变量,比如pitch)编码成适于神经网络的一系列输入还是一个问题。我们考虑一个例子,将音符的音高作为一个变量进行编码,有以下两种方式:

  • Value编码——为一个变量考虑一个单独的输入节点;直接将变量的值编码为数值。该变量是pitch的情况下,可以有以下几种选择:相对频率值(Herz);相对MIDI音高,用的比较多;或者给每个pitch分配一个范围在[0,1]的相对值(类似于正规化),等等。
  • Item 编码(One-hot编码)——这种想法是,将每个可能的音符考虑为一个离散的元素(记号)或者是词汇,N个词汇或者说N个音符则为N个输入节点。编码的是音符音高的出现而不是音符音高的值:特定音符音高的出现将被编码为对应输入1,而所有其他输入为0。直观的讲,这类似于piano roll的表示

Value编码除了在wav的编码一般很少用到,而one-hot 编码是最常用的方法,它将每个不同的值(例如音符的音高)表示为不同的输入和特性,它们都是正交的,因此可以显式地和单独地处理它们;Value编码可能由于数值操作(近似)而丢失一些准确性;换句话说,one-hot 编码是一种离散化,比原始的近似值更加鲁棒,缺点是对于高的基数,输入可能很庞大。

实际中,one-hot编码在用于输入时也一般同时用在输出上,使得深度学习的任务从一个预测任务变成了一个在一组离散可能值之间的分类任务

4.4.6 Note Encoding 音符音高编码

大多数系统考虑不和谐(enharmony),即在调和系统中,A#与Bb是等同的,虽然在作曲家的意图(和调性上下文),它们可能是不同的。一个例外是DeepBach系统(见7.2.2,1),它用音符的名称对音符进行编码,而不是用MIDI音高pitch。DeepBach的作者认为这种附加的信息可以使模型更加准确,获得更好的结果。

4.4.7 Meta-Data元数据

在一些系统中,从乐谱中提取的一些额外的信息可能也会被表示出来和用到,即称作元数据meta-data,例如note ties(音符连接线,特指连接两个音高一样的音符);fermata(延长记号,如BachBot系统见7.3.1.3);harmonics(如CONCERT系统见7.3.1.1);key和time signature7.4.1.1),等等。这些附加信息可能使学习和生成更加准确。

4.4.8 Transposition 转调

在机器学习用于生成合成数据中,一个通用的技术即是人为的扩充数据集来提升学习效果;在音乐领域,自然地我们会将曲子转调到所有key,除了扩充数据集,这种操作还能使得学习样本具有转调不变性更加一般化。这种转调的技术的一个例子是[61]见7.7.1.1。还有一个相反的例子是,将所有样本的key转成一个共同的key,例子是[7]它认为这样可以促进学习,见7.3.2.1。

4.4.9 Datasets 数据集

一个实际问题是,用于训练和评价的数据集的获得。在图像领域,已有一些参考的数据集(比如MNIST手写数字数据集[64]),但是对于音乐领域却没有这样的数据集。在复调音乐(chorales)领域,有一个JSB Chorales数据集,在[2]中有介绍。
还有一些其他的数据集:

  • [114],Walder的经过预处理的MIDI数据集
  • [104],MusicNet,330首古典乐录音,一共有一百万个关于时间和乐器信息的标注
  • [82],LSDB,一个Leedsheets参考数据集,包含了超过12,000个Leedsheets
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值