6. 深度学习实践:深度前馈网络

前馈神经网络:为了实现统计泛化而设计出的函数近似机。它偶尔从大脑中提取灵感,但并不是大脑功能的模型。

1. 为什么线性模型(单层感知机)不能解决异或(XOR)问题?

这里写图片描述

左图中, x1=0 时,模型的输出必须随着 x2 的增大而增大。 x1=1 时,模型的输出必须随着 x2 的增大而减小。线性模型必须对 x2 使用固定系数 w2 ,因此线性模型不能解决这个问题。

解决办法:学习一个不同的特征空间,使得在这个空间上线性模型能够表示这个解。右图中,由神经网络提取的特征表示的新空间( h1,h2 )中,输出为1的两个点折叠到一起,线性模型就可以分开了。

2. 一个简单的前馈神经网络

这里写图片描述

网络包含两个函数: h=f(1)(x;W,c) y=f(2)(h;w,b) ,完整的模型是 f(x;W,c,w,b)=f(2)(f(1)(x))

f(1) 不能是线性函数,否则前馈网络整体还是线性的。大多数网络通过仿射变换后,会紧跟着一个激活函数(固定非线性函数)。

基于梯度的优化算法可以找到一些参数,使得误差非常小。梯度下降法还可以找到XOR问题的一些等价解,其收敛点取决于参数初始值。

3. 神经网络的学习

线性模型和神经网络的最大区别:NN的非线性导致大多数代价函数变得非凸。

NN的训练通常用迭代的、基于梯度的优化,仅仅使得代价函数达到一个非常小的值。凸优化问题我们总是很喜欢,任何一种初始参数出发都会收敛,都会到碗底来。然而,非凸损失函数的随机梯度下降没有收敛性保证,对参数初始值很敏感。FNN将所有权重值初始化为小随机数很重要,偏置初始化为0或小的正值。

从ML角度看,训练神经网络和训练其他模型并没有太大区别。

3.1 代价函数

使用最大似然学习条件分布:大多数现代的NN使用最大似然来训练。这意味着代价函数就是负对数似然,它与训练数据和模型分布间的交叉熵等价。其表示为:

这里写图片描述

学习条件统计量:仅仅想学习给定x时y的某个条件统计量。变分法,一是最小化均方误差代价函数,二是平均绝对误差代价函数。不再赘述。参见P155。

3.2 输出单元

讨论针对:输出层。假设FNN提供了一组定义为 h=f(x;θ) 的隐藏特征。

  • 用于高斯输出分布的线性单元

这里写图片描述

  • 用于伯努利输出分布的 sigmoid 单元

    这里写图片描述

  • 用于多项伯努利输出分布的 softmax 单元

这里写图片描述

这里写图片描述

4. 隐藏单元

隐藏单元的设计:活跃研究,尚无许多明确的指导性理论。

隐藏单元可能并不是在所有输入点上都可微的。例如ReLU在原点不可微。实践中梯度下降对ML模型仍然表现良好,部分原因是NN训练算法通常不会达到局部最小值,仅显著减小它的值。所以代价函数的最小值,对于那些梯度未定义的点来说仍是可以接受的。

大部分隐藏单元:接受输入向量 x ,仿射变换 z=WTx+b ,逐元素的非线性函数 g(z) 。区别:激活函数 g 的形式。

4.1 整流线性单元及其扩展

ReLU g(z)=max{0,z}

缺陷:ReLU不能通过基于梯度的方法,学习那些使它们激活为0的样本。(激活量 z 小于0时,函数值为0)

zi<0 时,使用非0斜率的三个扩展:

g(z,α)i=max(0,zi)+αimin(0,zi)

  • 绝对值整流: αi=1 g(x)=|z|
  • 渗漏(leaky)整流线性单元: αi=0.01 类似小值
  • 参数化整流线性单元: αi 作为学习的参数

进一步扩展:maxout单元

maxout单元将 z 划分为 i 个组,每组 k 个值。每个maxout单元输出每组中的最大元素:

g(z)i=maxjGizj

该法可学习对输入 x 空间中多个方向响应的分段线性凸函数,可多达 k 段。 k=2 时,可以学习ReLU(相当于每个单元里是{0,z})及其扩展。

每个maxout单元由 k 个权重向量来参数化。所以maxout单元通常比ReLU需要更多的正则化。

ReLU及其扩展基于一个原则:如果其行为更接近线性,则模型更容易优化。这样理解:线性模型优化有闭式解,非线性有的不可微,求导法就挂掉了。使用线性行为更容易优化的这个原则,适用于除深度线性网络以外的不少情景。

4.2 sigmoid与双曲正切函数

logistic sigmoid: g(z)=δ(x)

双曲正切: g(z)=tanh(z)=2δ(2z)1

sigmoid单元在大部分定义域内都饱和。不鼓励使用。双曲正切表现得更好一些。在 tanh(0)=0,δ(0)=12 的意义下,前者更像单位函数,0附近近似于 y=x ,网络激活很小时,则其作用与不作用一个样。

这里写图片描述

类似于训练一个线性模型

这里写图片描述

而我们喜欢线性模型。

sigmoid函数除了FNN外使用常见。RNN等由于某些原因不能使用分段线性激活函数。

4.3 其他

还有许多隐藏单元,但并不常用。只有被明确能够提供显著改进才会被发布。如果与已有的表现大致相当,则不会引起兴趣。