深度学习一些常见概念:过拟合,梯度消失,局部最优,批量归一化

1过拟合:
产生原因:由于机器学习训练出来的模型拟合结果太好,其在训练集上表现效果非常好,即损失函数非常小,但在测试集上效果却并不尽如人意(随着测试集损失函数越来越小,即模型越来越稳定,在测试集中损失函数却没有随之变小)
解决方法:数据与模型两个角度
模型角度:1提前终止训练 2Dropout(随机失活) 3正则化
1提前终止训练:不一定等到模型稳定,而是当测试集损失出现反弹终止训练
EarlyStopping(monitor,min_delta,patience,mode)
monitor: 监控的数据接口,有’acc’,’val_acc’,’loss’,’val_loss’等等
min_delta:增大或减小的阈值,只有大于这个部分才算作improvement。
patience:能够容忍多少个epoch内都没有improvement
mode: 就’auto’, ‘min’, ‘,max’三个可能。
2Dropout(随机失活)
Model.add(Dense(神经元个数)) Model.add(Dropout(失活比例))
3正则化
通过在网络优化过程中添加惩罚项,使其与损失函数一同作为网络优化目标。通俗讲就是在对损失函数添加一个参数个数有关函数的数,这样如果参数越多,越大(模型越复杂),正则项就越大,整个损失函数就越大,就达到了一个惩罚的目的,即不让模型过于优化而过拟合。
其分为L1和L2两种正则项损失函数:L1:w绝对值和,L2:w平方和:
Keras.regularizers.l1(),Keras.regularizers.l2(),Keras.regularizers.l1_l2()
对网络层,可以对权值,偏置值和输出施加:
kernel_regularizer,bias_regularizer,activity_regularizer

2梯度消失和梯度爆炸
产生原因:由于深度学习主要依靠反向传播算法,即通过计算损失函数在参数上的梯度来更新参数,使损失下降。而梯度计算是基于链式法则进行,当网络层数很深时,对于前面几层的神经元,需要从后面乘上很多层参数,这样一些值过小或过大,会导致整个结果指数级减小或增大,比如0.9和1.1两数本身差不多,但经过10次方,传导给前面的结果差距明显变大。对于sigmoid函数,其自变量大于4或小于-4,其导数接近0,而整个区间,其导数最大值也不过0.25,经过多次传递,很容易使其接近0,进而梯度消失。
产生影响:当发生梯度消失,即损失函数过早的不再下降,这样使得神经网很难训练;而梯度爆炸,则会使得神经网的学习很不稳定,即每次产生很大的梯度,是其产生较大幅度的震荡
解决方法:1使用Xavier初始化参数 2使用ReLU激活函数 3梯度裁剪
梯度裁剪主要针对优化器clipnorm和clipvalue设置:前者计算完梯度,不直接更新,而是先求所有梯度平方和,将其除上梯度最大值,得到缩放因子,将每个梯度乘上缩放因子;后者直接设定阈值,裁剪值设置阈值区间
Model.add(Dense(32,input_shape(784,),init=’he_normal’))//使用Xavier初始化参数
Model.add(Activation(‘relu’))//使用ReLU激活函数
Sgd=optimizers.SGD(lr=0.01,clipnorm=1.)//梯度裁剪
Sgd=optimizers.SGD(lr=0.01,clipvalue=0.5)

3局部最优
在高维空间,其实真正的局部最优很难遇到,假设概率是0.5,而有100维也是0.5^100,基本很难遇到,真正麻烦的是鞍点,即一阶导数为0,但不是局部最优,它在高维空间概率几乎是1,这样会导致这一点导数为0,参数不在更新,即停止学习,但整个网络却没有收敛在一个最优点上。把这概念引申,有一片导数长时间接近0的区域,损失空间的平原区,这样神经网的学习会非常慢
解决方法:使用参数初始化,让模型初始点远离平原区;使用momentum,RmsRrop,Adam成熟的优化算法,通过学习率的适应,加速学习

4批量归一化(BN)
通过减少内部协变量转译加速深度网络训练。即对输入数据进行归一化,通过样本均值与方差使数据限定在一定范围。神经网络隐藏层的输出是下一层的输入,而当两层间数据相差很大,会导致输入数值范围不一致,每次更新都需要不停适应输入数据分布的变化,这样会使神经网训练效率低下。
BN算法优点:1加速收敛 2控制过拟合 3降低网络对初始化权值敏感度 4允许使用较大的学习率
Model.add(layers.Dense(64))
Model.add(layers.BatchNormalization())
Model.add(Activation(“relu”))

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值