【深度学习(deep learning)】花书第六章 深度前馈网络 读书笔记

【深度学习(deep learning)】花书第六章 深度前馈网络 读书笔记


前言

打基础,阅读花书,感觉一次性啃不动。看一点算一点,写一点笔记留作纪念。以便日后查看与回顾。前面一部分基本在啃西瓜书的过程中看过了,直接从前馈网络开始再次记笔记。2020.11.18-2020.11.21

以下是正式内容。

一、基本概念

1.深度前馈网络(DFN) = 前馈神经网络(FNN)= 多层感知机(MLP)
2.目标:对于样本x,有函数 f* 将输入x映射到类别y,前馈网络定义了函数f(x,θ),通过学习参数θ,尽可能地去近似最佳得映射函数 f* 。
前向/前馈(feedforward):信息通过x输入,流经中间计算过程,最终到达输出y(有向),输出与模型间没有反馈链接无环)。如果存在反馈,则称为循环神经网络。
4.网络:有向无环图,通过层间的连接,使得函数复合在一起。复合链的长度就是深度。输入层(第一层)+ 隐层 + 输出层(输出函数,产生标签)。
5.神经:受神经科学启发,每个层由许多单元(神经元)组成。神经元接受输入,包含参数/阈值/激活函数,产生输出,传递给其他单元。

二、设计神经网络

一般地,机器学习算法(包含深度学习)可以描述为:特定的数据集+代价函数+优化过程+模型。
代价函数在网络设计中影响两个方面:代价函数的选择,输出单元的选择。
优化过程是网络的训练过程,基本上也是基于梯度的学习过程。
网络设计中独有的关键环节是隐藏单元的选择与架构设计。

2.1 输出单元

输出单元决定了输出的表示形式,也决定了代价函数的形式。理论上,输出单元的函数都可以用于隐藏单元。输出单元接受的输入为h,可以看作数据x经过多层处理之后得到的隐藏特征。

2.1.1 线性单元

用于高斯分布,基于仿射变换(也就是一种线性的变换)。拟合的是高斯分布的均值。线性单元对于协方差不易满足正定的条件。

仿射变换 通俗理解就是 线性变换+平移 ,线性变换即矩阵W,平移即偏置项b
https://www.zhihu.com/question/20666664

对于给定的h,产生输出:
y ^   =   W T h + b \boldsymbol{\hat{y}\ }=\ \boldsymbol{W}^{T}\boldsymbol{h}+\boldsymbol{b} y^ = WTh+b

2.1.2 sigmoid单元(二分类)

用于Bernoulli分布,即二元分类(只有一个参数控制)。拟合的是正类的概率 P(y=1|x)。包含线性计算单元与sigmoid激活函数σ(将结果转化成概率)。
y ^   =   σ ( w T h + b ) \boldsymbol{\hat{y}\ }=\ \sigma(\boldsymbol{w}^{T}\boldsymbol{h}+\boldsymbol{b}) y^ = σ(wTh+b) σ ( z ) = 1 1 + e − z \sigma(z)= \frac {1}{1+e^{-z}} σ(z)=1+ez1
sigmoid

图来自百度百科
https://baike.baidu.com/item/Sigmoid%E5%87%BD%E6%95%B0/7981407

则: P ( y = 1 ) = σ ( z ) P(y = 1) = \sigma (z) P(y=1)=σ(z) P ( y = 0 ) = 1 − σ ( z ) = σ ( − z ) P(y = 0) = 1-\sigma (z) = \sigma (-z) P(y=0)=1σ(z)=σ(z)
整合为: P ( y ) = σ ( ( 2 y − 1 ) z ) P(y) = \sigma ((2y-1)z) P(y)=σ((2y1)z)

2.1.3 softmax单元(多分类)

用于multibouli分布(多分类任务),使用softmax函数,是sigmoid函数的扩展,相当于一个软性的argmax函数。这一单元可以在模型内部使用(隐层中)。使用一个向量y表示,yi = P(y = i | x),y的每一个分量都在0-1之间,且和为1.
线性层计算一个对数概率(一种带有概率的意义的变量,又不符合概率定义,但是可以利用指数进行归一化): z =   W T h + b \boldsymbol{z }=\ \boldsymbol{W}^{T}\boldsymbol{h}+\boldsymbol{b} z= WTh+b z i = l o g P ^ ( y = i ∣ x ) z_i=log\hat{P}(y =i|\boldsymbol{x}) zi=logP^(y=ix)
使用softmax函数进行归一化
s o f t m a x ( z ) i = e z i ∑ j e z j softmax(\boldsymbol z)_i =\frac {e^{z_i}} {\sum_j{e^{z_j}}} softmax(z)i=jezjezi

2.2 代价函数

2.2.1 均方误差

最小化均方误差:
J ( θ ) =   1 2 m ∑ m ( g ( z ) − y ) 2 J\left( \theta \right) =\ \frac{1}{2m}\sum_m{\left( g\left( z \right) -y \right)}^2 J(θ)= 2m1m(g(z)y)2

梯度(单个样本): ∂ J ( θ ) ∂ z = ( g ( z ) − y ) g ′ ( z ) \frac{\partial J\left( \theta \right)}{\partial z}=\left( g\left( z \right) -y \right) g'\left( z \right) zJ(θ)=(g(z)y)g(z)
sigmiod函数在z趋于无穷的时候(导数)饱和到0.
softmax函数具有多个输出值,在输入值之间的差异变得极端时,会饱和。
如果是线性函数(线性单元/relu),就不会产生饱和。

2.2.2 最大似然函数代价

当参数模型定义为概率分布时,可以使用最大似然估计(最大化),代价函数就是负的对数似然(最小化),且与训练数据与模型分布间的交叉熵等价。根据输出形式的不同,代价函数由不同的形式。
使用负对数的形式,可以消除输出单元/激活函数中的指数形式带来的饱和问题(趋于无穷时,导数变化很小)

一般形式(最小化):
J ( θ ) = − E x , y ∼ p ^ d a t a log ⁡    p m o d e l ( y ∣ x ) J\left( \theta \right) =-\mathbb{E}_{\mathbf{x,y}\sim \hat{p}_{data}}\log\text{\,\,}p_{model}\left( \boldsymbol{y|x} \right) J(θ)=Ex,yp^datalogpmodel(yx)

2.2.2.1 线性输出

模型为高斯分布,最大似然估计等价于均方误差代价。
J ( θ ) = E x , y ∼ p ^ d a t a ∥ y − f ( x   ; θ ) ∥ 2 J\left( \theta \right) =\mathbb{E}_{\mathbf{x,y}\sim \hat{p}_{data}}\lVert \boldsymbol{y}-f\left( \boldsymbol{x\ ;\theta } \right) \rVert ^2 J(θ)=Ex,yp^datayf(x ;θ)2
线性单元不会饱和,易于使用基于梯度的优化算法。

2.2.2.2 sigmoid输出

模型为:(Bernoulli 分布) P ( y ) = σ ( ( 2 y − 1 ) z ) P(y) = \sigma ((2y-1)z) P(y)=σ((2y1)z)
则代价函数为: J ( θ ) = − log ⁡   P ( y ∣ x )   = − log ⁡   σ ( ( 2 y − 1 ) z ) = ζ ( ( 1 − 2 y ) z ) J\left( \theta \right) =-\log\text{\ }P\left( y|\boldsymbol{x} \right) \ =-\log\text{\ }\sigma \left( \left( 2y-1 \right) z \right) =\zeta \left( \left( 1-2y \right) z \right) J(θ)=log P(yx) =log σ((2y1)z)=ζ((12y)z)
其中,softplus函数为:
ζ ( x ) = log ⁡ ( 1 + e x ) \zeta(x)=\log (1+e^x) ζ(x)=log(1+ex)满足性质(花书3.10节,公式3.36) log ⁡ σ ( x ) = − ζ ( − x ) \log \sigma(x)=-\zeta(-x) logσ(x)=ζ(x)
这一形式只有在(1-2y)z取绝对值特别大的负数(特别小的负数)时才会饱和(导数趋于0).softplus函数图像如下(来自花书):
softplus
这种饱和的趋势,只有在趋近“正确”答案时才会出现。当y=1(正类),z为非常大的正值(正向预测)。当y=0(负类),z为非常小的负值(负向预测)。
当预测错误时,softplus约等于|z|,导数为z的符号,梯度不会消失。

2.2.2.3 softmax输出

最小化目标:
log ⁡   P ( y = i ; z ) =   log ⁡  soft max ⁡ ( z ) i \log\text{\ }P\left( y=i;\boldsymbol{z} \right) =\ \log\text{\ soft}\max \left( \boldsymbol{z} \right) _i log P(y=i;z)= log softmax(z)i log ⁡ s o f t m a x ( z ) i = z i − log ⁡ ∑ j e z j \log softmax(\boldsymbol z)_i =z_i-\log {\sum_j{e^{z_j}}} logsoftmax(z)i=zilogjezj第一项不会饱和,第二项近似为max zj。
关于第二项:如果正确预测具有最大的输入(j=i),那么前后会抵消,这个样本产生的代价就很小。如果最大输入项为错误项,那么代价可以看作当前一项与最大项之间的差,会产生代价(惩罚最活跃的不正确项)。

2.2.3 平均绝对误差

平均绝对误差

2.3 隐藏单元

一般来说,整流线性单元(reLU)是很好的默认选择。
输入为向量x,进行仿射变换得到z,再使用一个非线性函数g(z)。隐藏单元的区别在于激活函数g(z)不同。
增加激活函数,添加非线性变化,是为了增强模型处理非线性问题的能力。不然不论线性函数复合多少层,依旧是线性函数。

2.3.1 整流线性单元(ReLU)

ReLU ( z ) = max ⁡ { 0 , z } = max ⁡ { 0 , w T x + b } \text{ReLU}\left( z \right) =\max \left\{ 0,z \right\} =\max \left\{ 0,\boldsymbol{w}^{T}\boldsymbol{x}+b \right\} ReLU(z)=max{0,z}=max{0,wTx+b}
relu函数

图片来自花书

位于z部分属于激活状态,梯度保持为1.但是对于无法激活的样本,无法产生梯度。
初始阶段,可以将b设置为一个较小的正值,使得大多数输入时激活状态。

ReLU的扩展:对于不激活的部分使用一个非零的斜率α。
ReLU ( z , α ) = max ⁡ { 0 , z } + α min ⁡ { 0 , z } \text{ReLU}\left( z,\alpha \right) =\max \left\{ 0,z \right\} +\alpha \min \left\{ 0,z \right\} ReLU(z,α)=max{0,z}+αmin{0,z}

  • 绝对值整流:α=1,则relu = |z|。
  • 渗漏整流线性单元:α固定为一个很小的值,如0.001。
  • 参数化整流线性单元 PReLU:将α设置成学习的参数。

2.3.2 maxout 单元

整流线性单元的进一步扩展。
将z分成多个组,每组具有k个值,G表示分组的索引,maxout单元返回每组中的最大元素。第i组: g ( z ) i = max ⁡ j ∈ G ( i )   z j g\left( \boldsymbol{z} \right) _i=\underset{j\in \mathbb{G}^{\left( i \right)}}{\max}\ z_j g(z)i=jG(i)max zj
k是人为设定的,利用k可以使用maxout分段拟合任何凸函数。每个maxout单元需要k个权重向量,所以需要更强的正则化。

2.3.3 sigmoid函数

σ ( z ) = 1 1 + e − z \sigma(z)= \frac {1}{1+e^{-z}} σ(z)=1+ez1
sigmoid函数在大部分定义域内都是饱和的,只有在0附近才是敏感的。这种饱和特性会使梯度消失。所以这种函数在隐藏单元不再常用。
sigmoid函数在一些不能使用分段激活函数的网络(循环网络/概率模型/自编码器等)中还是常见的。

2.3.4 双曲正切函数(tanh)

g ( z ) =   tan ⁡ h ( z ) g\left( z \right) =\ \tan\text{h}\left( z \right) g(z)= tanh(z)
tanh
tanh

图与公式来自百度百科。https://baike.baidu.com/item/%E5%8F%8C%E6%9B%B2%E6%AD%A3%E5%88%87/3194837?fromtitle=tanh&fromid=19711736

tanh函数与sigmoid函数有关系:
tan ⁡ h ( z ) = 2 σ ( 2 z ) − 1 \tan\text{h}\left( z \right) =2\sigma \left( 2z \right) -1 tanh(z)=2σ(2z)1
tanh比sigmoid表现得更好一点。tanh(0)=0,tanh是过原点的,且在原点附近时与单位函数类似,所以在激活区间保持在0附近时,tanh训练比较容易。但是tanh同样存在严重的饱和问题。

一开始,我也不知道单位函数是什么。但是在介绍其他隐藏单元时作者提到了,不加激活函数相当于使用单位函数当作激活函数。那么应该单位函数就是x本身,即 y=x。

2.3.5 其他隐藏单元

还有其他隐藏单元,但是不常用(不好用)。
理论上,可微函数都可以用作激活函数,且表现很好。介绍的都是一些特别有用和特别特别的。

2.3.5.1 没有激活函数(线性激活函数/单位函数)

直接将仿射变换当作激活函数,或者时经过仿射变换后将单位函数当作激活函数。可以在局部使用,以减少参数。

2.3.5.2 softmax函数

有时候可以用。10.12节。

2.3.5.3 径向基函数(RBF)

大部分情况会饱和,很难优化。
h i = e − 1 σ i 2 ∥ W : , i − x ∥ 2 h_i=e^{-\frac{1}{\sigma _{i}^{2}}\lVert \boldsymbol{W}_{:,i}-\boldsymbol{x} \rVert ^2} hi=eσi21W:,ix2

2.3.5.4 softplus函数

软化的relu函数。但是表现并不如relu。

2.3.5.5 硬双曲正切函数

g ( a ) = max ⁡ ( − 1 , min ⁡ ( 1 , a ) ) g\left( a \right) =\max \left( -1,\min \left( 1,a \right) \right) g(a)=max(1,min(1,a))

2.4 架构设计

架构指网络的整体结构:神经元的数量与拓扑链接等。将单元组成层,大多数网络又是将层按照链式结构排列。

2.4.1 链式结构

在链式结构中,要考虑到网络的深度(链的长度)与每一层的宽度。深度越深,拟合能力越强,泛化能力也越强,每一层的宽度越小/参数越少,但是约难以训练。
万能近似定理:包含一层具有足够多神经元(带激活函数)的隐层的神经网络可以以任意精度模拟任何一个连续函数。即MLP可以表示任何函数,但是不能保证训练算法能学到这个函数。而且网络层通常会很大(指数级)。

2.4.2 其他架构

  1. 不同特定的任务可能需要不同的架构。
    比如:在主链中添加跳跃链接。
  2. 另一个考虑是,层间的链接。默认情况下,层间的链接是线性变化,层间链接上附带一个权重系数,这种链接一般情况下是全连接。但是在特殊结构中可以使用局部全连接,或者系数链接。

三、反向传播训练算法

信息由输入的x到最终的预测y的传递过程是前向传播。反向传播指代价函数的信息通过网络向后流动,以梯度的形式。梯度是可以通过解析表达式获得的,但是按照解析表达式计算开销大。反向传播是计算梯度的算法,而基于梯度的随机梯度下降等算法是用于训练网络的算法。

3.1 计算图

用图形表示一个网络。

  • 节点:表示一个变量(标量/向量/矩阵/张量/其他变量)
  • 操作:一个或多个变量的简单函数。通过将多个操作复合在一起描述更复杂的函数。一个操作仅返回单个输出变量。
  • 边:用一条边从输入节点指向输出节点,边上写明操作。
    操作图1
  • a: z = xy
    操作图2
  • H=relu(WX+b),u1代表WX这个中间结果,u2代表WX+b的中间结果

3.2 链式法则与反向传播

反向传播的本质是链式法则下导数的计算。
链式法则:
d z d x = d z d y d y d x \frac{dz}{dx}=\frac{dz}{dy}\frac{dy}{dx} dxdz=dydzdxdy
在计算张量/向量形式的梯度时,简单的链式法则会导致重复的表达式计算,造成计算的浪费。反向传播结合动态规划的思想,对链式法则的计算过程进行了改进,以一定量的存储提升速度。
正向传播与反向传播的图示:
正向传播与反向传播

3.3 全连接MLP中的反向传播

符号定义:每一层接收的输入hk-1,权重矩阵W,偏置项b,中间变量a,这一层的输出hk,输出预测y,代价函数J,正则化Ω,上一轮保留的梯度g
正向过程:
h ( k − 1 ) → a ( k ) ( a ( k ) = W ( k ) h ( k − 1 ) + b ( k ) ) \boldsymbol{h}^{\left( k-1 \right)}\rightarrow \boldsymbol{a}^{\left( k \right)}\left( \boldsymbol{a}^{\left( k \right)}=\boldsymbol{W}^{\left( k \right)}\boldsymbol{h}^{\left( k-1 \right)}+\boldsymbol{b}^{\left( k \right)} \right) h(k1)a(k)(a(k)=W(k)h(k1)+b(k)) a ( k ) → h ( k ) ( h ( k ) = f ( a ( k ) ) ) \boldsymbol{a}^{\left( k \right)} \rightarrow \boldsymbol{h}^{\left( k \right)}\left( \boldsymbol{h}^{\left( k \right)}=f\left( \boldsymbol{a}^{\left( k \right)} \right) \right) a(k)h(k)(h(k)=f(a(k))) → y ^ → J ( J = L ( y ^ , y ) + λ Ω ( θ ) ) \rightarrow \boldsymbol{\hat{y}}\rightarrow J\left( J=L\left( \boldsymbol{\hat{y},y} \right) +\lambda \varOmega \left( \theta \right) \right) y^J(J=L(y^,y)+λΩ(θ))
反向传播:
J → y ^   ,   g = ∂ J ∂ y ^ = ∂ L ( y ^ , y ) ∂ y ^ J\rightarrow \hat{y}\ ,\ g=\frac{\partial J}{\partial \hat{y}}=\frac{\partial L(\hat{y},y)}{\partial \hat{y}} Jy^ , g=y^J=y^L(y^,y) y ^ ( h ( l ) ) → a ,    g = ∂ J ∂ a ← g ⊙ ∂ h ∂ a = g ⊙ f ′ ( a ) \hat{y}\left( h^{\left( l \right)} \right) \rightarrow a,\,\,g=\frac{\partial J}{\partial a}\gets g\odot \frac{\partial h}{\partial a}=g\odot f'\left( a \right) y^(h(l))a,g=aJgah=gf(a)
a由三个变量组成,分别传播
a → W ,    ∂ J ∂ W = ∂ L ∂ W + λ ∂ Ω ∂ W = g ∂ a ∂ W + λ ∂ Ω ∂ W = g h ( k − 1 ) T + λ ∂ Ω ∂ W a\rightarrow W,\,\,\frac{\partial J}{\partial W}=\frac{\partial L}{\partial W}+\lambda \frac{\partial \varOmega}{\partial W}=g\frac{\partial a}{\partial W}+\lambda \frac{\partial \varOmega}{\partial W} =gh^{\left( k-1 \right)T}+\lambda \frac{\partial \varOmega}{\partial W} aW,WJ=WL+λWΩ=gWa+λWΩ=gh(k1)T+λWΩ a → b ,    ∂ J ∂ b = ∂ L ∂ b + λ ∂ Ω ∂ b = g ∂ a ∂ b + λ ∂ Ω ∂ b = g + λ ∂ Ω ∂ b a\rightarrow b,\,\,\frac{\partial J}{\partial b}=\frac{\partial L}{\partial b}+\lambda \frac{\partial \varOmega}{\partial b}=g\frac{\partial a}{\partial b}+\lambda \frac{\partial \varOmega}{\partial b} =g+\lambda \frac{\partial \varOmega}{\partial b} ab,bJ=bL+λbΩ=gba+λbΩ=g+λbΩ a → h ,    g = ∂ J ∂ h = ∂ L ∂ h   ← g ∂ a ∂ h = W ( k ) T g a\rightarrow h,\,\,g=\frac{\partial J}{\partial h}=\frac{\partial L}{\partial h}\ \gets g\frac{\partial a}{\partial h}=W^{\left( k \right) T}g ah,g=hJ=hL gha=W(k)Tg
注意到,只有在传播的主干路径上,g才会被更新(y,h,a,h,a……),而枝干路径上,只是利用g计算,不更新g(W,b)。

构造导数的计算图(图来自花书):
反向传播的计算图

参考资料

1.机器学习,周志华
2.统计学习方法,第二版,李航
3.https://zhuanlan.zhihu.com/p/38431213
4.https://github.com/MingchaoZhu/DeepLearning
5.https://www.bilibili.com/video/BV1kE4119726?p=5&t=1340
6.https://blog.csdn.net/a790209714/article/details/78440223
7.https://www.cnblogs.com/missidiot/p/9378079.html

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值