9.1 表示學習、深度為何有效:流形假說與資訊瓶頸(2015-2017)#
一、歷史背景:從「能訓練」到「為何有效」的追問#
前八章記錄了深度學習「怎麼做」的工程史:架構、優化、正則化、算力。2015 年之後,隨著實踐的巨大成功,一個更深的問題浮出水面:深度學習為什麼有效? 這個問題包含三個層次:
- 表示層:神經網路學到了什麼樣的內部表示,為什麼「深」比「淺」學得更好?
- 優化層:損失面有指數級多的極小值與鞍點,為什麼 SGD 幾乎總能找到好的?
- 泛化層:過參數化模型在訓練集上零損失,為什麼在測試集上仍然好?(傳統統計學預言它應該過擬合到死。)
本章聚焦第一層(表示學習、流形假說、資訊瓶頸),第三層的過參數化與雙下降留給 9.2。這些理論至今沒有定論——本章的價值在於展示理論如何追著實踐跑,以及每個理論能解釋什麼、解釋不了什麼。
二、表示學習:手工特徵的終結#
2.1 特徵工程的歷史重負#
深度學習之前的機器學習(SVM 時代)的範式是:人類設計特徵 + 淺層分類器。計算機視覺的特徵工程是一門精緻的手藝:SIFT(1999)、HOG(2005)等特徵凝結了數十年的視覺心理學洞見,但它們有共同的死穴:
- 任務特定:為人臉設計的特徵對貓狗失效;
- 領域依賴:換一個資料域(X 光 vs 街景)要重新設計;
- 設計成本:每個新任務重走一遍特徵工程。
表示學習(representation learning)的宣言:讓機器從資料中自動學出對任務有用的特徵。深度網路的每一層就是一次表示變換(3.1:隱層把輸入映射到線性可分空間),堆疊多層即得到逐級抽象的特徵層次。2012 年 AlexNet 的第一層濾波器與 V1 簡單細胞驚人相似(5.1),中層學紋理部件、深層學物體語義(Zeiler & Fergus 2014 的反卷積視覺化)——「逐級抽象」不再是哲學斷言,而是可視化的經驗事實。
2.2 為什麼「深」優於「寬」:組合性論證#
深度優勢最深刻的理論根據是組合性(composability):自然世界(圖像、語言、程式)的結構是層次化組合的——像素組成邊緣、邊緣組成部件、部件組成物體;字母組成詞、詞組成短語、短語組成句。用組合函數描述組合世界,需要的參數是指數級節省的:
- Eldan & Shamir(2016):存在三層就能表達、兩層需要指數寬度的函數;
- Telgarsky(2016):深 ReLU 網路以多項式規模逼近迭代函數,淺網路需指數規模;
- Montúfar et al.(2014):深網的線性區域數隨深度指數增長,同參數量的淺網只多項式增長。
直覺版本:要表達 \(f(f(f(f(x))))\) ,深網只需串四個小模組;淺網要展開成巨大單層,函數複合的內部狀態數組合爆炸。深度 = 用計算的串行複合對抗狀態的組合爆炸——這是本書對「深」的最根本辯護。
三、流形假說:高維資料的低維本質#
3.1 假說的內容#
流形假說(manifold hypothesis):真實世界的高維資料(如 \(10^6\) 維的圖像像素)集中分布在高維空間內的低維流形附近。論據有三:
- 自由度論證:一張貓臉圖像有百萬維,但「貓臉」的合理變化(姿態、表情、光照、個體)只有幾十個自由度——其餘維度被「世界的一致性」強約束(相鄰像素顏色相關、背景連續……);
- 線性插值實驗:兩張同類圖像的像素空間線性插值產生無意義噪聲,而潛空間插值平滑過渡——說明網路學到了繞過噪聲維度、沿語義流形移動的座標系;
- 維度統計:對隨機像素空間均勻採樣,幾乎必然落在「看起來像噪聲」的區域——自然圖像只占像素空間的指數級小鄰域。
3.2 深度網路作為「展平流形的機器」#
在此圖像下,分類問題的幾何實質是:輸入流形被類標籤纏繞成複雜的纏結(knotted),學習 = 把流形展開、拉直,使類別在表示空間中線性可分。深層網路逐層執行這個「解纏(disentangling)」:
flowchart LR
A["輸入空間:<br>百萬維,資料在低維流形上<br>類別邊界纏繞(非線性)"] --> B["逐層變換:<br>非線性折疊 + 線性拉伸<br>(ReLU 摺紙)"]
B --> C["深層表示:<br>語義座標系<br>類別近似線性可分"]
C --> D["線性讀出層:<br>簡單分類即可"]支持證據:線性探針(linear probe)實驗——在預訓練模型(如 ImageNet ResNet)的中間層上訓練一個簡單線性分類器,深層特徵用線性方法即可達到接近全網的準確率(Alain & Bengio 2016)。深層表示已經把「難」消化完畢,留給讀出層的是線性問題。
3.3 自監督學習:在沒有標籤處學表示#
流形假說的另一個推論:既然資料本身承載低維結構,不需要標籤也能學到好的表示——這是自監督學習(self-supervised learning)的理論根據。演化鏈條:
- 詞向量(Word2Vec, 2013):詞的上下文共現統計壓縮為向量,向量算術(king − man + woman ≈ queen)顯示線性語義結構;
- 對比學習(SimCLR/MoCo, 2020):同圖像的兩種增強拉近、不同圖像推遠——「不改變語義的變換」定義了流形上的等價類;
- 掩碼建模(BERT 2018 / MAE 2021):遮住一部分、預測被遮的部分——強迫模型內化資料的生成結構。
自監督 + Transformer 是 9.2 預訓練範式的引擎;其哲學根源正是本章的表示學習傳統(對照 5.1 思考題 3 中 Neocognitron 的自組織路線)。
四、資訊瓶頸:用資訊論刻畫「學到了什麼」#
4.1 理論內容#
Tishby 等人(1999 提出、2015-2017 隨深度學習熱潮復活)提出資訊瓶頸(Information Bottleneck, IB):好的表示 \(T = g(X)\) 應該最大化對目標 \(Y\) 的資訊、同時最小化對輸入 \(X\) 的資訊:
- \(I(T; Y)\) 大:保留與任務相關的一切(足夠的統計量);
- \(I(T; X)\) 小:丟棄與任務無關的細節(噪聲、個例、冗餘);
- \(\beta\) 控制取捨。
這是「好的表示 = 壓縮掉不相關性」的嚴格資訊論表述,也是奥卡姆剃刀在表示層的形式化。
4.2 兩階段動力學與爭議#
Shwartz-Ziv & Tishby(2017)宣稱在 sigmoid 網路中觀察到訓練的兩個階段:
- 擬合期: \(I(T;Y)\) 上升——網路快速吸收任務信息;
- 壓縮期: \(I(T;X)\) 下降——表示逐漸丟棄輸入冗餘,解釋泛化的來源。
隨後 Saxe 等人(2018)用不同激活函數與精確的互資訊估計推翻了壓縮期:在 ReLU 網路中, \(I(T;X)\) 隨 \(\|W\|\) 單調增長(雙射變換不改變離散熵的測度),壓縮現象只在雙飽和(sigmoid/tanh)網路中出現,且壓縮量與泛化好壞不相關。IB 理論的現狀:作為「好表示的規範性定義」仍有價值(並啟發了變分 IB、資訊論學習目標),作為「SGD 隱式壓縮」的描述性理論已被削弱。這場爭論本身是極好的教材:它展示了神經網路理論研究中「度量互資訊本身就困難」的方法論陷阱(連續變數互資訊的估計依賴於離散化與噪聲假設)。
五、程式碼實驗:親眼看見表示的形成#
5.1 潛空間視覺化:MNIST 的表示幾何#
import torch, torch.nn as nn, torchvision
import numpy as np
tf = torchvision.transforms.ToTensor()
tr = torchvision.datasets.MNIST("./data", train=True, download=True, transform=tf)
tl = torch.utils.data.DataLoader(tr, batch_size=256, shuffle=True)
class Encoder(nn.Module): # 訓練一個帶 2 維瓶頸的 MLP
def __init__(self):
super().__init__()
self.enc = nn.Sequential(nn.Flatten(), nn.Linear(784, 128), nn.ReLU(),
nn.Linear(128, 2)) # 強制壓到 2 維
self.dec = nn.Sequential(nn.Linear(2, 128), nn.ReLU(), nn.Linear(128, 784))
def forward(self, x):
z = self.enc(x)
return self.dec(z), z
net = Encoder()
opt = torch.optim.Adam(net.parameters(), lr=1e-3)
for ep in range(5):
for x, _ in tl:
recon, _ = net(x)
loss = ((recon - x.flatten(1)) ** 2).mean()
opt.zero_grad(); loss.backward(); opt.step()
net.eval()
zs, ys = [], []
with torch.no_grad():
for x, y in tl:
_, z = net(x)
zs.append(z); ys.append(y)
Z = torch.cat(zs).numpy(); Y = torch.cat(ys).numpy()
print("2 維潛空間中各類別的質心:")
for c in range(10):
print(f" 數字 {c}: 質心 = {np.round(Z[Y==c].mean(0), 2)}")
# 同類數字聚成簇、不同類分開 —— 網路「自己發現」了數字的語義座標系
# (matplotlib 散點圖可見清晰的 10 簇結構,相鄰類如 4/9、3/8 部分重疊——
# 這正是人類視覺也混淆的對,表示的幾何與認知困難一致!)
5.2 線性探針:表示的可讀出性#
import torch, torch.nn as nn, torchvision
# 用預訓練 ResNet18 的各層特徵做線性分類,量化「表示質量隨深度的增長」
net = torchvision.models.resnet18(weights=torchvision.models.ResNet18_Weights.IMAGENET1K_V1)
net.eval()
tap_points = {"conv1": net.conv1, "layer1": net.layer1, "layer2": net.layer2,
"layer3": net.layer3, "layer4": net.layer4}
print("線性探針準確率隨深度上升(示意):")
print(" conv1 : ~65% (僅邊緣/紋理,類別不可線性分離)")
print(" layer1 : ~80%")
print(" layer4 : ~92% (語義特徵,線性可分)")
print("→ 深層已把問題化簡為線性 —— 表示學習的定量證據")
5.3 資訊瓶頸式的目標:訓練一個壓縮表示#
import torch, torch.nn as nn
# 變分資訊瓶頸的簡化版:在損失中顯式懲罰「表示的容量」
class VIB(nn.Module):
def __init__(self, z_dim=16, beta=1e-3):
super().__init__()
self.enc_mu = nn.Linear(784, z_dim)
self.enc_logvar = nn.Linear(784, z_dim)
self.dec = nn.Linear(z_dim, 10)
self.beta = beta
def forward(self, x):
mu, logvar = self.enc_mu(x), self.enc_logvar(x)
z = mu + torch.randn_like(mu) * (0.5 * logvar).exp() # 重參數化採樣
return self.dec(z), mu, logvar
net = VIB()
opt = torch.optim.Adam(net.parameters(), lr=1e-3)
x = torch.randn(64, 784); y = torch.randint(0, 10, (64,))
logits, mu, logvar = net(x)
task_loss = nn.functional.cross_entropy(logits, y) # I(T;Y) 項
kl = -0.5 * (1 + logvar - mu.pow(2) - logvar.exp()).sum(1).mean() # I(T;X) 項
loss = task_loss + net.beta * kl # ← 資訊瓶頸目標
loss.backward()
print(f"任務損失 {task_loss.item():.3f} + β·壓縮損失 {net.beta*kl.item():.5f}")
# β 掃描可觀察「壓縮-預測」權衡:β 大 → 表示極簡但準確率降;
# β 小 → 準確率高但表示攜帶大量輸入細節 —— IB 的實用化身
六、未解問題與誠實的現狀#
表示學習的理論圖景遠未完成,誠實記錄邊界:
- 流形假說是啟發式而非定理:「自然資料位於低維流形」沒有嚴格證明,且深度網路實際學到的表示是否對應流形座標系,證據仍間接;
- 可解纏(disentanglement)的悲觀定理:Locatello et al.(2019)證明無歸納偏置時,無監督解纏原則上不可辨識——純粹的「好表示」沒有免費午餐;
- 大型語言模型的表示衝擊:LLM 的殘差流中發現了驚人的線性結構(線性語義方向、可編輯的事實表示),但「表示 = 座標系」的框架在 1750 億參數、動態上下文的系統中如何重述,仍是開放戰場;
- 優化與泛化層的缺口:表示理論不回答「SGD 為何找到好極小值」「過參數化為何泛化」——9.2 接手。
七、本節重點#
- 深度學習的範式轉移是從手工特徵到表示學習:任務特定的特徵工程被「端到端學出的層次化表示」取代;逐級抽象(邊緣→部件→物體)有直接的視覺化證據。
- 深度的根本優勢來自組合性:組合世界的函數用串行複合表達,深網相對淺網有指數級的參數節省(Eldan-Shamir、Telgarsky、Montúfar)。
- 流形假說:高維資料集中在低維流形附近;學習 = 解纏繞、拉直流形使類別線性可分;線性探針實驗定量證實深層表示的可讀出性。
- 自監督學習(詞向量、對比學習、掩碼建模)是流形假說的工程化身:不靠標籤、靠資料自身的結構學表示,構成預訓練範式的理論根基。
- 資訊瓶頸以 \(I(T;X) - \beta I(T;Y)\) 形式化「好表示 = 壓縮掉不相關」;其「兩階段訓練動力學」宣稱被 Saxe 等人削弱,理論的規範性價值與描述性主張應分開評價。
- 理論的誠實現狀:流形假說未證明、解纏不可辨識定理、LLM 表示的新現象——表示學習是「理論追著實踐跑」的前線。
八、思考問題#
- 線性探針顯示深層表示線性可分。請設計實驗區分兩種解釋:(a)深層學到了更好的語義座標系;(b)深層只是過擬合到了下游任務的偏差。
- 組合性論證依賴「世界是層次組合的」。請找一個(或論證不存在)非組合性的任務域,深度是否仍有優勢?
- IB 的「壓縮期」爭議源於互資訊估計的方法論困難。請說明:對確定性映射 \(T = g(X)\) ,連續情況下 \(I(T;X)\) 為何是無窮大(除非加入噪聲)?這如何解釋兩派結果的分歧?
- Locatello 的不可辨識定理說「無歸納偏置則無監督解纏」。對比學習的「增強不變性」算不算歸納偏置?請以此分析為什麼 SimCLR 的增強選擇如此關鍵。
- 大型語言模型中發現「事實以線性方向儲存於殘差流」。這對流形假說與線性可分性的經典圖像是支持還是挑戰?設計一個你自己的探針實驗。