斯坦福机器学习(四)神经网络

约定符号

$a^{(j)}_{i}$ —— 第j层第i个单元的激励值
$\Theta^{(j)}$ —— 第j层的权重矩阵,对应从第j层到j+1层的变换

为什么要使用神经网络解决非线性回归问题?

当特征数n很大的时候,我们继续使用一般的逻辑回归就会遇上复杂度上面的障碍,比如我们选择最高次数项次数为2,那么就会有项,其复杂度为,而如果你打算使用最高次数项为三次方去拟合的话,这将会达到的复杂度。有一种想法是,仅仅保留高次数项,比方说二次项,这看起来行得通,但在某些需要使用直线的点拟合的却不是特别的好,比如希望拟合如下的图形:

得到的可能会变成下面这样的图形:

这时欠拟合的。显然我们需要使用一种新算法,当在n特别大的时候依然能够有效率地运行,这就是我们使用神经网络解决问题的原因。

大脑中的简单神经元结构

大脑神经具有惊人的学习能力,而且这种学习能力具有普适性。所谓普适性,即处理大脑某一特定功能的区域连接到一个不同的地方,如把嗅觉神经区与眼部相连,可以令嗅觉神经区学会观看事物。所以神经网络模型就是一种通过一种算法解决多种学习问题的模型。一个典型的神经元结构如下图所示:

神经元类似一个计算单元,从输入神经,即Dendrite(树突)中接受一定的信息之后,经过一定的计算后通过输出神经Axon(轴突)可以把这些信息传输到其他的节点或者大脑中的其他神经元,神经网络就是通过模拟大脑神经元的这种信息输入输出的特性工作的。

神经网络模型概述

简单的说,神经元就是一个简单的计算单元,它从输入神经中获取电信号输入后经过计算后到输出神经中输出,所以我们就可以模型拆分为三个层次,分别是输入层、隐藏层与输出层,其中隐藏层之中又可能包含数个不同的层次,模型看起来类似下面这样:

输入层(Layer 1)

输入层对应大脑神经元中的树突结构,它以特征向量的形式即接受数据的输入,然后以最为结果在输出层输出。在这个模型当中,当然也包括,我们称其为偏置单元,其值永远等于一,在计算的时候务必记得在每一层中都手动加入它。
在神经网络的每一层当中,我们都是用同样的逻辑函数和我们之前的分类问题一样。我们可以把他们封装起来,称为sigmoid(logistic) activation function,即逻辑激励函数,在很多不同的文献当中,我们也会把参数称为weights,即权重。此时的模型可以如下表示:

隐藏层(Layer 2)

一般的神经网络模型中,隐藏层至少拥有一层,而且当预测函数比较复杂的时候可能超过一层而拥有数层。它负责神经元中的计算工作,当只有一层的时候我们可以把公式表示为如下:

也就是说我们可以通过一个的参数矩阵矩阵来就算我们的激励值。
推广至多层神经网络,我们用上一层的参数矩阵中每一行的值来计算上一层中获得的的输入值来计算该层的激励值每一层中我们都进行逻辑回归的计算,也即:

其中z的值可以用以下公式进行计算:

此时的模型可以如下表示:

当神经网络有 个单元于层 $j$ 和 个单元于层 , 那么 的维度为

输出层(Layer 3)

输出层的计算同隐藏层一致,通过一定的处理之后把所得到的预测值转化为预测矩阵输出。

利用神经网络计算逻辑与

首先复习一下逻辑函数的图形如下:

当x=4.6的时候,可以说函数值约等于1,由对称性,当x=-4.6的时候,可以说函数值约等于0,基于这个特点,我们给权重赋予一定的值就可以进行各种逻辑计算。

利用神经网络计算逻辑与

首先给第一个参数矩阵赋值如下:

因为此时都是二进制数,结合逻辑函数图像,我们可以得到如下的结果:

一个好的办法是列出真值表如下:

这样我们就完成了逻辑与的表示,同样的,把参数赋值为以下值就可以表示逻辑或了:

利用神经网络计算或非

可以容易把或非拆分为与、与非后再或的形式,由此把与和与非作为隐藏层,再进行一次或到输出层我们就可以表示或非了,每种形式我们赋权值如下:

则第一层参数矩阵如下:

第二层参数矩阵如下:

结合起来写就成为如下的形式:

整合起来用表示为如下图:

一对多分类(One-vs-all)的神经网络

为了把数据分为多个种类,我们的预测函数可以返回一个向量值。现在我们说我们要把一组数据分为四个种类,我们会使用如下这个例子,把图片分为四类:

输出y应该具有如下四个类型:

其中第j个元素值为1则说明预测分类为第j类,而且其他位置应该全部为0。
而我们的一对多分类模型可以表示为如下:

预测函数为如下向量的时候:

我们就可以判断我们模型推断这张图片是摩托车。