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