# [2025李宏毅ML] 第4講:Transformer 的時代要結束了嗎?介紹 Transformer 的競爭者們
:::success
:+1: 筆記全集Book 請至: https://hackmd.io/@4j/r1U_UJ_pye/
:::
:::info
2025生成式AI時代下的機器學習_李宏毅
課程網站 https://speech.ee.ntu.edu.tw/~hylee/ml/2025-spring.php
video: https://www.youtube.com/watch?v=gjsdVi90yQo
[[ppt]](https://docs.google.com/presentation/d/1Xw59SuuOBwF9ea71hJ_8sdoWW2Jl9Dk6/edit#slide=id.p1) [[pdf]](https://speech.ee.ntu.edu.tw/~hylee/ml/ml2025-course-data/mamba.pdf)
(20250323)
:::
:::spoiler 目錄
[TOC]
:::
**每一種架構的存在都有一個理由!!**

競爭者 mamba 跟 transformer 其實是相像的

## 1. CNN 存在的理由是什麼?

-fully connected layer
--> receptive field: 拿掉一些不需要的 weight
-->> parameter sharing: 使一些 weight 的參數相同
**==> 專門為影像設計, 減少不必要參數, 避免overfitting**
複習 CNN [[ref]](https://youtu.be/OP5HcXJg2Aw?si)
## 2. Residual Connection 存在的理由是什麼?
 
發現類神經網路"深layer"架構 在測試跟 **"訓練"** 都表現不好
所以設計此 使 Optimization 更容易, 讓更深的網路可以訓練好
(如示意圖 error surface 較平坦, 不易卡在 local minimun)
## 3. Transformer 存在的理由是什麼?

取代演化表: RNN(LSTM) >>> self-attention layer >>> Mamba

▪ **要解的問題**
輸入 vector seq, layer混合資訊, 輸出 vector seq
(輸出 yi 時只能看到之前的資訊)
## 3-1. RNN-Style
RNN 流派的解法

Hidden state 混合資訊

**- Ht**: Hidden state 存的資訊, 由前一時間點的 Hidden state 及 當下的輸入 xt 所合成 (可以是向量或大矩陣)
Ht 再通過 fC 得到 yt
**- fA, fB, fC**: 訓練出的函數

**讓 fA, fB, fC 與時間t有關** : 可隨時間變化, 依輸入x變化
ex: 設計成 遺忘\清除資訊 等多元操作

**LSTM 的功能對應:**
fA,t --> forget gate
fB,t --> input gate
fC,t --> output gate
▪ **RNN-Style vs. AI Agent’s Memory**
 
**對應上一堂課的 AI Agent’s Memory 機制:**
memory --> H
read --> fC,t
write --> fB,t
reflection --> fA,t

RNN 的運行
## 3-2. Self-Attention Style

**Self-Attention 流程:** 算yt
輸入seq x1,...xt
xi 分別乘上 3個transform 得到 vi,ki,qi
第t時間點的 qt, 去和每個位置的 ki 做內積
得到 alpha_t,i (attetion 的 weight)
softmax 使 alpha 總和為零
各 alpha' 與 各 vi 相乘再相加(weighted sum)
就得到 yt

(課程上的 atteation 簡化圖)
▪ **Attention 概念很早就有了**

Neural Turing Machine https://arxiv.org/abs/1410.5401
Memory Networks https://arxiv.org/pdf/1410.3916

Attention-based Memory
Selection Recurrent Network
for Language Modeling
https://arxiv.org/abs/1611.08656
▪ **Attention 的 inference**

每次都要跟前面的位置做att

**- RNN(上)**
每一步的運算量固定
memory小 只需記前一個H
**- attention(下)**
耗memory 越往後 運算量會越大(要考慮前面的步)
Q:RNN無法記得大量資訊 att可(?) ⇒ ==錯錯錯 誤解!==

"attention is all you need"
非發明att,是拿掉att以外的東西 發現還是可以運作很好
使訓練可以更佳平行化!
### 語言模型的訓練 (找出參數)

複習訓練的原理
[Backpropagation](https://youtu.be/ibJpTrp5mcE)
[Computational Graph](https://youtu.be/-yhm3WdGFok?si=2cZOANbtm0Mjd9lT)
transformer 設計是為了讓**訓練可以平行化**

▪ 訓練的步驟
算出目前的答案,與正確答案計算差異,更新參數
transformer 可以快速的算出現有的答案
 
以前的模型要一個一個 token 的吐出結果
transformer的好處: 可以一次輸入完整的seq, 平行算出每個時間的 token 結果

**"給定完整輸入"** sequence
token 轉成 向量 x1,...,x6
做 self-attention 平行算出 y1,...,y6 (他們之間無關連)
**"平行輸出"** 每一時間點的 token

**▪ GPU friendly 的設計 (矩陣運算)**
x 乘上 transformation 得到 qkv
(左) kq相乘 得到每一時間點兩兩間的 att matrix
(下) att matrix 做 softmax, 再跟 value v 相乘, 得到 y
整個過程都是**矩陣運算** --> GPU 最擅長做的了:D

反之 RNN 是無法平行運算的,H 6需等H1~H5算出來才能計算, GPU討厭等待!
**▪ Self-attention vs. RNN-style**

(其實RNN是可以平行化的 請繼續看下去)

人類需要越來越長的序列 故開始想念RNN的好
### RNN 有沒有訓練時平行的可能性

這樣展開還是要連續算 難以平行
但發現這塊都是fA

--> **拿掉fA**
Ht 為 X1,...Xt 分別做 fB 的相加
--> Ht 是個 dxd 矩陣, fBT 用 Dt 當代號

--> D=vk

--> kq = scalar alpha
scalar前移
即為對 向量v做 weighted sum

!!!變成attention了!!!
少了 softmax, 稱為 **linear attention**
### linear attention

**linear attention**: 沒有做 "Reflection"(fA,t) 的 RNN, 像廣義的 RNN
**RNN**: 就是 linear attention 加上 "Reflection"(fA,t)

**▪ Linear Attention**
Training 的時候像 Self-attention, 就也可平行化**加速**訊練
Inference 的時候像 RNN

dxd 矩陣 **"vk"** 的直觀含義
v:要寫入記憶(Hidden state)的資訊
k:scalar 要寫到哪裡 (ex:第幾個column)

H:各colume存各個資訊
q:決定要從哪個colume取出多少資訊

Linear Attention 的變形可以近似 Softmax [[yt]](https://youtu.be/yHoAq1IT_og?si=pS)
Linear Attention 還是無法贏 Self-attention
## RNN (Linear Attention) 贏不過 Transformer (Self-attention with Softmax)?

Q: 是因為 RNN 記憶有限嗎?
A: 不, 兩個都有限

**▪RNN** 儲存的記憶有限, 最多存d個時間點的v, 超過就會重疊使用區間 互相干擾
 
**▪Transformer** (Self-attention with softmax)
儲存的記憶 也是有限的!
當時間t>維度d時
就無法找到一個key把單純的v取出 模型記憶會開始錯亂
--> 所以比較弱應該是差在softmax的機制

Linear Attention 最大的問題: **記憶永不改變**
而 softmax 可做到記憶的改變(如圖), 只要後面有出現更重要的事, 前面的記憶就變得沒那麼重要了(值會變小)

試著讓他可以改變呢?
**▪ 加上 Reflection: 逐漸遺忘**
Retention Network(RetNet), 即加上常數項(0-1) Gamma r 來讓記憶逐漸淡忘

訓練時 alpha 多乘以 r_t-1
推論時 H_t-1 多乘以 r

Gated Retention: r 改成 r_t, 使記憶淡忘非定值,可以隨時間改變
r_t 是模型學出來的, 哪些事要記得 哪些要遺忘

訓練時 要多計算各個r
**▪ 對 Reflection 做一點限制**

☉:elementwise的相乘
Gt:決定Ht中 每個col的記憶 要做什麼行動(抹去/保留/減弱)
 
Mamba
 
=左圖=
Mamba(linear att的架構) 第一次贏過 transformer
橫軸FLOPs 不同大小的模型
縱軸perplecity 越小模型越好
=右圖=
縱軸 每秒可以處理多少tokens
Mamba 在推論時也可以比 transformer 有更好的加速

DeltaNet
第二行:把 memory 清空(減去原先想放的資訊v_t,old) 再放入新的資訊v_t
推推推...
變成 Gradient Descent了!!!
**▪ 其他有用到 linear attention的系列模型:**

大模型 Jamba, Minimax-01

sana 影像

MambaOut: Do We Really Need Mamba for Vision?
https://arxiv.org/abs/2405.07992
Mamba不一定要用在影像上 像在分類任務上 拔掉比較好

Do not train from scratch
ex: finetune
-- END --