[控场AI]
· 4 分钟阅读· 2,457 字

不用微调,实时Jam:预训练音乐Transformer的采样控制术

不用微调,实时Jam:预训练音乐Transformer的采样控制术

不微调音乐模型,仅靠实时修改采样 logits 实现人机即兴合奏。

Reddit 开发者展示了一个用预训练符号音乐模型 Anticipatory Music Transformer 与真人实时合奏的实验。核心做法是不做任何微调,而是在采样阶段对 logits 施加规则化偏置:压低调外音、提升和弦音与张力音、避让乐手正在弹奏的音域、在乐手停奏时提升旋律区概率、并对乐句音程延续给予奖励。系统提前约一秒采样,换和弦即丢弃重采,整体运行在 Jetson Orin Nano 上,代码已开源。作者指出这种手工调参方式低成本、透明、可实时迭代,但迁移性差,并抛出能否用学习式条件头或 guidance 类方法替代的开放问题。

核心思路:不训练模型,而是「引导」它的采样

Reddit 上一位开发者分享了一个很有意思的实验:让预训练好的符号音乐模型(Anticipatory Music Transformer,具体是 music-medium-800k)与真人乐手实时合奏。关键点在于——不做任何微调,而是通过修改采样时的 logits 来「引导」模型输出。作者将这一思路称为「steering the sampling」。

具体做法是:作者弹 MIDI 键盘,模型弹第二架钢琴。演奏过程中,系统实时跟踪当前调性、所按和弦以及速度,并在采样前对 logits 施加偏置。这套方法背后有一个朴素但有效的直觉:模型本身已经「懂」音乐,缺的只是实时的上下文约束。

reddit 原帖截图

Logits 与采样:在自回归生成模型中,网络每一步会输出一个覆盖整个词表(此处为音符/事件词表)的实数向量,即 logits。经 softmax 后得到下一个 token 的概率分布,再由采样策略(如温度采样、top-k、top-p)决定实际输出。所谓「修改采样时的 logits」,就是在 softmax 之前对向量逐维加减一个偏置值:加正值提升某类 token 被选中的概率,减负值则抑制。这种做法不改变模型权重,只在推理阶段介入,因此可实时开关、随时调参,也不会破坏模型已学到的整体音乐结构。

符号音乐与 Anticipatory Music Transformer:符号音乐指以离散事件(音高、时值、力度、乐器等)表示的音乐,如 MIDI 或事件序列,而非波形音频。Anticipatory Music Transformer 是面向符号音乐生成的自回归 Transformer,其特点是在训练时引入「预期」机制,使模型能够根据后续(或并行)声部的上下文来生成当前声部,因而天然适合伴奏、续写与多声部交互场景。music-medium-800k 是其一个中等规模、在约 80 万条音乐序列上训练的检查点。

实时引导的具体机制

作者列出的偏置规则非常具体,每一条都对应一个音乐上的需求:

  • 调外音降权:把不在当前调内的音符概率压低,减少「跑调」;
  • 和弦音与张力音升权:提升和弦构成音以及张力音的概率,让伴奏更贴合和声;
  • 手部区域降权:对真人乐手双手正在弹奏的音域进行降权,避免模型「抢戏」;
  • 停奏时升权:当作者停止弹奏时,把旋律区域的概率提上来,让模型顺势补位;
  • 乐句延续奖励:对延续上一乐句音程关系的输出给予小幅加成,制造「应答」感。

此外,系统会提前约一秒采样,一旦作者换和弦,就丢弃已规划的内容重新采样。整套系统跑在 Jetson Orin Nano 上,作者也开源了代码(GitHub 仓库 duetto)。

调内音、和弦音与张力音:在调性音乐中,一个调(如 C 大调)规定了七个自然音级,调外音会带来明显的「走音」感,因此对调外音降权是最直接的和谐约束。和弦音指当前和弦的构成音(如 C 大三和弦的 C、E、G),升权可让伴奏落在和声骨架内。张力音(tension notes)则是和弦音之外、能制造色彩与紧张度的音,如九音、十一音、十三音;适度提升其概率能让伴奏不呆板,但需控制比例以免破坏协和度。三者构成一个从「安全」到「有色彩」的连续谱,偏置权重实际上是在这条谱上调节模型的冒险程度。

为什么「不微调」值得关注

这个项目最有价值的点,不在于合奏效果本身,而在于它展示了一种低成本适配预训练模型的工作方式。微调需要数据、算力和时间,而采样引导只需要在推理阶段干预 logits,几乎没有额外训练成本,还能在演奏中实时调整。

对于符号音乐这类结构化程度高的领域,这种做法的可行性尤其高:调性、和弦、音域都是可以显式计算和约束的,正好适合用规则化的偏置来表达。作者也坦言,所有偏置参数都是「靠耳朵手调」的,他自己也觉得这有点笨。

微调与推理时引导的取舍:微调(fine-tuning)通过梯度更新修改模型参数,使模型分布整体向目标数据偏移,效果通常更自然、更通用,但需要标注数据、算力与训练周期,且难以在演奏中即时改变行为。推理时引导(inference-time steering)只干预输出分布,零训练成本、可解释、可热调整,但规则由人设计,覆盖面和泛化性受限于规则本身。二者并非互斥:常见做法是先用少量数据训练一个轻量条件模块(如 conditioning head 或 adapter),推理时再把它的输出作为 logits 偏置叠加,从而兼顾学习能力与实时可控性,这正是作者所问「更有原则的方法」的一条现实路径。

作者提出的问题:能否更「有原则」?

在帖子末尾,作者抛出了一个开放问题:有没有更系统的方法来做这件事,比如一个小型的学习式条件头(learned conditioning head),或者借鉴 guidance-style 的技巧用在符号模型上?

这其实指向了当前生成式音乐控制的一个真问题:手工调参可解释、可调试,但迁移性差;学习式引导更通用,但需要额外训练数据和模型。对于想在本地设备上做实时交互的开发者,如何在两者之间取平衡,可能是接下来值得探索的方向。

对实时 AI 合奏的启示

从工程角度看,这个项目证明了消费级边缘设备(Jetson Orin Nano)足以支撑实时符号音乐生成与交互。真正的瓶颈不在算力,而在「如何让模型听懂人」——也就是控制信号的表达方式。

作者的方案本质上是把音乐理论规则翻译成 logits 偏置,这是一种轻量、透明、可快速迭代的路径。它未必是终局方案,但对于想快速验证交互式音乐 AI 想法的开发者来说,是一个很好的起点。

#音乐Transformer#实时音乐生成#采样引导#预训练模型#AI合奏#logits偏置#Anticipatory Music Transformer
分享:

相关推荐