先记录一些相关的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)。神经网络称呼的灵感来自于神经系统科学,所以上述向量的每个元素可以类比为一个个神经元。
[DL_BOOK]深度学习 第六章 深度前向网络 [part1]
如上图(图片来源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=0b=12


理解
最小化J(θ)是通过极大似然估计实现的,即对参数wb的偏导数为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=0b=12。顺便提一下,xw都是向量,在计算的时候可以展开来表示,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}。我们下面用简单的例子说明网络正向传递的方式,如图
[DL_BOOK]深度学习 第六章 深度前向网络 [part1]
图中,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 输出单元

相关文章:

  • 2021-10-27
  • 2021-12-25
  • 2021-09-19
  • 2021-04-03
  • 2021-09-29
  • 2021-05-28
  • 2021-11-19
  • 2021-07-11
猜你喜欢
  • 2022-12-23
  • 2022-01-07
  • 2021-09-05
  • 2021-09-28
  • 2021-04-07
  • 2021-11-07
  • 2021-11-04
相关资源
相似解决方案