试论“人工智能技术”(AI)在赋格创作中的应用
2019-03-12崔佳
崔 佳
(枣庄学院音乐与舞蹈学院,山东 枣庄 277160)
一、人工智能作曲
人工智能是研究开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新兴科学。随着“云计算”大数据的应用,人工智能技术近几年有了极大的进展,在智能机器、图像处理、模式识别等领域产生了突破性的应用。
人工智能在音乐领域也有广泛的用途,如利用人工智能技术识别乐谱、分析曲目或辅助作曲等,在一定程度上解决了以往计算机自动生成旋律过度随机和趋于单调的问题。特别是人工智能作曲,已经成为音乐研究的一个重要方向,引起了国内外不少作曲专业和计算机专业专家、学者的关注。中央音乐学院也在2019年的博士招生目录中,初次增加了“音乐人工智能与音乐信息科技”专业的招生计划,并采取音乐导师与科技导师的双导师培养模式。
下面我将以赋格曲为创作目标,基于赋格曲音频的音乐知识规则,利用长、短期记忆循环神经网络训练,尝试设计研究一种新的自动合成乐曲算法,进行人工智能作曲,并将其准确应用到赋格曲的创作实践中去。
二、人工智能技术在“赋格”创作中的应用设想
(一)传统赋格曲的基本形态
赋格,来自拉丁文“Fuga”,意为“逃离”和“追逐”。它是一种开放性的复调音乐体裁,在结构上,它可以是单主题或多主题的,包括主题呈示、发展和再现三个阶段,体现出三部性结构原则。[1](P133-155)
一般情况下,一首赋格曲可能包含的主要结构及其写作手法如下图:
呈示部补充呈示或副呈示部间插段紧接段主题、答题(属调主题)答题先进入材料来自呈示部主题、对题或小结尾主题的卡农对题(与主题、对题八度二重)主题与答题声部互换多用“无缝连接”;采用模仿、模进、复对位等手法模仿时间、音程距离、声部数量不限小结尾;自由声部无或者较为自由每一间插段后要紧跟近关系调的主题/答题(关系大、小调);属持续音结束以“逐渐紧缩”为特点;主持续音结束(加变格补充)
图1赋格曲的基本结构
从赋格的上述基本结构我们可以看出,赋格创作有一定的“程式化规则”,要求作曲家按照一定的音乐布局原则和对位法则进行创作,这一类型作品的创作特点与创作技法,与人工智能作曲的运算过程存在不少相似之处,这就具备了运用人工智能技术进行创作的基本条件。
(二)人工智能技术在“赋格”创作中的应用设想
1.使用已有人工智能作曲技术进行赋格创作的利弊分析
人工智能作曲需要计算机专业人员与音乐家的密切合作,在我国这项技术仍然处于起步阶段。根据算法的结构和处理数据方法的不同,计算机作曲创作方式有以下7个类别:数学模型、基于知识的系统、语法模型、演化方法、演化发育方法、混合系统法和系统学习法,以下将分别分析利用它们作曲的利弊。
(1)数学模型
数学模型是基于数学公式和随机事件的生成方法来进行音乐创作。在随机过程数学模型中,创建的音乐片段是由一系列非确定性方法来生成的。最常用的算法是马尔可夫链和各种各样的高斯分布的变形算法、分形几何方法和“整数数列线上大全”等。“整数数列线上大全”提供了一种使用整数序列来表示十二平均律音乐的手段。
这类方法的特点是整个过程不需要人的干预,仅需要依靠数学模型来建构。在作曲过程中,作曲家仅能通过调整加权随机事件的权值来进行部分调控。这是一个数学家和音乐家协作完成的过程,假如以赋格曲为创作对象,不易对建构过程中的音乐作品进行随时调整,且生成的音乐作品的音响和音乐风格不好界定,有可能写出完全不像赋格的音乐。
(2)基于知识的系统
这类方法是从特定的音乐流派中提取出音乐特征,并使用这个特征去创建新的相似的音乐作品。即基于一个预先设定好的参数集合来进行新乐曲的创作,而这个集合中的参数就是从希望创造的相似音乐类型和流派中提取出来的。通常,这一工作需要一个完备的测试集和约束集来使得整个音乐的构建过程变得完整。[2]
根据这种方法,创作巴赫风格的赋格曲还是极有可能的。但此种方法的缺陷在于:“测试集和约束集”的建立过程漫长而繁复,且只能对相似的音乐作品进行创作,假如是不在“集”或“系统”中的其他风格,就无法作为创作素材所运用。
(3)语法模型
音乐也可以被理解为一种具有特殊语法集合的语言。曲谱的构成都是由构建这种音乐语法开始的,而之后再由这些特定的音乐语法构造易于理解的音乐片段。音乐语法模型通常包含除单一音符外的宏观作曲规则,例如,和声与节奏等。应用该方法的一个典型的例子是McCormack[3]提出的基于语法的音乐作曲,在其中使用了一些语法模型和语言处理工具。
此种方法涉及到“作曲规则”,以及音乐的基本要素等问题,且不说对语法的理解有无偏差,作曲规则是否有一定之规,仅语法和作曲规则之间的相关性都有待考证。假如用此种方法进行赋格创作,可能会出现作曲规则的混乱,音乐要素的不确定,最终导致音乐体裁和风格的偏离。
(4)演化方法
用于作曲的演化方法是一种基于遗传算法的自动谱曲方法。整个作曲过程是由类似生物的演化过程手段构成的。通过突变和自然选择这两种演化过程,各种解决方案朝着最恰当的音乐片段表现形式不断演化。
(5)演化发育方法
演化发育方法是将上面提到的演化方法与发育过程进行结合构成的一种新方法,该方法能够很好地针对复杂的结构进行生成和优化工作。演化发育方法,通过不断的迭代过程将非常简单的曲谱(仅仅包含几个音符)转化为一个复杂且成熟完整的乐段,最终获得整个音乐结构。
(4)(5)两种作曲方法同方法(1)有类似之处,但它更加“智能化”,如同生物进化中的“优胜劣汰”法则,但最大的缺陷是作品的质量完全依赖于一个叫做“筛选过程”的算法,通过筛选不断淘汰不好的解决方案。“筛选过程”的标准令人质疑,且不适合创作大型作品,因此也不推荐进行赋格创作的尝试。
(6)混合系统法
基于前面几种方法,往往很少能够构建出在美学上令人满意的音乐作品。因此,不同类型的算法通常会结合起来,构建一个混合系统,来综合各个算法的长处和规避单一算法各自的缺陷。Fox和Crawford[4](P213-223)提出的一种基于多种随机方法的混合系统在自动音乐谱曲方面取得了出色的表现。
混合系统唯一的问题是其系统变得日益复杂,并且需要更多的资源来组合和测试这些算法。它可以完成各种类型的乐曲创作,在前面几种已有人工智能作曲方法里,是最适合进行大型作品建构的方法,不同类型的算法可以完成不同的作曲规则,当然也完全可以涉及赋格创作这一领域。
(7)系统学习法
系统学习法,是一种不需要采集正在处理音乐的数据,如流派等先验知识的方法,相反地,系统通过算法自身从用户或操作者提供的样例素材中自动收集和学习出有用的信息。此种方法通过音频特征提取的系统,与方法(2)有诸多相似之处,只是不太适合用一个特征创作一首大型作品。假如用来创作赋格曲,那么还是划分成不同部分来进行,主题、答题、对题等都分类收集,最后进行拼接,也许成品会与你所期待的真正的赋格音乐特征和音响效果更为相符。
2.基于“IndRNN循环神经网络”创作赋格的设想及实践
利用人工智能、深度学习的神经网络系统的学习法,是目前自动作曲发展的趋势。循环神经网络(RNN)已经被广泛用于序列数据的处理。然而,由于常见的梯度消失和爆炸问题以及很难学习长期模式,RNN通常难以训练。为了解决这些问题,提出了长短期记忆(LSTM)和门控循环单元(GRU)。另外,RNN图层中的所有神经元都纠缠在一起,它们的行为很难解释。为了解决这些问题,采用了一种新型RNN模式,称为独立循环神经网络(IndRNN),其中每层中的神经元都相互独立,并且它们跨层连接。最终实验结果表明,IndRNN管理起来很容易,能防止梯度消失和爆炸,同时还能让网络长期学习。
下面我就对应用“IndRNN”系统创作一首典型赋格曲的过程作一描述:
(1)音乐生成模型相关的形式化描述
基于AI的赋格创作可以分为两个步骤:首先,选取一定量的赋格乐曲作为训练集进行支持向量集的模拟,以得到合适的曲式模型,我选择巴赫的《十二平均律曲集》中的48首赋格作为基本训练模型,模型构建完成后,自然就包括了图一所示的赋格曲的基本结构。其次,设计分类器系统,从上述步骤的数据库中提取不同的结构片段组成乐曲。分类器的工作按以下几个步骤进行:一是从赋格音乐库中得到输入信息的解码器;二是从赋格音乐库中得到反馈信息的解码器;三是把应用规则结果转变到环境中去的受到器;四是赋格产生式规则集合构成分类器群体,每一个分类器都有关联的适应度;最后是建立对产生成功的规则进行正向反馈的系统。如果实现这个步骤,就可以自动选择设定好符合规则的赋格乐曲的基本结构了。
(2)音频预测训练数据集组织
选择一批音频乐曲用于构建训练集,仍然选择巴赫的《十二平均律曲集》中的48首赋格音频来构建训练集。将每个乐曲分割为单位音乐序列,具体步骤如下:
a.音频数据的采集。
音频采集首先要划分采集音频单位,划分过程需保存音频韵律的节拍连贯性和韵律的窄幅音频特征性,因此,若采样频率过高,采样周期过短,会丢失小节的完整性,则丧失了作品的旋律与节奏,若采样频率过低会导致每次采样数据相关性下降。经过对比,我们设定采样周期T=2秒,当采样音频节奏为每分钟80拍时,单位容量的节拍约为2-3小节。音频编码中,编码流xm与音频周期和持续时间之间存在关联,根据持续时间,将样本流裁剪成等单位时间的连续序列。
b.音频数据特征集的处理。
要从初始特征集合中选取一个包含了全部重要信息的特征子集,需要遍历所有特征子集,为了避免产生组合爆炸,我们采取了“遴选子集”的办法评价出它的好坏。
第一个步骤是“子集搜集(subset search)”,给定特征集合{a1, a2, .... an},我们可以将每个音频片段的节奏特征看作是一个候选子集,对这d个候选单特征子集进行评价。假定{a2}作为第一轮的选定集,然后在第一轮选定集中加入一个特征,构成新的最优解。这样逐渐增加相关特征的策略称之为前向(forward)搜索策略。
第二步骤是“子集评价”问题,给定的数据集D,假设D中第i个样本所占的比例为pi(I, 2...., |y|),同时保证上述采样音频样本是离散的,对于特征子集A来说,实际上A确定了对音频数据集D的一个划分,每个划分区域对应A上的一个取值,而样本标记信息Y则对应D的赋格样式划分,通过比较两个划分的差异,就能对A进行评价。则Y对应的划分差异越小,说明A越接近赋格结构。信息熵是判断这一差异的途径。
特征选择采用过滤式特征选择方法,设计一个“相关统计量”来度量特征的重要性,通过对频率和音调的统计来还原人耳对音乐的反映。该统计量是一个向量,其每个分量分别对应一个初始特征,初始特征的重要性由子集中每一个特征所对应的相关统计分量的和来决定。最终只需要一个阈值Π,然后选择比Π大的相关统计量分量所对应的特征即可。通过设置“相关统计量”在音乐信号上能够有效地识别音频节奏和音调,可以作为音频分类的特征。
此步骤结束,赋格创作中的旋律、节奏、调式、调性等一系列要素也就基本确定下来了。
(3)神经网络模型训练与预测
从音频数据库中随机挑选一组音频序列,则音频波形序列联合概率x = {x1; : : : ; xT}可以分解成如下条件概率分布的序列积:
①
由此每任意一个音频样本xt都依赖其前序所有步骤产生的样本。条件概率分布由若干卷积层进行建模。该网络中没有底采样层,模型的output与input具有相同的时间维度。模型使用有限项离散概率分布的梯度对数归一化softmax层输出一个xt上的类别分布,使用最大对数似然方法对参数进行优化。然后在验证数据集上对超参数进行优化,可以测定模型过拟合或者欠拟合,从而调整参数。
在训练阶段,由于标定音频序列数据x的所有时间步骤都是已知的,因此将全部时间步骤的条件概率预测并行处理。在推断阶段,预测结果是串行的:每一个预测出的样本都被传回网络用于预测下一个样本。因为原始音频通常保存为16位整数序列对应每个时间步骤的个值,针对每个时间步骤的所有可能值,softmax层将需要输出65536个概率,为了更容易处理,我们先对数据实施一个μ律压扩变换,然后量化成256个可能值:
②
这里-1< xt< 1 并且μ = 255。与简单的线性量化相比,这个非线性量化处理可以对数据进行更好的重构,特别是对于音频数据重构后的信号,听起来非常接近原始信号。
给定一个额外输入h,可以对这个给定输入进行条件分布建模,这时公式①就变成了:
③
基于额外的特征变量进行条件建模,我们可以引导模型产生有期望特点的音频。基于赋格结构特征建立一个变量序列{h1,h2,...ht},通过把赋格特征作为额外的条件输入给模型,我们可以在模型中选择符合特定条件的信号进行输出(符合赋格结构风格的音频)。
循环以上流程,直到模型曲式结构符合赋格特征相似度的阈值满足设定为止,训练完毕。
此步骤完成,可以使赋格曲的结构与旋律、节奏、调式、调性等要素有机结合,在神经网络的模型训练与预测下,实现较为优化的组合与配置。
(4)内核平滑
通过前述LSTM模型分类训练得到一组音频序列(L1,L2,…,Ln)。该音频序列具备了赋格曲式结构的特征,但是序列是离散的。需要进行平滑拼接的音频处理工作,采用内核平滑拼接法。内核平滑即计算局部平均:对于每一个新的数据来说,用与其特征值接近的训练数据点求平均值来对其目标变量建模。设置宽参数,是用来控制局部平均的滤波窗口大小。内核平滑设置的窗宽参数取值不同所产生的效果也不同。窗宽值较大时,几乎是用所有训练数据的平均值来预测测试集里每个数据点的目标值。这导致模型很平坦,对训练数据分布的明显趋势欠拟合(under-fit)。窗宽值过小时,每次预测只用到了待测数据点周围一两个训练数据。因此,LSTM音频模型把训练数据点的起伏波动反映出来。这种疑似拟合噪音数据而非真实信号的现象被称为过拟合(over-fitting)。我们的理想情况是选取合适的窗宽参数,处于一个平衡状态:既不欠拟合,也不过拟合。使得内核平滑后的曲式呈现自然而不突兀,所以平滑处理的结果直接影响到生成模型及最终得到的音乐质量。
在赋格曲中,主题陈述结束后或答题结束回返主题时的小结尾,主调与属调的切换是否过渡自然;在每个间插段结束时,与后面新调性主题的连接,转调是否自然;还有每一个紧接段等是否能够按照训练模型的设计做到“逐渐紧缩”,这都是我们在此训练中需要进行无数次尝试和聆听去解决的问题。假如再复杂一点,主题本身就包含转调,是否又该建构更多的训练模型和规则呢?这也许不是廖廖几千字就可以论述清楚的大课题了。
上面的算法,使用的是Google发布的Tensor Flow工具包,在Python语言和GPU环境下实现提出的RNN网络算法,实现自动作曲,并验证了其在乐谱生成领域具有出色的表现,但因模型构建、训练与预测,涉及到的乐曲数量之多,作曲规则之多,难度之大,还未能生成一首完全满意的赋格成品,仅呈现给大家一个实现赋格作曲的设想而已。
三、结语
笔者以赋格创作为目标,以音乐音频为操作对象,在AI作曲方面进行了设想和尝试。最终期待实现的结果是,借鉴数字信号采样处理手段,对音频信号进行采样,以“相关统计量”作为特征评价度量值,将音频文件拆分为相关序列特性的采样片段序列,并以长短期记忆神经网络作为训练模型进行生成训练,通过机器学习生成的音乐序列,将离散序列平滑拼接为完整的赋格结构音频,实现AI赋格创作。
作为音乐学与计算机科学相结合的交叉学科研究,利用人工智能技术进行作曲,需要研究者兼备两个学科的知识与技能,具有一定的难度和创新性,但受本人知识、水平的限制,该设想的操作难度较大,目前只停留在初级研究阶段,因AI技术与赋格创作对接的复杂性,笔者还未能制作完成本文设想的“赋格”作品。文中关于人工智能作曲的描述和设想,可能存在诸多不合理之处,此文只想起到“抛砖引玉”之功效,特别是“IndRNN循环神经网络”的具体运用,是目前业界较新的提法,有待于作者以及广大业内专家同行们继续探索、讨论与实践!