目錄
上一篇講了什麼時候 prompt 撐不住。這一篇往下鑽一層。
本篇對應 Lecture 2: Supervised, Self-Supervised, & Weakly Supervised Learning(2025/09/30,Kian Katanforoosh 主講,1 小時 40 分。官網 syllabus 上的標題是 "Key AI Concepts Through Case Studies")。
這是全系列資訊密度最高的一講。Katanforoosh 是 Workera 的執行長,也是 CS230 的共同創辦人,他教一半的實體課。他開場給的定位是:實體課不重複線上影片的學術內容,而是帶產業視角與決策方法——所以整堂課的形式是三個案例研究,每一步都先問學生「你會怎麼做」再給答案。
暖身:把「模型」講清楚
「模型 = 架構 + 參數。 你想 ChatGPT 在雲端上其實就是兩個檔案:一個描述架構,一個描述參數。你不斷呼叫這兩個檔案,就得到推論結果。當然實際複雜得多,但核心就是這兩件事。」
可變的東西有:輸入型態、輸出型態(分類/迴歸/生成)、架構、loss function、activation、optimizer、超參數。
其中 loss function 是這一講的主角:
「設計好的 loss function 是一門藝術。厲害的 deep learning 研究者在這件事上非常有創意。」
他舉 YOLO 為例(You Only Look Once,不是 You Only Live Once):它的 loss function 第一次看很難懂,但那是有理由的。
capacity:資料量決定你該用多大的模型
- 淺網路 + 一百萬張貓照 → 學不動,不夠彈性
- 十億參數的 transformer + 一百萬張貓照 → 它不會學到「貓是什麼」,它會把那一百萬張背起來
「資料的量與多樣性,會決定你需要多大 capacity 的模型。」
一層一層在看什麼
拿臉部資料訓練的三層網路,逐神經元去查:
- 第一層看的是像素 → 學到對角邊、垂直邊、水平邊
- 中間層看的是第一層的輸出 → 學到眼睛、鼻子、耳朵(有邊就能拼出圓)
- 深層→ 更大的臉部結構,越接近任務本身
這就是 encoding。而定義的界線在這裡:
encoding 是任何向量表示。當這些向量之間的「距離」有意義時,它才叫 embedding。
順帶兩個詞:feature engineering 是過去的做法(手刻眼睛偵測器、嘴巴偵測器再組起來),feature learning / end-to-end learning 是現在的做法(讓資料自己說話)。「你不需要告訴網路眼睛對辨識臉很重要,它自己會學到。」
專案裡的第一名錯誤
「我們在專案裡看到的第一名錯誤,是人們加了資料卻忘了調整標籤。」
貓 → 貓/狗/長頸鹿,輸出層要變三顆神經元,標籤要從 0/1 變成 one-hot;同時出現多種動物則要 multi-hot。「這聽起來很蠢,但很多專案裡人們換了資料、忘了換標籤,然後困惑為什麼不 work。」
案例一:日夜分類——重點在任務定義
刻意設定「假裝 foundation model 不存在」,逼學生從零想。
學生一路挖出來的困難案例:室內照片(但畫面裡有時鐘)、時鐘只能分 12 小時(要靠穿著推溫度)、晴天陰天、挪威/瑞典北部(時鐘也救不了你)、黎明與黃昏(連「日/夜」的定義都得先訂)。
「問題看起來很簡單,實際上可以非常複雜。而且說真的,這件事想做到很好,今天的 foundation model 在某些情況也做不到。」
用人當 proxy 決定解析度
這是本案例最實用的一招:把圖片印成不同解析度發給朋友看,問他們判斷得出白天黑夜嗎。低於某個解析度人就判斷不出來了。
結論落在 64×64×3。
他特別強調那個 3:這題顏色有資訊(藍天),去掉顏色連人類都變難判斷。但 Lecture 5 會看到,強化學習的某個著名演算法裡,研究者發現拿掉顏色模型效能不受影響、訓練卻簡單很多。
「在你的 AI 專案裡,總會有需要驗證假設的時候,而你手上最好的 proxy 就是人。」
解析度的取捨
| 太低 | 太高 |
|---|---|
| 資訊不足(時鐘可能根本沒入鏡) | 算力貴、訓練慢、迭代週期變長 |
硬體限制影響很大,但他強調信封背面的計算是算「迭代能多快」,不是算最終效能——「如果你的模型要訓練一年,你就沒辦法迭代了。」
「deep learning 是一門工程學科,你得去試,或者你得知道那些 hack。Meta 為什麼要開瘋狂的價碼挖那幾個研究員?因為他們真的知道那些 hack。」
案例二:喚醒詞偵測——資料策略
先講清楚產品架構:語音助理不是單一模型,是模型串接(cascade),為了省電:
- 極輕量的活動偵測(有沒有聲音)
- 喚醒詞模型(Alexa / Hey Siri / OK Google)
- 才叫更重、更慢、更耗電的理解模型
(順帶:Amazon 當年為了選哪個字吵很久——要選日常對話不會用到的字,不然助理一直被喚醒。「activate 其實是個很糟的選擇,Alexa 也不算理想。」)
資料分佈的坑
全部由學生答出來,而且每一個都有真實後果:
- 口音:第一版模型「我的德國朋友一個都用不起來」,只好去找他當時的兩個德國室友補錄
- 年齡:校園平均年齡比 Palo Alto 低,頻率分佈不同
- 語速:對人類差別不大,「但只看數字和頻率的話兩者完全不一樣」
- 性別:頻率分佈不同
- 背景噪音:史丹佛校園聽不到地鐵 → 這個模型很可能對天天搭地鐵的紐約人失效
標籤方案的人體實驗
這是本講設計得最漂亮的一段。他播三段義大利語音檔,讓學生扮演模型:
- 方案一:只告訴你「第 1 和第 3 段裡有那個詞」→ 幾乎沒人猜得到
- 方案二:標出那個詞出現的位置 → 馬上有人猜出來(pomeriggio)
「對你比較容易,對模型就比較容易。」
關鍵論證:方案一標起來比較省事,但模型大概需要一千倍的資料才學得會;而方案二的標註成本並沒有貴一千倍。所以答案很清楚。
(他補充:這也是解 cold start 的辦法——先用資訊密的標籤方案讓模型開竅,後面的資料再換標法。)
類別極度不平衡
如果整段只有一個 1,「全部猜 0」就有 99.9% 準確率,梯度會往全 0 倒。
解法是把 1 的區段拉長,讓正負標籤沒那麼失衡。他講得很白:「純粹是工程 hack,背後沒什麼科學。」
架構是 RNN,最後一層是每個時間步一個 sigmoid,loss 是逐時間步的 binary cross-entropy。
三小時做出上百萬筆訓練資料
三個資料庫:
- 正例詞(親自錄)
- 負例詞(deactivate、kitchen、lion、dog…——刻意包含和正例發音接近的)
- 背景噪音——「線上幾乎免費,影音平台抽音軌就有」
做法:去線上抓自由授權資料(他特別說「搞懂授權模式本身就是一項技能,學一次受用一輩子:CC BY、CC BY-NC、MIT、Apache」),雇幾個人帶手機到校園錄人講 activate 和其他詞,把詞精準剪出來,然後寫一個 Python 腳本把詞隨機、不重疊地插進 10 秒背景噪音裡。
關鍵在於:腳本知道它把 activate 插在哪裡,所以它可以自動標註。
一千個 activate × 一萬個其他詞 × 無限背景噪音,再加資料增強(升降頻、加速減速)→ 三小時內生出上百萬筆資料。
但測試集不能這樣做。 測試集要盡量真實,必須人工標,不過量小很多。
去問專家
「我那時候的學習是:去找專家,問他們試過什麼,從他們的失敗學。」
他提到當時 Gates 大樓一樓的一位資深博士生一看就知道那個架構會失敗、而且知道為什麼,因為做過太多語音專案。「所以你的助教就是幹這個用的——去問『我這樣做對嗎、下週該往哪走』。」
案例三:人臉驗證——設計你的第一個 loss function
情境:學校想用人臉驗證取代刷學生證(餐廳、健身房、泳池)。
解析度是 412×412×3,比日夜分類高得多,因為連瞳孔顏色都要分得出來。「機場快速通關的解析度比這還高得多,他們是要看到虹膜那個層級。」
為什麼不能直接比像素
- 光線:兩張圖左上角像素差值接近 255,但那個像素根本不重要——「它會在完全不影響判斷的地方懲罰你」
- 幾何:人往右移三個像素,逐像素比較就完全不同了(平移、旋轉、縮放不變性)
- 其他:眼鏡、帽子、髮型、鬍子、年齡——「而且學生證上的人總是比本人年輕」
這四類問題有一個共同點:表面變了但意義沒變。而逐像素比較只看得到表面。
解法:encoding + 門檻
兩張圖過同一個網路,各拿一個 128 維向量,算距離(0.4),設門檻(0.5),判定。
門檻決定 true positive / false positive / false negative 的取捨——「機場的門檻和史丹佛餐廳的門檻當然不一樣。」
有學生問 128 維裡面到底裝了什麼特徵,答案很誠實:
「現在我答不出來,除非我去做那個研究。deep learning 的重點是你設計一個 loss function,逼參數去學出特徵。」
(這個問題會在 Lecture 10 被正面處理——那一講整堂都在講怎麼打開模型看裡面。)
triplet loss
先用白話把目標講出來:同一個人的不同照片要有相近的向量,不同人的照片要有相遠的向量。
資料是三元組:anchor(基準)/positive(同一人)/negative(不同人)。最小化 anchor–positive 距離、最大化 anchor–negative 距離。
現場有一道投票題(A/B/C,結果 47 : 23 : 3),關鍵在題目寫的是 minimize——最小化 anchor–negative 距離的相反數,等於最大化它。
margin(課堂上寫成 α)為什麼不能省:沒有它的話,「所有輸出都是 0」就是合法解——所有距離變成 0,loss 也是 0,模型什麼都沒學到卻拿了滿分。
出處是 FaceNet(Schroff、Kalenichenko、Philbin,CVPR 2015)。論文在 LFW 上達到 99.63%,而每張臉只用 128 bytes。
「恭喜,你設計了你的第一個 loss function。」
另外:negative 只存在於訓練時。測試時只有相機那張照片過網路再比對,沒有第三張。「那只是訓練用的技巧。」
驗證 → 辨識 → 分群
| 定義 | 生活例子 | |
|---|---|---|
| verification | 給定兩張,是不是同一人 | 歐洲海關:先放護照,再拍照比對 |
| identification | 只給一張,你是誰 | 美國 Global Entry:什麼都不用放,看鏡頭就走 |
辨識的做法:資料庫存向量而不是存圖,然後跑 K nearest neighbors。每人存三個向量,若最近的三個都指向同一人,可信度更高;機場可以做到 10-NN。不在資料庫裡的人,最近向量的距離會超過門檻,就擋下來。
分群:手機相簿自動把媽媽的照片歸一類,就是 k-means 跑在 embedding 上。手機大概是存一個「媽媽的 centroid」,新照片離哪個 centroid 近就丟進哪個資料夾。
自監督:如果完全沒有標籤呢
triplet 要成立,你得先知道哪兩張是同一個人。而標註很貴。
Katanforoosh 把這題丟給學生,逼問得很細。有人說「讓網路找出彼此接近的圖」,他堵回去:
「但你不知道它們是不是同一個人。我給你一個隨機初始化的網路,你拍我週六和週日的照片,向量完全對不上。你怎麼開始?」
有人說「先分群」——分群是靠 encoder 才 work 的,而 encoder 正是你要訓練的東西。
答案:用資料增強自己造監督訊號
一隻狗的照片旋轉 90 度還是同一隻狗。人腦用的是「旋轉不變性 + 語意理解」。那就設計一個 loss,逼這兩張圖的向量靠近。
- 旋轉、裁切、平移、加雜訊——任何變形後的版本都和原圖算同一對
- 或把同一張臉遮左半、遮右半,告訴網路「這兩個應該幾乎是同一個向量」
不需要 triplet 了。 這就是 contrastive learning,代表作是 SimCLR(Chen、Kornblith、Norouzi、Hinton,ICML 2020)。論文結論很有說服力:在 SimCLR 學到的表示上訓練一個線性分類器,ImageNet top-1 達到 76.5%,追平監督式訓練的 ResNet-50;只用 1% 標籤微調就有 85.8% top-5。
「從 2015 年 FaceNet 的監督式 triplet,到自監督的 pairs——這就是為什麼現代模型能用『數十億張未標註影像』訓練。」
「其實比大家想的簡單,寫個腳本去爬就好,最後複雜的地方是算力。」
換到文字上就是 next token prediction
「self 來自於不是你手動標的。」現場做的五個接龍,每個對應一種湧現行為:
| 句子 | 逼出來的能力 |
|---|---|
| I poured myself a cup of ___ | 東西要裝得進杯子,而且是液體(還有文化差異:哪個國家答 tea、哪個答 coffee) |
| The capital of France is ___ | 編碼真實世界的事實 |
| She unlocked her phone using her ___ | 語意分群:這些東西都是用來解鎖的 |
| The cat chased the ___ | 機率推理 |
| If it's raining I should bring an ___ | 推理:把條件連起來 |
湧現行為=在規模化之下,由簡單訓練目標產生的、未被明確教導或標註的非預期能力。
對照一下:以前做人臉驗證要刻意造 triplet 並宣告「這是人臉驗證任務」;現在直接爬全網做 contrastive learning,你根本沒定義過人臉驗證這個任務,它就會了。
其他模態同理:音訊遮掉 20 個時間步再補回來、影片抽掉幾個 frame、生物遮掉蛋白質結構或 DNA 的一段。「限制只有算力和規模。」
弱監督與多模態
連接文字與影像需要成對資料(image caption)。但這不叫監督式,叫 weakly supervised:
「你並不是在幫圖片標註說明文字,你是在利用世界上自然出現的配對。」
學生現場丟出的自然配對很好用:影片與其音軌(狗叫的畫面+狗叫的聲音)、電影與字幕、音樂與歌名、基因型與表現型、醫學影像與檢查報告、遊戲畫面與鍵盤操作、表情。
課堂引的是 Meta 的 ImageBind(Girdhar 等人,2023),demo 是輸入文字 "drums" 拿到鼓聲,也拿到向量空間中最接近的影像;輸入「狗叫聲 + 海灘照片」得到「狗在海灘上」。
這裡課堂上的說法要修正。 Katanforoosh 說「大多數東西都連到文字,所以文字通常就是你要的共享空間」——但論文的結論是影像,不是文字。ImageBind 綁了六個模態(影像、文字、音訊、深度、熱成像、IMU),核心發現是:
你不需要所有模態兩兩配對的資料,只要有「和影像配對」的資料就足以把所有模態綁在一起。
論文名字就叫 ImageBind。這個差別有實務意義:要把新模態接進既有向量空間,你要找的是它和影像的自然配對。
延伸:這對 RAG 意味著什麼
站上 RAG 技法大全裡的技法幾乎都在用 embedding,但沒有一篇講它怎麼來的。把這一講的線收起來:
- embedding 不是模型的副產品,它是被一個特定的 loss function 逼出來的
- 那個 loss 決定了「什麼算接近」——FaceNet 的接近是「同一個人」,SimCLR 的接近是「同一張圖的不同變形」
- 所以沒有通用的「好 embedding」,只有「對某個相似性定義而言好的 embedding」
這直接影響檢索。當你發現結果語意上明明相關卻排不上去,問題往往不在 chunking 或 rerank,而在那個 embedding 模型當初被訓練成認為什麼叫「接近」,和你的查詢情境不一樣。站上 Hybrid Search 那篇要把 BM25 拉回來補盲區,根源就在這裡。
另外那個合成資料 pipeline(腳本知道答案,所以能自動標註)今天一樣成立——現在大家用 LLM 生 eval 資料集,用的是同一個原理,也會踩到同一個坑:訓練集可以合成,測試集必須真實。
參考資料
- Lecture 2: Supervised, Self-Supervised, & Weakly Supervised Learning — 2025/09/30,Kian Katanforoosh。三個案例研究、triplet loss 推導、湧現行為五句接龍的出處
- FaceNet: A Unified Embedding for Face Recognition and Clustering — Schroff et al., CVPR 2015。triplet loss 與 128 維人臉 embedding
- A Simple Framework for Contrastive Learning of Visual Representations — Chen et al., ICML 2020。SimCLR
- ImageBind: One Embedding Space To Bind Them All — Girdhar et al., 2023。六模態共享空間,樞紐是影像
- CS230 Lecture 2 投影片
Loading...