終于有人將深度學(xué)習(xí)中重點(diǎn)做成了動畫 原創(chuàng)
深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個子領(lǐng)域,深度學(xué)習(xí)通過神經(jīng)網(wǎng)絡(luò)模擬人腦神經(jīng)元的連接來進(jìn)行復(fù)雜數(shù)據(jù)的學(xué)習(xí)與預(yù)測。其中,卷積神經(jīng)網(wǎng)絡(luò)(CNN)主要用于計(jì)算機(jī)視覺任務(wù);循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)則適用于處理序列數(shù)據(jù)。今天介紹CV和NLP領(lǐng)域一些重要模型。
?[RNN] 手書動畫 ??
0. 初始化
輸入序列X:[3,4,5,6]
參數(shù)矩陣:
參數(shù)矩陣是通過訓(xùn)練得到的,圖中雖然列了4個節(jié)點(diǎn),但其實(shí)是同一個節(jié)點(diǎn)按照時間步展開的,這也是RNN經(jīng)常被誤解的地方。
RNN隱狀態(tài)和輸出的計(jì)算公式:
根據(jù)隱狀態(tài)計(jì)算公式,當(dāng)新的輸入進(jìn)來時,RNN不僅考慮當(dāng)前的輸入,還結(jié)合之前保存的隱狀態(tài)來做出新的判斷。隱狀態(tài)在RNN中相當(dāng)于記憶或上下文,它保存了從前面輸入序列中學(xué)到的信息。
初始隱藏狀態(tài):
1.第一個時間步t=1
輸入
計(jì)算隱藏狀態(tài):
計(jì)算輸出:
2.第一個時間步t=2
輸入
計(jì)算隱藏狀態(tài):
計(jì)算輸出:
3.第一個時間步t=3
輸入
計(jì)算隱藏狀態(tài):
計(jì)算輸出:
4.第一個時間步t=4
輸入
計(jì)算隱藏狀態(tài):
計(jì)算輸出:
[Deep RNN] 手書動畫 ??
Deep RNN 在普通 RNN 的基礎(chǔ)上增加了更多的層,類似MLP的多個隱藏層,每一層可以提取更加復(fù)雜和抽象的特征,通過增加層數(shù),Deep RNN 能夠更好地捕捉序列中的復(fù)雜模式和長距離依賴關(guān)系,提升處理長序列的能力。
Deep RNN是如何工作的?
[1] 給定
,X2,X3, X4的序列,以及通過訓(xùn)練得到隱藏層和輸出層權(quán)重。
[2] 初始化隱藏狀態(tài)
將a0, b0, c0初始化為零
— 處理X1 (t = 1)—
[3] 第一隱藏層 (a) : a0 → a1
輸入權(quán)重:
隱狀態(tài)權(quán)重:
偏置:
權(quán)重是通過訓(xùn)練過程得到的,圖中四個節(jié)點(diǎn)其實(shí)是同一個節(jié)點(diǎn)按照時間展開的,所以共享同一套參數(shù)。
輸入權(quán)重、隱藏狀態(tài)權(quán)重和偏置的水平拼接成一個變換矩陣,視覺上表示為 [ | | ] 。
狀態(tài)矩陣是輸入X1、之前的隱藏狀態(tài)a0和一個額外的1的垂直拼接,視覺上表示為 [ ; ; 1]。
將這兩個矩陣相乘得到新的隱藏狀態(tài)a1 = [0 ; 1]。
[4] 第二隱藏層 (b) : b0 → b1
第一層的a1 成為輸入。
變換矩陣視覺上表示為 [ |
輸入權(quán)重:
隱狀態(tài)權(quán)重 :
偏置:
狀態(tài)矩陣是a1, b0和1的組合,視覺上表示為 [;
將這兩個矩陣相乘得到新的隱藏狀態(tài)b1 = [1; -1]。
[5] 第三隱藏層 (c) : c0 → c1
第二層的b 成為輸入。
變換矩陣視覺上表示為 [
輸入權(quán)重:
隱狀態(tài)權(quán)重 :
偏置:
狀態(tài)矩陣是b1, c0和1的組合,視覺上表示為 [ ; ; 1]。
將這兩個矩陣相乘得到新的隱藏狀態(tài)b1 = [1; -1]。
[6] 輸出層 (Y)
變換矩陣視覺上表示為 [ | ]。
狀態(tài)矩陣是c1和1的組合,視覺上表示為 [; 1]。
將這兩個矩陣相乘得到輸出Y1 = [3; 0; 3]。
— 處理X2 (t = 2)—
[7] 之前的隱藏狀態(tài)
復(fù)制a1, b1, c1的值。
[8] 隱藏 + 輸出
重復(fù)步驟[3]-[6],得到輸出Y2 = [5; 0; 4]
— 處理X3 (t = 3)—
[9] 之前的隱藏狀態(tài)
復(fù)制a2, b2, c2的值。
[10] 隱藏 + 輸出
重復(fù)步驟[3]-[6],得到輸出Y3 = [13; -1; 9]
— 處理X4 (t = 4)—
[11] 之前的隱藏狀態(tài)
復(fù)制a3, b3, c3的值。
[12] 隱藏 + 輸出
重復(fù)步驟[3]-[6],得到輸出Y4 = [15; 7; 2]
[LSTM] 手書動畫 ??
LSTM曾經(jīng)是處理長序列數(shù)據(jù)最有效的架構(gòu),直到Transformers的出現(xiàn)改變了這一切。
LSTM屬于廣義的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族,以循環(huán)的方式順序處理數(shù)據(jù)。
另一方面,Transformers放棄了循環(huán),轉(zhuǎn)而使用自注意力機(jī)制,以并行的方式同時處理數(shù)據(jù)。
最近,由于人們意識到自注意力在處理極長序列(如幾十萬的tokens)時并不具有可擴(kuò)展性,因此對循環(huán)機(jī)制又重新產(chǎn)生了興趣。Mamba就是一個將循環(huán)機(jī)制帶回的好例子。
突然之間,研究LSTM又變得時髦了。
LSTM是如何工作的?
[1] 給定
? ?? 輸入序列 X1, X2, X3 (d = 3)
? ?? 隱藏狀態(tài) h (d = 2)
? ?? 記憶 C (d = 2)
? 權(quán)重矩陣 Wf, Wc, Wi, Wo
處理 t = 1
[2] 初始化
? 隨機(jī)設(shè)置之前的隱藏狀態(tài)h0為 [1, 1],記憶單元C0為 [0.3, -0.5]
[3] 線性變換
? 將四個權(quán)重矩陣與當(dāng)前輸入(X1)和之前的隱藏狀態(tài)(h0)的拼接相乘。
? 結(jié)果是特征值,每個特征值都是當(dāng)前輸入和隱藏狀態(tài)的線性組合。
[4] 非線性變換
? 應(yīng)用sigmoid σ來獲得門控值(在0到1之間)。
? 遺忘門 (f1): [-4, -6] → [0, 0]
? 輸入門 (i1): [6, 4] → [1, 1]
? 輸出門 (o1): [4, -5] → [1, 0]
? 應(yīng)用tanh來獲得候選記憶值(在-1到1之間)
? 候選記憶 (C’1): [1, -6] → [0.8, -1]
[5] 更新記憶
? 遺忘 (C0 .* f1): 逐元素地將當(dāng)前記憶與遺忘門值相乘。
? 輸入 (C’1 .* o1): 逐元素地將“候選”記憶與輸入門值相乘。
? 通過將上述兩項(xiàng)相加來更新記憶到C1:C0 .* f1 + C’1 .* o1 = C1
[6] 候選輸出
? 對新的記憶C1應(yīng)用tanh獲得候選輸出o’1。
[0.8, -1] → [0.7, -0.8]
[7] 更新隱藏狀態(tài)
? 輸出 (o’1 .* o1 → h1): 逐元素地將候選輸出與輸出門相乘。
? 結(jié)果是更新后的隱藏狀態(tài)h1
? 同時,這也是第一次輸出。
處理 t = 2
[8] 初始化
? 復(fù)制之前的隱藏狀態(tài)h1和記憶C1
[9] 線性變換
? 重復(fù)步驟[3]
[10] 更新記憶 (C2)
? 重復(fù)步驟[4]和[5]
[11] 更新隱藏狀態(tài) (h2)
? 重復(fù)步驟[6]和[7]
處理 t = 3
[12] 初始化
? 復(fù)制之前的隱藏狀態(tài)h2和記憶C2
[13] 線性變換
? 重復(fù)步驟[3]
[14] 更新記憶 (C3)
? 重復(fù)步驟[4]和[5]
[15] 更新隱藏狀態(tài) (h3)
? 重復(fù)步驟[6]和[7]
[U-Net] 手書動畫 ??
[Graphic Convolutional Network] 手書動畫??
-- ???????? 目標(biāo) --
預(yù)測圖中節(jié)點(diǎn)是否為 X。
[1] 給定
? 一個包含五個節(jié)點(diǎn) A、B、C、D、E 的圖
[2] ?? 鄰接矩陣:鄰居
? 為每條邊的鄰居加 1
? 在兩個方向上重復(fù)(例如,A->C,C->A)
? 對兩個 GCN 層重復(fù)此操作
[3] ?? 鄰接矩陣:自環(huán)
? 為每個自環(huán)添加 1
? 等同于添加單位矩陣
? 對兩個 GCN 層重復(fù)此操作
[4] ?? GCN1:信息傳遞
? 將節(jié)點(diǎn)嵌入 ?? 與權(quán)重和偏置相乘
? 應(yīng)用 ReLU(負(fù)值 → 0)
? 結(jié)果是每個節(jié)點(diǎn)的一條信息
[5] ?? GCN1:池化
? 將信息與鄰接矩陣相乘
? 目的是從每個節(jié)點(diǎn)的鄰居以及節(jié)點(diǎn)本身匯集信息。
? 結(jié)果是每個節(jié)點(diǎn)的新特征
[6] ?? GCN1:可視化
? 對于節(jié)點(diǎn) 1,可視化如何匯集信息以獲得新特征以便更好地理解
? [3,0,1] + [1,0,0] = [4,0,1]
[7] ?? GCN2:信息傳遞
? 將節(jié)點(diǎn)特征與權(quán)重和偏置相乘
? 應(yīng)用 ReLU(負(fù)值 → 0)
? 結(jié)果是每個節(jié)點(diǎn)的一條信息
[8] ?? GCN2:池化
? 將信息與鄰接矩陣相乘
? 結(jié)果是每個節(jié)點(diǎn)的新特征
[9] ?? GCN2:可視化
? 對于節(jié)點(diǎn) 3,可視化如何匯集信息以獲得新特征以便更好地理解
? [1,2,4] + [1,3,5] + [0,0,1] = [2,5,10]
[10] ?? FCN:線性 1 + ReLU
? 將節(jié)點(diǎn)特征與權(quán)重和偏置相乘
? 應(yīng)用 ReLU(負(fù)值 → 0)
? 結(jié)果是每個節(jié)點(diǎn)的新特征
? 與 GCN 層不同,不包含來自其他節(jié)點(diǎn)的信息。
[11] ?? FCN:線性 2
? 將節(jié)點(diǎn)特征與權(quán)重和偏置相乘
[12] ?? FCN:Sigmoid
? 應(yīng)用 Sigmoid 激活函數(shù)
? 目的是為每個節(jié)點(diǎn)獲得一個概率值
? 一種手動計(jì)算 Sigmoid ?? 的方法是使用以下近似值:
? >= 3 → 1
? 0 → 0.5
? <= -3 → 0
-- ?????????????? 輸出 --
A:0(非常不可能)
B:1(非??赡埽?/p>
C:1(非常可能)
D:1(非??赡埽?/p>
E:0.5(中立)
References
[1] ???https://x.com/ProfTomYeh??
本文轉(zhuǎn)載自公眾號人工智能大講堂
原文鏈接:????https://mp.weixin.qq.com/s/rMtbq2UDwCGFNB9WUMLGrw???
