向量範數(vector norm)
/ VEK-tur NORM /
向量範數把一整串數字濃縮成一個數,用來衡量它的大小——這個向量有多「大」、多「長」。最常見的是 L2 範數,也就是普通的直線長度:把每個分量平方、加起來、再開平方。這無非是勾股定理,推廣到你想要的任意多個維度,回答的是「直線飛過去,這東西離零有多遠?」
但直線距離並不是衡量大小唯一合理的觀念。L1 範數轉而把各分量的絕對值加起來——也就是「計程車」或「城市街區」距離,是你在棋盤格街道上實際要走的那條路線,因為你沒法斜著穿過樓房。兩者給出的答案不同,而且關鍵在於,當它們被用來「把東西壓小」時,會把模型推向不同的行為。
範數在機器學習裡無處不在,因為這門學問有太多內容是在「控制大小」。為了遏制過擬合,正則化會給模型權重的範數加上一項懲罰,推著它保持簡單。而範數的選擇,會以一種驚人的方式起作用:L1 懲罰傾向於把許多權重一路壓到恰好為零,自動丟棄掉無用的特徵(這正是 Lasso 迴歸之所以能做特徵選擇的緣由),而 L2 懲罰只是把權重溫和地朝零收縮、卻不把它們清零(嶺迴歸)。範數還定義了最近鄰方法與聚類所倚賴的那些距離,並衡量梯度的大小——比如,在梯度大到危險時用來對它做裁剪。
拿向量 [3, 4] 來說。它的 L2 範數(直線)是 √(3² + 4²) = √25 = 5——直線飛過去的距離。它的 L1 範數(城市街區)是 |3| + |4| = 7——你沿著棋盤格街道拐來拐去、實際要走的那段更長的路。同一個向量,兩種不同的大小,各有各的用處。
同一個向量 [3, 4]:L2 量的是對角線的直線飛行(5),L1 量的是城市街區的步行(7)。
L1 與 L2 之間的取捨絕非裝點門面:L1 懲罰會把權重清零(給出稀疏、能做特徵選擇的模型,如 Lasso),而 L2 懲罰只是把它們收縮(嶺迴歸)。選對範數,會塑造你的模型究竟學到什麼。