钢琴精灵在某种程度上让人联想到新手音乐家可以使用的摇滚乐队和吉他英雄等电子游戏,其重要区别在于用户可以在钢琴精灵上自由即兴,而不是从固定曲目重演歌曲。
钢琴精灵背后的团队受到了吉他英雄的启发,简化了演奏乐器的方式。他们不希望用户只是点击预先写好的曲谱,而是要在弹奏中制作旋律片段。为了实现这一目标,他们在一个庞大的古典钢琴音乐数据集上训练了一个人工智能程序,教它预测相互跟随的音符,就像手机的预测文本功能猜测你接下来会写什么一样。
它是如何工作的?
有很多方法可以将8键控制器序列映射到完整的钢琴演奏。 我们将自己局限于按键和音符之间的1对1映射,使用户可以精确控制复音的时间和程度,但不能播放哪些音符。 即使有这种限制,也有许多可能的映射; 例如,8个按钮可以在单个八度音阶上映射到固定比例。 我们使用在一组现有钢琴演奏上训练的离散自动编码器架构,而不是使用这种固定的映射,我们学习了时变映射:
双向LSTM编码器将一系列钢琴音符映射到一系列控制器按钮(在上图中显示为4,在实际系统中显示为8)。 然后,单向LSTM解码器将这些控制器序列解码回钢琴演奏。 训练之后,丢弃编码器并通过用户输入提供控制器序列。
您可能已经在上面的演示视频中注意到钢琴演奏中的音高轮廓与按钮序列的轮廓非常相似。 这种行为受到训练损失项的鼓励,该训练损失项使编码器因违反相对音调排序而受到惩罚,例如, 如果升序钢琴间隔映射到降序按钮间隔。 下图显示(顶部)用于真实钢琴演奏的钢琴,以及(底部)由轮廓正则化编码器输出的8按钮序列; 你可以看到两个序列的轮廓紧密匹配:
我们通过国际钢琴电子竞赛的一组约1400个艺术表演训练模型,该表演与Performance RNN中使用的数据集相同。 这种数据集的选择自然会影响所生成的表演的风格; 因为我们开源模型,欢迎您在自己的MIDI文件集上训练钢琴精灵。
值得一提的是,该项目正是用到了TensorFlow训练而成。TensorFlow是一个开源软件库,用于完成一系列任务的基于数据的编程,由Google Brain团队开发,最初于2015年11月9日发布,它能够非常有效地进行回归,分类,神经网络等,甚至能够在CPU和GPU上运行。
如果你想更加了解TensorFlow,或者说想实践一下人工智能项目,谷歌的另一款工具或许可以帮到你,也就是谷歌的AIY Projects项目。 AIY Vision Kit附带的软件运行三个基于TensorFlow的神经网络。 其中一个基于谷歌的MobileNets平台,能够识别超过1,000个日常物品。 第二个可以在图像中发现面部和表情。 最后一个是专门用于识别猫,狗和人的神经网络。