AI机动队
首发于AI机动队
前馈神经网络初探——深度学习花书第六章(一)

前馈神经网络初探——深度学习花书第六章(一)

前五章总结了深度学习的数学基础及经典机器学习算法(深度学习花书读书笔记目录),第6到12章是花书的深度网络核心部分,包括如下内容:前馈神经网络,深度学习的正则方法,训练深度学习模型的优化方法,卷积神经网络,循环及递归神经网络,关于模型训练的建议与方法以及深度学习的应用,这部分的技术已经广泛应用到工业界,对于想要用深度学习来解决实际工作中的问题的从业人员很有必要。

现在就开始第六章前馈神经网络的总结,准备分为三篇:1.初识前馈神经网络 2.前馈神经网络的基本组成与架构 3.反向传播算法。现在开始第一篇总结。

前馈神经网络初探

前馈神经网络(Deep feedforward network) 可以说是深度学习最核心的模型之一。前馈神经网络的目的是对于输入 x ,假设我们要模拟从输入到输出的真实函数 f^* ,神经网络想要找到这样的映射 y=f(x;\theta) 和合适的参数 \theta 使得其预测尽量接近于真实函数f^*。下面分别解释一下前馈,神经,和网络三个词的含义。

其中,前馈代表了所有的信息都从输入 x 经过某些中间的计算而最终输出到 y ,而不存在从模型的输出到输入的反馈(feedback),对于有反馈的情况即为循环神经网络(recurrent neural network),会在第十章中详细介绍。前馈网络已经广泛应用在工业界,其重要性不言而喻,而且它也是理解在自然语言处理中应用广泛的循环神经网络的基础。

网络则代表了该模型是将不同的基本函数组合在一起形成的模型。例如通过将三个函数 f^{(1)}, f^{(2)}, f^{(3)} 串联起来构成最终的函数 f(x)=f^{(3)}(f^{(2)}(f^{(1)}(x)))f^{(1)} 就是网络的第一层,f^{(2)} 就是网络的第二层,以此类推。这个链的长度又被称作网络的深度(depth),深度学习也因此得名。而前馈网络的最后一层被称作输出层(output layer),对于我们的训练数据,每一个输入 x 都有相应的标记 y\approx f^* (x) ,而网络的输出层的结果需要尽量接近 y ,但对于其它层来说,和训练数据没有这样的直接对应关系,即我们的算法只要求最后的输出接近于真实的标记,而对于中间每层的目的并没有明确定义,所以这些层又被称作隐藏层(hidden layer)

最后,神经代表了它的灵感部分受到了神经科学的影响。每一隐藏层通常是矢量值,而这些隐藏层的维度定义了网络的宽度。我们可以将每层看做从一个大的从矢量到矢量的函数映射,但从另一方面也可以将矢量的每个元素看做一个小的神经元,每个神经元进行了矢量到标量的映射操作(这一操作又被称作激活函数,activation function),而每一层是不同的神经元并行运算的综合。

前馈神经网络的提出是为了解决传统线性模型的一些限制。线性模型如逻辑回归或者线性回归的优势是我们有的可以快速求出解析解,有的可以利用convex optimization来解决。但同时,线性模型也受限于只能模拟线性关系,而很难学习不同输入参数间的关系。为了将线性模型扩展到非线性函数,我们可以对于输入 x 做非线性变换 \phi (x) ,再利用对于\phi (x)的线性模型解决该问题,例如支持向量机中提到的kernel trick(支持向量机——深度学习花书第五章(五))。我们可以将 \phi 理解为从 x 向其蕴含的特征的映射,或者理解为对于 x 的一种新的表征(representation)。

  1. 对于如何选取映射 \phi 有如下几种思路:选取一个比较通用的\phi ,例如kernel trick中的RBF kernel(也称作Gaussian kernel),如果\phi (x)的维度足够高,我们总能够使其匹配训练集,但很难推广到测试集。因为这种模型只是假设了局域变化不大的前提,而并没有包含任何有价值的先验信息。
  2. 人工选取合适的 \phi ,实际上这是在深度学习流行之前普遍采用的方法,但是这需要大量的相关经验与人力资源,而且不同领域间的知识很难迁移。
  3. 深度学习的策略是利用神经网络学习合适的用隐藏层代表的映射 \phi ,即模拟 y=f(x;\theta,w)=\phi (x;\theta)^Tw ,其中 \theta\phi 的模拟参数,而 w 是从 \phi 到最终输出的映射参数。它结合了第一和第二种方法,我们可以从比较通用的函数家族中学习 \phi ,同时也可以利用经验对函数家族的选择进行一些限制。与第二种方法比较,其优势在于我们只需要找到一个比较合适的函数家族,而不需要知道确切的函数。

下面就利用异或操作的模拟来简单解释前馈神经网络解决非线性问题的原理。


用神经网络模拟XOR

异或操作XOR定义为对于两个二进制输入 x_1, x_2 ,如果其中有且仅有一个为1,则XOR输出1,否则输出0,如下图所示

从图中可以看出,我们无法对该空间进行线性分割,使得两个输出为1的点落在分割线同一侧,而两个输出为0的点落在分割线另一侧。所以,传统的线性模型无法解决这一问题。为了解决这个问题,我们需要找到一个新的特征空间,使得在新空间中能用线性模型来解决。

我们引入一个如下图所示的简单的具有一层隐藏层的前馈网络模型:

注意图中两种方式表示是等价的,左图是具体画出每个节点,而右图是简化为层。

假设我们用 h=f^{(1)}(x;W,c) 模拟从输入到隐藏层的映射,而用 y=f^{(2)}(h;w,b) 模拟从隐藏层到输出的线性映射,则整个模型可以表示为 f(x;W,c,w,b)=f^{(2)}(f^{(1)}(x)) ,那我们如何选取 f^{(1)} 呢,通常在神经网络中我们选称作rectified linear unit,简称为RELU的激活函数,其形式为 g(z) = max\left\{ 0,z \right\}

同时选取 f^{(2)} 为线性函数,我们的模型转化为 f(x;W,c,w,b) = w^Tmax\left\{ 0, W^Tx + c \right\} +b

我们的输入用矩阵表示为

而希望模拟的对应的输出是

对于我们的模型,我们可以找到如下的解

同时 b=0

我们可以做如下验证,经过 max\left\{ 0, W^Tx + c \right\} 操作后,我们的隐藏层的值为

即我们已经从原空间映射到隐藏层所代表的空间

可以看到在新空间中,原来的输出为1的两个点已经汇聚在同一点 h=[1,0] ,因此我们可以找到该空间的线性分割,使得两个输出为1的点落在分割线同一侧,而两个输出为0的点落在分割线另一侧。

我们继续将h,w,b代入可得最终输出

与我们的预期一致。


这个例子中,我们用简单的神经网络并找到合适的解来模拟XOR操作,实际中问题要复杂得多,而我们不能这么容易的猜到合适的解,这时候我们就需要利用梯度下降算法来逼近合适的解。下一篇继续总结利用梯度下降算法的前馈神经网络模型的基本组成包含模型的损失函数,输出层函数,隐藏层函数以及整体架构的选择。

编辑于 2018-07-25

文章被以下专栏收录