PyTorch生成式人工智能實戰:從零打造創意引擎
- 0. 前言
- 1. 生成式人工智能
- 1.1 生成式人工智能簡介
- 1.2 生成式人工智能技術
- 2. Python 與 PyTorch
- 2.1 Python 編程語言
- 2.2 PyTorch 深度學習庫
- 3. 生成對抗網絡
- 3.1 生成對抗網絡概述
- 3.2 生成對抗網絡應用
- 4. Transformer
- 4.1 注意力機制
- 4.2 Transformer 架構
- 4.3 多模態 Transformer 和預訓練大語言模型
- 5. 專欄目標
- 小結
0. 前言
生成式人工智能 (Generative AI
, GAI
) 自 ChatGPT
問世以來,引發了廣泛關注,并成為了技術領域的焦點。生成式人工智能技術極大的改變了我們日常生活的多個方面,開啟了技術的新紀元,并激發了大量研究人員探索各種生成模型所提供的廣泛可能性。
例如,Midjourney
已經實現了從簡短的文本輸入生成高分辨率、逼真圖像的技術。類似地,軟件公司 Freshworks
通過 ChatGPT
的強大功能,顯著加速了應用程序開發,將原本需要 10
周時間的開發周期縮短到僅僅幾天。生成式人工智能技術進步的影響遠不止于此,如今,生成式人工智能技術能夠生成與人類寫作相媲美的文章,創作出類似經典音樂作品的樂曲,快速生成復雜的文本文件,這些任務通常需要大量的人工精力和時間。
本專欄深入探討了生成式人工智能,這項技術通過其高效和快速的內容創作能力,正在重塑眾多行業。具體來說,將學習如何使用生成式模型來創建各種形式的內容:數字、圖像、文本和音頻。此外,還將學習從零開始構建這些模型,以便深入理解生成式 AI
的內部工作原理,我們將使用 Python
和 PyTorch
來構建、訓練和使用這些模型。
1. 生成式人工智能
本節解釋了什么是生成式人工智能 (Generative AI
, GAI
),以及它與非生成式人工智能(判別模型)的不同之處。GAI
具有創造多種形式新內容的非凡能力,包括文本、圖像、音頻、視頻、代碼以及復雜的模式。GAI
能夠創造出新穎的內容世界,ChatGPT
是一個典型例子。與此相對,判別模型主要關注識別和分類已存在的內容。
1.1 生成式人工智能簡介
生成式人工智能是一種通過學習現有數據的模式來創建新內容的人工智能類型,如文本、圖像或音樂。與判別模型不同,后者專注于識別不同數據實例之間的差異,并學習不同類別之間的邊界。下圖展示了這兩種建模方法之間的區別。例如,當面對一組包含狗和貓的圖像時,判別模型通過捕捉一些關鍵特征(例如,貓有小鼻子和尖耳朵)來判斷每張圖片是狗還是貓。判別模型將數據作為輸入,并輸出不同標簽的概率,這些概率分別表示為 Prob(dog)
和 Prob(cat)
。然后,可以根據最高的預測概率來標記輸入數據。
相比之下,生成模型具有能夠生成全新數據實例的獨特能力。在關于狗與貓示的例中,生成模型通過深入理解這些圖像的定義特征,來合成表示狗和貓的新圖像。生成模型將任務描述(例如在潛空間中變化的值,這些變化會導致生成不同特征的圖像)作為輸入,產生新的狗和貓圖像。
從統計學的角度來看,當給定具有特征X的數據實例和相應標簽 Y
時,判別模型的任務是預測條件概率 prob(Y|X)
。相反,生成模型試圖學習輸入特征 X
和目標變量 Y
的聯合概率分布 prob(X, Y)
,然后從該分布中采樣,生成新的 X
實例。
1.2 生成式人工智能技術
根據想要創建的內容的具體形式,生成模型有不同的類型。在本專欄中,主要聚焦于兩種典型技術:生成對抗網絡 (Generative Adversarial Network
, GAN
) 和 Transformer
,但也會涵蓋變分自編碼器、能量模型和擴散模型等。GAN
中的“對抗”一詞指的是兩個神經網絡在零和博弈框架下相互競爭:生成網絡試圖創建無法與真實樣本區分的數據實例,而鑒別網絡則試圖識別生成樣本與真實樣本的區別。兩個網絡之間的競爭推動了雙方的共同改進,最終使得生成網絡能夠創造出高度逼真的數據。Transformer
是深度神經網絡,能夠高效地解決序列到序列的預測任務。
GAN
因其易于實現和多功能性而廣受歡迎,這些多功能的模型能夠創造出各種各樣的內容,從幾何形狀和復雜圖案,再到高質量的彩色圖像,如人臉圖像,此外,GAN
還具備轉換圖像內容的能力,可以無縫地將一張擁有金發的人臉圖像變為黑發人臉圖像。GAN
還能夠將其創作能力擴展到音樂生成領域,創作出逼真的音樂作品。
與幾何形狀、數字或圖像生成不同,文本生成面臨著巨大的挑戰,主要是因為文本信息的順序性特征,其中單個字符和單詞的的順序和排列具有重要意義。為了解決這種復雜性,我們引入了 Transformer
,一種旨在高效地解決序列到序列的預測任務的深度神經網絡。與循環神經網絡或卷積神經網絡不同,Transformer
在捕捉輸入和輸出序列中復雜的長程依賴關系方面表現卓越。需要注意的是,Transformer
具備并行訓練能力(能夠在多個設備上同時進行訓練),顯著縮短了訓練時間,使我們能夠在海量數據上訓練 Transformer
模型。
Transformer
架構是大語言模型( Large language model
, LLM
,指具有大量參數并在大規模數據集上訓練的深度神經網絡)的基礎,包括 ChatGPT
、BERT
、DALL-E
和 T5
等。Transformer
架構為 AI
領域的飛躍性進展奠定了基礎,并推動了 ChatGPT
以及其他生成式預訓練 Transformer
(Generative Pretrained Transformer
, GPT
) 模型的出現。
2. Python 與 PyTorch
2.1 Python 編程語言
自 2018
年以來,Python
已成為廣泛應用的編程語言。Python
不僅允許用戶創建和修改庫,而且擁有一個龐大的生態系統,因此可以輕松獲取資源。而且可以導入現成的庫,避免重新發明輪子,同時也能將自己的代碼與 Python
社區共享。
Python
是一個跨平臺語言,無論使用的是 Windows
、Mac
還是 Linux
,雖然根據操作系統的不同,安裝軟件和庫的過程可能會有所不同,但 Python
代碼在不同系統上的表現是一樣的。
Python
是一種富有表現力的語言,適用于通用應用開發,語法易于掌握,能夠輕松理解和使用。Python
提供了大量的庫,使得相較于其他語言(如 C++
或 R
),創建生成模型更加容易。
2.2 PyTorch 深度學習庫
在 Python
中,最受歡迎的 AI
框架是 PyTorch
和 TensorFlow
。在本專欄中,我們選擇 PyTorch
而非 TensorFlow
,主要是因為它更易于使用。
PyTorch
是由 Meta
的 AI
研究實驗室開發的開源機器學習庫。它建立在 Python
編程語言和 Torch
庫之上,旨在為創建和訓練深度學習模型提供一個靈活且直觀的平臺,PyTorch
的設計目標是滿足研究人員和開發人員的需求,提供一個更加用戶友好且可擴展的深度學習框架。
計算圖是深度學習中的一個基礎概念,它在高效計算復雜數學運算方面起著關鍵作用,尤其是涉及多維數組或張量的運算。計算圖是一個有向圖,其中節點表示數學操作,邊表示這些操作之間流動的數據。計算圖的一個關鍵用途是在實現反向傳播和梯度下降算法時計算偏導數。圖結構使得在訓練過程中更新模型參數時,能夠高效地計算所需的梯度。PyTorch
會實時創建和修改計算圖,即所謂的動態計算圖。這使得 PyTorch
能夠更好地適應不同的模型架構,并簡化調試過程。PyTorch
通過 GPU
加速計算,顯著減少了相較于 CPU
訓練所需的時間。
PyTorch
的設計與 Python
編程語言非常契合。其語法簡潔易懂,使得初學者和經驗豐富的開發人員都能輕松上手。得益于其動態計算圖和簡潔的接口,使得快速實驗新想法成為可能。這種靈活性在生成式 AI
等快速發展的領域尤為重要。PyTorch
還擁有一個迅速發展的社區,形成了一個豐富的生態系統,包括庫、工具和資源,供開發者使用。PyTorch
與其他 Python
庫(如 NumPy
和 Matplotlib
)兼容。這種互操作性使得用戶能夠無縫地將 PyTorch
集成到現有的工作流中,從而提高生產力。
由于深度學習中模型的訓練需要大量時間,因此通常使用 GPU
加速計算,在安裝 PyTorch
之前需要根據選用的 PyTorch 版本和顯卡安裝 CUDA
和 cudnn
,關于 CUDA
和 cudnn
的安裝和配置可以參考官方文檔,建議在安裝之前根據自己的操作系統認真查看官方的安裝文檔,可以避免踩不必要的坑。如果計算機中含有 NVIDIA
顯卡作為硬件組件,建議安裝 CUDA
驅動程序,該驅動程序可將深度學習訓練速度提高幾個數量級。
然后,在 PyTorch 官方網頁,根據自己實際的環境,進行相應的選擇,在 Run this Command
欄中將給出安裝 PyTorch
的命令:
在此,我們以 Linux
、pip
、Python
和 CUDA10.2
為例,復制并在終端執行安裝命令:
pip3 install torch torchvision torchaudio
為了確認 PyTorch
已正確安裝,可以在 Python shell
中運行以下代碼:
>>> import torch
>>> test = torch.empty(2,2)
>>> print(test)
tensor([[2.9685e-26, 4.5722e-41],[2.9685e-26, 4.5722e-41]])
如果能夠正確調用 PyTorch
相關函數,表明 PyTorch
已正確安裝。需要注意的是,以上代碼中,使用 torch.emty()
中創建了一個尺寸為 2 x 2
的張量,它是一個空矩陣,這里的“空”并不意味著所有元素的值都為 Null
,而是使用一些被認為是占位符的無意義浮點數,需要在之后進行賦值,這與 NumPy
中的空數組類似。
3. 生成對抗網絡
本節首先介紹生成對抗網絡 (Generative Adversarial Network
, GAN
) 工作原理。然后,使用動漫面部圖像生成作為示例,展示 GAN
的內部工作原理。最后,討論 GAN
的實際應用。
3.1 生成對抗網絡概述
生成對抗網絡 (Generative Adversarial Network
, GAN
) 是一類生成模型,因為 GAN
易于構建和訓練,且能夠生成各種各樣的內容而變得及其流行。GAN
的核心是雙網絡架構,包含一個生成器和一個鑒別器。生成器負責捕捉數據的潛分布以生成內容,而鑒別器則用于估計給定樣本是來自真實訓練數據集(視為“真實”)或來自生成器所生成的偽造樣本(視為“虛假”)。模型的主要目標是生成與訓練數據集中的實例相似的新數據,GANs生成的數據特性取決于訓練數據集的構成。例如,如果訓練數據由灰度圖像的服裝組成,則生成的圖像將與這些服裝高度相似,而如果訓練數據集包含的是人臉的彩色圖像,那么生成的圖像也將類似于人臉。
GAN
的架構及其組件如下圖所示。為了訓練模型,訓練數據集中的真實樣本和由生成器生成的虛假樣本一起提供給鑒別器。生成器的主要目標是創建與訓練數據集中實例幾乎無法區分的數據實例。相反,鑒別器則致力于區分由生成器生成的虛假樣本與真實樣本。這兩個網絡通過競爭過程不斷進行博弈,試圖通過迭代超越對方。
GAN
模型的訓練需要通過多個迭代。在每次迭代中,生成器首先接收某種形式的任務描述,并利用該任務描述生成偽造圖像;將這些偽造圖像與來自訓練集的真實圖像一起提供給鑒別器,鑒別器嘗試將每個樣本分類為真實或虛假。接著,鑒別器將分類結果與實際標簽(真實標簽)進行比較,生成器和鑒別器根據分類結果獲得反饋,并通過反饋改進各自的能力:鑒別器通過不斷調整來提高識別虛假樣本的能力,而生成器則學習如何生成更具迷惑性的樣本以騙過鑒別器。隨著訓練的進行,兩個網絡最終達到一個平衡點,這時兩個網絡都無法進一步改進,此時生成器能夠生成與真實樣本幾乎無法區分的數據樣本。
3.2 生成對抗網絡應用
GAN
易于實現且用途廣泛,可以用于生成幾何形狀、復雜圖案、高分辨率圖像,以及逼真的音樂。GAN
的實際應用不僅限于生成逼真的數據,還可以將一個圖像域中的屬性轉化為另一個圖像域,例如,訓練 CycleGAN
模型,將人臉圖像中的金發轉變為黑發,或反之將黑發轉為金發。
GAN
同樣具有廣泛的實用場景。假設,一個服裝店,在生產之前允許用戶進行定制,網站展示了大量獨特的設計供客戶選擇,但問題是:只會在有人下單后才開始制作這些衣服。而制作這些衣服的高質量圖像較為昂貴,因為必須先生產出衣服,然后再拍攝照片。而使用 GAN
將極大的簡化此過程,無需擁有大量生產出來的服裝和照片,可以使用 CycleGAN
將一組圖像中的特征轉化為另一組圖像,從而創造出全新的風格。這只是使用 GAN
的一個簡單示例,利用 GAN
模型的多功能性能夠創建無窮的可能性。
4. Transformer
Transformer
是一種擅長處理序列到序列預測問題的深度神經網絡,例如接受輸入句子并預測最可能的下一個詞匯。本節將介紹 Transformer
的關鍵創新點:自注意力機制。然后我們將討論 Transformer
架構和不同類型的 Transformer
。最后,我們將討論 Transformer
的一些最新進展,例如多模態模型(輸入不僅包括文本,還包括音頻和圖像等其他數據類型)和預訓練大語言模型(基于大規模文本數據進行訓練的模型,能夠執行各種下游任務)。
在 Transformer
架構提出之前,自然語言處理 (Natural Language Processing
, NLP
) 和其他序列到序列的預測任務主要是通過循環神經網絡 (Recurrent Neural Network
, RNN
) 進行處理。然而,RNN
在保留序列中早期元素的信息方面存在困難,這限制了它們捕捉長期依賴關系的能力。即使是能夠處理更長依賴關系的高級 RNN
變體,如長短期記憶網絡 (Long Short-Term Memory Network
, LSTM
),在面對極長的依賴關系時依然表現不佳。
更重要的是,RNN
(包括 LSTM
等變體)是按順序處理輸入的,這意味著這些模型一次只能處理一個元素,按順序處理,而不是同時查看整個序列。RNN
沿著輸入和輸出序列的順序進行計算,導致其無法進行并行訓練,使得訓練過程變得緩慢。因此,也導致其無法在大規模的數據集上進行訓練。
Transformer
的關鍵創新是自注意力機制,自注意力機制非常擅長捕捉序列中的長期依賴關系。此外,由于輸入在模型中不是按順序處理的,Transformer
可以進行并行訓練,從而大大縮短訓練時間。更重要的是,并行訓練使得模型在大型數據集上訓練成為可能,這使得大語言模型 (Large language model
, LLM
) 更智能且學習能力更強,能夠用于處理和生成文本,理解上下文并執行各種語言任務。這促成了 ChatGPT
等 LLM
的崛起,并推動了 AI
應用的熱潮。
4.1 注意力機制
注意力機制為序列中每個元素與所有其他元素(包括其自身)之間的關系分配權重。權重越高,兩個元素之間的關系就越緊密,這些權重在訓練過程中從大量的訓練數據中學習得到。因此, 如 ChatGPT
,DeepSeek
等訓練好的 LLM
能夠理解句子中任意兩個詞之間的關系,從而理解自然語言。
那么注意力機制是如何為序列中的元素分配權重,以捕捉長期依賴關系的?注意力權重是通過首先將輸入通過三個神經網絡層,得到查詢 Q
(Query
)、鍵 K
(Key
) 和值 V
(Value
) 來計算的。使用查詢、鍵和值來計算注意力的方法來源于檢索系統。例如,在圖書館搜索一本書,可以在圖書館的搜索引擎中輸入“PyTorch 生成式人工智能
”之類的關鍵詞。在這種情況下,查詢 Q
就是“PyTorch 生成式人工智能
”,鍵 K
則是書名、書籍描述等內容。圖書館的檢索系統會根據查詢和鍵之間的相似性推薦一系列書籍(值 V
)。自然地,書名或描述中包含“PyTorch
”或“生成式人工智能
”或同時包含兩者的書籍會排在前面,而那些標題或描述中沒有這些關鍵詞的書籍則會排在列表底部,因為這些書籍會被分配較低的匹配分數。
4.2 Transformer 架構
Transformer
最初是為了構建機器語言翻譯模型,例如,英語翻譯為法語。下圖展示了 Transformer
架構。左側是編碼器 (Encoder
),右側是解碼器 (Decoder
)。
Transformer
中的編碼器“學習”輸入序列的含義(例如,英語短語“How are you?
”),并將其轉換為代表這一含義的向量,再將這些向量傳遞給解碼器。解碼器基于序列中先前的單詞和編碼器的輸出,逐個預測下一單詞,從而構建輸出(例如,英語短語的法語翻譯)。訓練好的模型能夠將常見的英語短語翻譯為法語。
Transformer
有三種類型:僅編碼器 Transformer
、僅解碼器 Transformer
和編碼器-解碼器 Transformer
。僅編碼器 Transformer
沒有解碼器,能夠將一個序列轉換為一個抽象表示,供下游任務使用,如情感分析、命名實體識別和文本生成。例如,BERT
就是一個僅編碼器的 Transformer
。僅解碼器 Transformer
沒有編碼器,只有解碼器,適用于文本生成、語言建模和創意寫作。例如,GPT-2
和 ChatGPT
都是僅解碼器 Transformer
。
編碼器-解碼器 Transformer
適用于處理復雜任務,如多模態模型,能夠處理文本到圖像生成或語音識別等任務。編碼器-解碼器 Transformer
結合了編碼器和解碼器的優點。編碼器擅長處理和理解輸入數據,而解碼器則擅長生成輸出。這個結合使得模型能夠有效理解復雜的輸入(如文本或語音)并生成復雜的輸出(如圖像或轉錄文本)。
4.3 多模態 Transformer 和預訓練大語言模型
多模態模型模型不僅可以處理文本,還能夠處理其他類型的數據,如音頻和圖像。例如,文本到圖像 Transformer
,包括 DALL-E 2
、Imagen
和 Stable Diffusion
都是文本到圖像的模型,能夠根據文本提示生成高分辨率圖像。文本到圖像 Transformer
融入了擴散模型的原理,擴散模型涉及一系列的變換,逐漸增加數據的復雜性。因此,在討論文本到圖像 Transformer
之前,首先需要理解擴散模型。
假設通過使用基于擴散的模型生成高分辨率的花卉圖像。首先需要一個高質量的花卉圖像訓練集。然后,模型逐步向這些花卉圖像添加噪聲(即所謂的擴散過程),直到它們變成完全的隨機噪聲。接著,訓練模型逐步去除這些噪聲,從而生成新的數據樣本。擴散過程如下圖所示。左列包含原始的花卉圖像,向右移動的過程中,每一步都向圖像中添加噪聲,直到最右列時,圖像完全變成隨機噪聲。
文本到圖像 Transformer
以文本提示作為輸入,生成與該文本描述相對應的圖像。文本提示作為一種條件輸入,模型通過一系列神經網絡層將文本描述轉化為圖像。與擴散模型類似,文本到圖像 Transformer
采用分層架構,每一層逐步為生成的圖像添加更多細節。擴散模型和文本到圖像 Transformer
的核心概念——逐步細化輸出——在兩者之間是相似的。擴散模型因其能夠提供穩定的訓練并生成高質量的圖像,已變得越來越流行,并且在生成效果上超過了其他生成模型,如 GAN
和變分自編碼器。
5. 專欄目標
本專欄的目標是學習如何從零開始構建和訓練生成模型。通過這種方式,對這些模型的內部工作機制有一個全面的了解,從而能夠更好地利用它們,從零開始創建深度學習模型是理解這些模型的最佳方式。從這個角度來看,本專欄并不將生成式人工智能模型當作黑盒模型,而是深入詳細地介紹這些模型的內部工作原理。目標是我們對生成模型有更深刻的理解,構建更好的生成式人工智能,總體而言:
- 系統進階:內容層層遞進,從
GAN
生成手寫數字起步,直至構建Transformer
翻譯模型、擴散模型生成花卉圖像,手把手打通生成式人工智能全鏈路 - 前沿實戰:解鎖
CycleGAN
實現圖像跨域轉換、用500
萬參數GPT
復刻海明威文風、打造AI
助手等硬核項目,代碼即戰力 - 多模態創意:橫跨圖像、文本、音樂三大領域,揭秘
MuseGAN
作曲、DALL-E
底層技術,成為跨界內容創作者 - 使用技巧:涵蓋
PyTorch
核心API
、Hugging Face
模型調優、擴散模型采樣策略,無縫銜接開源生態
小結
生成式人工智能是一種具備生成多種新內容形式(如文本、圖像、代碼、音樂、音頻和視頻)的技術,判別模型專注于分配標簽,而生成模型則生成新的數據實例。PyTorch
憑借其動態計算圖和支持 GPU
訓練的能力,非常適合用于深度學習和生成建模。《PyTorch生成式人工智能實戰》從神經網絡基礎到 Stable Diffusion
實戰,從零開始實現工業級項目,讓創造力突破想象邊界,用代碼點燃生成式人工智能的無限可能!