神经网络的正则化

本文探讨了神经网络中过拟合的问题,介绍了VCDimension的概念及其与神经元数量的关系。提出了两种解决过拟合的方法:一是通过正则化项减少模型复杂度,特别是针对L2正则化的改进;二是利用early stopping在训练过程中适时终止学习过程。此外,还讨论了权重初始化的重要性及策略。

神经网络的vc dimension的值与 神经元的个数以及权重的个数有关。所以个数越多,神经网络模型越强大越复杂。相应的就有可能出现过拟合的现象。


那么如何预防过拟合呢,有两种方法。


正则化项,这是最常见的方法,不同的是,神经网络用梯度下降法优化权重,所以需要损失函数是可导得,如果使用L1正则化项,就不可导了

那么L2正则化项呢,我们知道L2正则化项不能让权重等于零,这样就没有降低权重的个数。


所以我们对L2正则化项进行修改。


early stoping , 就是在梯度下降的过程中尽早的停止,防止过拟合的发生。那么在第几轮的时候停止呢,这就需要validation了。


那还要初始化权重的事儿。


不同的权重初始化会造成不同的E_in, 所以我们可以随机的初始化权重值,初始化权重的值应该较小,并且多试几次。


### 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),它允许用户自定义两者之间的相对重要程度。 值得注意的是,当采用这种方式实施正则化措施之后,应当仔细监控验证错误的变化趋势以找到最优解,并适当调节超参如学习率、迭代次数等确保模型既不过分复杂也不欠拟合给定样本空间内的模式特性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值