实例:学习XOR——DeepLearning系列

实例:学习XOR

前馈神经网络

前馈神经网络(feedforward netural network)是典型的深度学习模型,目标是近似某个函数f*。例如对于分类器,则是

\(y = f^*{(x)}\)将输入x映射到一个类别y,前馈网络定义了一个映射\(y=f(x, \theta)\),并且学习参数\(\theta\)的值,使得它可以获得最佳的函数近似。

前馈神经网络是由许多不同的函数符合组成表示的,例如,我们有这样的结构\(f(x)=f^{(3)}(f^{(2)}(f^{(1)}(x)))\),这种链式结构是比较典型的神经网络结构。前馈网络的最后一层被称为输出层,每个样本x都伴随着一个类别\(y \approx f^*(x)\)。由于训练数据没有指明隐藏层在每一点x上必须做什么,因此学习算法必须要自行决定产生想要的输出。

实例:学习XOR

为了了解前馈网络,我们从一个完整的前馈网络说起:学习XOR函数,这是两个二进制值x1和x2的运算。这个例子中,我们不关心统计泛化,而是希望在四个点{[0, 0], [0, 1], [1, 0], [1, 1]}上都表现正确。

评估整个训练集上表现的的MSE损失函数为: \[ J(\theta) = 1/4 \sum_x (f^*(x) - f(x, \theta))^2 \] 假设我们选择一个线性模型: \[ f(x, w, b) = x^Tw+b \] 我们如果使用正规方程关于w和b最小化\(J(\theta)\),得到w=0以及b=1/2。但这不是一个正确的解,因为直接应用于原始输入的线性模型不能实现XOR函数,当x1=0时,模型的输出必须随着x2的增大而增大。而x1=1时,模型的输出必须随着x2的增大而减小。

因此,我们必须引入一个前馈神经网络,它有一层隐藏层并且隐藏层包含两个单元。这个网络通过函数f(x, W, x)计算的搭配的隐藏单元的向量h,这些隐藏单元的值被用作第二层即输出层,输出层还是一个线性回归模型。在由神经网络提取的特征表示的变换空间中,非线性特征点映射到另外的特征空间,这样就可以使用线性模型。

img

由于我们必须使用非线性函数来描述这些特征,因此大多数神经网络通过仿射变换后紧跟着一个激活函数的固定非线性函数来实现这个目标。默认推荐的是使用激活函数\(g(z)=max{0, z}\)定义的整流线性单元或者ReLU。

那么就可以指明现在的整个网络是: \[ f(x, W, c, w, b) = w^T max\{0, W^Tx+c\} + b \]