什么是机器学习中的正则化?有哪些常见的正则化方法?代码举例讲解

正则化是机器学习中的一种方法,用于解决过拟合问题,增强模型的泛化能力。它的思想是:通过添加额外的约束项对模型进行惩罚,避免模型变得过于复杂。

常见的正则化方法有:

  1. L1正则化:对参数的绝对值进行惩罚,使参数值更趋向于0。这可以实现参数值的稀疏。
  2. L2正则化:对参数的平方值进行惩罚,使参数值更趋向于0,但是不完全缩减至0。这可以抑制参数值的大幅变化。
  3. Dropout:随机将部分结点输出设置为0,防止节点之间的强依赖关系。
  4. 数据增强:通过翻转、旋转、剪切等方式人工生成更多样本,使模型学习不那么敏感。
  5. 提前停止:提前停止训练,防止模型过于复杂。
  6. 权重衰减:通过设置较小的学习率,让权重的更新幅度不那么剧烈。

代码示例:

L1正则化:

python 
loss = loss_fn(pred, target) + l1 * torch.sum(abs(weight))

L2正则化:

python
loss = loss_fn(pred, target) + l2 * torch.sum(weight ** 2) / 2.0 
Dropout:
python
dropout_layer = torch.nn.Dropout(p=0.5) 
output = dropout_layer(input) 

数据增强:

python
flipped_x = np.fliplr(x)   # 水平翻转  
x = np.concatenate((x, flipped_x), axis=0) 

提前停止:

python
early_stopping = EarlyStopping(monitor='val_loss', patience=3)  
model.fit(x_train, y_train, epochs=100, validation_split=0.2, callbacks=[early_stopping])

权重衰减:

python
optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9, weight_decay=0.0001)