深度学习初步,全连接神经网络,MLP从原理到实现(二)原理部分,过拟合,激活函数,batchsize和epochs,训练DL模型的建议

其他两篇:

深度学习初步,全连接神经网络,MLP从原理到实现(一)原理部分,反向传播详细解释和实际计算例子

深度学习初步,全连接神经网络,MLP从原理到实现(三)实现部分,用java实现MLP

1.激活函数

(1)Sigmoid

Sigmoid将所有输入压缩到0到1之间,这样造成的问题是,当随着神经网络的层次加深时,特征的变化由于sigmoid而慢慢衰减。这样会造成靠近输入层的梯度很小。

(2)ReLU

普通类型的ReLU

 

ReLU是现在DL流行使用的激活函数,有一些变种。

ReLU实际上是一种线性的函数,

在z<0,σ(z) = 0

在z>0,σ(z) = z

 

(3)MaxOut

MaxOut可以自适应的训练出激活函数。

将每层的神经元分组,在组内选择最大的z值作为下一层的输入,例如:

这样可以产生不同的激活函数:

组内神经元数不同的效果:

怎么计算梯度呢?

因为取max操作是针对特定样本,比如:

被选中为最大,那么其对应的激活函数就是线性的 ,会更新 对应的权重,输入不同的样本,可能选中不同的z, 也可能会被选中更新参数。

还有其他类型的激活函数,可以自己查询。

2.batch size 和 epochs

batch size的来源:将样本分批,每一批样本用来优化损失函数,这其实就是批量梯度下降,分批最好随机。。比如样本有10000个,batch size = 100,那么分批为100批,优化时需要做100次参数更新。

epochs:将样本分批后,一次epoch就是用完所有批次的样本用来梯度下降。例如:样本10000,batch size = 100,epochs = 10,每一个epoch参数更新100次,共10个epoch。

考虑下面的情况:

样本10000:

  1. batch size = 1,每一个epoch梯度下降10000次,更新10000次参数
  2. batch  size = 10,每一个epoch梯度下降1000次,更新1000次参数

因为单次更新参数,计算梯度时可以并行(大量的矩阵运算可以用gpu并行)的,(2)的bach size更大更利于并行,单次epoch快于(1),但是batch size有限制,太大会占用很多内存。另外如果batch size调的太大,那么此时就直接优化比较多样本的损失(越大越接近总损失),这样容易陷入局部最小值,而batch size小一些就成了批量梯度下降,这样下降时会具有一定的随机性,有利于跳出局部最小。

3.过拟合处理(正则和dropout)

(1)正则

和线性回归和逻辑回归中的正则类似,L1和L2正则项

(2)dropout(提升模型泛化能力)

   1)什么是dropout

在训练时,设定概率p,添加dropout的层中的每个神经元有p的概率被丢掉和之相连的所有权重不被更新,注意训练时才会这样操作,预测时不需要。

 

在预测时需要,如果概率设置p,预测时所有权重需要乘以(1-p),为什么?

如果神经元被扔掉的概率时0.5,训练时可能出现下面的情况:

在预测时,由于多了2个权重,所以计算出的z可能是训练的2倍,为了降低z,每个权重乘以1-p=0.5

2)为什么dropout有效

dropout可以被认为是一种集成学习,这里的集成概念类似于随机森林,adaboost中的集成概念。

因为每次丢掉了一些神经元,每次minibatch训练时神经网络的结构不一样。

预测时,使用了完整的神经网络结构,权重乘以1-p,它的结果会和不同结构的神经网络预测出的平均结果接近。

 

举个例子:设p=0.5

(1)(2)(3)(4)出现的可能都是1/4。例如(1)x1不被丢掉的概率是0.5,x2不被丢掉的概率是0.5,所以情况(1)出现的可能是0.5*0.5=0.25=1/4。总和计算4中情况的z结果,就是算一个z的期望,

0.25*z(1)+ 0.25*z(2)+ 0.25*z(3)+ 0.25*z(4) = 1/2w1x1+1/2w2x2

这样的结果和图中右下角直接对权重乘以1-p的结果相等。

上述这种情况只有当激活函数是线性时成立,若非线性不成立。

但是非线性激活函数使用dropout任然有效,只是可能没有线性的有效。(关于理论解释暂时不知道)

3.训练DL模型的建议

 

 

 Keras注意事项:

  1. 做分类时,label必须要one-hot编码
  2. 首先关注在训练集上的效果,如果训练集上的效果都不好,那么一定有问题,如果训练集上拟合得比较好,但测试集不太好,这时可以考虑是不是过拟合了
  3. 损失函数的选择
  4. 激活函数的选择(见激活函数小节)
  5. 优化算法的选择(adam是比较好的优化算法)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值