[DL_BOOK]深度学习 第六章 深度前向网络 [part1]

先记录一些相关的blog:
https://zybuluo.com/hanbingtao/note/581764

Deep Learning Book chpt 6
Deep Feedforward Network

简介

深度前向网络(Deep Feedforward network)通常也称为前向神经网络,或者多层感知机(MLPs),是很典型的(quintessential)深度学习模型。前向网络的目的是估计出一些函数 f ,比如分类器 y=f(x) ,就是将输入 x 映射到某个类别y

定义 前向网络定义了映射 y=f(x;θ) ,通过学习参数 θ 估计出最好的映射。
上述模型中的前向是指信息流从输入 x ,经过中间计算(f)后得到输出 y ,整个过程中不存在从输出到输入的反向连接。如果网络中带有反馈连接,则称之为递归神经网络(Recurrent neural network),后续会有介绍。

前向网络对于实践机器学习非常重要,是很多商业应用的基础。比如图像中的目标识别所用到的卷积网络就是前向网络的一种,自然语言处理应用中的递归网络也是以前向网络为基础的。

前向神经网络之所以称为网络,是因为它们通常有很多函数组成,可以参考有向无环图来理解。以三个函数f(1) f(2) f(3) 为例,神经网络的通用结构就是构建一条链,得到 f(x)=f(3)(f(2)(f(1)(x))) 。其中, f(1) 是网络的第一层 f(1) 第二层,以此类推。最后一层称为输出层,网络的深度就是链的长度。这也是术语“深度学习”的来源。网络训练的过程,实际就是 f(x) f(x) 逐步接近的过程。训练集是一系列点, (x,y) 。其中 x 用于估计 f(x) ,使得网络的输出尽可能的接近真值 y 。值得注意的是,真值只对输出进行监督,网络中间层的参数是靠学习算法来迭代更新的,所以中间的这些层可以认为是隐含层

实际上,每个隐含层都是一个向量,这些向量的维度决定了模型的宽度(width)。神经网络称呼的灵感来自于神经系统科学,所以上述向量的每个元素可以类比为一个个神经元。
神经网络
如上图(图片来源ufldl),每层都可以理解为向量到单个数值的映射。


注:个人觉得ufldl的wiki写的挺清楚的,可以参考读一下。


需要说明的是,神经网络并不是要建模人脑,只是建模一系列函数来近似达到统计上的普遍性规律。

一个理解前向网络的方式是从线性模型开始,并考虑如何克服线性模型的局限性。Logistic回归、线性回归都属于线性模型,它们能够有效、快速的拟合,无论是闭合解还是用凸优化的方式。当然了,线性模型的局限性也很明显,不能拟合非线性的情况,比如多个输入变量。为了提升线性模型的能力,我们可以用一个非线性的核(ϕ)对输入进行转换,从而得到一个非线性的学习算法。


注:非线性核实际上就是一个函数,比如SVM中的高斯核、径向基核等。


那么,问题来了,如何选择映射函数 ϕ 呢?
1. 选择非常通用的映射函数,如RBF核中隐含使用的无限维映射。理论上,只要 ϕ(x) 有足够高的维度,我们是有足够的能力去拟合训练集的,但是在测试集上的泛化能力就会非常弱。(注:也就是所谓的过拟合)
2. 人为选择映射函数,在深度学习之前,人们经常使用。针对不同的任务,人们都需要花费很大的经历来设定映射函数。比如语音识别和计算机视觉,映射函数可能完全不一样,而且它们基本无法相互转换。
3. 学习映射函数,这就是深度学习所采用的策略。在深度学习中,模型可以定义为 y=f(x;θ,w)=ϕ(x;θ)Tw 。通过参数 θ 从一系列函数中学习得到 ϕ ,而参数 w 则将ϕ(x)映射到我们想要的输出上,实际上, ϕ 是深度网络中的隐含层。

下面会从一个例子开始后续的介绍。

6.1 举例:学习异或XOR

这里从一个简单的任务开始,即学习异或函数。异或是逻辑运算中的概念,对于两个布尔值,当它们不一样的时候得到1,其他的情况为0。如下表:

x10011x20101x1x20110

假设异或的目标函数为 y=f(x) ,模型中提供的函数为 y=f(x;θ) ,那么学习算法的目的就是通过调整参数 θ 使得 f 与尽可能的与f接近。

在这个例子中,我们不关心统计上的普适性,只要求函数能够很好的拟合上述四个点,即这个问题的训练集 X={[0,0]T,[0,1]T,[1,0]T,[1,1]T} ,其对应的真值为 Y={0,1,1,0} ,与上表对应。可以用回归问题(regression)来拟合这个函数,为了简化问题,选择MSE(Mean Squared Error)作为损失函数,如下:

J(θ)=14xX(f(x)f(x;θ))2.

需要留意下, x 都是表示的向量。然后,我们要选择模型的形式,也就是目标函数,这里选择线性模型,如下:
f(x;w,b)=xTw+b.

建立好模型函数和损失函数后,可以通过最小化 J(θ) 求得参数 w=0 b=12


理解
最小化 J(θ) 是通过极大似然估计实现的,即对参数 w b 的偏导数为0。首先,Loss function为

J(θ)=J(w,b)=14xX(f(x)f(x;w,b))2=14xX(f(x)(xTw+b))2

那么极大似然估计的求解过程如下:

Jw=12xX[(f(x)(xTw+b))(xT)]=0Jb=12xX(f(x)(xTw+b))=0

将训练集 X 和真值 Y=f(x) 带入到上面两个公式中,便可求得 w=0 b=12 。顺便提一下, x w 都是向量,在计算的时候可以展开来表示, x=(x1,x2) w=(w1,w2)


很显然,线性函数无法拟合异或操作。如果还不能理解,可以把上述四个点在坐标系中呈现出来,就很明显的看出其不是线性可分的。要解决这个问题,可以用核函数把原始输入映射到另外一个线性可分的空间中。在神经网络中,通过隐含层来达到这一目的。如隐含层 h=f(1)(x;W,c) ,输出层 y=f(2)(h;w,b)

那么,问题来了,如何得到隐含层的函数 f(1) 呢?前面已经证明了线性函数是不能解决异或问题的,所以我们在神经网络中引入激活函数来实现非线性的变换,记 h=g(Wtx+c) 。通常使用的激活函数是ReLU(rectified Linear Unit),即 g(x)=max{0,x} 。我们下面用简单的例子说明网络正向传递的方式,如图
网络结构
图中, x 为输入(以(x1,x2)为例), h 表示中间层,y表示输出,激活函数在中间层 h=g(h) ,假设 h 是激活前的输出。则:

h1=W11x1+W21x2+c1h2=W12x1+W22x2+c2h1=g(h1)=max{0,h1}h2=g(h2)=max{0,h2}y=w1h1+w2h2+b

在原书中,给了一组特定的参数来说明上述的过程,这里就不说明了。在实际运算中,参数有很多,需要通过梯度下降的方式逐步的求得最优的解。

6.2 梯度学习方法

神经网络的训练过程跟其他学习方法并没有太大的区别,都是基于梯度下降的,无外乎代价函数、优化的过程以及一系列模型函数。但是,有个关键的区别需要说明,即神经网络的损失函数是非凸的。而线性回归、SVM等属于凸优化,理论上是都能找到最优解的。而神经网络的训练优化是需要通过迭代逐步的找到最优解(实际上,是否是最优解也不太确定),这个过程是通过随即梯度下降(SGD,Stochastic Gradient Descent)来完成的,所有的参数在开始都是随机初始化的。这些在后续会有详细的说明,我们先来一层层的剖析神经网络。

6.2.1 代价函数

大部分情况下,参数模型定义了一个分布 p(y|x;θ) ,然后用极大似然求解。也就是说,我们可以把训练数据与预测结果之间的交叉熵作为代价函数。通常,代价函数还会加上正则项,正则项的目的是为了对参数做进一步的约束。(具体的意义还未完全理解。

6.2.1.1 条件分布的学习

6.2.2 输出单元

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值