訓練誤差越低,模型就越值得用嗎?如果模型把少數樣本的偶然特徵也記了下來,答案可能正好相反。
正則化讓我們在擬合訓練資料時,額外考慮某種限制。L1與L2針對權重加入懲罰:前者容易產生部分係數恰好為0的解,後者通常讓權重縮小、改善不穩定性。它們不是清理錯誤標籤或修復資料洩漏的替代品;強度也需要透過合適的驗證資料選擇。
這篇要讓你看懂三件事:什麼情況值得懷疑過擬合、兩種懲罰怎麼改變解,以及怎麼判斷限制是否真的幫助了新資料。
一條繞過所有點的邊界,可能只適合這批點
先看Google教材中的樹木分類示意。青色菱形代表健康樹,淺橘圓形代表生病的樹;它們的位置是輸入資訊,健康狀態是標籤。
圖1|先只有位置與標籤,還沒有分類邊界。這是教學示意,不是本篇蒐集的森林觀測資料。來源:Google,Overfitting,CC BY 4.0,原圖未改。
如果允許邊界任意轉折,就能沿著樣本的空隙,把大部分訓練點分對。
圖2|藍色區域預測健康,橘色區域預測生病。來源示意的複雜邊界在訓練樣本只錯兩個,仍不足以證明適合新樹。來源同圖1,原圖未改。
保持同一條邊界,換一批樹,錯誤就浮現了。
圖3|帶叉符號是分類錯誤。這組圖要對照的是同一模型在不同樣本上的表現,而不是圖3重新訓練過一條邊界。來源同圖1,原圖未改。
模型可能學到了較穩定的規律,也可能利用了這批點的偶然位置。能處理更多曲折的模型有更大的擬合自由,但這份自由是否有價值,必須用未參與擬合的資料來檢查。
反過來,限制過強也會出問題:如果真實關係彎曲,卻只允許幾乎不變的預測,連訓練資料都解釋不好,便可能欠擬合。
圖4|橫軸是訓練預測品質,縱軸是新資料的預測品質;這不是以迭代次數或λ為橫軸的實驗。曲線只是說明「持續改善訓練表現未必改善新資料」,不保證每個任務都有同樣曲線。來源同圖1,原圖未改。
訓練持續改善,驗證卻開始變差
如果有逐輪訓練的紀錄,可以一起看訓練與驗證損失。
圖5|藍線代表訓練損失,紅線代表驗證損失,橫軸為訓練迭代。後期的分岔是過擬合的線索;圖中沒有真實資料集、單位或效果數字,不能當成方法的成效比較。來源同圖1,原圖未改。
先確認兩邊計算的是可比較的指標。例如,若訓練記錄包含權重懲罰,驗證記錄只有預測損失,就不該直接用兩個數字的差距判斷泛化落差。含資料增強、dropout的訓練模式,也可能讓訓練曲線與推論模式下的驗證曲線有額外差異。
驗證變差也可能來自不同時間、族群或標籤品質,不能看到落差就斷言模型太複雜。先確認切分代表真正部署的情境,再排查資料洩漏與分布改變。相關方法見資料切分與洩漏。
加入懲罰:不再只問誰把訓練資料擬合得最好
以線性迴歸為例,原本可以只最小化平方誤差;現在加上一項權重懲罰。本篇用以下約定說明:
目標 = 平均預測損失 + λ × 權重懲罰
L1懲罰 = |w₁| + |w₂| + …
L2懲罰 = w₁² + w₂² + …
λ ≥ 0:控制懲罰相對於預測損失的重要程度
截距通常不與其他權重一起懲罰,實際依演算法定義。本篇稱L2的是「平方和」這個常見機器學習用法;有些數學文本會把L2範數寫成平方和再開根號,要先看清實際公式。
λ為0時沒有這項懲罰;λ越大,最佳化越不願意用大的懲罰值換取較低的訓練損失。這不表示每一個係數的絕對值都會沿著整條多變數路徑單調下降,尤其特徵彼此相關時,權重可能重新分配。
例如兩組權重 [4, 0] 和 [2, 2] 的L1都是4,L2平方和卻分別為16與8。L2對較大的單一權重付出較高代價;但這還不能證明第二組預測較好,仍必須一起算資料損失。
一個可手算的例子:L1為什麼能把係數壓成0
為了看清解的差異,先把真實資料、截距與多個特徵拿掉,只看一個係數。這是我們自訂的教學目標,不是某個資料集的成效實驗:
原始損失 = ½(w − 3)²
L2版本 = ½(w − 3)² + λw²
L1版本 = ½(w − 3)² + λ|w|
原始損失在w=3最小。對L2版本微分並令它為0:
(w − 3) + 2λw = 0
w_L2 = 3 / (1 + 2λ)
對這個特定例子,有限λ使正係數逐漸靠近0。L1在0有尖角,不能照一般可微分方式直接代入;用分段導數或次梯度可得:
w_L1 = max(3 − λ, 0)
| λ | L2版本的解 | L1版本的解 |
|---|---|---|
| 0 | 3 | 3 |
| 05 | 1.5 | 2.5 |
| 1 | 1 | 2 |
| 3 | 約0.4286 | 0 |
| 6 | 約0.2308 | 0 |
這就是L1可以產生稀疏解的直覺:在某個範圍內,0本身就成為最佳解。L2通常縮小係數,卻沒有同樣的尖角所帶來的普遍稀疏效果。不要把它誇大為「L2的係數絕不可能等於0」:資料對稱、某特徵沒有對應訊號等情況,本來就可能得到0。
同一個λ下誰縮得比較多,也不是這張表能推廣的結論。兩種懲罰的尺度與導數不同,應分別調整強度後比較驗證結果。
Ridge的路徑圖,要先看橫軸方向
平方損失加上L2平方和,常見名稱是Ridge迴歸;加上L1則是Lasso。當特徵高度相關時,多組權重可能產生接近的預測,無正則化的係數就可能很不穩定。Ridge常用來緩和這種情況,但係數也因此引入收縮偏差。
圖6|來源使用10×10的Hilbert矩陣、全1目標與無截距Ridge,各色線是不同係數。橫軸刻意反向:左邊約10⁻²、右邊約10⁻¹⁰,因此向右是正則化變弱,係數振幅擴大。這是病態矩陣示例,不能直接拿它的alpha範圍套自己的資料。來源:scikit-learn developers,Plot Ridge coefficients as a function of the regularization,BSD 3-Clause,原圖未改。
圖裡的alpha和前面的λ都在控制正則化強度,但數值未必相同。Ridge的實作可能使用平方誤差「總和」,而本篇先寫的是平均損失;平均還是總和、前方是否有½,都會改變相同數字代表的強度。
L1、L2與Elastic Net,不只換一個名稱
Elastic Net把L1和L2混合。為了說明,我們可寫成:
目標 = 平均損失 + λ[ρΣ|wⱼ| + (1−ρ)Σwⱼ²]
0 ≤ ρ ≤ 1
這是本篇的教學約定,實際函式可能在L2項再乘½。ρ靠近1偏L1,靠近0偏L2;當你既想稀疏,又想在相關特徵間得到較穩定的分配時,可以把Elastic Net列入比較。
圖7|來源將數字0–4對5–9作二元分類;每個8×8格子顯示模型的絕對係數,不是原始數字照片。欄為L1、Elastic Net與L2,列由上到下C=1、0.1、0.01;C越小約束越強。這組實驗可觀察L1與Elastic Net出現更多白色零係數,L2通常保留較多非零係數。來源:scikit-learn developers,L1 Penalty and Sparsity in Logistic Regression,BSD 3-Clause,原圖未改。
這張來源圖是在完整digits資料上縮放、擬合並展示係數,原頁列出的score也在同一份資料上計算,不能拿來宣稱測試集準確率。引用它的目的是看權重形狀;若自行評估效果,縮放必須放進只在訓練折擬合的流程。
稀疏也不代表找到了真正原因。兩個高度相關的特徵,L1可能保留一個、捨棄另一個;換一批資料可能又換人留下。把它當成模型使用特徵的結果,別當成因果裁決。
權重直方圖可以示意收縮,不能當作分布保證
圖8|Google教材用集中在0附近的分布示意較強L2限制。這不是統計定理,也不是本篇跑出的權重分布;L2不保證係數平均為0或服從常態。來源:Google,Overfitting: L2 regularization,CC BY 4.0,原圖未改。
圖9|來源以較寬的分布對照較弱限制。實際形狀仍受特徵尺度、相關性與資料訊號影響,不保證低λ就得到均勻分布。來源同圖8,原圖未改。
真正能確定的,是目標函數加了哪一項,而不是所有資料都會長出同一張直方圖。
單位一換,懲罰也跟著換:先處理尺度
假設同一段距離,原本用公里乘係數2,現在改成公尺乘係數0.002,兩者預測可以完全相同,但權重懲罰差很多。若直接把不同單位的權重一起處罰,模型會受到表示方式影響。
對常見表格數值特徵,可在訓練流程內評估StandardScaler等縮放方法,再調λ;每個驗證折都重新用該折訓練資料估計平均與標準差。稀疏矩陣、類別編碼、常數特徵與業務尺度有不同處理方式,不是所有欄位都應盲目中心化。
係數大小也因此要連同單位與轉換一起解讀。標準化後的權重很小,不自動表示原欄位沒有資訊;強相關特徵可能共同分攤訊號。
怎麼選強度,以及何時該回頭查資料
沿用交叉驗證與誤差分析的方法,先固定任務指標與切分邏輯,再比較強度。
- 保留最後的測試集;依時間、群組或獨立樣本選擇開發資料的驗證方法。
- 在每個訓練折內擬合缺失值處理、編碼與縮放,再擬合模型。
- 用跨數量級的候選強度探索,例如先看10⁻³到10³;這只是起點,並非通用最佳範圍。最好的候選落在邊界時,考慮擴展搜尋。
- 比較平均驗證表現、折間變動與重要群體的誤差,不只挑最小的單一數字。
- 選定設定後,依預先決定的程序重訓,再用最後測試集做一次總檢查。
若訓練與驗證都差,加大懲罰可能讓欠擬合更嚴重;可檢查特徵、模型形式與限制是否過強。若訓練好、驗證差,可比較更強限制、較簡單模型與更合適的資料,但也要排查洩漏、標籤與分布。
Early stopping是另一種限制訓練的方法:依預先設定的驗證指標、耐心次數與最小改善量,保留較合適的訓練快照。它不等於L2,也不能保證一定輸給或贏過某個理想λ。反覆看驗證集仍然會讓選擇適應這份資料,因此最後測試集需要保留。
學習率控制每一步怎麼走,λ改變要最小化的目標。不要把兩者想成固定往相反方向拉的兩股力:資料梯度本來就可能讓某個權重增加或減少,改學習率還可能改變是否收斂。
用Python重算前面的單係數解
以下程式只用Python標準函式庫,沒有擬合真實資料,也沒有重跑來源圖的實驗。它把前面的解析解與目標值重新算出,方便核對懲罰怎麼影響答案。
for lam in (0, 0.5, 1, 3, 6):
w_l2 = 3 / (1 + 2 * lam)
w_l1 = max(3 - lam, 0)
objective_l2 = 0.5 * (w_l2 - 3) ** 2 + lam * w_l2 ** 2
objective_l1 = 0.5 * (w_l1 - 3) ** 2 + lam * abs(w_l1)
print(lam, round(w_l2, 4), round(w_l1, 4),
round(objective_l2, 4), round(objective_l1, 4))
輸出依序是λ、L2解、L1解,以及各自目標值。因為兩邊懲罰定義不同,不能只看目標值大小就宣稱哪個模型較好。
最後要檢查的仍是:這個限制是否讓模型在真正關心的新資料上更可靠?較小的權重、更多的0、較漂亮的分布,都只是理解模型的線索。
來源與圖片授權
本篇用自訂單係數目標補充可手算推導;Google的樹木、曲線與直方圖屬教學示意,scikit-learn兩圖屬來源範例,未宣稱由本站重跑。
- Google:Overfitting與L2 regularization。採用Google自有教材圖,依CC BY 4.0及網站政策署名;不將Google圖示分布的教學簡化當作一般保證。
- scikit-learn developers:Ridge coefficients與L1 Penalty and Sparsity,圖片依BSD 3-Clause使用;完整聲明如下。
BSD 3-Clause License
Copyright (c) 2007-2026 The scikit-learn developers.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
封面沿用Google的圖5,等比縮放並加白邊保留全圖,仍依CC BY 4.0使用。
留言0
登入後就能留言。
登入