deeplearning系列(五)实现一个简单的深度神经网络

1. 深度学习概览

浅层神经网络的介绍中,实现了包含一个隐藏层的浅层神经网络,对于这样的浅层网络,在网络训练过程中可以通过反向传播算法得到较优的网络参数值。然而,因为只有一个隐藏层,限制了模型的表达能力。

在本节中,开始介绍包含多个隐藏层的深度神经网络,经过多个隐藏层对上一层的非线性变换,深度神经网络有远超过浅层网络的表达能力。

但训练深度神经网络并不是一件十分轻松的工作,浅层神经网络的训练经验不能直接移植过来。这其中主要存在一下几方面原因:

  1. 数据量大小。浅层神经网络的训练依赖于有标签的数据。深度网络,因其远超过浅层网络的参数量,需要更多的有标签数据来训练,而通常这样的数据是很难获取的。
  2. 局部极值。神经网络是一个非凸的优化问题,对于浅层网络来说,可以通过训练使参数收敛到合理的局部极值。而深度网络是一个高度非凸的问题,存在很多的坏的局部极值,使用梯度下降法一般不能收敛到合理的参数值。
  3. 梯度弥散。使用反向传播计算梯度时,当网络层次很多时,网络前几层梯度幅值很小。使用梯度下降时,前几层参数更新速度也因此变得缓慢,这些层不能从样本中有效学习。

那么有没有可以解决这些问题的方案,从而使深度网络的训练是可行的呢?采用逐层贪婪训练得到每层参数,然后再使用解决浅层神经网络的算法(例如:BP+L-BFGS)对参数微调是一个比较可行的解决方案。

2. 栈式自编码神经网络

栈式自编码神经网络是一个由多层稀疏自编码器组成的神经网络,前一层自编码器的输出作为后一层的输入。栈式自编码神经网络参数是通过逐层贪婪训练获得的。以一个包含2个隐藏层,输出层为softmax的神经网络为例,其训练过程可以表示为:

  1. 用原始输入 x 训练第一个自编码器,学习原始输入的一阶特征 h(1) ,如下图(左)所示;
  2. 将所有训练数据输入上面第一个自编码器,得到其一阶特征
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值