欢迎光临散文网 会员登陆 & 注册

【RNN-LSTM】循环神经网络与自动作曲

2022-11-09 13:32 作者:雪狼的天空  | 我要投稿

循环神经网络(RNN)常用于前后有关系的序列分析和处理,LSTM( Long Short Term Memory)则是其中的一种构造,用于增强和修正其“记忆性”。


古诗生成器是这种神经网络的一种应用。同理,因为音乐信息前后也有内在的逻辑关系,亦可用此法来分析和构造。目前已经有基于RNN-LSTM的自动作曲机。


使用循环神经网络进行自动作曲的一般步骤是:收集旋律样本作为神经网络的训练数据,构造整个RNN-LSTM的模型,对模型进行训练,最后根据训练得到的模型权重数据生成新旋律。使用RNN-LSTM模型生成新旋律时,常常遇到的问题是会因为只取最大概率的音而陷入固定的循环,避免这个问题的方式是引入“温度T”参量的“退火”法——即在极大T之上,所有的概率会被T的因子拉平,如此原本小概率的音也会出现在生成序列中。


循环神经网络训练时常常要防止过拟合,以导致神经网络“死记硬背”输入旋律。这条“注意事项”和神经网络训练的目标——把损失函数降到最低——在实践中有时是矛盾的:即把损失函数降到很低时会出现返回大量“死记硬背”的输入旋律的情况。这点尚须解决。


接下来讲讲我对RNN-LSTM分析《唐五弦谱》“平调曲”的一些所得。首先要说的是实验目的:实验目的就是借由循环神经网络来分析“平调”这种调式的内在信源属性,进一步生成调式的“最长参照长度”下的“信息熵等于调式信息熵”的序列(下简称“熵序列”)。接下来是实验方法:方法就是选取所有“平调”的曲目,将其midi作为训练数据集喂给神经网络,然后一直训练到损失函数足够小。而实验结果则是:神经网络能够在较小的损失函数值之下死记硬背部分旋律,却不能够分析出这些曲目旋律之间的共性;因此可以说这个实验失败了。更有趣的是,当生成长度足够长,则大量曲目的部分旋律都会在生成序列之中复现,其中有些曲目的旋律会按几句混合在一起,有些则是单独一篇比较连续地出现。


仅从结果上分析:神经网络本身不仅没有产生出新的有意义的内容(无创造力),亦不能产生出没有任何指代意义,仅是调式规律映照的熵序列。这揭示出两点:第一、产生自调式规律的信源熵、调式的“最长参照长度”和“熵序列”都需要数学上的良定义,其中或有与神经网络本身属性的矛盾之处;第二、或许样本不对:更应该采用的是各种调子曲(modal prelude)来作训练材料,因为调子曲本身不表达内容。且是曲子借抄素材的来源。


除此以外,还有一点不甚完善的是对调式信源信息熵的估计:采用的是最长曲目信息熵估计法,此法应当估计出了一个足够大的上界,但可能与调式的信息熵本身相比,掺水的成分还是多了一点。这样神经网络就会学习到更多的具体旋律信息。


附:神经网络信息量的估计法:N个节点,则最大(N+根号N-1)乘上一个权重的信息量;假定其中各权重完全没有约束关系,则这个数就是信息熵。


附:调式信息熵的估计法:因为在长曲子的长度超过一定值以后,其信息熵增长缓慢(与长度的对数大约成线性关系),所以可以近似认为长曲子的信息熵就是调式的信息熵。

【RNN-LSTM】循环神经网络与自动作曲的评论 (共 条)

分享到微博请遵守国家法律