Deep Learning 1.1 深度前馈网络

Deep Learning 1.1 深度前馈网络

深度前馈网络(deep feedforward network),也叫做前馈神经网络(feedforward neural network)或者多层感知机(multilayer perceptionm, MLP),是典型的深度学习模型。前馈网络的目标是近似某个函数f*f^*。例如,对于分类器,将输入映射到一个类别y。前馈网络定义了一个映射,并且学习参数的值,使它能够得到最佳的函数近似

这种模型称为前向的,是因为信息流过x\mathbf{x}的函数,流经用于定义f的中间计算过程,最终到达。在模型的输入和模型本身之间没有反馈连接。当前馈神经网路被扩展成包含反馈连接时,它们被称为循环神经网络(recurrent neural network)

前馈网络之所以被称为网络,是因为它们通常用许多不同函数复合在一起来表示。该模型与一个有向无环图相关联,而图描述了函数是如何复合在一起的。例如,我们有三个函数连接在一条脸上以形成。这些链式结构是神经网络中最常用的结构。在这种情况下,网络被分为多个层,链的全长被称为模型的深度(depth)。前馈网络的最后一层被称为输出层(output layer)。在神经网络训练的过程中,我们让去匹配的值。训练数据为我们提供了在不同训练点上取值的、含有噪声的f*(x)f^*(\mathbf{x})的近似实例。每个样本x\mathbf{x}都伴随着一个标签yf*(x)。训练样本直接指明了输入层在每一点x\mathbf{x}上必须做什么;它必须产生一个接近y的值。但是训练数据并没有直接指明其他层应该怎么做。学习算法必须决定如何使用这些层来产生想要的输出,但是训练数据并没有说每个单独的层应该做什么。相反,学习算法必须决定如何使用这些层来最好地实现f*f^*的近似。因为训练数据并没有给出这些层中的每一层所需的输出,所以这些层被称为隐藏层

网络中的每个隐藏层通常都是向量值的。这些隐藏层的维数决定了模型的宽度(width)。向量的每个元素都可以被视为起到类似一个神经元的作用。除了将层想想成向量到向量的单个函数,我们也可以把层想象成由许多并行操作的单元组成,每个单元表示一个向量到标量的函数。

一种理解前馈网络的方式是从线性模型开始,考虑如何克服它的局限性。线性回归无论是通过闭解形式还是使用凸优化都能高效并且可靠的拟合。线性模型也有明显的缺陷,那就是该模型的能力被局限在线性函数里,无法理解任何两个输入变量之间的相互作用

为了扩展线性模型来表示x\mathbf{x}的非线性函数,我们可以不把线性模型用于x\mathbf{x}本身,而是用在一个变换后的输入ϕ(x)上,这里ϕ是一个非线性变换。同样,我们可以使用核技巧,来得到一个基于隐含地使用ϕ\phi映射的非线性学习算法。我们可以认为ϕ\phi提供了一组描述x\mathbf{x}的特征

剩下的问题就是如何选择映射ϕ\phi一种选择是使用一个通用的ϕ\phi,例如无限维的ϕ\phi,这样我们总是由足够的能力来拟合训练集,但是对于测试集的泛化往往不佳。非常通用的特征映射通常只基于局部光滑的原则,并且没有将足够的先验信息进行编码来解决高级问题

另一种选择是手动地设计ϕ\phi。这种方法对于每个单独的任务都需要人们数十年地努力,在不同的领域之间很难迁移

深度学习的策略是去学习ϕ\phi。在这种方法中,我们有一个模型y=f(x;θ,w)=ϕ(x;θ)w。我们现在有两种参数:用于从一大类函数中学习ϕ\phi的参数θ,以及用于将ϕ(x)\phi(\mathbf{x})映射到所需的输出的参数w。这是深度前馈网络的一个例子,其中ϕ\phi定义了一个隐藏层。

训练一个前馈网络至少需要做和线性模型同样多的设计决策:选择一个优化模型、代价函数以及输出单元的形式。前馈网络引入了隐藏层的概念,这需要我们去选择计算隐藏层值的激活函数(activation function)。我们还必须设计网络的结构,包括网络应该包含多少层、这些层应该如何连接、以及每一层包含多少单元。在深度神经网络的学习中需要计算复杂函数的梯度。我们给出反向传播(back propagation)算法和它的现代推广来高效的计算这个梯度

学习XOR

XOR函数是两个二进制值x1x2的运算。当这些二进制值中恰好有一个为1时,XOR函数的返回值为1。XOR函数提供了我们想要学习的目标函数y=f*(x)。我们的模型给出了一个函数y=f(x;θ),并且我们的学习算法会不断调整参数θ\mathbf{\theta}来使得f尽可能接近f*f^*

在这个例子中,我们只希望网络在这4个点X={[0,0],[0,1],[1,0],[1,1]}上表现正确

我们可以把这个问题当作回归问题,使用均方误差损失函数,评估整个训练集上表现的MSE代价函数为

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

假设选择一个线性模型,θ\mathbf{\theta}包含w\mathbf{w}b,那么模型被定义为

f(x;w,b)=xw+b

我们可以使用正规方程关于w\mathbf{w}bb最小化J(θ),来得到一个闭式解

求解正规方程以后,我们得到w=0以及b=12。线性模型仅仅是在任意一点都输出0.5,不能用来表示XOR函数。解决这个问题的其中一种方法是使用一个模型来学习一个不同的特征空间,在这个空间上线性模型能够表示这个解

具体来说,我们引入一个非常简单的前馈神经网络,它有一层隐藏层并且隐藏层中包含两个单元。这个前馈网络有个通过函数计算得到的隐藏单元的向量h,这些隐藏单元的值随后被用作第二层的输入。第二层就是这个网络的输出层。输出层仍然是一个线性回归模型,只不过现在它作用于h\mathbf{h}而不是x\mathbf{x}

如果第一层的函数仍然是线性的,那么前馈网络作为一个整体对于输入仍然是线性的。显然我们必须用非线性函数来描述这些特征。大多数神经网络通过仿射变换之后紧跟着一个被称为激活函数的固定非线性函数来实现这个目标,其中仿射变换由学得的参数控制。我们使用这种策略,定义h=g(Wx+c),其中W是线性变换的权重矩阵,c是偏置。激活函数g通常选择对每个元素分别起作用的函数,有hi=g(xW:,i+ci)。在现代神经网络中,默认的推荐是使用由激活函数g(z)=max0,z定义的整流线性单元(rectified linear unit)或者称为ReLU

现在可以指明我们的整个网络是

f(x;W,c,w,b)=wmax{0,Wx+c}+b

我们现在可以给出XOR问题的一个解。令

W=1111

c=01

w=12

b=0

这样神经网络对每个样本都给出了正确的结果

这里给出的XOR问题的解处在损失函数的全局最小点,所以梯度下降算法可以收敛到这一点。梯度下降算法还可以找到XOR问题的一些其他的等价解。梯度下降算法的收敛点取决于参数的初始值

基于梯度的学习

我们到目前为止看到的线性模型和神经网络的最大区别,在于神经网络的非线性导致大多数我们感兴趣的代价函数都变得非凸。这意味着神经网络的训练通常使用迭代的,基于梯度的优化,仅仅使得代价函数达到一个非常小的值,而不是项用于训练线性回归模型的线性方程求解器,或者用于训练逻辑回归或SVM的凸优化算法那样保证全局收敛。用于非凸损失函数的随机梯度下降没有收敛性保证,并且对参数的初始值很敏感。对于前馈神经网络,将所有的权重值初始化为小随机数是很重要的。偏置可以初始化为零或者小的正值。计算梯度对于神经网络会比较复杂,但仍然可以很高效而精确地实现,使用反向传播算法。

为了使用基于梯度地学习方法,我们必须选择一个代价函数,并且必须选择如何表示模型的输出

代价函数

在大多数情况下,参数模型定义了一个分布p(y|x;θ)并且简单地使用最大似然原理。这意味着我们使用训练数据和模型预测间的交叉熵作为代价函数

有时,我们使用一个更简单的方法,不是预测y的完整概率分布,而是仅仅预测在给定x\mathbf{x}条件下y\mathbf{y}

的某种统计量。某些专门的损失函数允许我们来训练这些估计量的预测器

用于训练神经网络的完整的代价函数,通常在我们这里描述的基本代价函数的基础上增加一个正则项。用于线性模型的权重衰减方法也直接适用于深度神经网络

使用最大似然学习条件分布

大多数现代的神经网络使用最大似然来训练,这意味着代价函数就是负的对数似然,它于训练数据和模型分布间的交叉熵等价,这个代价函数表示为

J(θ)=EX,Y~p^datalogpmodel(y|x)

代价函数的具体形式随着模型而改变,取决于logpmodel的具体形式。上述方程的展开形式通常会有一些项不依赖于模型的参数,我们就可以舍去

使用最大似然来导出代价函数的方法的一个优势是,它减轻了为每个模型设计代价函数的复旦。明确一个模型p(y|x)则自动地确定了一个代价函数logp(y|x)

贯穿神经网络设计的一个反复出现的主题是代价函数的梯度必须足够大和具有足够的预测性,来为学习算法提供一个好的指引。饱和(非常平)的函数破坏了这一目标,因为它们把梯度变得非常小。这在很多情况下都会发生,因为用于产生隐藏单元或者输出单元的输出的激活函数会饱和。负的对数似然帮助我们 在很多模型中避免这个问题。很多输出单元都会包括一个指数函数,这在它的变量取绝对值非常大的负值时会造成饱和。负对数似然代价函数中的对数函数消除了某些输出单元中的指数效果

用于实现最大似然估计的交叉熵函数通常没有最小值。对于离散型输出变量,大多数模型以一种特殊的形式来参数化,即他们不可能表示概率零和一,但是可以无限接近。对于实值的输出变量,如果模型可以控制输出分布的密度,那么它可能对正确的训练集输出赋予极其高的密度,这将导致交叉熵去趋向负无穷,正则化技术可以修正学习问题,使得模型不会通过这种方式来获得无限制的收益

学习条件统计量

发表评论