陈东泽(Eurychen)| 东泽煮粥 - 所见所闻所学所想,煮成一锅粥

Recent content on 陈东泽(Eurychen)| 东泽煮粥 - 所见所闻所学所想,煮成一锅粥

马上订阅 陈东泽(Eurychen)| 东泽煮粥 - 所见所闻所学所想,煮成一锅粥 RSS 更新: https://eurychen.me/index.xml

AI 作曲 (完整思路)

2021年12月22日 17:30
Produced by OmniGraffle 7.18.5\n2021-12-19 10:04:48 +0000 屏保 Layer 1

小时候的游戏

小时候,我热衷于一类数字游戏,在一堆数字里寻找规律。 比如:1,1,2,3,5,8,13, __?. 答案是 21。所有数字都满足规律:「第三个数字等于前两个数字之和」。

而这个乐于寻找规律的习惯,似乎一直在伴随着我的成长。即使现在,我作为一名初学钢琴的中年人,我仍然对于流淌于音符间的规律感到好奇。于是我便开始用 AI 探索音符间的秘密,并由此诞生了几段 100% AI 创作的旋律:

ckpt28500-pop17-01.mid

ckpt28500-pop17-long-01.mid

其实「AI 作曲」就是一个找规律游戏,在一系列音符的关系中寻找规律,预测出接下来最合适的那个音符。

最终 AI 生成的旋律是由数据、数据 Tokenzie、模型架构、训练以及采样来综合决定。

  • 数据决定了风格:只听过古希腊诺姆音乐的人,是几乎没法写出酒神赞歌的
  • 数据 Tokenzie:如果音符是乐高积木,那么数据 Tokenzie 就是设计这些乐高积木最基础木块。
  • 优秀的模型架构决定了 AI 的学习能力:天资卓越音乐人能举重若轻写出动人心魄的音乐,而平凡如我的普通人则需要百倍的眼界(数据)与努力(算力)。
  • 训练:模型学习成长的过程
  • Sampling(采样):AI 的预测结果是一堆概率(数字),可以直截了当选取最大概率的音符,亦可以将整体概率分布作为选择依据。

MIDI 与 音乐数据

音乐是一种声音在时间中流动的艺术,并在过程中形成了一种结构。

从物理学出发,声音的实质是传声媒介质点所产生的一系列振动现象的传递过程。而动听的音乐正是一系列质点振动的总效果。 人类可以轻而易举的通过耳膜与「音乐细胞」来感受质点振动的效果,但 AI 没有人类的耳朵,AI 的世界是虚拟化的,组成那个世界的最小「粒子」是数字。

因此,需要一座桥梁,架设在振动与数字之上,连接于现实与虚拟之间。而这座桥梁,早在 1983 就已落成,它就是 MIDI。

MIDI 的全称是「Musical Instrument Digital Interface」,即「乐器数字化接口」。

MIDI对音乐的管理无微不至,即能精细独立的管理乐音的四要素:音高、音长、音强和音色。又有极高的存储效率,200 小时的音乐只要 80M 左右的存储空间。MIDI 所存储的实际只是一组指令,告诉键盘、贝斯、架子鼓等在某个时间以怎样的方式发声。简单来说,MIDI 存储了时间点与音符的对应关系。这与以上 AI 猜音符的游戏不谋而合。

既然 MIDI 很合适,那么把互联网上海量音乐转换成 MIDI 文件,就可以得到充足的数据源。确实如此,但是将网络中 MP3、WAV 等音频转换成 MIDI 的过程也是一个重大挑战。从音频到 MIDI 还需要转录、同步、旋律,和弦提取等。

近几年,转录技术迅速发展,为数字音乐提供了大量且优质的 MIDI 素材,2018 的转录还只能从干净的音频信号中提取相对单一的声音。而就在上个月,Google Magenta 团队的最新论文[MT3: MULTI-TASK MULTITRACK][1],已经对多层次的复杂合奏音频进行转录。( 转录技术不是本文重点,感兴趣的朋友推荐阅读文末 [1]。本文所用的数据源来自 aiLabs.tw 团队的 Pop1K7 数据源。

MIDI Tokenzie

如果音符是乐高积木,那么 MIDI Tokenzie 就是设计这些乐高积木最基础木块。

在乐理知识中,一首曲子的元素离不开:小节、节奏、音高、音长等等。MIDI Tokenzie 正是定义了这些元素的最基本「小木块」,每首曲子都是「小木块」的有序组合。

一种叫 REMI[2] 的 MIDI Tokenzie 方式。就是把 MIDI 按照如下几个纬度打散拆分:

  • 小节/位置(Bar/Position): 把一个小节的长度平均分成 32 份,每一份代表该小节中的一个位置。 每个「小木块」分别用 [1~32] 表示。
  • 速度(Tempo):从慢到快,平均拆分成 32 种速度。数字范围[33~64]。
  • 音高 (Pitch):钢琴的 88 个键各自为独立音高。「小木块」范围[65~152]。
  • 音长(Duration): 从短到长,平均拆分成 64 种音长。「小木块」范围[153~216]。
  • 音强(Velocity): 从轻到重,平均拆分成 64 种音强。「小木块」范围[217~280]。
  • 休止(Rest)): 从轻到重,平均拆分成 10 种音强。「小木块」范围[281~291]。 如此一来,一段旋律就可以用一段数字序列来表示了。

MIDI Tokenzie 是把现实里「杂乱无章」的振动映射成连绵不绝的数字,那是 AI 才能听懂的「音乐」。

「AI 作曲」的模型

AI 模型是一个装有神经元的盒子。与人类的神经元不同,AI 的神经元是计算机的模拟。人类的神经元通过突触间的电流传达一种刺激,而 AI 神经元通过一个简单的公式 $w*x+b$ 传递数字。

旋律被 MIDI Tokenize 得到数字。丢进盒子之后被神经元接收,经过亿万神经元的有序传递,最终输出新的数字。这些新的数字可以重新转换成 MIDI 文件,变成 AI 创作的音乐。

计算二者关系要考虑所有维度。而 AI 就如同一名冷峻的猎手,依靠他百眼巨人强大观察力,能够在千百维度之中,捕获音符数字间流淌的微妙关系。

这这种能力离不开一个重要的机制,即来自于 Google 的那篇著名论文 Attention Is All You Need[3]。 论文的核心就是 Attention 机制,源于对生物行为的模仿,即用算法模仿了生物观测行为的内部过程,依据外在刺激与内在经验,增强局部的观测精度。就好比人类在集中观测某个具象物体时,无关的画面会自动模糊。

如今 Attention 机制已经深入到各个领域的 AI 算法中,就连即时战略游戏中那些战无不胜的 AI,支撑它们的算法都离不开注意力机制。比如《星际争霸2》的 AlphaStar,《Dota2》的 OpenAI Five 等等。

[AI 作曲]模型的核心之一,就是 Attention 机制**

假设AI 在 256 个维度下捕获数字间的关系。那么每个数字就要在 256 个维度下展开。 比如 「音高36」所对应的数字...

剩余内容已隐藏

查看完整文章以阅读更多