深度学习-正则化

吴恩达deep learning课程笔记

 常用来防止过拟合的正则方法:
  L1:ij|Wi,j|=W1   权重矩阵各元素和的绝对值
  L2:ijWi,j2=WTW  权重矩阵各元素平方和
 L2是较常用的正则法,因其公式特性尽可能的考虑到了每一个特征。而L1是绝对值合,结果常常是一个稀疏矩阵。
 在NN里,常用正则项 “Frobenius norm”

J(w[1],b[1]...w[l],b[l])=1mni=1L(y^(i),y)+λ2m=1W[]2F

 这里的F指frobenius norm,求矩阵里元素的平方加总。

W[]2F=n[1]i=1n[]j=1(W[]ij)2,(W:(n[],n[1]))

 在反向传播里
W[]=(from backup)+λ2mW[]

W[] :=W[]αW[]=W[]α[(from backup)+λmW[]]=W[]lambdamW[]α(from back up)=(1λm)W[]α(from backup)

(1λm)W[] 权重w乘以一个小于1的数的结果是小于w的值,即实现了权重衰减。

关于正则项如何减少过拟合呢?
 从整个cost function 公式来看,当λ很大的时候,W[]0 这使得网络中的某些隐藏层节点为0,这样的结果是简化了网络。而在实际使用中,W不可能为0,只是相应的使隐藏层的影响减小,从而降低过拟合的可能。
 比如当使用tanh激活函数的时候,如果λ增大,那么W减小,当W偏小的时候,Z值也较小。根据函数图可以看出z值在较小的区间里,函数接近线性,因此一定程度上防止过拟合。而取值增大后,函数呈非线性。

在深度特别是图像处理中常用的正则法Dropout
 这个方法的大概思路就如名字,失活一些节点,简化训练时的网络。
具体而言,通过设定一个概率值如0.8,每个隐藏层随机激活80%的节点,关闭20%的节点。这样的结果是网络被简化了。
 同时随着训练次数增加到一定程度,可以令至少每个样本点都能被随机的训练一个相对简单的网络。最终达到降低因网络过于复杂而带来的过拟合问题。
 从单个节点来看,输入点因为随机性而无法确定哪些点存活,这使得节点不能依赖任一个输入特征。因此分配给任一个输入点较多的权重值都是不合理的。取代的做法是平衡并且分配给每个输入多一点权重以补偿失活点的权重。这样的权重在网络间传播,整体的效果是收缩了权重平方模数。类似于L2的功能。
 这里介绍了inverted dropout的方法。

 假设在网络的第3层由FF得到a3, 那么我们设定一个与之匹配的开关板d3,另外设置好keep_prob 用来确定存活节点概率。

d3=np.random.rand(a3.shape[0],a3.shape[1])<keep_prob
 得到一个跟a3维度相同的布尔值数组,就是我们的开关板。

a3=np.multiply(a3,d3)
 随机到false的对应点被关闭,值为0

 到这一步已经实现了dropout,接下来的一步就是了修补失活节点后被减少的预期权重值。
a3=a3/keep_prob

keep_prob的设定是根据网络各层复杂度来的,在有较高维度权重矩阵的层可以设定较小的值比如0.5,来防止overfitting;而在比较不易过拟合的层采用较大的值如0.9,1。 输入层虽然可以采用大于1或小于1的值,但一般而言通用的作法是将keep_prob设定为1.

小结: Dropout 在计算机视觉领域很常用,因为这个领域的输入非常高,而使数据集过小造成过拟合。Dropout相较于L2更能适应不同大小的输入,因此几乎是默认正则化。另一方面由于dropout随机关闭节点而使优化目标cost function无法明确,因此吴神推荐的一个解决方法是在确认代码正确前先关闭dropout(可以通过设置keepprob为1)。在监测代价函数随着迭代单调递减后再打开dropout。

### 深度学习中的正则化 #### 正则化的概念 正则化是一种用于防止过拟合的技术,旨在提升模型在未见数据上的泛化能力[^4]。当模型过于复杂时,可能会过度适应训练数据的噪声或细节,从而导致其无法很好地推广到新的样本。通过引入额外约束条件,正则化可以有效降低这种风险。 #### 常见的正则化方法及其作用 1. **L2 正则化 (Ridge)** L2 正则化通过对损失函数增加权重参数平方和的形式作为惩罚项,抑制了模型中较大权值的影响,从而使模型更加平滑并减少过拟合的可能性[^1]。具体来说,该方法会使得优化过程倾向于寻找较小绝对值的权重组合。 2. **L1 正则化** 不同于 L2 的方式,L1 使用的是权重绝对值之和作为附加成本。这种方法除了具备基本的防过拟合作用外,还具有稀疏性的特点——即某些不重要的特征对应的系数会被直接缩减至零[^3]。 3. **Dropout 技术** Dropout 是一种专门针对神经网络设计的独特形式的随机失活机制,在每次迭代过程中按照一定概率临时丢弃部分节点及其连接关系。这样做的好处在于强迫剩余单元共同协作完成任务而不是依赖单一路径,进而增强了整体架构稳定性以及抗干扰能力。 4. **Early Stopping 提前停止法** 这一简单却有效的手段基于监控验证集的表现决定何时终止训练流程。如果发现继续更新反而让性能下降,则立即结束当前进程以保留最佳状态下的参数配置。 5. **Data Augmentation 数据增强** 对原始输入样本施加变换操作生成更多样式的实例供算法学习利用,比如图像旋转、缩放等预处理措施都可以看作此类范畴内的实践案例之一。 6. **Batch Normalization 批量标准化** 它能够加速收敛速度的同时改善梯度传播状况,并间接起到一定的规范化效果,有助于缓解内部协变量偏移问题带来的负面影响。 7. **Weight Decay 权重衰减** Weight decay 可视为另一种表述形式下的 L2 regularization,两者本质上并无区别只是名称有所差异而已。 8. **Max Norm Constraints 最大范数限制** 将每层网络里的每一个单独过滤器的最大允许长度设定固定阈值范围内加以限定,以此达到简化结构的目的。 9. **Noise Injection 加入噪音扰动** 向激活值或者隐藏层输出注入适量人工制造出来的随机波动成分,模拟真实世界环境里不可避免存在的不确定性因素影响,促使系统学会忽略无关紧要的变化趋势而专注于核心规律提取工作上去。 #### 数学表达式与 Python 实现示例 以下是几种典型正则化方案的具体计算公式及其实现代码- **L2 Regularization** \[ J(\theta) = Loss(y,\hat{y}) + \lambda ||\theta||_2^2 \] ```python import tensorflow as tf from tensorflow.keras import layers, models, regularizers model = models.Sequential() model.add(layers.Dense(64, activation='relu', kernel_regularizer=regularizers.l2(0.01))) ``` - **L1 Regularization** \[ J(\theta) = Loss(y,\hat{y}) + \alpha ||\theta||_1 \] ```python model.add(layers.Dense(64, activation='relu', kernel_regularizer=regularizers.l1(0.01))) ``` - **Dropout Implementation** ```python model.add(layers.Dropout(rate=0.5)) ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值