简介
又称为前馈神经网络、多层感知机。前馈网络的目的是通过学习参数θ\thetaθ的值,得到某个函数f(x;θ)f(x; \theta)f(x;θ)的最佳近似f∗f^*f∗。
这种模型被称为前向或者前馈,是因为信息流过xxx的函数,流经用于定义于fff的中间计算过程,最终到达输出yyy,在模型的输入和输出之间没有反馈连接。如果有反馈连接,叫做循环神经网络。
这种模型被称为网络,是因为通常用许多不同的函数复合在一起,与一个有向无环图相关联。一般情况下,这些函数形成(复合函数的)链式结构,在这种情况下,最内层的函数被称为第一层,接着是第二层,以此类推,最后一层是输出层。链的全长被称为深度(这也是深度学习的来源),如下:
f(x)=f3(f2(f1(x))) f(x) = f_3(f_2(f_1(x))) f(x)=f3(f2(f1(x)))在神经网络的训练过程中,训练数据提供了含有噪声的、在不同训练点上取值的f∗(x)f^*(x)f∗(x)的近似实例,每一个样本xxx都伴随着一个标签y≈f∗(x)y \approx f^*(x)y≈f∗(x)。训练样本直接指明了输出层在每一个样本上必须做什么:它必须产生一个接近yyy的值,但是,训练样本并没有直接指明其它层应该干什么,而这些层的输出都是为了更好的近似f∗f^*f∗,正好是学习算法的工作,也正是因为如此,这些层被称为隐藏层。
最后,这种模型被称为神经, 是因为它来自于神经学科的启发。每个隐藏层通常都是向量,这些隐藏层的维数决定了模型的宽度,向量的每个元素起到一个神经元的作用。在这种情况下,层的概念就是向量到向量的单个函数,而每个层由许多并行操作的单元组成,每个单元表示一个向量(来自其它层或者若干个单元)到标量的函数,计算的是自己的激活值。
总而言之,前馈神经网络是为了实现统计泛化而设计出的函数近似机。
一般来讲,我们可以将模型设置成线性模型,这样既有闭解形式,又可以凸优化,但是,其无法理解任何两个输入变量之间的相互作用的局限性又限制其发展。所以,需要拓展线性模型以适应xxx的非线性函数。
假设xxx经过一个非线性变换后为ϕ(x)\phi (x)ϕ(x),这里,我们可以认为它提供了一组新的特征或者叫新的表示。那么,剩下的就是,如何选择这个ϕ\phiϕ的问题了?
- 第一种方法自然是选择一个通用的ϕ\phiϕ,一般来说是选择一个更高维的,这样可实现“降维打击”,但是,这种通用特征通常可以很好的拟合训练集,却无法具备良好的泛化能力,而且,通常只基于局部光滑原则、没有足够的先验信息以解决高级问题。
- 第二种方法自然是人工手动设计一个ϕ\phiϕ,这种方法只适用于特定领域,并且很难迁移。
- 第三种就是去学习ϕ\phiϕ,在这种方法中,我们有一个模型y=f(x;θ,ω)=ϕ(x;θ)Tωy = f(x; \theta, \omega) = \phi(x; \theta)^T \omegay=f(x;θ,ω)=ϕ(x;θ)Tω,该模型中有两个参数:一个是用于学习ϕ\phiϕ的参数θ\thetaθ,一个是用于将ϕ(x)\phi(x)ϕ(x)映射到输出的参数ω\omegaω。
事实上,ϕ\phiϕ定义了一个隐藏层,在这种方法中,我们将使用优化算法来寻找θ\thetaθ参数,使得ϕ(x;θ)\phi (x; \theta)ϕ(x;θ)能够是一个很好的表示。
接下来,我们将讨论部署一个前馈网络所需要的每个设计决策。和线性模型的设计决策一样,需要选择一个优化模型、代价函数以及输出单元的形式,需要选择用于计算隐藏层值的激活函数,还要设计网络的结构:包含多少层以及每一层多少个单元,通过反向传播算法计算复杂函数的梯度等等。
实例:
假设有一个任务,目标函数是y=f∗(x)y = f^*(x)y=f∗(x),则模型给出的函数是y=f(x;θ)y = f(x; \theta)y=f(x;θ),其训练集是X\mathbb{X}X,那么,我们的目标是通过学习,调整θ\thetaθ参数,使得fff尽可能接近f∗f^*f∗。为了简便,我们使用均方误差损失函数,则评估整个训练集上表现的MSE代价函数是:
J(θ)=14∑x∈X(f∗(x)−f(x;θ))2 J(\theta) = \frac {1}{4} \sum_{x\in \mathbb{X}}^{} ({\color{Red} f^*(x) - f(x; \theta) })^2 J(θ)=41x∈X∑(f∗(x)−f(x;θ))2我们现在选择线性模型作为f(x;θ)f(x; \theta)f(x;θ)的形式,即:
f(x;ω,b)=xTω+b f(x; \omega, b) = x^T {\color{Green} \omega } + {\color{Green} b } f(x;ω,b)=xTω+b这里我们引入一个简单的前馈神经网络,它有一层隐藏层,并且隐藏层中包含两个单元,并且假设隐藏单元的向量为h=f1(x;W,c)h = f_1(x; W, c)h=f1(x;W,c),由于输出层仍然是一个线性模型,此时记为:y=f2(h;ω,b)y = f_2(h; \omega, b)y