正则化是机器学习中的一种方法,用于解决过拟合问题,增强模型的泛化能力。它的思想是:通过添加额外的约束项对模型进行惩罚,避免模型变得过于复杂。
常见的正则化方法有:
- L1正则化:对参数的绝对值进行惩罚,使参数值更趋向于0。这可以实现参数值的稀疏。
- L2正则化:对参数的平方值进行惩罚,使参数值更趋向于0,但是不完全缩减至0。这可以抑制参数值的大幅变化。
- Dropout:随机将部分结点输出设置为0,防止节点之间的强依赖关系。
- 数据增强:通过翻转、旋转、剪切等方式人工生成更多样本,使模型学习不那么敏感。
- 提前停止:提前停止训练,防止模型过于复杂。
- 权重衰减:通过设置较小的学习率,让权重的更新幅度不那么剧烈。
代码示例:
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)