先记录一些相关的blog:
https://zybuluo.com/hanbingtao/note/581764
Deep Learning Book chpt 6
Deep Feedforward Network
简介
深度前向网络(Deep Feedforward network)通常也称为前向神经网络,或者多层感知机(MLPs),是很典型的(quintessential)深度学习模型。前向网络的目的是估计出一些函数
定义 前向网络定义了映射
上述模型中的前向是指信息流从输入
前向网络对于实践机器学习非常重要,是很多商业应用的基础。比如图像中的目标识别所用到的卷积网络就是前向网络的一种,自然语言处理应用中的递归网络也是以前向网络为基础的。
前向神经网络之所以称为网络,是因为它们通常有很多函数组成,可以参考有向无环图来理解。以三个函数
实际上,每个隐含层都是一个向量,这些向量的维度决定了模型的宽度(width)。神经网络称呼的灵感来自于神经系统科学,所以上述向量的每个元素可以类比为一个个神经元。
如上图(图片来源ufldl),每层都可以理解为向量到单个数值的映射。
注:个人觉得ufldl的wiki写的挺清楚的,可以参考读一下。
需要说明的是,神经网络并不是要建模人脑,只是建模一系列函数来近似达到统计上的普遍性规律。
一个理解前向网络的方式是从线性模型开始,并考虑如何克服线性模型的局限性。Logistic回归、线性回归都属于线性模型,它们能够有效、快速的拟合,无论是闭合解还是用凸优化的方式。当然了,线性模型的局限性也很明显,不能拟合非线性的情况,比如多个输入变量。为了提升线性模型的能力,我们可以用一个非线性的核(
注:非线性核实际上就是一个函数,比如SVM中的高斯核、径向基核等。
那么,问题来了,如何选择映射函数
1. 选择非常通用的映射函数,如RBF核中隐含使用的无限维映射。理论上,只要
2. 人为选择映射函数,在深度学习之前,人们经常使用。针对不同的任务,人们都需要花费很大的经历来设定映射函数。比如语音识别和计算机视觉,映射函数可能完全不一样,而且它们基本无法相互转换。
3. 学习映射函数,这就是深度学习所采用的策略。在深度学习中,模型可以定义为
下面会从一个例子开始后续的介绍。
6.1 举例:学习异或XOR
这里从一个简单的任务开始,即学习异或函数。异或是逻辑运算中的概念,对于两个布尔值,当它们不一样的时候得到1,其他的情况为0。如下表:
假设异或的目标函数为
在这个例子中,我们不关心统计上的普适性,只要求函数能够很好的拟合上述四个点,即这个问题的训练集
需要留意下,
建立好模型函数和损失函数后,可以通过最小化
理解
最小化
那么极大似然估计的求解过程如下:
将训练集
很显然,线性函数无法拟合异或操作。如果还不能理解,可以把上述四个点在坐标系中呈现出来,就很明显的看出其不是线性可分的。要解决这个问题,可以用核函数把原始输入映射到另外一个线性可分的空间中。在神经网络中,通过隐含层来达到这一目的。如隐含层
那么,问题来了,如何得到隐含层的函数
图中,
在原书中,给了一组特定的参数来说明上述的过程,这里就不说明了。在实际运算中,参数有很多,需要通过梯度下降的方式逐步的求得最优的解。
6.2 梯度学习方法
神经网络的训练过程跟其他学习方法并没有太大的区别,都是基于梯度下降的,无外乎代价函数、优化的过程以及一系列模型函数。但是,有个关键的区别需要说明,即神经网络的损失函数是非凸的。而线性回归、SVM等属于凸优化,理论上是都能找到最优解的。而神经网络的训练优化是需要通过迭代逐步的找到最优解(实际上,是否是最优解也不太确定),这个过程是通过随即梯度下降(SGD,Stochastic Gradient Descent)来完成的,所有的参数在开始都是随机初始化的。这些在后续会有详细的说明,我们先来一层层的剖析神经网络。
6.2.1 代价函数
大部分情况下,参数模型定义了一个分布