目录
一、深度学习中解决过拟合方法
- 数据增强
- L1和L2正则化
L1正则化直接在原来的损失函数基础上加上权重参数的绝对值: l o s s = J ( w , b ) + λ 2 m ∑ ∣ w ∣ loss=J(w,b)+\frac{\lambda}{2m}\sum|w| loss=J(w,b)+2mλ∑∣w∣
L2正则化直接在原来的损失函数基础上加上权重参数的平方和: l o s s = J ( w , b ) + λ 2 m ∑ ∥ w ∥ F 2 loss=J(w,b)+\frac{\lambda}{2m}\sum\lVert w\lVert _F^2 loss=J(w,b)+2mλ∑∥w∥F2
L1和L2正则化能够缓解过拟合的原因:
神经网络就是一个函数,对其进行傅里叶变换求得频谱,频谱中低频分量就是变化平滑的部分,高频分量就是变化敏感的部分。模型对于微小扰动的反馈差异大实际就是一个过拟合的表现,也就是高频分量不能多。根据雅各比矩阵(一阶导数矩阵),神经网络这个函数的高频分量存在上界,上界和谱范数正相关。谱范数逆变换回时域,可求得和参数范数正相关。正则就是将参数的范数加入loss里求最优化,故而限制了神经网络学到高频分量,更倾向于一个低频的平滑的函数,从而缓解过拟合。
推导过程:https://blog.csdn.net/StreamRock/article/details/835399373. Dropout正则化
步骤:
- 遍历神经网络每一层节点,设置节点保留概率keep_prob(每一层的keep_prob可以不同,参数多的层keep_prob可以小一些,少的可以多一些)。
- 删除神经网络节点和从该节点进出的连线。
- 输入样本使用简化后的神经网络进行训练。
- 每次输入样本都要重复以上三步
Dropout起到正则化效果的原因:
- Dropout可以使部分节点失活,起到简化神经网络结构的作用,从而起到正则化的作用。
- Dropout使神经网络节点随机失活,所以神经网络节点不依赖于任何输⼊,每个输入的权重都不会很⼤。Dropout最终产⽣收缩权重的平方范数的效果,压缩权重效果类似L2正则化。
4. early stopping
训练时间和泛化误差的权衡。提早停⽌训练神经网络得到⼀个中等大小的W的F范数,与L2正则化类似。
在训练中计算模型在验证集上的表现,当模型在验证集上的误差开始增大时,停止训练。这样就可以避免继续训练导致的过拟合问题。5. BatchNorm
归一化
二、深度学习中解决欠拟合方法
增加神经网络层数或神经元个数
三、梯度消失和梯度爆炸
梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)
梯度饱和:越来越趋近一条直线(平行X轴的直线),梯度的变化很小传统的神经网络通常是基于BP算法优化权重参数的,即通过损失函数计算的误差通过梯度反向传播的方式对神经网络中的权重进行更新,其中用到的是连乘形式的链式法则。
梯度消失:产生的原因基本上是网络太深或是采用了不恰当的损失函数,如sigmoid函数、tanh函数等。由于sigmoid函数的导数最大值是0.25,因而通过链式法则,导致靠近输入层的权重更新缓慢甚至停滞。
梯度爆炸:产生的原因一般是深层网络或是权重初始化过大的情况,伴随着传统神经网络的链式法则,梯度会越来越大,训练过程中,很容易使得权重的值也越来越大导致溢出等情况。
解决梯度消失的方法
- Relu及其变体
- LSTM/GRU
- 残差结构
- BatchNorm
- Xavier初始化(修正w的方差,避免w过小)
解决梯度爆炸的方法
- 梯度裁剪
- 正则化(将w加入Loss里,如果Loss小则w也要小,而梯度爆炸是w过大[绝对值]造成的)
- Xavier初始化(修正w的方差,避免w过大)
- BatchNorm
四、神经网络权重初始化方法
随机初始化。这是最简单的初始化方法,权重可以从一个较小的范围内的随机值初始化,通常基于均匀分布或正态分布。
Xavier初始化(又名Glorot初始化)。这种方法旨在保持输入和输出的方差一致,以避免梯度消失或爆炸问题。Xavier初始化根据连接权重的个数和输入/输出单元的数量来确定初始值的范围,并支持正态分布和均匀分布。
He初始化(又名Kaiming初始化)。这种方法适用于使用ReLU(Rectified Linear Unit)激活函数的神经网络。与Xavier初始化类似,但在计算初始值的范围时,将输入单元的数量乘以一个较大的因子,以适应ReLU激活函数的特性。13
全零或等值初始化。如果初始化的值全都相同,每个神经元学到的东西也相同,这可能导致“对称性”问题。
正态初始化。均值为零,标准差设置一个小值,使得权重有正有负。
五、梯度下降法
- SGD(随机梯度下降法)
SGD的核心思想是在每次迭代中随机选择一个样本(或一小批样本)来估计梯度,而不是使用整个数据集。这样做的优点是计算效率高,尤其是当数据集很大时。SGD也能够逃离局部最小值,因为随机性引入了一定的噪声,有助于模型探索更多的参数空间。
优点:
- 计算效率高:SGD每次更新只使用一个样本或一小批样本来计算梯度,这使得它在每次迭代时的计算成本较低。
- 内存使用少:由于每次只处理一小部分数据,SGD不需要将整个数据集加载到内存中,这使得它适合处理大规模数据集。
- 能够逃离局部最小值:由于其随机性质,SGD在搜索参数空间时可能会逃离局部最小值,有时能够找到更好的全局最小值。
- 实现简单:SGD算法相对简单,易于实现和理解。
- 适应性强:SGD可以很容易地适应不同的学习率和正则化策略,如引入动量(Momentum)或RMSprop等变种。
缺点:
- 收敛速度慢:SGD的收敛速度通常比其他优化算法慢,因为它在每一步都使用随机梯度,这可能导致优化路径震荡。
- 需要仔细调整学习率:SGD的性能在很大程度上依赖于学习率的选择。如果学习率设置得太高,可能会导致模型无法收敛;如果设置得太低,收敛过程会非常缓慢。
- 可能不收敛:在某些情况下,SGD可能根本不会收敛,特别是当目标函数不是严格凸形时。
- 对非凸问题敏感:SGD在处理非凸优化问题时可能会遇到问题,因为它可能会在多个局部最小值之间震荡,而不是收敛到全局最小值。
- 参数更新策略单一:标准的SGD没有考虑梯度的二阶信息,这可能在某些情况下限制了其性能。
在时间步0,动量法创建速度变量v0,并将其元素初始化成0。在时间步t > 0,动量法对每次迭代的步骤做如下修改:
其中,动量超参数γ 满足0 ≤ γ < 1。当γ = 0时,动量法等价于小批量随机梯度下降。
- Adagrad
AdaGrad:全称Adaptive Gradient,自适应梯度,是梯度下降优化算法的扩展。AdaGrad是一种具有自适应学习率的梯度下降优化方法。它使参数的学习率自适应,对不频繁的参数执行较大的更新,对频繁的参数执行较小的更新(It adapts the learning rate to the parameters, performing larger updates for infrequent and smaller updates for frequent parameters)。因此,它非常适合处理稀疏数据。AdaGrad可大大提高SGD的鲁棒性.
AdaGrad算法的核心思想是对每个参数根据其历史梯度的平方和进行自适应地调整学习率。这意味着对于出现频率高的特征,其学习率会较低;而对于出现频率低的特征,其学习率会较高。这种方式使得模型在稀疏数据上的表现更好。
- RMSprop
AdaGrad的一个限制是,它可能会在搜索结束时导致每个参数的步长(学习率)非常小,这可能会大大减慢搜索进度,并且可能意味着无法找到最优值。RMSProp和Adadelta都是在同一时间独立开发的,可认为是AdaGrad的扩展,都是为了解决AdaGrad急剧下降的学习率问题。
RMSProp采用了指数加权移动平均(exponentially weighted moving average)。
RMSProp比AdaGrad只多了一个超参数,其作用类似于动量(momentum),其值通常置为0.9。
RMSProp旨在加速优化过程,例如减少达到最优值所需的迭代次数,或提高优化算法的能力,例如获得更好的最终结果。
- Adam
深度学习中的神经网络优化。Adam(Adaptive Moment Estimation)优化器是一种自适应优化算法,可以根据历史梯度信息来调整学习率。它结合了RMSProp和Momentum两种优化算法的思想,并且对参数的更新进行了归一化处理,使得每个参数的更新都有一个相似的量级,从而提高训练效果。Adam优化器在很多实际问题中表现良好,尤其是在大规模数据集上训练深度神经网络时效果更佳。
功能
Adam 优化器的主要功能是根据梯度信息来更新神经网络参数,从而最小化损失函数。具体来说,它的主要功能包括:
1.自适应调整学习率:Adam 优化器可以根据历史梯度信息来自适应地调节学习率,使得在训练初期使用较大的学习率,能够快速收敛,在训练后期使用较小的学习率,能够更加准确地找到损失函数的最小值。
2.调整动量:Adam 优化器能够调整动量参数,以平衡上一次梯度和当前梯度对参数更新的影响,从而避免过早陷入局部极小值。
3.归一化处理:Adam 优化器对参数的更新进行了归一化处理,使得每个参数的更新都有一个相似的量级,从而提高训练效果。
4.防止过拟合:Adam 优化器结合了L2正则化的思想,在更新时对参数进行正则化,从而防止神经网络过度拟合训练数据。
总体来说,Adam 优化器能够快速、准确地最小化损失函数,提高深度神经网络的训练效果和泛化能力。
mk和 vk 分别是梯度的一阶矩和二阶矩的估计,β1和 β2 是控制这两个矩估计的指数衰减率,通常设置为 0.9 和 0.999。ϵ是一个非常小的数(例如1e-8),防止除以零。 k是当前迭代次数,用于做偏差校正。
在 Adam 优化算法中,β1和 β2