【RNN-LSTM】循環(huán)神經(jīng)網(wǎng)絡(luò)與自動(dòng)作曲
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)常用于前后有關(guān)系的序列分析和處理,LSTM(?Long Short Term Memory)則是其中的一種構(gòu)造,用于增強(qiáng)和修正其“記憶性”。
古詩(shī)生成器是這種神經(jīng)網(wǎng)絡(luò)的一種應(yīng)用。同理,因?yàn)橐魳?lè)信息前后也有內(nèi)在的邏輯關(guān)系,亦可用此法來(lái)分析和構(gòu)造。目前已經(jīng)有基于RNN-LSTM的自動(dòng)作曲機(jī)。
使用循環(huán)神經(jīng)網(wǎng)絡(luò)進(jìn)行自動(dòng)作曲的一般步驟是:收集旋律樣本作為神經(jīng)網(wǎng)絡(luò)的訓(xùn)練數(shù)據(jù),構(gòu)造整個(gè)RNN-LSTM的模型,對(duì)模型進(jìn)行訓(xùn)練,最后根據(jù)訓(xùn)練得到的模型權(quán)重?cái)?shù)據(jù)生成新旋律。使用RNN-LSTM模型生成新旋律時(shí),常常遇到的問(wèn)題是會(huì)因?yàn)橹蝗∽畲蟾怕实囊舳萑牍潭ǖ难h(huán),避免這個(gè)問(wèn)題的方式是引入“溫度T”參量的“退火”法——即在極大T之上,所有的概率會(huì)被T的因子拉平,如此原本小概率的音也會(huì)出現(xiàn)在生成序列中。
循環(huán)神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)常常要防止過(guò)擬合,以導(dǎo)致神經(jīng)網(wǎng)絡(luò)“死記硬背”輸入旋律。這條“注意事項(xiàng)”和神經(jīng)網(wǎng)絡(luò)訓(xùn)練的目標(biāo)——把損失函數(shù)降到最低——在實(shí)踐中有時(shí)是矛盾的:即把損失函數(shù)降到很低時(shí)會(huì)出現(xiàn)返回大量“死記硬背”的輸入旋律的情況。這點(diǎn)尚須解決。
接下來(lái)講講我對(duì)RNN-LSTM分析《唐五弦譜》“平調(diào)曲”的一些所得。首先要說(shuō)的是實(shí)驗(yàn)?zāi)康模簩?shí)驗(yàn)?zāi)康木褪墙栌裳h(huán)神經(jīng)網(wǎng)絡(luò)來(lái)分析“平調(diào)”這種調(diào)式的內(nèi)在信源屬性,進(jìn)一步生成調(diào)式的“最長(zhǎng)參照長(zhǎng)度”下的“信息熵等于調(diào)式信息熵”的序列(下簡(jiǎn)稱“熵序列”)。接下來(lái)是實(shí)驗(yàn)方法:方法就是選取所有“平調(diào)”的曲目,將其midi作為訓(xùn)練數(shù)據(jù)集喂給神經(jīng)網(wǎng)絡(luò),然后一直訓(xùn)練到損失函數(shù)足夠小。而實(shí)驗(yàn)結(jié)果則是:神經(jīng)網(wǎng)絡(luò)能夠在較小的損失函數(shù)值之下死記硬背部分旋律,卻不能夠分析出這些曲目旋律之間的共性;因此可以說(shuō)這個(gè)實(shí)驗(yàn)失敗了。更有趣的是,當(dāng)生成長(zhǎng)度足夠長(zhǎng),則大量曲目的部分旋律都會(huì)在生成序列之中復(fù)現(xiàn),其中有些曲目的旋律會(huì)按幾句混合在一起,有些則是單獨(dú)一篇比較連續(xù)地出現(xiàn)。
僅從結(jié)果上分析:神經(jīng)網(wǎng)絡(luò)本身不僅沒(méi)有產(chǎn)生出新的有意義的內(nèi)容(無(wú)創(chuàng)造力),亦不能產(chǎn)生出沒(méi)有任何指代意義,僅是調(diào)式規(guī)律映照的熵序列。這揭示出兩點(diǎn):第一、產(chǎn)生自調(diào)式規(guī)律的信源熵、調(diào)式的“最長(zhǎng)參照長(zhǎng)度”和“熵序列”都需要數(shù)學(xué)上的良定義,其中或有與神經(jīng)網(wǎng)絡(luò)本身屬性的矛盾之處;第二、或許樣本不對(duì):更應(yīng)該采用的是各種調(diào)子曲(modal prelude)來(lái)作訓(xùn)練材料,因?yàn)檎{(diào)子曲本身不表達(dá)內(nèi)容。且是曲子借抄素材的來(lái)源。
除此以外,還有一點(diǎn)不甚完善的是對(duì)調(diào)式信源信息熵的估計(jì):采用的是最長(zhǎng)曲目信息熵估計(jì)法,此法應(yīng)當(dāng)估計(jì)出了一個(gè)足夠大的上界,但可能與調(diào)式的信息熵本身相比,摻水的成分還是多了一點(diǎn)。這樣神經(jīng)網(wǎng)絡(luò)就會(huì)學(xué)習(xí)到更多的具體旋律信息。
附:神經(jīng)網(wǎng)絡(luò)信息量的估計(jì)法:N個(gè)節(jié)點(diǎn),則最大(N+根號(hào)N-1)乘上一個(gè)權(quán)重的信息量;假定其中各權(quán)重完全沒(méi)有約束關(guān)系,則這個(gè)數(shù)就是信息熵。
附:調(diào)式信息熵的估計(jì)法:因?yàn)樵陂L(zhǎng)曲子的長(zhǎng)度超過(guò)一定值以后,其信息熵增長(zhǎng)緩慢(與長(zhǎng)度的對(duì)數(shù)大約成線性關(guān)系),所以可以近似認(rèn)為長(zhǎng)曲子的信息熵就是調(diào)式的信息熵。