這文章其實也是李宏毅老師 2023 年機器學習課程的個人一些學習整理,李老師上課的內容&口吻很精彩,很建議大家直接看李老師的課程影片:
完整的所有課程在這裏
希望是有的,廢話不多說,我們繼續來跟大家分享這次生成式學習的常見生成策略,一樣很精彩哦。
生成的最小單位: 理解內容組成的基礎
無論我們想要生成的是文句、影像還是語音,我們需要首先理解這些內容的基本組成元素。對於文句來說,最小的單位是 token。在中文中,每個字就是一個 token;然而,對於英文,由於其詞彙多樣性(無法窮舉),我們通常將其進一步拆解為更小的部分,稱為 word piece。例如,"unbreakable" 可以被拆分為 "un"、"break"、"able"。而對於影像,其最小單位則是像素,對於語音,則是取樣頻率。例如,在16k取樣頻率下,每秒我們將獲得16,000個取樣點。
生成策略之一: 各個擊破的逐步生成
生成式學習的一種常見策略是 Autoregressive model,也就是我們所謂的"各個擊破"。在這種模式下,生成過程是一步步進行的。假設我們詢問機器學習是什麼,文字生成會依序生成每個字元,如"機"、"器"、"學"、"習"、"是"…,並在最後加上一個"[END]"符號來表示生成的結束。在生成影像的時候,機器則是依據提示"一直在奔跑的狗",逐一生成每個像素。
生成策略之二: 一次到位的全面生成
另一種生成策略是 Non-autoregressive (NAR) model,也就是"一次到位"。在這種模式下,所有的生成元素都是同時產生。然而,這種方法需要解決如何控制輸出長度的問題。一種常見的解決方案是固定輸出的長度,並在輸出的結束加上"[END]",如此你就可以知道這符號之後的內容是可以丟棄的。另一種解決方案則是首先輸出一個表示輸出長度的信息,例如100,然後生成程序就可以知道這次需要生成的長度。
兩種生成策略的對比: 品質與速度的平衡
在"各個擊破"與"一次到位"兩種策略中,後者的生成速度通常會更快。然而,這樣的速度優勢可能會帶來品質的下降。例如,如果我們試圖回答"請問李宏毅老師的職業是什麼"這個問題,答案可能是"演員"或"老師"。然而,由於"一次到位"的策略需要一次就將第一個字以及第二個字的可能答案選擇出來,所以可能會回答出類似"老員"或"演師"這種答案,所以這種方法的回答質量通常不如"各個擊破"的策略。
了解 NAR 模型速度之快: 內在運作原理的探討
在理解為什麼非自回歸(Non-Autoregressive,NAR)模型通常比自回歸(Autoregressive,AR)模型速度快之前,我們需要了解兩者的運作方式。
想像一下你在建立一個句子,AR模型就像是你一個字一個字地寫出這個句子,每寫一個字,你都要看看前面已經寫下的字,然後根據前面的字來決定下一個字應該是什麼。這就像是當你寫一篇文章時,你需要根據前文來決定後續的內容。這樣的過程雖然可以創造出合理且通順的句子,但每次生成下一個字元都需要等待前面的字元生成完畢,這種依賴前一步的特性使得整個生成過程無法並行,只能串行進行,所以速度相對較慢。
相對的,NAR模型則是一種一次性生成所有字元的方法。這就像是你同時揮動手中的魔法棒,讓所有的字都立即出現在紙上。因為這種模型的生成不依賴於先前生成的字元,所有的字元都可以同時並行生成,所以整體生成速度會比AR模型快。然而,這種同時生成所有字元的方法可能會導致生成的句子在語義上的連貫性不如AR模型。
所以,就好像你在賽跑,AR模型像是按照既定路線一步步跑完全程,而NAR模型就像是用傳送門直接到達終點,因此NAR模型的速度通常會比AR模型快。
策略融合的可能: 品質與速度的兩全其美
那麼,有沒有可能融合"各個擊破"和"一次到位"兩種策略,既能保證生成的品質,又能保證生成的速度呢?答案是肯定的。Diffusion Model 正是這樣一種方法,它將"一次到位"的策略改為"N次到位"。這種方法不僅能保證令人驚訝的生成品質,同時也能提供快速的生成效率。
以下則是語音以及影像生成領域將這兩種策略融合使用的簡單說明:
語音生成的策略融合
語音生成技術需要將文本轉換為語音。在這個過程中,我們可以選擇使用"各個擊破"或"一次到位"兩種策略。然而,我們也可以結合兩種策略,以充分利用兩者的優勢。以下是一種如何結合這兩種策略的方法,我們將以一種輕鬆理解的方式進行說明。
首先,讓我們把語音想像成一串珠子,每一顆珠子都代表語音中的一個取樣點。在"各個擊破"的階段,我們會像串珠一樣,一個取樣點接一個取樣點地生成語音。比方說,我們可以每秒生成100個取樣點,這就像是我們在每秒鐘內將100顆珠子串到一條線上。這個過程能確保語音的流暢性,因為每一個取樣點都依賴於前一個取樣點。
然後,在"一次到位"的階段,我們會將這100個取樣點(或者說,這100顆珠子)視為一個整體,並同時對其進行調整。這就像是我們在將100顆珠子串成一條線之後,立即對這條線上的所有珠子進行顏色或形狀的調整。這樣的過程可以大幅提高生成速度,因為所有的取樣點都是同時被調整的。
因此,透過結合"各個擊破"與"一次到位"的策略,我們可以在保持語音的流暢性的同時,也提高語音的生成速度。這就像是我們在串珠時,既能確保每一顆珠子都被細心串到線上,又能立即對所有的珠子進行調整,使得整條珠子線看起來更完美。
Diffusion Model的策略融合
當我們討論影像生成時,我們可以將其視為從一幅模糊的畫開始,逐步添加更多細節,直到我們得到一幅清晰、細膩的畫作。Diffusion Model 就是如此來結合"各個擊破"和"一次到位"兩種策略的優勢。
Diffusion Model的工作方式有點像我們在實際生活中創作一幅畫。首先,我們可能會在畫布上畫出一個大概的草圖,這個草圖代表我們的想法和目標。然後,我們會逐步添加細節,填充顏色,進行修飾,直到最後完成一幅清晰的畫作。在這個過程中,我們並不是一次就完成所有的細節,而是分階段逐步添加。
Diffusion Model就是透過這種方式來生成影像。它首先創建一個模糊的影像,然後透過一系列的步驟來添加細節。這就像我們先畫出一個大概的草圖,然後逐步填充顏色和細節。每一個步驟都是一次"到位",因為在每個步驟中,模型都會同時更新所有的像素。
然而,這一次的"到位"並不是將影像立即變成最終的清晰影像,而是逐步添加細節。這就像我們在畫畫時,每一步都在補充草圖的細節,但不會一次就畫出最終的畫面。因此,Diffusion Model可以被視為是"各個擊破"和"一次到位"兩種策略的結合。
透過這種方式,Diffusion Model可以在保留"各個擊破"策略帶來的細節度和質量的同時,利用"一次到位"策略提高生成速度。這就像是我們在畫畫時,既能確保每一步都有細節的添加,又能快速完成整幅畫作。