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