神经网络算法开发总结--网络结构开发

      看了一段时间吴恩达老师的深度学习微课程,收获较大,这阶段做个总结。

算法开发包含算法框架开发、网络结构开发及改进、算法应用优化及模型训练、网络模型压缩这几个方向。今天主要总结下网络结构开发及改进方面相关的。

模型开发一般包含3方面工作,新网络结构提出、现有网络功能单元增加、现有网络的局部算法优化:

  1. 解决某一类问题的新的网络结构提出

新的算法模型的开发一般为了解决几个问题:

  • 提升某一类问题的精度和准确度
  • 减少计算量
  • 减少参数数量,降低计算及存储硬件需求

 

比如用于图片分类的CNN网络以,他们在上述3个方面都表现优异。

我们以经典的AlexNet来看,引入卷积层后比全连接减少的参数学习数量。

 

我们只对比第一层,当引入卷积层后,他的参数数量是11x11x3x96+96(96个卷积核,每个核大小是11x11),也就是第1个卷积层有34944个参数需要学习,若采用全连接的方式,即使L1的节点数量是4096个,需要学习的参数是227x227x3x4096=633M.

因此引入卷积层后减少的参数数量是惊人的。

 

  1. 现有网络结构功能添加及演进

现有网络结构的功能添加以及演进一般为解决以下两类问题:

  • 引入更深的网络解决更复杂问题
  • 解决深度加深后引起的计算增长以及梯度收敛问题。

 

比如CNN实际上是指卷积神经网络这一大类,其中还包括多种网络模型,为了解决深度加深后出现的计算问题,结构不断演进:

  1. LetNet-5
  2. AlexNet
  3. VGG-16(16指16个层)
  4. ResNet(为了解决层数较深时的梯度爆炸和梯度消失,引入了Residual Block,跳跃连接)

  1. Inception(同一层采用多种尺寸的卷积核,采用不同大小的卷积核意味着可以获取不同尺度特征的融合)

 

  1. 现有网络局部算法优化
  • 参数初始化

深度神经网络时,由于ReLU这些非线性函数的叠加,weight initialization对模型收敛速度和模型质量有重要影响。主要原因是:

深度很深后,后面几层的每一层输出结果分布在0附近,根据链式法则,输出值是计算gradient中的乘法因子,直接导致gradient很小,使得参数难以被更新。

因此不少研究人员提出一些方法,从参数初始化改善这个问题,比如:

Xavier Glorot et al.在2010年提出Xavier initialization。

Kaiming He et al.在2015年提出He initialization。

Sergey Ioffe et al.在2015年提出Batch Normalization。

这些初始化方法相比随机初始化极大提升了收敛速度。

从编程实践看,似乎He initialization效果最好。

 

  • 反向传播优化算法

好的反向传播算法可以极大提升收敛速度,特别在使用mini-batch的时候。目前的深度学习都是针对大数据,因此每次迭代不会使用全集,而是把数据随机分成很多mini-batch,而mini-batch间的数据分布是存在差异性,因此采用梯度下降更新参数时需要进行平滑操作。梯度下降算法的优化由此而来。

 

  1. Momentum算法

  

  1. RMSprop(Root Mean Square Prop(均方根传播))

 

 

3)ADAM算法

          而ADAM算法结合了Momentum和RMSprop,是目前最有效的优化算法之一。

 

 

 

猜你喜欢

转载自blog.csdn.net/weixin_38712697/article/details/83239051