WaveNet — A generative model for raw audio

Winston Chen
Taiwan AI Academy
Published in
9 min readOct 2, 2019

WaveNet 是 2016 年由 Google Deepmind 團隊推出的模型,這篇論文中有提到主要的架構與思想都是借鑑於 PixelCNN 在影像領域上的應用,差別在於影像是二維的訊號,而語音訊號為一維的訊號。

前言介紹

語音訊號是一種具有強烈時間序列的訊號,現在 t 時間點的訊號往往可以透過歷史資料 t-1, t-2, … 來預測,最核心的概念便是條件機率模型,簡單的說,就是透過先前的訊號去預測下一個時間點的訊號,如下式所示:

傳統上,要解條件機率通常是用隱藏式馬可夫模型 (Hidden Markov model, HMM) 或是高斯混合模型 (Gaussian mixture model, GMM),而 WaveNet 則是透過深度學習的模型來取代傳統上計算條件機率的方法,值得注意的是,WaveNet 並沒有使用一般常常應用在時序資料與語音訊號的 RNN 模型,而是使用 CNN 模型來取得資料時序上的資訊。

WaveNet 模型介紹

  1. Dilated causal convolutions

Dilated causal convolution 是 WaveNet 模型中相當重要的一環,但是在講到 Dilated causal convolution 之前我們先來講解什麼是 causal convolution.

要了解 causal convolution 之前,首先要先了解因果的概念,以訊號與系統的概念來說的話,系統當前的輸出值與狀態完全取決於歷史的輸入值,如果符合上述條件,那便是符合因果關係,反之,假設系統當前的輸出值與狀態會依賴未來的值時,那便是非因果系統。

我們可以將上述的概念簡單的用圖 (二) 表示,在影像處理中,所使用的通常是 2D convolution,而因為語音訊號是一維的訊號,所以是使用 1D convolution 來處理語音訊號,而從上圖可以發現,每一層 hidden layer 的輸出值,僅會受到其之前的輸入值的影響,這在處理語音訊號時是非常重要的概念。

在訓練階段時,由於能夠取得所有的訓練資料,所以 causal convolution 似乎沒有存在的必要,但在預測階段時,如果需要做到 real-time 的運算時,在搜集訊號的過程中是有時序的,訊號會隨著時間進入系統,而非能夠一次搜集所有的訊號,此時就只能使用 causal convolution,所以因果關係在語音訊號中是不可或缺的一環。

接下來在進入 dilated causal convolution 之前,我們要先對音訊有基礎的了解,在討論音樂時,常常會提到「高音質」、「高解析」或是「取樣頻率」等的詞,而這裡我們主要探討的為「取樣頻率」,簡單來說,取樣就是將類比世界的訊號轉換為數位世界的訊號,而取樣頻率影響了類比至數位轉換間的品質,取樣頻率代表了一秒鐘的時間採集了多少筆訊號,一般我們常聽的音樂取樣頻率通常為 44.1 kHz 或是 48 kHz,這代表一秒的音樂就具有高達 48000 個值,這會造成非常大的計算量,如果回到圖 (二),語音訊號的取樣頻率一般為 16 kHz,而每一個輸出值可以觀察五個輸入值,但五個輸入值僅代表大約 0.3 ms,如果要提高感受範圍 (receptive field) 的話只能透過增大 filter 大小或是增加堆疊的 filter 數量,但這兩者皆會造成計算量迅速提高,所以一般的 causal convolution 並不適合處理音訊這麼龐大的資料,而 WaveNet 透過使用 dilated causal convolution 來解決感受範圍過小的問題。

Dilated convolution 一開始是在 “Dilated Residual Networks” 這篇 paper 中提出,Dilated convolution 透過將 filter 中的一些參數設定為 0,從而擴大了觀察範圍,Dilation rate 代表了 filter 的間隔數量,一般的 convolution dilation rate為 1,下面兩張圖比較了傳統的 convolution 與 dilated convolution 的差異,可以發現,同樣大小的 filter 卻擁有不同大小的感受範圍,這可以大幅增加 CNN filter 運算的範圍,但同時可以降低參數數量,對於 CNN 來說是一大福音!

Standard convolution with 3x3 kernel and dilation rate 1
Dilated convolution with 3x3 kernel and dilation rate 2

在一般 CNN 模型中,通常都會經過 convolution layer 與 pooling layer,而在 pooling 的過程中,原始圖片的畫質往往會隨之降低,當需要將處理過後的圖片恢復到原始的解析度時,就必須再訓練另一個模型來做 upsampling 的動作,然而透過 dilated convolution,可以做到有 pooling layer 效果的 convolution 同時又可以大幅的降低模型的參數,對於 Residual Network 這種大型的模型來說可以加快訓練時間,此外,Dilated convolution 由於可以保持相同解析度的圖片,所以常常應用在 Semantic segmentation 的任務上皆得到不錯的效果。

WaveNet 採用了 Dilated causal convolution 能夠擴大了觀察範圍,但同時也考慮了訊號的因果關係,如圖 (三) 所示,WaveNet 中使用的 dilation rate 為 1,2,4,…,512,當 dilation rate 為 512 時便會從 1 開始繼續循環,而一組 1,2,4,…512 需要 1024 個輸入,以取樣頻率 16 kHz 的訊號為例,便能關注約 64 ms 的訊息,對於語音訊號模型的準確率能夠有相當顯著的幫助。

2. Softmax distribution

一般語音訊號的值通常儲存為 16-bit integer,包含了 65,536 個可能的值,而 WaveNet 透過 u-law companding transformation 將16-bit integer 量化(quantization) 至 8-bit integer,僅有 256 個可能的值,這個非線性量化方法在 speech 任務上能夠使得模型輸出的人聲更貼近原始聲音。

u-law companding transformation

2.3 Gated activation units

WaveNet 採用了與 PixelCNN 相同的 gated function,filter 與 gate 的權重皆是可學習的 convolution filter,而這個非線性的 activation function 在處理聲音訊號時比一般的線性 activation function 來的優。

2.4 Overall architecture

上圖為 WaveNet 整體的模型架構,除了先前提到的方法外,其還採用了 Residual Network 的架構加快收斂速度並且能夠訓練更深層的類神經網路。

Conclusion

WaveNet 在 text-to-speech (TTS) 任務上相較於傳統的方法得到了明顯的進步,能夠合成出更貼近真實的人聲,其中一部分原因是由於 WaveNet 能夠產生出人類說話吞嚥口水或是嘴唇震動的聲音,這些都能夠讓 WaveNet 輸出的聲音更加真實,除了在語音任務以外,WaveNet 對於音樂生成也得到了不錯的成果,能夠如音樂家即興演奏的輸出一段音樂。

此外,在 WaveNet 中,有一個變形 conditional WaveNet,這個變形模型是根據原始的 WaveNet 延伸而來的,它可以讓 WaveNet 輸出特定人的人聲或是某些語言學上的特徵,有興趣的讀者可以參考 WaveNet 的論文。

在提出 WaveNet 後,Google Deepmind 還是持續的在精進這個模型,並且加快製造訊號的速度,最初版的 WaveNet 需要一秒鐘產生 0.02 秒的聲音,在 2017 年時 WaveNet 僅需要一秒內便能產生 20 秒的聲音,同時也將 WaveNet 商用於 google assistant 中,這對於語音訊號的人工智能發展或許只是個開始,但之後一定會有越來越多的更有趣的應用。

Reference

Oord, Aaron van den, et al. “Wavenet: A generative model for raw audio.” arXiv preprint arXiv:1609.03499 (2016).

Yu, Fisher, Vladlen Koltun, and Thomas Funkhouser. “Dilated residual networks.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2017.

--

--