第六章 深度前馈网络
文章目录
定义:模型的输出和模型本身之间没有反馈连接。(例如LSTM就包含反馈连接)
特点:深度学习中使用了非线性函数来描述特征,放弃了训练问题的凸性,但是可以在一个非常广泛的函数族里搜索,并且可以通过将知识编码进网络来帮助泛化。
- 非凸性导致随机梯度下降没有全局收敛性的保证,并且对参数的初始值很敏感。
代价函数
大多数神经网络使用最大似然来训练,即负的对数似然,与训练数据和模型分布间的交叉熵等价。
J
(
θ
)
=
−
E
x
,
y
∼
p
^
d
a
t
a
l
o
g
p
m
o
d
e
l
(
y
∣
x
)
J(\theta)=-\mathbb{E}_{x,y\sim \hat{p}_{data}}log\space p_{model}(y|x)
J(θ)=−Ex,y∼p^datalog pmodel(y∣x)
-
如果 p ^ m o d e l ( y ∣ x ) = N ( y ; f ( x ; θ ) , I ) \hat{p}_{model}(y|x)=\mathcal{N}(y;f(x;\theta),I) p^model(y∣x)=N(y;f(x;θ),I), 那么最大似然等价于均方误差代价。这种等价性并不要求 f ( x ; θ ) f(x;\theta) f(x;θ)用于预测高斯分布的均值。
J ( θ ) = 1 2 E x , y ∼ p ^ d a t a ∣ ∣ y − f ( x ; θ ) ∣ ∣ 2 + c o n s t J(\theta)=\frac{1}{2}\mathbb{E}_{x,y\sim\hat{p}_{data}}||y-f(x;\theta)||^2+const J(θ)=21Ex,y∼p^data∣∣y−f(x;θ)∣∣2+const -
优点:很多输出单元都会包含指数函数,负的对数似然帮助我们避免其在取绝对值非常大的负值时饱和。
输出单元
线性输出层
线性输出层用来产生条件高斯分布的均值,此时最大化其对数似然等价于最小化均方误差。同时,线性单元不会饱和,易于采用基于梯度的优化算法。
y
^
=
W
T
h
+
b
p
(
y
∣
x
)
=
N
(
y
;
y
^
,
I
)
\hat{y}=W^Th+b\\ p(y|x)=\mathcal{N}(y;\hat{y},I)
y^=WTh+bp(y∣x)=N(y;y^,I)
(
y
^
\hat{y}
y^为高斯分布的均值)
Sigmoid单元(二分类问题)
Softmax单元(多分类问题)
-
表示一个具有n个可能取值的离散型随机变量的分布时,可以用 s o f t m a x softmax softmax函数。
-
为解决 y ^ = P ( y = 1 ∣ x ) \hat{y}=P(y=1|x) y^=P(y=1∣x)这种问题,需要预测 z = l o g P ^ ( y = 1 ∣ x ) z=log\hat{P}(y=1|x) z=logP^(y=1∣x),再将其指数化和归一化。
z = W T h + b s o f t m a x ( z ) i = e x p ( z i ) ∑ j e x p ( z j ) z=W^Th+b\\ softmax(z)_i=\frac{exp(z_i)}{\sum_jexp(z_j)} z=WTh+bsoftmax(z)i=∑jexp(zj)exp(zi)
-
对数似然中的 l o g log log抵消了 s o f t m a x softmax softmax中的 e x p exp exp
l o g s o f t m a x ( z ) i = z i − l o g ∑ j e x p ( z j ) log\space softmax(z)_i=z_i-log\sum_jexp(z_j) log softmax(z)i=zi−logj∑exp(zj)- 从式子中可以看出,输入 z i z_i zi总是对代价函数有直接的贡献,因为其不会饱和。
- 第二项可以大致近似为 m a x j z j max_j z_j maxjzj,因此可以感受到,负对数似然代价函数总是强烈地惩罚最活跃的不正确预测。如果正确答案已经具有了 s o f t m a x softmax softmax的最大输入,那么结果第一项和第二项将大致抵消,这样这个样本对于整体训练代价的贡献就会很小。
-
如果不使用对数损失函数来抵消 s o f t m a x softmax softmax中的指数,那么当指数函数的变量取非常小的负值时会造成梯度消失。
-
数值方法稳定的 s o f t m a x softmax softmax函数的变体:
s o f t m a x ( z ) = s o f t m a x ( z − m a x z i ) softmax(z)=softmax(z-max\space z_i) softmax(z)=softmax(z−max zi) -
过度参数化:
我们知道n个输出的总和必须为1,因此只有n-1个参数是必要的。可以通过强制要求 z z z的一个元素是固定的,例如要求 z n = 0 z_n=0 zn=0。不过实践中是否进行这个操作没太大影响。
-
s o f t m a x softmax softmax更接近于 a r g m a x argmax argmax而非 m a x max max,是 a r g m a x argmax argmax的软化版本( a r g m a x argmax argmax不连续,不可微; s o f t m a x softmax softmax连续,可微)
其他输出类型
见书P117
隐藏单元
隐藏单元可能并不是在所有输入点上都可微,通常神经网络训练的软件在实现时会返回其左导数或右导数。这样做是因为通常输入为0时只是被舍入为0,而且我们不期望训练真的能达到梯度为0的点,只要足够接近就可以了。
整流线性单元及其扩展(RELU)
g ( z ) = m a x { 0 , z } g(z)=max\{0,z\} g(z)=max{0,z}
- 特点:
- 优点:只要RELU处于激活状态,其导数就能保持较大(处处为1),且二阶导处处为0。
- 缺点:不能通过基于梯度的方法学习那些使他们激活为零的样本。
- 扩展(P120)
- 绝对值整流
- 渗透整流线性单元
- 参数化整流线性单元
- m a x o u t maxout maxout单元
logistic sigmoid与双曲正切函数
sigmoid函数
- 只有当 z z z接近0时才对输入敏感,大多数情况会饱和(梯度消失),通常不在前馈网络中使用
- 在循环网络、许多概率模型以及一些自编码器中因为额外的要求不得不使用。
双曲正切函数
- 比sigmoid表现好,在0附近与单位函数类似。
其他隐藏单元
P122
可以通过不使用线性函数,使用低秩关系连接两个矩阵,减少参数量。
架构设计
万能近似性质和深度
-
万能近似定理:一个前馈神经网络如果具有线性输出层和至少一层具有任何一种“挤压”性质的激活函数的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意的精度来近似任何从一个有限维空间到另一个有限维空间的Borel可测函数。
- 注:这里说的是一个足够大的MLP一定能够表示这个函数,但我们不能保证训练算法能够学到这个函数。
-
在很多情况下,使用更深的模型能够减少表示期望函数所需的单元的数量,并且可以减少泛化误差
- 一个深度整流网络能够描述的线性区域的数量是深度的指数级
-
跳跃连接:能够使梯度更容易从输出层流向更接近输入的层。
-
稀疏连接:减少参数数量和计算量,高度依赖于问题。
反向传播
- 计算图
- 链式法则
P129(主要在讲如何计算,被我跳过了)