# [2025李宏毅ML] 第3講:AI 的腦科學-語言模型內部運作機制剖析 (解析單一神經元到整群神經元的運作機制、如何讓語言模型說出自己的內心世界) :::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=Xnil63UDW2o [[ppt]](https://docs.google.com/presentation/d/1dmR4HtycPwofpOEgmdjqMdlTsTtfYcFR/edit#slide=id.p1) (20250317) ::: :::spoiler 目錄 [TOC] ::: ▪ **相關複習** Transformer [[self-attention 上]](https://youtu.be/hYdO9CscNes?si=Ke55_ABHZqtp_Aib) [[self-attention 下]](https://youtu.be/gmsMY5kc-zw?si=-3_1WABbennG1QqW) [[Transformer 上]](https://youtu.be/n9TlOhRjYoc?si=brnV18A1d8T-QxfF) [[Transformer 下]](https://youtu.be/N6aRv06iv2g?si=lLr3V2--QyfTuRM2) [[Transformer 簡介]]( https://youtu.be/uhNsUCb2fJI?si=5jeDnNlcEGv2UPIN) 可解釋的機器學習 https://youtu.be/WQY85vaQfTI?si=QP9mlhZoD4Hy-xF- https://youtu.be/0ayIPqbdHYQ?si=WtdggsDHBMMXMiIB 語言模型在「想」什麼? https://youtu.be/rZzfqkfZhY8?si=SghPRZbFJLrKQk7L ![image](https://hackmd.io/_uploads/BJg-c_lNhkl.png =500x) ## 一「個」神經元在做什麼 ![image](https://hackmd.io/_uploads/BkFapgN21l.png =500x) 生成式AI: 給定seq z1~zt-1, 預測下一個token zt 輸出下一個token zt 是任一個token的機率有多大, 是個 "機率分布" ![image](https://hackmd.io/_uploads/rky10x431l.png =500x) **embedding**:每個 token 對應到一個向量 **unembedding**: 把最後一層的向量 seqence 的最後一個向量拿出來,轉成distribution (把向量轉回token的過程) ![image](https://hackmd.io/_uploads/BkvMRgV3yg.png =500x) 一個layer裡有多種layer 一個 **神經元(neuron)** 的輸出 = weighted sum + activation function(RELU) 這個紅到藍的轉換過程就是 **神經元** 的作用 ![image](https://hackmd.io/_uploads/rk_k4WNnye.png =500x) ▪ 怎麼知道一個神經元在做什麼? "移除"的方式, ex:把輸出設成0或平均值 ![image](https://hackmd.io/_uploads/rJdau-E3ke.png =500x) 一件事情可能很多神經元共同管理 ![image](https://hackmd.io/_uploads/S1ruc-V2yg.png =500x) 一組神經元來管一個任務 ## 一「層」神經元在做什麼 ![image](https://hackmd.io/_uploads/rkjF5-V3Jg.png =500x) Representation:某層神經元的輸出 ![image](https://hackmd.io/_uploads/rkBqc-Nh1x.png =500x) 想單獨取出"控制拒絕"的部分 ![image](https://hackmd.io/_uploads/B1LscbV3Jl.png =500x) ![image](https://hackmd.io/_uploads/HymZTZVnkg.png =300x) ![image](https://hackmd.io/_uploads/Hyp-pZN3yg.png =300x) 利用拒絕的 減去 沒拒絕的 得到純拒絕向量 ![image](https://hackmd.io/_uploads/B1aM0WV2Jx.png =500x) 減去向量, ex: 用 相減 或 投影距離的 這種 **修改Representation來改變語言行為的事情** ,稱為: Representation Engineering, Activation Engineering, Activation Steering … [[ref]機器學習2021](https://youtu.be/ExXA05i8DEQ?si=1Q3LbmyW5m_rZHXr) 範例論文:In-Context Vector ![image](https://hackmd.io/_uploads/SyWBQfE3kx.png =300x) ![image](https://hackmd.io/_uploads/HJOSXfV3Je.png =300x) ![image](https://hackmd.io/_uploads/H1awW7Vnyl.png =300x) ![image](https://hackmd.io/_uploads/ryNYbQNnye.png =300x) ![image](https://hackmd.io/_uploads/HJLYMXVhyx.png =500x) 每個 representation 都是功能向量的線性組合(weighted sum) e 是非功能向量的部分 --> **希望 e 越小越好** ![image](https://hackmd.io/_uploads/H1rcM7VhJg.png =500x) 每次選擇的功能向量越少越好 --> **希望 α 越小越好** ![image](https://hackmd.io/_uploads/S1MgmQV3Je.png =250x) Loss function 如上! 可用 Sparse Auto-Encoder (SAE) 來解 ## 一「群」神經元在做什麼 ![image](https://hackmd.io/_uploads/rJNzzPNhye.png =400x) ![image](https://hackmd.io/_uploads/rJad7PNhJe.png =180x) 需要一個語言模型的模型來幫忙解析語言模型 faithfulness:保有原來實物的特徵 ▪ **舉例 一個早期的研究** ![image](https://hackmd.io/_uploads/rkjOzPN3ye.png =400x) ![image](https://hackmd.io/_uploads/ByK5zDVhyl.png =180x) 前面幾層先對主詞做理解 主詞跟受詞的"關聯性" 會產生個 linear function ![image](https://hackmd.io/_uploads/BJ6-LvVhye.png =500x) 用幾筆(x,y)回推找出 W,b 再去對答案 來達到用簡單的模型比擬語言模型的行為 ![image](https://hackmd.io/_uploads/rJMQUDN2Je.png =500x) 結果還可以 有的高 有的低 ▪ **根據模型上得到的預測來改變實體** ![image](https://hackmd.io/_uploads/ryDpwvV3yg.png =500x) ![image](https://hackmd.io/_uploads/SkigOP42yg.png =500x) 也有試驗用這種方式去修改語言模型 (用模型的模型得到的結論 直接用在語言模型上) 結果有蠻多情況是可以成功的 ex: 硬要他回答錯成高雄 ▪ **系統化的語言模型「模型」建構方法** ![image](https://hackmd.io/_uploads/rJDYOPE2yg.png =500x) pruning: 刪減一些模型的 component circuit: 語言模型的模型 ![image](https://hackmd.io/_uploads/HJqhYPV21x.png =500x) ## 讓語言模型直接說出它的想法 ![image](https://hackmd.io/_uploads/B1VLaP42yx.png =500x) 之前簡化的講法忽略了 residual connection **residual connection**:layer的輸出 其實還會再加上輸入,才會得到最終的輸出 這個設計使很深的網路更好訓練 ![image](https://hackmd.io/_uploads/HJRL6vE2yx.png =500x) 所以 transformer 的 layer 間是需要加上 residual connection 的, 通過一個 layer 產生輸出後 會把原來的輸入再加起來 ==!!!右邊換一種畫法!!!== :tada: ▪ **residual stream**: 像是高速公路, 直接把輸入往前送送送到輸出 ▪ 在中間過程每個 layer 都會加一點東西進去 才會才會得到最終的 distribution ▪ 想:中間幾層的輸入是否相同可像最後層一樣, 加過 unembedding layer 來得到 token 的機率分布 --> **logit lens** 由對應的文字反推看語言模型的 representation 可能代表的意思 ▪ **logit lens**:檢查每一層的 logic 看看 transformer 是怎麼思考的 (logic: 過 softmax 前叫 logic) 論文範例 ![image](https://hackmd.io/_uploads/BkJL-u43yx.png =500x) 到後面發現他把 it 推理成 album ![image](https://hackmd.io/_uploads/rkUpWuE21g.png =500x) 用 logit lens 發現他會把法文先翻成英文再翻成中文, 代表這個模型是用英文在思考的 ▪ **每一層就是加點什麼進去 Residual Stream** ![image](https://hackmd.io/_uploads/S1gjU_V2kg.png =500x) 加了什麼呢? - 綠色:原輸入 - 橘色:先前說一個神經元是把前一層的結果 做weighted sum <--> 前一層的某神經元乘上 weight 後傳入下一層不同的 神經元 **"Transformer Feed-Forward Layers Are Key-Value Memories"** 提出這種另一面的解釋概念! 把前一層(橘色)看成 attention 的 weight --> k 中間線段 weight --> value v ![image](https://hackmd.io/_uploads/S1Rn8dEhkl.png =500x) 若想把金城武換成李宏毅 就可去找出是哪個v在影響的, 把金換成李 這篇論文發現此做法有48%會改變輸出, 34%會成功換掉 ▪ **Patchscopes** ![image](https://hackmd.io/_uploads/By_yDu42yx.png =500x) ![image](https://hackmd.io/_uploads/Hkr6iOV2yx.png =500x) 利用不同角度解析 representation (非一個token,可能是一句話) 但這會受到你舉的例子的影響 ![image](https://hackmd.io/_uploads/Hytw2_4hyg.png =500x) ex: 解析每一層最後一個字對這個模型的意義 威爾斯王子 ![image](https://hackmd.io/_uploads/rJgcCuNhyl.png =500x) ![image](https://hackmd.io/_uploads/SkfnAONn1x.png =500x) ![image](https://hackmd.io/_uploads/ryIektV3Jx.png =500x) -另一個範例論文 利用分析每層的輸出 發現有時要到很後面層才會被解析出關鍵事(太晚) -所以他試著把後層再傳遞到最前面重跑一次 發現對原本答錯的題目 有40~60%變成答對! -- END --