從隱空間領(lǐng)會(huì )解碼器
0 引言
在上1 期里,您已經(jīng)領(lǐng)會(huì )( 理解)Encoder 的涵意和功能了。在本期里,就繼續來(lái)領(lǐng)會(huì )Decoder 的涵意和功能。由于這兩者是息息相關(guān)的。例如在Diffusion 模型里,就含有文本編碼器(text encoder)、圖像編碼器(image decoder)、以及解碼器(decoder) 等。
于是,當您已經(jīng)深入理解編碼器了,就能輕易繼續理解另一名詞:解碼器(Decoder)。茲回憶上1 期的說(shuō)明:Encoder 負責從有招的世界,萃取( 過(guò)濾)& 沉淀于無(wú)招世界( 即AI 的潛藏空間),然后由Decoder 來(lái)生成千變萬(wàn)化的新招式。例如,上1 期所舉的< 換臉> 范例( 圖1)。
圖1
圖片來(lái)源:https://arxiv.org/pdf/1909.11573.pdf
您已經(jīng)理解Encoder了。接下來(lái),我們就來(lái)詳細說(shuō)明Decoder是如何< 生成>( 無(wú)中生有) 呢?
1 Decoder如何生成?
Decoder 的無(wú)中生有技能是它經(jīng)由機器學(xué)習(Machine Learning) 過(guò)程,而獲得的知識和智能;基于這學(xué)來(lái)的智慧來(lái)進(jìn)行< 生成>。我們先從簡(jiǎn)單的例子出發(fā)。例如,讓它( 即Decoder) 學(xué)習:< 輸入1 個(gè)數值--1,而輸出3 個(gè)數值( 紅色RGB 的數值) -- [255, 0, 0]。茲以圖2 表示。
圖2
然后繼續讓學(xué)習更多。例如學(xué)習:< 輸入一個(gè)數值--100,而輸出3 個(gè)數值( 綠色RGB的數值) -- [0, 255, 0]。并且學(xué)習:< 輸入1 個(gè)數值-- 200,而輸出3 個(gè)數值( 藍色RGB的數值) -- [0, 0, 255]。共學(xué)習了3項智能(圖3)。
圖3
俗語(yǔ)說(shuō):學(xué)而時(shí)習之。讓它重復學(xué)習更多回合,它就掌握上述的3 項生成< 規律> 了。之后,只要我們輸入[1]給這Decoder,它就會(huì )生成很接近于[255, 0, 0]的值,但不一定是[255, 0, 0]。同樣地,只要輸入[100]給這Decoder,它就會(huì )生成很接近于[0, 255, 0] 的值,但只是近似而已。
請您想一想:此時(shí)如果您輸入一個(gè)值[95] 給這Decoder,那么它會(huì )輸出什么值呢? 這只是一個(gè)起點(diǎn),逐漸地擴大Decoder 的能力,就能做出形形色色的圖像生成了。例如,從上述范例的輸出都是1 個(gè)點(diǎn)的顏色RGB 值。我們可以擴大輸出( 生成),例如輸出4 個(gè)彩色點(diǎn)的RGB 值。每一個(gè)點(diǎn)都有RGB 3 個(gè)值,而4 個(gè)點(diǎn)共有12 個(gè)值。也就是輸出1 個(gè)向量,其含有12 個(gè)值(圖4)。
圖4
繼續讓它學(xué)習更多種配對(圖5)。
圖5
接下來(lái), 還可以擴大輸出( 生成), 例如輸出128x128 彩色點(diǎn)的RGB 值。每一個(gè)點(diǎn)都有RGB3 個(gè)值,共有128x128x3 個(gè)值。也就是輸出1張JPG圖像( 圖6)。
圖6
然后請試想:此時(shí)如果您輸入一個(gè)向量值[0.1, 0.1,0.9] 給這Decoder,那么它會(huì )生成什么圖像呢?
2 Decoder的生成智慧從哪里來(lái)?
以上說(shuō)明了Decoder 經(jīng)由數千或數萬(wàn)回合的重復學(xué)習,而學(xué)習其對應規律,而擁有生成的技能。而人們透過(guò)輸入值來(lái)引導它生成不同色彩、形狀的圖像。在上述的說(shuō)明中,請您勿必留意:人們輸入值〔0, 1, 0〕等只是用來(lái)引導Decoder 去微調其所學(xué)的知識,來(lái)繪出作品。就如同學(xué)生問(wèn)老師時(shí),從古典的角度而觀(guān)之,是老師在幫學(xué)生解析問(wèn)題。其實(shí)也是:學(xué)生在引導老師去表達其深厚的學(xué)問(wèn)。
所以,Decoder 不是去解析人們的輸入數據,而是Decoder 參考人們的輸入( 指引),來(lái)微調Decoder 的所學(xué),而進(jìn)行生成作品。亦即,AI 不是傳統IT 系統依循人們所寫(xiě)的程序邏輯去創(chuàng )作,而是依其自己所學(xué)習的規律去進(jìn)行生成。例如,AI 重復觀(guān)察Picasso 數百張畫(huà)作之后,學(xué)會(huì )了Picasso 的顏色風(fēng)格( 規律),AI 就會(huì )依循其所學(xué)的規律來(lái)渲染張大千的畫(huà)作。
再舉例說(shuō)明之,例如有一位媽媽經(jīng)過(guò)許多年學(xué)會(huì )做早餐便當。今天一早,她的小孩告訴她說(shuō):今天便當加個(gè)苛包蛋。她就依其小孩指引開(kāi)始準備便當。她在準備便當的過(guò)程中,又聽(tīng)到其小孩說(shuō):蛋不要太咸。于是她就微調,而做出了一個(gè):不咸荷包蛋的早餐便當。
小孩在兩個(gè)時(shí)間點(diǎn)提供指引:1 個(gè)是創(chuàng )作前,1 個(gè)是創(chuàng )作中。媽媽也可要求小孩提供更多指引,例如媽媽說(shuō):請您給我看看其他同學(xué)的便當內容照片。于是她就依循其他同學(xué)便當特色來(lái)微調腦海中便當的景像,而做出1 個(gè)更符合小孩口味的便當。這里也要很留意:她就依循其他同學(xué)〈便當特色〉來(lái)微調腦海中便當的景像。只是提取特色而已,而不解析其細節。
3 Decoder內部的NN模型
剛才的范例說(shuō)明了:人們輸入值〔0, 1〕等只是用來(lái)引導Decoder 去微調其所學(xué)的知識,來(lái)繪出作品?,F在繼續來(lái)看看Decoder 的內部結構。無(wú)論是Encoder 或Decoder,其內部都是一個(gè)簡(jiǎn)單的計算公式: Y = X *W + B。茲以圖表示之( 圖7)。
圖7
看看Decoder內部的神經(jīng)網(wǎng)絡(luò )(NN:Neural Netwoks)架構( 圖8)。
圖8
這結構里含有w[ ] 數組,和b[ ] 向量,也就是AI模型的參數。以圖9 表示之。
圖9
其中的計算關(guān)系是:
● 當我們輸入X=[1,0],經(jīng)由Y = X*W+B 的計算,就輸出Y=[255, 0,0];
● 當我們輸入X=[1,1],經(jīng)由Y = X*W+B 的計算,就輸出Y=[0, 0, 255];
● 當我們輸入X=[0,1],經(jīng)由Y = X*W+B 的計算,就輸出Y=[0, 255, 0]。
請您試想,上圖里的w[ ] 和b[ ] 為何,才能同時(shí)滿(mǎn)足上述的3 項計算呢? 其答案并不是唯一的。亦即,可能有好幾組 W&B 可以滿(mǎn)足上述的要求。例如,可以透過(guò)機器學(xué)習,來(lái)找到一組< 同時(shí)> 滿(mǎn)足上述3 項的計算( 圖10)。
圖10
當我們輸入X=[1,0],經(jīng)由Y = X*W+B 的計算,就輸出Y=[255, 0,0]。
其計算過(guò)程為:
● y0 = x0 * w00 + x1 * w10 + b0 = 1*0 + 0*-255 +255 = 255;
● y1 = x0 * w01 + x1 * w11 + b1 = 1*-255 + 0*0 +255 = 0;
● y2 = x0 * w02 + x1 * w12 + b2 = 1*255 + 0*255 -255 = 0 。
于是就輸出了:[255, 0, 0]。同理, 當我們輸入X=[1,1],經(jīng)由Y = X*W+B 的計算,就輸出Y=[0, 0,255]。而且,當我們輸入X=[1,1],經(jīng)由Y = X*W+B 的計算,就輸出Y=[0, 0, 255]。以圖11 表示之。
圖11
于是,這是完美的一組W&B,能同時(shí)滿(mǎn)足上述的3項對應規律。所謂< 機器學(xué)習>,或< 訓練模型> 就是AI 在找尋一組完美的W&B。
4 結束語(yǔ)
為了簡(jiǎn)單易懂起見(jiàn),上述的Decoder 都是單層NN架構而已。然而一般的Decoder 都是深度NN 架構( 即含有多個(gè)隱藏層)。還有,像Stable Diffusion 在Encoder與Decoder 之間,又添加了更多隱藏層的計算,強化隱空間的創(chuàng )新組合能力,來(lái)生成更豐富的內容。
(本文來(lái)源于《電子產(chǎn)品世界》雜志2023年7月期)
評論