編者按:本文來自數(shù)據(jù)科學(xué)家Haebichan Jung,他發(fā)現(xiàn)用深度學(xué)習(xí)制作音樂時(shí)存在某些邏輯上的問題,并用數(shù)據(jù)方法創(chuàng)建自己的模型解決了這一問題。本文分為四部分:
問題定位:我是如何發(fā)現(xiàn)在利用深度學(xué)習(xí)技術(shù)生成流行音樂時(shí)會有問題的。
解決方法:我如何創(chuàng)建了一個(gè)原始的音樂生成機(jī)器,只需要簡單方法就能與深度學(xué)習(xí)相媲美。
結(jié)果評估:我是如何建立一套評估體系,用數(shù)學(xué)方法證明“我的音樂比深度學(xué)習(xí)生成的方法聽起來更像流行音樂”的。
泛化:如何發(fā)現(xiàn)生成自己模型的方法,將其應(yīng)用到場景而不是音樂生成上。
以下是論智帶來的編譯:
我創(chuàng)建了一個(gè)簡單的概率模型,可以生成流行音樂。有了客觀評判尺度之后,我認(rèn)為模型生成的音樂聽起來更接近流行音樂的風(fēng)格。我是如何做到的呢?其中最主要的原因是我關(guān)注到了流行音樂的核心:主旋律(melody)和和聲(harmony)之間的數(shù)據(jù)關(guān)系。
主旋律是人聲部分,是曲調(diào)。和聲是伴奏、和弦。在鋼琴曲中,主旋律由右手演奏,左手負(fù)責(zé)和弦
問題所在
在研究二者的關(guān)系之前,讓我們首先對這一問題下個(gè)定義。我最初開始這個(gè)項(xiàng)目時(shí),只是單純想用深度學(xué)習(xí)生成流行音樂。然后我就接觸到了LSTMs,這是一種特殊的循環(huán)神經(jīng)網(wǎng)絡(luò),是用于文本和音樂生成的流行工具。
另一位數(shù)據(jù)科學(xué)家Sigureur Skúli曾寫過一篇教程,講述了如何用LSTM神經(jīng)網(wǎng)絡(luò)和Keras生成音樂。地址:towardsdatascience.com/how-to-generate-music-using-a-lstm-neural-network-in-keras-68786834d4c5
但是我深入了解后,對使用RNN和各種變體生成流行音樂的方法背后的邏輯產(chǎn)生了懷疑。這種邏輯看起來是建立在多種有關(guān)流行音樂內(nèi)部結(jié)構(gòu)的假設(shè)上,但我并不完全認(rèn)可。
其中一個(gè)具體的假設(shè)是主旋律和和聲彼此獨(dú)立的關(guān)系。
例如,2017年,多倫多大學(xué)的研究人員Hang Chu等人曾發(fā)表文章:Song From Pi: A Musically Plausible Network for Pop Music Generation。其中作者認(rèn)為:“假設(shè)和弦是獨(dú)立于給定的旋律的……”基于這一論斷,作者搭建了一個(gè)復(fù)雜多層的RNN模型,主旋律在它所在的層中可以生成音符,而在和弦層中音符是自動生成的。除了彼此獨(dú)立,該模型是依靠主旋律生成和弦的,這就意味著和弦的音符生成是取決于主旋律的。
Hang Chu等人的RNN模型,每一層用于生成歌曲的不同部分
我覺得這種模型很奇怪,因?yàn)樗]有模仿人類創(chuàng)作歌曲的方法。我本人曾學(xué)過鋼琴,就個(gè)人而言,我是不會在創(chuàng)作主旋律音符時(shí)不考慮和弦的。因?yàn)楹拖乙舴榷x了旋律,也對旋律有所限制。西方流行音樂有一個(gè)很重要的特質(zhì):和弦是決定主旋律的關(guān)鍵。用數(shù)據(jù)科學(xué)語言表達(dá),我們可以說某一有條件的概率控制了主旋律和和聲之間的數(shù)據(jù)關(guān)系。
解決方法
首先,我研究了控制不同類型音符之間關(guān)系的預(yù)定概率。其中一個(gè)例子就是上文中提到的旋律與和聲之間的“垂直”關(guān)系。
處理數(shù)據(jù)
關(guān)于數(shù)據(jù),我將20首流行音樂轉(zhuǎn)換成midi格式,完整歌單可以點(diǎn)擊:www.popmusicmaker.com/
利用一個(gè)名為music21的Python庫,主要通過馬爾科夫過程處理了midi文件,提取出作為輸入的不同類型的音符之間的數(shù)據(jù)關(guān)系。具體來說,我會計(jì)算我的音符之間的轉(zhuǎn)移概率(transition probability)。這表示,當(dāng)音符從前一個(gè)過渡到下一個(gè)時(shí),我們可以計(jì)算其中的概率(下文會繼續(xù)深入講解)。
midi格式:一首歌的數(shù)字化版本
首先,我會提取旋律音符和和弦音符之間“垂直”的轉(zhuǎn)移概率。同時(shí)我也會根據(jù)數(shù)據(jù)集計(jì)算旋律與和弦音符之間“水平”的轉(zhuǎn)移概率。下表就是三種不同類型的音符所計(jì)算出的不同轉(zhuǎn)移概率矩陣:
由上至下分別是三種不同的過渡概率:旋律和和弦音符之間的概率;旋律音符之間的概率;和弦音符之間的概率
模型
利用這三種概率矩陣,我的模型可以遵循以下步驟運(yùn)行:
1.從數(shù)據(jù)中隨機(jī)選擇可用的和弦音符。
2.用上表中第一種概率矩陣,基于和弦音符選擇旋律音符。
3.用上表中第二種概率矩陣,基于旋律音符選擇和弦音符。
4.重復(fù)步驟3,直至結(jié)尾。
步驟1~4
5.用上表中第三種概率矩陣,基于此前的和弦音符選擇新的和弦音符。
6.重復(fù)步驟1~4,直至結(jié)尾。
步驟5~6
為了詳細(xì)解釋這一過程,我們用具體例子代替。
1.機(jī)器隨機(jī)選擇了伴奏音符F。
2.音符F可以選擇四個(gè)旋律音符。利用第一種轉(zhuǎn)移概率矩陣,它可能會選擇旋律音符C(因?yàn)橛?4.5%的概率可能被選到)。
3.之后,旋律音符C會進(jìn)入第二種概率矩陣,選擇下一個(gè)旋律音符,它可能會選A(概率有88%)。
4.第三步會繼續(xù)生成新的旋律音符,直至結(jié)尾。
5.和弦音符F會轉(zhuǎn)入第三個(gè)矩陣,選擇下一個(gè)和弦音符。根據(jù)表中的概率,它可能會選擇和弦音符F或和弦音符C。
6.重復(fù)步驟1~4。
結(jié)果評估
接著就是最難的部分了——如何對不同模型進(jìn)行評估。在文章開頭,我曾說這個(gè)簡單的概率模型能超越神經(jīng)網(wǎng)絡(luò),但如何將我的模型和來自神經(jīng)網(wǎng)絡(luò)的模型進(jìn)行比較呢?如何用客觀事實(shí)說明我生成的音樂的確更接近流行風(fēng)格呢?
為了回答這個(gè)問題,我們首先要明確流行音樂的定義。我是從數(shù)據(jù)角度出發(fā)的,但是流行音樂還有另一個(gè)重要的決定因素,即要看在一首歌曲中,開頭、中間和結(jié)尾部分(前奏、主歌、副歌、橋段、尾奏等各個(gè)部分)都是如何重復(fù)的。
例如迪士尼電影《冰雪奇緣》的主題曲《Let it go》中的“Let it go, let it go, can’t hold it back anymore…”就是處于整首歌的中間部分而不是開頭或結(jié)尾,并且這一部分在整首歌里重復(fù)了三次。
知道了這一點(diǎn),我們可以使用一種名為“自相似性矩陣”的工具,它可以通過數(shù)學(xué)方法將歌曲的前奏、中間主歌和尾奏進(jìn)行可視化。下方是電影《曾經(jīng)(Once)》的歌曲《Falling Slowly》的自相似性矩陣。
每個(gè)小方塊表示每個(gè)音符在四個(gè)節(jié)拍中演奏的可視化
在上方動圖中,第一個(gè)藍(lán)色的大方塊表示歌曲的開頭部分,第二個(gè)黃色方塊表示歌曲的另一個(gè)片段。第一和第三個(gè)方塊都是藍(lán)色,是因?yàn)樗鼈冇邢嗤淖韵嗨菩浴5诙偷谒囊彩侨绱恕?/p>
接著,我對數(shù)據(jù)庫中的20首歌曲全部進(jìn)行了可視化處理。
結(jié)果
結(jié)果非常有說服力。在引入自相似性矩陣之前,我的模型生成的樂曲沒有內(nèi)部的重復(fù)結(jié)構(gòu)。但是將輸入數(shù)據(jù)的結(jié)構(gòu)進(jìn)行復(fù)制,你可以看到生成的音樂出現(xiàn)了對應(yīng)的模塊。
多倫多大學(xué)提出的神經(jīng)網(wǎng)絡(luò)模型生成的音樂可視化后是這樣的:
對比如下:
泛化
最后我想解決的是泛化的問題。我們?nèi)绾伟堰@個(gè)由數(shù)據(jù)驅(qū)動的模型用于除生成流行音樂以外的其他場景呢?換句話說,有沒有其他的模型和我的流行音樂生成模型結(jié)構(gòu)相同?
經(jīng)過我的思考,我發(fā)現(xiàn)另一種創(chuàng)作確實(shí)有這種結(jié)構(gòu),即流行歌詞!
以Edward McCain的《I’ll be》為例,其中一段是這樣的:
I’ll be your cryin’ shoulder
I’ll be love suicide
I’ll be better when I’m older
I’ll be the greatest fan of your life
讓我們把這段歌詞分解,用同樣的機(jī)器學(xué)習(xí)泛化語境。我們可能會將“I’ll be”作為語言模型的第一個(gè)輸入,這一二元模型會生成“your”、“crying”和“shoulder”。
之后就是重要的問題:開頭短語“I’ll be”是否和結(jié)尾的“shoulder”彼此獨(dú)立呢?換句話說,第一句話的最后一個(gè)單詞和第二句話的開頭單詞是否有關(guān)?
我覺得沒有關(guān)系。雖然以“shoulder”結(jié)尾,但開頭的“I’ll be”是基于前幾句話的規(guī)律,它們形成了重復(fù),說明這幾句話之間的開頭都有相似的關(guān)系。
我覺得這一發(fā)現(xiàn)很奇妙!流行音樂和流行歌詞都有相似的結(jié)構(gòu),即內(nèi)部都能用數(shù)據(jù)表示。你可以瀏覽我的網(wǎng)站:www.popmusicmaker.com試試創(chuàng)造自己的音樂。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4777瀏覽量
100961 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5510瀏覽量
121347
原文標(biāo)題:論作曲的能力,深度學(xué)習(xí)打不過簡單的概率方法
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論