WaveNet

WaveNet(波網)是一個用於直接生成聲音訊號的人工神經網路。由倫敦人工智慧公司DeepMind的研究人員於2016年9月的一篇論文中提出。

WaveNet通過使用用真實語音記錄訓練的神經網絡方法直接模擬波形，能夠生成聽起來相對真實的人類聲音。除了語音合成外，WaveNet也能應用在音樂生成以及語音辨識等領域。

2018年，Google在其雲端語音合成服務Google Cloud Text-to-Speech中提供了基於WaveNet的語音合成API。截至2019年，該產品提供了32種語言以及多種不同音色的語音合成服務，且基於WaveNet的合成結果在自然度上相比傳統方法更接近人類語音。

背景
在WaveNet被提出之前，傳統上常見語音合成的方法有串接生成(Concatenative synthesis)及參數化法(Parametric method)等。串接生成是透過錄製多段聲音來拼接合成目標語句；參數化法則是用模型生成聲音特徵的參數，再經由聲碼器合成聲音。

近年，隨著深度學習興起，使用人工神經網路合成語音的方法也被提出，如Tacotron。該模型利用人工神經網路生成目標聲音的時頻譜或特徵參數，再透由Griffin-Lim演算法或其他聲碼器合成聲音。

然而無論上述何種方法，皆無法直接生成聲音訊號。原因在於即便僅僅一秒的聲音訊號，就可能包含了數萬個樣本點，要對龐大的樣本點之間的關聯性建模是相當困難的。

WaveNet結合了自迴歸特性和空洞卷積神經網路(Dilated Convolutional Neural Network)架構，成功的提出第一個能夠生成高品質聲音樣本點的人工神經網路模型。

架構設計

WaveNet模型架構

自迴歸特性
WaveNet採用和PixelCNN相似的自迴歸特性模型。
設聲音訊號，WaveNet將其機率建模成:

即在時間點t生成的樣本點，模型會以為輸入，其輸出是基於前幾個時間點的樣本點作為條件的條件機率分布。而模型訓練目標便是讓愈大愈好。

8位元量化
WaveNet模型的輸出是下個樣本點的機率分布，而聲音訊號的樣本點通常會以16位元的整數儲存，這使模型在每個時間點，要輸出65536個機率來表示所有可能的樣本點的機率分布。為了降低建模難度，WaveNet使用µ律演算法(µ-law algorithm, G.711)將樣本點量化成8位元，即256種可能的數值:

其中是在時間點t的聲音訊號樣本點，，是0~255的整數。

研究中顯示這種非線性量化方法的表現結果比單純線性量化好上許多，且透過重建的語音在人類聽覺上與原始語音非常相似。

多層空洞因果卷積神經網路
因果卷積神經網路是WaveNet組成的主要部分，透過因果卷積，可以確保對資訊正確地建模。
在預測時，不會參考到的資訊。

一卷積神經網路的感受野(receptive field)會隨著網路的加深而加大。然而對於動輒數萬個樣本點的聲音訊號而言，一般的因果卷積神經網路仍需堆疊相當多的層數來使感受野大到足以抽取出有用的資訊。
下圖為堆疊數層的因果卷積神經網路感受野示意圖，每一個輸出結果(橘色點)參考了五個輸入資料(藍色點)的資訊。

為了解決此一問題，WaveNet使用了多層空洞因果卷積神經網路，如下圖所示，在同樣層數的情況下，每一個輸出點參考了16個輸入點，模型的感受野隨層數加深而指數增長。
這樣的架構能讓WaveNet很好地從輸入樣本點中抽取資訊，並預測下一個時間的樣本點的機率分布。

門激勵單元(Gated Activation Unit)
WaveNet中使用了和PixelCNN相同的門激勵單元:

其中代表摺積運算，代表逐點乘法，是S函數，和代表在第k層的兩種摺積核(convolutional kernel)。

研究中表明，使用門激勵單元作為非線性激勵函數，相比線性整流函數有更好的表現。

應用

語音合成

語音辨識

神經聲碼器(Neural Vocoder)
在過往的語音生成任務，如文字轉語音、語者轉換等，模型往往會先生成聲音特徵參數或時頻譜，再使用聲碼器或Griffin-Lim演算法合成聲音訊號。在Tacotron2中，首次將WaveNet用作神經聲碼器來補足從時頻譜或梅爾刻度時頻譜重建聲音訊號所缺失的資訊(如相位等)。研究人員發現使用神經聲碼器所重建的聲音訊號，比起使用傳統聲碼器或演算法生成的聲音更為自然。此後，除了大量被使用在語音生成研究中來提高聲音品質外，神經聲碼器也逐漸被應用在許多產品當中。

缺點
儘管WaveNet作為語音合成模型或類神經聲碼器，能夠生成與人類自然語音接近的聲音品質，然而其自迴歸特性也帶來不少明顯缺點。

其一是生成速度十分緩慢，由於樣本點是逐一生成，因此生成一秒的聲音訊號可能就要花上數分鐘的時間，使其在實際應用上受到限制。
此外，模型以之前生成的樣本點作為輸入來生成下一個樣本點，因此當生成較差的樣本點時，錯誤可能會不斷累積下去，影響聲音訊號品質。

後續研究
WaveNet提出之後，作為類神經聲碼器使基於深度學習語音合成模型能夠進一步生成更為接近自然的語音，後續的研究皆著重於改良WaveNet架構或訓練方式，使其能夠實時生成高品質語音。
 Parallel WaveNet
 FFTNet: 簡化WaveNet架構，能以更快的速度自迴歸地生成聲音樣本點，並提出一些優化自迴歸類神經聲碼器的方法。
 WaveRNN: 引入RNN和雙重Softmax層(dual softmax layer)來簡化WaveNet模型運算的複雜度，並提出多個優化生成速度的方法，使模型甚至能在手機CPU上實時生成語音。
 WaveGlow: 不採用自迴歸模型，而是以基於流(flow-based)的模型來達到實時生成高品質語音。

參考文獻

Google
人工神經網路
語音合成