深度前馈网络(DFN)
0 简介
(1)DFN:深度前馈网络,或前馈神经网络(FFN),或多层感知机(MLP)
(2)目标
近似某个函数 。例如,定义一个映射 ,并且学习 的值,使它能够得到最佳的函数近似。
(3)神经网络
直观理解:为了实现统计泛化(测试)而设计出的函数近似机。从 到 的确定性映射并且没有反馈连接,与大脑没有必然联系。
基于线性模型理解神经网络:简单快捷如逻辑回归和线性回归,但是无法理解输入变量间的相互作用。只能描绘一部分相对简单的神经网络
基于非线性模型理解神经网络:定义一个 映射为非线性变换(理解为隐藏层的激活函数),选择 有三种方法,①使用一个通用的 ,维数过高,常常导致过拟合;②手动设计 ,在深度学习出现之前,这是一个主流的方法,需要有足够的行业精英而且难以迁移;③让深度学习去学习 ,只需要使用一种广义的函数族
(4)其他
前馈网络实例:卷积神经网络
前馈网络扩展成包含反馈连接时称为循环神经网络:自然语言处理
一个疑问:前馈网络中是包含反向传播的,与是否有反馈连接没有关系。
1 实例:异或问题(XOR)
(1)问题描述:
异或逻辑是两个二进制 和 之间的运算,当这些二进制值中恰好有一个为1时,异或逻辑返回1;其余情况返回0。
(2)线性模型实现:
①视为回归问题:
②损失函数,均方误差MSE:
③结果,线性模型在任一点均输出0.5
线性模型中各变量的参数固定,不能通过一个变量改变另外一个变量,所以线性模型无法解决异或问题
(3)非线性模型实现:
结构:两个输入,一个隐藏层,一个输出:
其中RELU函数是被推荐用于大多数前馈神经网络的默认的激活函数
2 基于梯度的学习
(1)为什么要进行基于梯度的学习:
实际情况下,训练样本和参数都是十分庞大的,猜解不可能得到应用,基于梯度的优化算法可以找到一些参数使得产生的误差非常小。
(2)概要:
凸优化从任何一种初始参数出发都会收敛,对于前馈神经网络,将所有的权重值初始化为小的随机数是很重要的。偏置可以初始化为零或者小的正值。训练方法大部分总是基于使用梯度来使得代价函数下降的各种方法。**我们当然也可以用梯度下降来训练诸如线性回归和支持向量机之类的模型,并且事实上当训练集相当大的时候这是很常用的。
(3)代价函数
在大多数情况下,参数模型定义了一个条件分布并且使用最大似然原理(已知结果,关注细节),这意味着我们使用训练数据和模型之间的交叉熵作为代价函数。
用于训练神经网络的完整的代价函数,通常在我们这里描述的基本的代价函数的基础上结合一个正则项,防止过拟合。
①使用最大似然学习条件分布:
简介:学习完整的概率分布
优势:减轻了为每个模型设计代价函数的负担,明确一个模型 则自动地确定了一个代价函数 。
要求:贯穿神经网络设计反复出现的一个主题是代价函数的梯度必须足够的大和具有足够的预测性,来为学习算法提供一个好的指引。很多输出单元都会包含一个指数函数,这在它的变量取绝对值非常大的负值时会造成饱和。负对数似然代价函数中的对数函数消除了某些输出单元中的指数效果。
特性:用于实现最大似然的交叉熵代价函数有一个不同寻常的特性,那就是当它被应用于实践中经常遇到的模型时,它通常没有最小值。
②学习条件统计量:
不想学习一个完整的概率分布,只想学习在给定的 时 的某个条件统计量。
把代价函数看做是一个泛函,而不仅仅是一个函数。泛函是函数到实数的映射。因此,我们可以把学习看做是选择一个函数,而不是选择一组参数。
(4)输出单元
输出层的作用是随后对这些特征进行一些额外的变换来完成整个网络必须完成的任务。
①用于高斯输出分布的线性单元
一种简单的输出单元是基于仿射变换的输出单元,仿射变换是线性变换和平移的组合,不具有非线性,这些单元往往被直接称为线性单元。
对于所有操作,协方差矩阵都必须限定为正定矩阵。因为线性单元不会饱和,所以他们易于采用基于梯度的优化算法,甚至可以使用其他多种优化算法。
②用于Bernoulli输出分布的sigmoid单元
二分类问题可以归结为这种形式。Berboulli仅仅需要单个参数来定义。
③用于Multinoulli输出分布的softmax单元
任何时候,当我们想要表示一个具有n个可能取值的离散型随机变量的分布时,都可以使用softmax函数。它可以看做sigmoid函数的扩展,其中sigmoid函数用来表示二值型变量的分布。
softmax函数常用作分类器的输出,来表示n个不同类的概率分布。
softmax是一种在参与其中的单元之间形成竞争的方式:softmax的输出总和总是为1,所以一个单元的值增加必然对应着其他单元值得减少,在计算情况下,当 和其他的在幅度上差异很大时,就变成了赢者通吃的模式,其中一个输出近似1,其他的接近0。
3 隐藏单元
隐藏单元的设计过程:
先直觉地认为某种隐藏单元可能表现良好,然后用它组成神经网络进行训练,最后用验证集来评估他的性能。
除非另有说明,大多数的隐藏单元都可以描述为接受输入向量 ,接受仿射变换 ,然后使用一个逐元素的非线性函数 。大多数隐藏单元的区别仅仅在于激活函数 的形式。
①整流线性单元及其扩展
整流线性单元使用激活函数 。
整流线性单元易于优化,因为他们和线性单元类似。
整流线性单元通常作用于仿射变换之上: 。当初始化仿射变换的参数时,可以将 的所有元素设置成一个小的正值,例如0.1。这使得整流线性单元很可能初始时就对大多数输入呈现激活状态,并且允许倒数通过。
整流线性单元的一个缺陷是它们不能通过基于梯度的方法学习使它们激活为0的样本。
②logistic sigmoid与双曲正切函数
③其他隐藏单元
径向基函数(RBF):大部分饱和到0,难以优化;
softplus函数:整流线性单元的平滑版本
硬双曲正切函数
4 架构设计
架构一词是指网络的整体结构,它应该具有多少单元,以及这些单元应该如何连接。即在这些链式架构中,主要的架构考虑是选择网络的深度和每一层的宽度。
万能近似性质
一个前馈神经网络如果具有线性输出层和至少一层具有任何一种“挤压”性质的激活函数的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意的进度来近似任何从一个有限维空间到另一个有限维空间的Borel可测函数。
具有单层的前馈网络足以表示任何函数,但是网络层可能大的不可实现,并且可能无法正确的学习和泛化。在很多情况下,使用更深的模型能够减少表示期望函数所需的单元的数量,并且可以减少泛化误差。
5 反向传播和其他微分方法
在训练过程中,前向传播可以持续向前直到它产生一个标量代价函数 。反向传播算法简称backprop,允许来自代价函数的信息通过网络向后流动,以便计算梯度。
反向传播仅指用于计算梯度的方法,而另一种算法,如随机梯度下降,使用该梯度来进行学习。在学习算法中,我们最常需要的梯度是代价函数关于参数的梯度。
反向传播是一种计算链式法则的算法。