网络正则化


机器学习的一个核心问题就是如何使学习算法[learning algorithm],不仅能在训练样本上表现良好,并且在新数据或测试集上同样奏效,学习算法在新数据上的这样一种表现我们称之为模型的“泛化性”或“泛化能力”[generalization ability]。若某学习算法在训练集上表现优异,同时在测试集上依然工作良好,可以说该学习算法有较强泛化能力;若某算法在训练集表现优异,但测试集却非常糟糕,我们说这样的学习算法并没有泛化能力,这种现象也称为“过拟合”[overfitting]。
由于我们非常关心模型的预测能力,即模型在新数据上的表现,而不希望过拟合现象的发生,我们通常使用“正则化”[regularization]技术来防止过拟合现象的发生。正则化是机器学习中通过显示的控制模型复杂度来避免模型过拟合、确保泛化能力的一种有效方式。
许多浅层学习器,如支持向量机等,为了提高泛化性往往都要依赖模型正则化,深度学习更应如此。深度网络模型相比浅层学习器巨大的多的模型复杂度是把更锋利的双刃剑:保证模型更强大表示能力的同时也使模型蕴藏着更巨大的过拟合风险。 深度模型的正则化可以说是整个深度模型搭建的最后一步。本文将介绍五种实践中常用的卷积神经网络正则化方法。由于牵涉到比较多的公式,为了更加方便的呈现给大家,所以,依然采取截图的方式。

L2正则化

在这里插入图片描述

L1正则化

在这里插入图片描述

最大范数约束

最大范数约束(max norm constraints)是通过向参数量级的范数设置上限对网络进行正则化的手段,形如,在这里插入图片描述

随机失活

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

验证集的使用

通常,在模型训练前可从训练集数据中随机划分出一个子集作为“验证集”,用以在训练阶段评测模型预测性能。一般在每轮或每次批处理训练后在该训练集和验证集上分别做网络前向运算,预测训练集和验证集样本标记,绘制学习曲线,以此检验模型泛化能力。
在这里插入图片描述
在这里插入图片描述

总结

1.网络正则化是深度网络模型搭建的关键一步,可以有效防止网络过拟合、提升其泛化能力;
2.L2正则化和L1正则化是卷积神经网络中较简单常用的正则化方法,一般而言,L2正则化效果优于L1正则化;L1正则化可求得稀疏解;另外,二者可联合使用,此时被称为“Elastic网络正则化”
3.最大范数约束是通过约束参数范数对网络施加正则化,它有一个非常吸引人的优势在于,优于最大范数约束对参数范数约定了上限,即使网络学习率设置过大也不至于导致“梯度爆炸”;
4.随机失活是目前针对全连接层操作有效的正则化方式,实际工程实现时多采用“倒置随机失活”;实际使用中随机失活可与L2等正则化方法配合使用;
5.在网络训练可通过验证集上的学习曲线评估模型训练效果,对网络训练“及时停止”也是一种有效的防止网络过拟合的方法;
6.增加训练数据、使用更多的数据扩充方式也是防止网络过拟合的有效方式;此外也可以在网络分类层加入随机噪声,从而隐式增加对模型的约束,提高模型泛化能力。
:文章选自《解析深度学习—卷积神经网络原理与视觉实践》魏秀参著

### MATLAB 中神经网络正则化实现 #### 使用 `train` 函数进行 BP 神经网络训练并加入 L2 正则化项 在 MATLAB 的 Neural Network Toolbox 中,可以通过调整参数来引入 L2 正则化。具体来说,在创建和配置多层感知器 (MLP) 或其他类型的前馈神经网络时,可以利用性能函数中的权重衰减系数 (`mu`) 来控制正则化的强度。 对于标准反向传播算法而言,默认情况下已经包含了简单的早期停止机制作为防止过拟合的一种形式;然而为了更精确地施加 L2 范数惩罚,则需显式设定 `net.trainParam.mu` 属性[^1]。 下面给出一段具体的代码片段用于说明如何构建带 L2 正则化的 BP 网络: ```matlab % 导入数据集 data = readtable('your_dataset.xlsx'); % 替换为实际文件路径 X = table2array(data(:, 1:end-1)); % 特征矩阵 T = table2array(data(:, end)); % 目标向量 % 创建三层BP神经网络(输入层、隐藏层、输出层) hiddenLayerSize = 10; net = patternnet(hiddenLayerSize); % 设置训练参数 net.divideParam.trainRatio = 70/100; % 训练集比例 net.divideParam.valRatio = 15/100; % 验证集比例 net.divideParam.testRatio = 15/100; % 测试集比例 % 添加L2正则化 lambda = 0.01; % 定义正则化因子大小 net.performFcn = 'msereg'; % 修改默认性能函数至含正则化的版本 net.performParam.ratio = lambda / (1 + lambda); % 开始训练过程 [net,tr] = train(net,X,T); ``` 上述脚本展示了怎样通过修改性能函数(`performFcn`)以及相应参数(`performParam.ratio`)的方式引入 L2 正则化到基于梯度下降法更新权值的过程中去。这里选用的是混合均方误差与正则化项的形式——即所谓的 "Regularized Mean Squared Error"(RMSE),它允许用户自定义两者之间的相对重要程度。 值得注意的是,当采用这种方式实施正则化措施之后,应当仔细监控验证错误的变化趋势以找到最优解,并适当调节超参如学习率、迭代次数等确保模型既不过分复杂也不欠拟合给定样本空间内的模式特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毛毛真nice

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值