白 勇 齊 林 帖 云
(鄭州大學產業技術研究院 河南 鄭州 450001)
音樂作為一種表達情感的藝術形式,在市場上有著很高的需求。目前專業的音樂創作者數量有限,且音樂制作費時費力,成本較高[1]。但隨著計算機技術的發展,利用神經網絡自動生成音樂成為了可能,可以在降低音樂制作成本的同時提高音樂作品的生產力[2]。
如今,遞歸神經網絡RNN和長短期記憶網絡LSTM被大量應用在序列預測和音樂生成方面[3]。文獻[4]使用了RNN網絡結構,通過真實音樂數據集的訓練實現音樂的有效生成。文獻[5]基于LSTM網絡進行自動作曲,LSTM很好地避免了梯度消失問題,并且能夠學到音符之間的長期依賴關系。文獻[6]利用LSTM網絡的結構特點,學習并生成富有節奏的打擊樂。以上敘述中雖然使用的網絡不同,但訓練RNN和LSTM生成音樂的標準方法都是在給定前一個正確音符的情況下最大化預測音符的對數似然,這種方法通常稱為teacherforcing[7]。在生成時,輸出通常是根據所學習到的分布近似搜索最可能的候選者來產生。在此搜索過程中,模型以其自身的猜測為條件,這可能是不正確的,從而導致錯誤的生成,對于較長的音樂來說,這個問題將會更加明顯。由于訓練和測試條件之間存在這種差異,表明teacherforcing可能不是最理想的方法[8]。
本文借鑒強化學習提出一種訓練音樂生成網絡的方法,旨在模擬生成階段直接對生成策略進行改進。加入并訓練一個稱為Critic的附加網絡來輸出生成音符的價值,該價值可以定義為預期特定任務的得分。這樣做能在很大程度上規范生成的音樂,生成網絡將要執行下一步輸出時會接受這個得分,并根據得分的大小改變自己的生成策略。
遞歸神經網絡RNN處理較長時序序列存在梯度消失的現象,以至于讓網絡學不到知識。為了捕捉音符之間的長期依賴關系,本文使用了LSTM網絡作為音樂生成網絡[9],這是RNN網絡的改進結構,引入了帶有門控制結構的簡單記憶單元。這些門使LSTM網絡能夠在長序列中學習有用的依賴關系,其網絡結構如圖1所示。

圖1 LSTM網絡結構
用x0,x1,…,xt表示輸入序列,h0,h1,…,ht表示隱藏層數據,y0,y1,…,yt表示輸出序列。U是輸入權值矩陣,W是上一時刻隱藏層權值矩陣,f是隱藏層的激活函數,隱藏層的輸出計算公式如下:
ht=f(Uxt+Wht-1)
(1)
有了隱藏層的輸出之后,進過輸出層的激活函數δ和權值矩陣V可以得到輸出序列,公式如下:
yt=δ(Vht)
(2)
本文方法的第一步是得到經過訓練的LSTM音樂生成網絡的權值參數,為Actor網絡和Critic網絡提供初始參數,目的是讓二者具備經過常規訓練之后LSTM音樂生成網絡的權值參數。LSTM音樂生成網絡分為三層:輸入層、隱藏層和輸出層,其中隱藏層所含神經元個數設置為512。神經網絡的輸入為向量形式,所以將數據預處理得到的輸入向量Xn輸入網絡中,具體流程如算法1所示。
算法1 訓練LSTM音樂生成網絡
輸入:訓練數據
輸出:網絡模型參數
1.輸入訓練數據,設置迭代次數,批量大小,隱藏層單元數和網絡層數。
2.取當前時刻神經網絡的輸出和下一時刻輸入作交叉熵為損失函數,以此更新網絡參數。
3.按照步驟2循環更新,直至迭代完成,loss值收斂。
4.輸出LSTM音樂生成網絡的模型參數(權值參數)。
強化學習(RL)針對的是基于弱監督的有效行動問題,其方式是對智能體(agent)的行為給予獎勵,從而控制agent的行動達到最優的效果[10]。在Actor-Critic(A-C)算法中,Critic網絡會根據Actor網絡的輸出動作給出一個任務分數,即時間差分TD。Actor網絡根據TD更新自己的生成策略,從而使生成的動作更加符合當前的環境和狀態[11]。
本文借鑒Actor-Critic算法的思想和術語在常規訓練的基礎上給予生成網絡一種模擬生成階段的訓練方式。本次訓練中將基于字符級LSTM音樂生成網絡視為Actor網絡,生成音符序列并接受設定的任務分數,根據接收的分數再次更新生成策略,優化生成結果。本文將特定的任務分數設置為時間差分TD,由LSTM網絡和音樂理論規則共同構成Critic網絡輸出。兩個網絡中的LSTM網絡由上文得到的權值參數進行初始化。具體流程如圖2所示。

圖2 本文方法流程
在A-C算法中任務分數為時間差分TD,是一種無模型的強化學習方法。而本文借用其思想和術語構成基于模型的動態規劃方法,利用狀態價值和音樂理論規則共同構成時間差分TD。
2.2.1 狀態價值
本文把已生成的音符和LSTM的內部狀態即通常說的“細胞狀態”看作狀態st,把生成的音符看作被選擇的動作at,執行該動作后進入下一時刻的狀態st+1。在同一狀態下每個音符被選擇的概率是不同的,為了讓模型更加嚴格的遵循從數據中學習到的規律,避免因先前錯誤的猜測而繼續發生更大的錯誤,設置在同一狀態下Softmax層音符被選擇概率的方差為該狀態的價值。設狀態s下,每個音符被選擇的概率為Pi,其中i=1,2…,n,EP為該狀態下音符被選擇概率的均值,那么由此可以得到狀態s的價值V:
(3)
2.2.2 音樂理論規則
在真實的編曲過程中,作曲家是按照一定的音樂理論規則作曲的[12],為了給予更真實的生成反饋,本文在Critic網絡增加了音樂理論規則部分。
音樂有著各種各樣的風格,每種風格都有著各自不同的創作理論規則。古典音樂的理論經過長時間的演進已經非常成熟,所以本文參考了文獻[13]定義了以下幾條古典音樂的特征規則:(1) 在一首樂曲中兩個相鄰音符之間的音程差應小于八度;(2) 所有的音都應該在同一個調上,樂曲的開頭和結尾都應該以該調的主音為主,例如,如果是C大調,那么出現在第一拍和最后四拍的音符應該是中音C;(3) 音調不能一直上升或者下降,也不能一直持續在同一個音高上;(4) 一個音符的連續重復次數不能大于4次;(5) 音樂節奏的變化不能過快;(6) 一首樂曲中最高音符是唯一的,最低音符也是唯一的;(7) 應當盡量避免切分音的出現。符合這些規則的提供獎勵即得到正值,反之將受到懲罰即得到負值,最后求這些值的總和即為音樂理論規則得分Rm(a,s)。
上述的規則特征并不是詳盡無遺的,但這些規則的加入會使該訓練過程更加接近真實編曲,讓生成的音樂更具結構性,古典風格更加明顯。
Critic網絡的模型參數在訓練過程中保持不變,目的是讓網絡始終保持從真實音樂數據中學習到知識。得到當前狀態的價值V(s)和下一時刻的狀態價值V(s′)以及音樂理論規則的獎勵Rm(a,s)可以構建一個時間差分TD:
TD=Rm(a,s)+εV(s′)-V(s)
(4)
式中:ε為下一時刻狀態價值的折扣系數。
TD就是本文設定的任務分數,通過把TD返回給Actor網絡就可以構建Actor網絡的損失函數,P(a,s;θA)是該音符在狀態下被選擇的概率,θA為Actor網絡的參數,損失函數如下:
L(θA)=E[-[logP(a,s;θA)×TD]2]
(5)
得到Actor網絡的損失函數之后就可以進行訓練,其訓練過程見算法2。
算法2 Actor-Critic訓練網絡
輸入:隨機音符序列例子
輸出:Actor網絡的模型參數
1.利用1.2節算法1得到的權值參數初始化Actor網絡和Critic網絡。
2.向Actor網絡中輸入一個隨機音符序列。
3.Actor網絡根據輸入和此刻的狀態s生成音符序列a。
4.將s和a輸入Critic網絡得到時間差分TD。
5.Actor網絡接收時間差分TD,根據式(5)更新Actor網絡的模型參數θA。
6.循環執行上述步驟,直至迭代完成,loss值收斂。
經過Actor-Critic訓練之后的Actor網絡就可以用來生成音樂,每次讀入一個音符,網絡根據之前生成的音符和策略來預測下一個音符。生成算法見算法3。
算法3 音樂生成
輸入:初始序列
輸出:音樂片段
1.隨機選擇一個長度為n的初始序列作為網絡的初始輸入。
2.將初始序列one-hot編碼成輸入向量,按順序將第一個音符向量輸入到網絡中。
3.初始序列輸入完畢之后,將初始序列作為生成音符序列的開頭部分。
4.經過前向傳播從輸出層得到輸出向量Y,并將Y作為下一次的輸入。
5.將生成向量Y解碼為音符序列y,添加到生成音符序列的末尾,若沒有達到指定的長度m,則循環執行步驟4-步驟5。
6.輸出長度為m的音符序列。
7.將長度為m的音符序列經過反向處理轉化為midi格式的音樂片段。
實驗所用服務器配置為Intel Xeon 2640v4 2.4 GHz處理器,500 GB運行內存和12 GB顯存的NVIDIA 1080Ti GPU,所用編程語言為Python 3.6.1,框架為Tensorflow。
實驗收集了18世紀-19世紀的多個作曲家的古典音樂集并從中提取鋼琴軌道旋律,得到20 000首midi格式的音樂樣本。為了消除節奏和音調對音樂的影響,將節拍統一調為4/4拍,音調都轉移到C大調上,時長大多集中在2~3分鐘。
神經網絡的輸入和輸出都表示為向量形式,所以需要對音樂數據進行預處理。設定時間量化為十六分音符,然后使用piano roll[14]把樣本中表示音符的信息轉化成序列的形式。得到音符序列之后需要用向量的形式表示這些序列,本文使用one-hot編碼對音符序列進行向量處理,也可以理解為是對音符序列的標注。即把輸入音符序列xn轉化為輸入向量Xn,midi音符的編號共有128個,因此經過編碼后的輸入向量Xn共有128維。其數據預處理過程如圖3所示。

圖3 數據預處理
本文做了四組對比實驗,測試了不同隱藏層神經元個數對實驗結果的影響,結果如圖4所示。

圖4 不同神經元個數對訓練效果的影響
從圖4可以看出,神經元個數越多,網絡學習數據集本質和抽象化數據特征的能力越強,越能有效地減少預測值與目標值之間的誤差。隱藏層維數的大小對生成的音樂質量有非常重要的影響,但使用更深層、更寬的神經網絡在訓練階段需要更多的計算量。
對于不同迭代次數生成的音樂文件,本文針對生成音樂和樣本音樂做頻譜分析,結果如圖5所示。可以看出:迭代1 000次時生成的音樂中有很多樣本音樂所不具備的頻率,因此生成的音樂也是雜亂無章的;迭代2 000次時生成音樂的頻譜開始出現樣本音樂的頻率,但生成音樂的頻率中缺失了一些樣本音樂中的頻率;迭代達到4 000次時,生成音樂序列的頻率分布總體上和樣本頻率分布趨于一致。可以證明迭代次數越大,權值參數學習和調整的次數就越多,在一定程度上就會提高模型的準確率。

圖5 生成音樂頻譜圖
為了比較直觀地顯示本文方法生成音樂的旋律特征,增加了生成音樂和樣本音樂的聲譜圖分析,結果如圖6所示。可以看出本文方法生成音樂的聲譜圖和樣本音樂的聲譜圖在總體分布上很接近,因此可以驗證本文方法生成的音樂具有和樣本音樂相似的旋律特征。

圖6 生成音樂與樣本音樂及差異聲譜圖
本文方法是對基于字符級LSTM音樂生成網絡訓練方式的改進,為了表明本文方法的有效性,本文做了兩組實驗,對比的網絡是經過常規訓練的基于字符級LSTM的音樂生成網絡。該網絡和本文方法通過相同的實驗環境設置,各生成300首音樂作為測試樣本。
4.4.1 十二平均律對比
十二平均律是一種音樂定律方法,其將一個純八度音平均分成十二等分,每等分稱為半音,是最主要的調音法[15]。提取兩組測試樣本中的十二平均律音符使用次數,并計算其統計分布,結果如圖7所示。

圖7 十二平均律音符分布
由圖7(a)可以看出,經過常規訓練的LSTM生成的測試樣本中C、D、E、G、A、B音出現的次數多,剩余的音符幾乎沒有出現,而圖7(b)顯示本文方法生成的音樂每個音符所占的比例相差不大。對比結果可以證明本文方法在生成音樂時選擇的音符種類較多,即生成的音樂曲調更為豐富。
4.4.2 音樂特征對比
為了更進一步表明本文方法的有效性,定量了音樂理論規則的表現形式。從生成的測試樣本音樂中提取七個有效的特征信息,對比已知的音樂規則,計算統計數據,結果如表1所示。

表1 音樂理論規則特征對比
可以看出,本文方法生成的音樂有效避免了音符過度重復和音程跨度過大等現象,并且生成的音樂在古典風格方面對比經過常規訓練的LSTM有很明顯的提升,較為符合音樂理論規則。
本文還設計了人耳聽覺判斷作為實驗準確度的評判標準之一。從兩組測試樣本以及真實樣本音樂隨機采樣各得到30首。在完全匿名的情況下,讓5名音樂學院的老師和20名音樂學院的學生從旋律、節奏、流暢度、悅耳程度以及主題性五個角度進行打分。匯總打分后,去掉一個最低分和一個最高分,對剩余的得分取均值,結果如圖8所示。

圖8 人耳評判對比
可以看出,本文方法生成的音樂在五個角度均高于經過常規訓練的LSTM生成的音樂,雖然略低于真實音樂,但也比較接近。對比結果表明本文方法相比與經過常規訓練的基于字符的LSTM音樂生成網絡來說具有明顯優勢。
本文在常規訓練音樂生成網絡的基礎上增加了基于強化學習Actor-Critic算法的訓練,是一種模擬生成過程的訓練方式。根據音樂理論規則和訓練數據規律構造Critic網絡,以給予生成網絡Actor更接近真實音樂編曲的反饋,更新網絡參數,提高生成音樂質量。音樂理論規則的添加促使生成的音樂更具結構,風格更加明顯。由于篇幅限制本文只討論了關于古典風格的音樂理論規則,但為其他風格的音樂生成提供了一個很好的方向。由于音樂的復雜性,本文方法生成的音樂并不能完全滿足人們的實際需求,所以提高音樂生成的質量還需要進一步研究。