# RL-Duet: Online Music Accompaniment Generation Using Deep Reinforcement Learning
Paper Link : https://arxiv.org/abs/2002.03082
Project Link : https://labsites.rochester.edu/air/projects/RLDuet.html
為甚麼要有音樂伴奏
* 增強旋律
* 增添多樣性
* 提供節奏
音樂伴奏的行為
* 形成和諧的背景
* 呼應主旋律或突顯特定的情感。例如,橋段部分可能加入新的樂器或提高音量,創造出音樂上的高潮。
* 和弦的即興變化
* 伴奏與主旋律之間通常存在互動,這種互動可以通過和弦變化、回應主旋律的旋律動態等方式實現。
## Abstract & Introduction
Comprehensive musicianship : including perception and composition 感知主旋律 然後進行伴奏的創作
Long-term temporal structure
* 長時間範圍內的結構或組織
* 也包括: 主題, 情感, 節奏, 對比
Inter-part harmonization
* 不同樂器、聲部或音樂元素之間的和諧關係
* 和聲的變換
## Related Work
some are directly generate audio signals
RNN -> LSTM -> GRU 演進
連貫合唱
產生具有改善的長期一致性的音樂
MLE的基本思想是找到最大化可能性函數的參數值
## RL-Duet
Mismatch between training and testing conditions
* 模型訓練時通常使用人類創作的音樂來進行預測,所以較難發生問題
* 但在測試時是根據之前的預測進行預測,所以如果有一次的失誤預測,就會導致失誤持續惡化並累積
Mismatch between training criterion and generation objectives
* MLE會選擇機率最大的token
* 不考慮對未來生成token的長期影響
* Offline的狀況下可以用beam search去解決
```
束搜索的主要優勢在於它能夠考慮多個可能的序列,而不僅僅是單一的最可能序列。這有助於避免陷入局部極值,提高模型生成合理序列的能力。然而,束搜索也有一些缺點,例如它傾向於生成重複的片段,可能降低生成的多樣性。
```
cross-entropy 用意是在觀測預測的機率分佈與實際機率分布的誤差範圍


## 講稿
ppt : https://docs.google.com/presentation/d/1hrmBTRl5_UZQ1VMuWLjlTmiq36wGTA7g/edit?usp=sharing&ouid=114714054792570400141&rtpof=true&sd=true
```
我們要報告的論文是RL-Duet
---
總共分為六個Outline
---
那接下來進入介紹的章節
---Abstract
首先 這篇論文主要介紹了一個深度強化學習的演算法,用於生成音樂伴奏
並且這個伴奏是即時realtime去生成的,所以可以把它視為improvisation 也就是即興創作
那下面可以看到簡易的流程圖,第一步驟 是訓練出一個RL agent,然後生成伴奏,最後就能與人類一起演奏音樂,達成人機互動的效果
---Introduction
接下來進入introduction
那因為現有的研究大多都專注在非realtime的音樂生成,所以作者就有撰寫這篇論文的motivation
再來介紹Online music accompaniment 也就是線上音樂伴奏
由於是realtime 所以必須進行快速的決策 不能有太高的延遲
第二點就是要感知主旋律,然後創作出合理的伴奏
最後是為甚麼要用RL?
因為RL可以考慮到"長時間範圍內的結構或組織,包括說: 風格, 主題, 氣氛, 節奏, 對比 這些..."
並且也考慮到"不同樂器、聲部或音樂元素之間的和諧關係 與 和聲的變換"
---Deep Learning Music Gen
這頁主要是講解有關深度學習的音樂生成研究
標題的Symbolic是指說生成音符,也有一些研究是直接生成音樂,但大部分都是生成音符居多
過往的研究通常是用RNN或是RNN的改進版本,如LSTM或GRU
也有人使用GAN去生成,但在訊練過程中會有不穩定的情形發生
這些研究中最具代表性的是2017年的DeepBach
它使用gibbs 是一種類似於蒙地卡羅的採樣法
透過這種sampling去不斷地迭代修改生成的音樂片段
最後訓練出來的模型就可以生成出巴赫風格的音樂
但這種方法是offline的,與我們這篇論文的需求是違背的
---Interactive Music Gen
這頁主要是講解有關互動式的音樂生成
互動式除了伴奏之外,還有這種call and response,也就是人類演奏一段,然後機器演奏一段,不斷重複輪流
第一個是這種基於基因遺傳演算法的機制,但這種方法重度依賴於音樂相關的知識
第二個是前面有提到的GAN,但也是offline生成
第三個是google在2019提出的music transformer,這種方法因為有self-attention的機制
所以生成出來的音樂就具有風格一致性,不會一下子是風格A 接著又變成風格B
---RL Music Gen
這頁就是跟本文最相關的related work,強化學習音樂生成
首先要介紹的是MLE,這是一種統計學的估測方法,估測出模型的最佳參數
第一個是ORGAN它是結合了RL跟GAN這兩種技術的方法
第二個是SequenceTutor,它採用RNN+MLE的方式,那這篇文最大的缺陷就在於它依賴於數十條手工製作的音樂規則
在後面的Experiment章節就會用這個模型來跟RL-Duet進行比較
---RL-Duet Motivation
接下來進入RL-Duet的介紹
根據前面提到的relate work,之前的研究是用RNN+MLE的方式,它的概念其實就是把過去所有的 (也包括自己生成的那些)token
作為輸入,學習下一個token的機率分布,那這種方法會有幾個缺點
第一點是 因為模型在訓練時都是使用人類創作的音樂去預測,所以這時候都看不出問題
但是到了測試階段時,假設某次的預測失誤了,因為輸入也會包含機器之前生成的資料,所以就導致失誤持續惡化 累積
第二點是 基本上MLE是會直接選擇機率最大的token,不會去考慮生成現在這個token對未來的長期影響
可以看下圖中的第二排樂譜,MLE生成的伴奏有許多重複音,而我們的RL-Duet就有很高的多樣性
這種問題在offline的情形下可以用beam search去解決,但在我們的realtime狀況下就不適用
最後來介紹一下使用RL的優勢
第一個就是前面提到的長期規劃,因為RL可以讓reward延續到後續的回合,所以就有了長遠影響的效果
第二點是說 使用RL去訓練 也就不需要額外的設定或規則,就像前面提到的seqencetutor
RL-Duet可以完全從資料集中學習出reward model
---RL-Duet Representation
這頁會介紹怎麼樣把音樂資訊進行encoding
把每個音高的時間分為十六分音符的時段,較長的音會用hold表示持續
在實驗時,會用以下兩種的音高表示去測試,也就是multi-hold與single-hold
這兩個的差異在於multi-hold針對所有音高都使用不同個hold,single-hold則反之
最終的結果是表明multi-hold可以造成較大的音樂多樣性
音符的資訊除了音高之外 還有節拍,作者在這邊也是把節拍時間切割成十六音符的時間
然後加上beat index 1~4,也就是說最終的list看起來就像1 2 3 4不斷重複
最後來講解這個model concept,Human用h表示 Machine用m表示
輸入到agent的state就是由human part + machine part,但是會限縮在sliding window的大小之內
要預測的機率就是在state t的狀況下machine生成這個token的機率
---RL-Duet RL Framework (1)
接下來這頁會介紹到本文所使用的強化學習框架
RL-Duet使用的演算法是policy gradient中的一種方法,叫做廣義優勢估計GAE
那我們在下一頁會介紹到,訓練目標就是讓這個長期reward可以最大化
訓練共分為兩個階段,第一階段是用一般的generation agent去生成樂譜
輸入state_t生成action_t,第二階段會用reward agent去檢視前面生成的樂譜,也就是根據action計算出reward
最終再將訓練成果更新到generation agent,這兩個phase不斷重複去運作,最終就可以完成訓練
---RL-Duet RL Framework (2)
那這頁主要就是放上GAE的策略梯度更新公式,我會大概講解重要的部分
首先我們有action policy pi與value function V跟優勢函數 At
優勢函數就是評估當前策略相對於預期的好壞,使用的就是TD error的機制
然後還有一個lambda的參數,這個參數用於控制長期優勢的加權。
lambda越接近1,越強調長期的優勢,lambda越接近0,越強調即時的優勢。
...
---RL-Duet Reward Model (1)
接下這兩頁會介紹RL-Duet的reward model是怎麼設計的
作者有提到,為了避免生成的不好的片段,例如很無聊啦或者是過於奇怪的音樂
所以採用了多個reward model,這樣做同時也可以增加模型的robust程度
作者在設計時有考慮到以下的這兩點,但因為這些都是音樂相關的術語,我就大概的講一下
水平時間一致性就是關乎到音符與音符之間的流暢度,好的音樂盡量不會有太大的音高跳動
垂直和諧關係就是同時有多個響起的音符,那這些音符必須要是互相和諧的搭配,也就是說主旋律與伴奏不會聽起來像是兩首音樂
---RL-Duet Reward Model (2)
那這頁就是在介紹RL-Duet提出的四種reward model
這頁中的黃色區塊都代表model的輸入,藍色區塊代表要預測的範圍
那人類與機器都有參與輸入就代表joint,沒有joint就是像下面這兩種view,只有人類或只有機器
以a來說就是對這次生成的token去評估,那b就對以前的一些token做評估
那c這個reward model就是為了讓前面說的水平時間更加一致性,也就更流暢
d這個reward model就是為了讓前面說的垂直和諧關係更加良好,伴奏也就更不突兀
```
AI中文翻譯論文 : https://drive.google.com/file/d/1E0XyJrA3bvrMEXk-fiaRb4C37HliRc5Z/view?usp=sharing