機器學習-Music Generation
機器學習-Music Generation
Music generation是微軟實踐空間站釋出的專案之一,這些專案是從微軟多個前沿科技中抽出一小部分所孵化出來的專案,我猜測Music generation是從微軟小冰作曲唱歌這一塊拿出的一小部分做為課題研究。專案連結: ofollow,noindex">https://studentclub.msra.cn/project/institute/9
一、Music Generation背景介紹
該問題簡單來說,需要我們訓練網上下載的midi音樂旋律,建立自己的模型,讓該模型能夠自動的生成優美的旋律。

任務模型圖
二、問題難點 - How to get loss?
這個問題比較特殊,一般的機器學習模型都有評判的依據,該依據與模型生成的結果產生loss,然後修正引數從而優化之前的模型。而該任務卻沒有評判的依據,生成的音樂並不知道好還是不好,這也是該專案中最難的地方之一。

How to get loss?
三、問題解決
1. GAN網路(方案一)
面對這種我稱之為“無中生有”問題,我們首先想到的是GAN網路,GAN網路所使用的是生成器和判別器博弈的思想達到兩者收斂後,即可使用生成器生成我們想要的東西,這與該問題十分符合,我們也想“培養”一個作曲家(Generator)和一個音樂人(Discriminator),希望這二者相互博弈來訓練到達一個平衡,最終我們即可拆分出這個作曲家(Generator)下來用來生成音樂。但是直接硬套GAN網路讓實驗的結果很不好,產生的音樂基本上沒有任何旋律可言。通過研究我們發現問題的所在出現在Generator上,一個隨機初始化的Generator很難收斂到我們的目標情況,有時甚至會出現震盪出現不收斂情況。因此,一個想法萌芽,一個經過預訓練好的Generator是我們想要得到的。

GAN模型
2. 從GAN網路到AutoEncoder自編碼網路(方案二)
GAN和AutoEncoder這兩個不大相關的網路是怎麼聯絡到一起的呢?針對之前的問題,專案難點為沒有評判指標,無法產生loss優化model。首先我們定義訓練集中的音樂為“專業音樂”,受GAN網路啟發,當音樂丟到GAN網路中訓練時,生成器(Generator)用來生成音樂,判別器將生成器生成的音樂和訓練集中的音樂進行區分,生成器希望判別器將自己的音樂判別為“專業音樂”,而判別器則希望判別訓練集中的音樂為“專業音樂”,從而導致生成器的音樂越來越接近訓練集中的“專業音樂”。 重點來了(用加粗表示= =),從GAN網路中能得到以下兩點啟發:
1. GAN網路最終最多隻能學出和訓練集接近的音樂。
2. GAN網路相當於使用訓練集音樂做為評判標準,認為訓練集音樂就是最好的音樂。
因此我們巧妙的將資料集本身做為評判的依據,我們認為資料集本身就是最好的音樂,因此我們生成的音樂和資料集本身音樂做比較就ok了。因此我們使用了autoencoder自編碼網路取得了較好的效果,實驗發現生成的音樂還是不錯的,保持著部分訓練集的旋律,能明顯的聽出有節奏的midi旋律。自編碼網路雖然結構簡單,但效果卻非常不錯。不少朋友可能會問自編碼網路往往用來提取特徵、或者會問自編碼網路目的是想訓練出一個輸入和輸出一樣的網路用該方法是否得到的音樂和訓練集一樣等問題。第一個問題的解答是我認為能解決問題的方法即是好方法,墨守成規往往得不到好的解決方案;第二個問題的解答是實驗表明用自編碼網路生成的音樂是和訓練集相似的,它學到了訓練集中音樂的旋律、音色、高低中音以及音樂使用樂器等,通過實驗會發現生成後的音樂非常有意思,能聽出明顯的節奏旋律、音色、所使用樂器等(實驗程式碼將附在後面github上)。

AutoEncoder自編碼網路
3. 遷移學習(Transfer Learning)簡單介紹
為了引出我們的終極解決方案,這裡要簡單的介紹一下遷移學習。遷移學習(Transfer Learning)簡單來說指一個預訓練的模型被重新用在另一個任務中。遷移學習在機器學習中存在著廣泛的使用,例如一個處理圖片的深度卷積網路,該網路在訓練過程中要花費大量的時間,若能將別人預訓練好的模型進行簡單的改造,保留其中核心的部分不變來得到自己的模型將節省大量的不必要的時間和機器的開銷,遷移學習在其中就起到了很大的作用。我沒有過深的研究過遷移學習,我們希望解決方案一GAN模型由於生成器(Generator)出現問題所導致整個模型生成音樂能力較差,因此,我們將使用到遷移學習來解決該問題。
4. Auto-GAN網路模型提出(方案三)
首先丟出我們的Auto-GAN模型:

Auto-GAN網路模型
Auto-GAN網路模型與GAN網路模型類似,區別於多加了左邊這一部分。左邊這一部分是我們的AutoEncoder自編碼網路模型,首先對其進行預訓練(Pre training),接著將預訓練後的自編碼網路模型遷移到GAN網路中,讓其做為GAN網路的生成器(Generator),這樣組成的模型會碰撞出怎樣的火花呢?實驗表明,我們的方向是正確的,使用預訓練AutoEncoder自編碼網路做為生成器後的GAN網路生成的音樂達到了不錯效果。參照DCGAN的命名方式(由於使用深度卷積網路做為生成器以及判別器,命名為DCGAN),我們將我們的模型稱為Auto-GAN網路模型。
四、附件內容
由於沒法上傳生成好的音樂,大家只能去我的Github中下載來聽效果如何了。