鋼琴精靈在某種程度上讓人聯(lián)想到新手音樂家可以使用的搖滾樂隊(duì)和吉他英雄等電子游戲,其重要區(qū)別在于用戶可以在鋼琴精靈上自由即興,而不是從固定曲目重演歌曲。
鋼琴精靈背后的團(tuán)隊(duì)受到了吉他英雄的啟發(fā),簡化了演奏樂器的方式。他們不希望用戶只是點(diǎn)擊預(yù)先寫好的曲譜,而是要在彈奏中制作旋律片段。為了實(shí)現(xiàn)這一目標(biāo),他們在一個(gè)龐大的古典鋼琴音樂數(shù)據(jù)集上訓(xùn)練了一個(gè)人工智能程序,教它預(yù)測相互跟隨的音符,就像手機(jī)的預(yù)測文本功能猜測你接下來會(huì)寫什么一樣。
它是如何工作的?
有很多方法可以將8鍵控制器序列映射到完整的鋼琴演奏。 我們將自己局限于按鍵和音符之間的1對1映射,使用戶可以精確控制復(fù)音的時(shí)間和程度,但不能播放哪些音符。 即使有這種限制,也有許多可能的映射; 例如,8個(gè)按鈕可以在單個(gè)八度音階上映射到固定比例。 我們使用在一組現(xiàn)有鋼琴演奏上訓(xùn)練的離散自動(dòng)編碼器架構(gòu),而不是使用這種固定的映射,我們學(xué)習(xí)了時(shí)變映射:
雙向LSTM編碼器將一系列鋼琴音符映射到一系列控制器按鈕(在上圖中顯示為4,在實(shí)際系統(tǒng)中顯示為8)。 然后,單向LSTM解碼器將這些控制器序列解碼回鋼琴演奏。 訓(xùn)練之后,丟棄編碼器并通過用戶輸入提供控制器序列。
您可能已經(jīng)在上面的演示視頻中注意到鋼琴演奏中的音高輪廓與按鈕序列的輪廓非常相似。 這種行為受到訓(xùn)練損失項(xiàng)的鼓勵(lì),該訓(xùn)練損失項(xiàng)使編碼器因違反相對音調(diào)排序而受到懲罰,例如, 如果升序鋼琴間隔映射到降序按鈕間隔。 下圖顯示(頂部)用于真實(shí)鋼琴演奏的鋼琴,以及(底部)由輪廓正則化編碼器輸出的8按鈕序列; 你可以看到兩個(gè)序列的輪廓緊密匹配:
我們通過國際鋼琴電子競賽的一組約1400個(gè)藝術(shù)表演訓(xùn)練模型,該表演與Performance RNN中使用的數(shù)據(jù)集相同。 這種數(shù)據(jù)集的選擇自然會(huì)影響所生成的表演的風(fēng)格; 因?yàn)槲覀冮_源模型,歡迎您在自己的MIDI文件集上訓(xùn)練鋼琴精靈。
值得一提的是,該項(xiàng)目正是用到了TensorFlow訓(xùn)練而成。TensorFlow是一個(gè)開源軟件庫,用于完成一系列任務(wù)的基于數(shù)據(jù)的編程,由Google Brain團(tuán)隊(duì)開發(fā),最初于2015年11月9日發(fā)布,它能夠非常有效地進(jìn)行回歸,分類,神經(jīng)網(wǎng)絡(luò)等,甚至能夠在CPU和GPU上運(yùn)行。
如果你想更加了解TensorFlow,或者說想實(shí)踐一下人工智能項(xiàng)目,谷歌的另一款工具或許可以幫到你,也就是谷歌的AIY Projects項(xiàng)目。 AIY Vision Kit附帶的軟件運(yùn)行三個(gè)基于TensorFlow的神經(jīng)網(wǎng)絡(luò)。 其中一個(gè)基于谷歌的MobileNets平臺(tái),能夠識(shí)別超過1,000個(gè)日常物品。 第二個(gè)可以在圖像中發(fā)現(xiàn)面部和表情。 最后一個(gè)是專門用于識(shí)別貓,狗和人的神經(jīng)網(wǎng)絡(luò)。