iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
AI/ ML & Data

輕鬆上手AI專案-影像分類到部署模型系列 第 15

[Day 15] 模型正則化方法 (1):L1 和 L2 正則化

  • 分享至 

  • xImage
  •  

前言

昨天提到了 Overfitting,要避免這樣的問題,我們可以使用正則化(Regularization)的方法,讓模型可以更簡單,更符合 Generalization 的特性。今天介紹其中一種方法,為權重的正則化。

權重正則化

今天介紹的正則化方法,影響的對象為權重,目的為讓權重值不要過大,讓模型可以較簡單不複雜。此種正則化的方法為於損失函數中對較大權重使用懲罰(Penalty),給予模型一些限制,減少過度學習稀有特徵。常使用的權重正則化方法有 L1 和 L2 正則化:

  • L1 正則化:懲罰和權重的絕對值成正比
    L1 正則化公式
  • L2 正則化:懲罰和權重的平方成正比,亦稱作 Weight Decay
    L2 正則化公式

L1 和 L2 正則化可以一起使用:
L1 和 L2 正則化公式

使用方法

匯入 regularizers 模組:

from tensorflow.keras import regularizers

於要使用正則化的層設定 kernel_regularizer 參數,如果要使用 L1 正則化,將參數設定為 regularizers.l1(penalty),使用 L2 正則化使用 regularizers.l2(penalty),其中 penalty 設定為正則化強度數值。如果想同時使用 L1 和 L2 正則化,參數設為 regularizers.l1_l2(l1=penalty1, l2=penalty2),penalty 的值可以各自設定。

例如在全連接層加上正則化:

# 原本的全連接層
x = layers.Dense(4096, activation="relu")(x)
# 加入權重正則化
# L1
x = layers.Dense(4096, activation="relu", kernel_regularizer=regularizers.l1(0.01))(x)
# L2
x = layers.Dense(4096, activation="relu", kernel_regularizer=regularizers.l2(0.01))(x)
# L1 + L2
x = layers.Dense(4096, activation="relu", kernel_regularizer=regularizers.l1_l2(l1=0.01, l2=0.01))(x)

通常會在較小型的深度學習模型上去使用權重正則化,如果是較大型的模型,可以使用 Dropout 的方法,這就是明天要介紹的主題。

參考資料

  • François Chollet《Deep Learning with Python, Second Edition》(中文版:黃逸華、林采薇譯《Keras大神歸位:深度學習全面進化!用Python 實作CNN、RNN、GRU、LSTM、GAN、VAE、Transformer》,旗標出版)
  • L1 , L2 Regularization 到底正則化了什麼 ? | Math.py

上一篇
[Day 14] 我的模型訓練好了嗎?overfitting 是關鍵!
下一篇
[Day 16] 模型正則化方法 (2):Dropout
系列文
輕鬆上手AI專案-影像分類到部署模型30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言