深度学习之路(3)神经网络结构和参数优化

书籍参考

参考英文在线书籍 Neural Networks and Deep Learning 第三章。
对应原文Chapter3内容特别好。作者为了让读者直观感受学习过程,还嵌入了算法和图,读者可以点击相应按钮看到神经网络的学习过程——其Cost随Epoch的变化曲线。

博文提要

前面讲了神经网络学习过程的重要环节——梯度下降法,重点讲了该方法用的反向传播原理,它大大减小了梯度求算的时间复杂度。
我们在了解机器学习算法之初,可能就听说过算法工程师的日常工作——调参。不同于上面学习过程的调参(算法自动调节神经元内部参数w、b),这里的调参是调整超参数,由我们决定怎么设置。知道一个神经网络的结构和参数的含义,才能更好地理解调参方向,才不像无头苍蝇一样靠运气调参。本篇着重介绍神经网络的优化和超参数的调整,包括技巧和原理。如果你对这些问题感兴趣,请继续读下去:

  1. 代价函数怎么优化?
  2. 交叉熵代价函数怎么来的?
  3. 什么是过拟合?怎么解决?
  4. 正则化有哪些方式?
  5. 神经网络初始参数w、b怎么选择?
  6. 神经网络各种超参数怎么确定?

一、学习饱和与cost function优化

1. 交叉熵函数

上篇讨论了反向传播算法求梯度的过程,代价函数C的梯度由两个偏微分组成:
c-w梯度
c-b梯度
其中δ为:
δ
我们发现一个问题!δ含有因数σ’,我们知道σ(z)函数曲线是s形的,当z很小或者很大时,都有σ’->0,此时δ就会很小;δ很小导致C梯度很小,导致调参很慢(饱和)!
原文嵌入了程序和动态图表展示,让我们直观看到cost随训练次数epoch下降的过程,有兴趣的可以自己看下http://neuralnetworksanddeeplearning.com/chap3.html。
下面考虑如何解决这个问题。一个思路是改造方差形式的代价函数:
cost function
其中a=σ(z),可得C’z=(a-y)σ’(z)。我们想消掉σ’,可以用交叉熵函数代替。这个交叉熵函数来的有点突然,我们的思路是:假设C对z的导数不含σ’,只含有(a-y)或者说σ(z)-y,我们可以通过对z积分得到一个函数,它就是交叉熵函数:
cross entropy
(a-y)对w、b的积分过程有点复杂,有兴趣的可以自己推导。我们可以用上式对z求微分进行验证,发现确实消除了σ’项:
c-w导数
c-b求导
分析上式,发现它有个优点,误差σ(z)-y越大,微分越大,梯度就越大,那么调参幅度就越大(此处大描述的都是绝对值)。换句话说,误差越大,学习过程就越快!这是我们要的结果。
为了对交叉熵函数有个更直观的认识,有必要提一下:交叉熵是信息论的概念,是对“惊讶”的度量。如果神经元想计算 x→y=y(x),但实际计算 x→a=a(x),如果我们认为a是神经元认为y=1的概率,1-a是y=0的概率,交叉熵就是我们的“惊讶”程度。输出是我们期望的值,我们“惊讶”程度就较低;输出越偏离我们的期望值,我们“惊讶”程度越高。想了解更多交叉熵的知识,可以参考这篇完美解释交叉熵
另外,交叉熵函数恒为正值,且神经网络的输出a跟正确输出y差值越大时,交叉熵也越大。因此,交叉熵可以作为cost function来使用。

2. Softmax

大部分时候,用交叉熵函数都能解决问题。还有一种softmax函数,可以作为激活函数,结合另一种cost function,也能解决学习慢(饱和)问题。这里简单介绍一下。
基本思想是,在输出层使用softmax代替sigmoid激活函数,softmax形式是:
softmax
通过下图可以看出,自然指数的作用是将各神经元z的相对差距放大,大者更大,小者更小。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值