L11|矩陣乘法:從 Python 迴圈到快五百萬倍
先看學生的擴散實驗並學讀論文(DiffEdit),再從純 Python 實作矩陣乘法,用廣播與 GPU 把速度提升約五百萬倍。
L11|矩陣乘法:從 Python 迴圈到快五百萬倍(Matrix multiplication)
先看學生的擴散實驗並學讀論文(DiffEdit),再從純 Python 實作矩陣乘法,用廣播與 GPU 把速度提升約五百萬倍。 (Student diffusion experiments and how to read a paper (DiffEdit), then matrix multiplication from pure Python, sped up about five million times with broadcasting and the GPU.)
| 項目 | 內容 |
|---|---|
| 所屬 | Part 2:Deep Learning Foundations to Stable Diffusion |
| 影片 | YouTube |
| 對應書本章節 | 無對應章節(Part 2 以 notebook 為主) |
| 原始頁面 | Lessons/lesson11 |
| 難度(F3 視角) | ★★★★★ 大學程度(F3 只求理解概念) |
影片
本課重點
- 學生實驗:在兩個 prompt 之間插值做出平滑轉場、改進更新步驟、生成過程中逐步降低 guidance scale。
- 讀論文:DiffEdit:用文字條件擴散模型做語意編輯:自動找出要改的區域(mask),只改那裡。示範怎樣一步步讀懂論文,並準備數學符號工具(希臘字母表、Detexify)。
- 純 Python 矩陣乘法:三層迴圈寫出矩陣乘法,非常慢。對照 APL 與 PyTorch 的陣列寫法,介紹 Frobenius 範數。
- 廣播:形狀不同的張量自動擴展對齊,例如 (3,1) 和 (1,4) 相加得到 (3,4)。用廣播去掉內層迴圈,大幅加速。
- 五百萬倍加速:從 Python 迴圈 → 逐元素運算 → 廣播 → Numba 編譯 → PyTorch 內建 → GPU,總共快約五百萬倍。
關鍵概念
| 英文術語 | 中文 | 一句話解釋 |
|---|---|---|
| Matrix multiplication | 矩陣乘法 | 第一個矩陣的列與第二個矩陣的行做內積 |
| Broadcasting | 廣播 | 形狀不同的張量自動擴展後運算 |
| Frobenius norm | Frobenius 範數 | 所有元素平方和再開根號 |
| APL | APL 語言 | 以陣列運算為核心的程式語言 |
| Numba | Numba | 把 Python 函數編譯成機器碼加速 |
| Mask | 遮罩 | 標記圖片中哪些區域要處理 |
認識關聯圖與重點圖
迷你範例
[[1,2],[3,4]] @ [[5,6],[7,8]] = [[19,22],[43,50]]
例如左上角:1×5 + 2×7 = 19。
練習題
- 計算
[[1,2],[3,4]]@[[5,6],[7,8]]。 - 形狀 (3,1) 的張量加上形狀 (1,4) 的張量,結果形狀是什麼?為什麼?
- 為什麼把 Python 迴圈換成廣播或 GPU 運算會快很多?
- 中文學生作答:L11_中文F3學生_202611041526
- English student answers: L11_EN_F3_Student_202611041526