神经网络实际上是一个相对古老的算法,并且沉寂了一段时间,不过到了现在它又成为许多机器学习问题的首选技术。
1 非线性假设(Non-linear Hypotheses)
之前我们已经介绍过线性回归和逻辑回归算法了,那为什么还要研究神经网络?
为了阐述研究神经网络算法的目的,我们首先来看几个机器学习问题作为例子。这几个问题的解决都依赖于复杂的非线性分类器。
1.1 输入特征过多带来的问题
有一个监督学习的例子,其训练集如图所示
其决策边界的曲线非常复杂。
当只有两项时比如 和,这种方法确实能得到不错的结果,因为你可以把 和 的所有组合都包含到如下的多项式中,
但是对于许多复杂的机器学习问题而言,涉及的输入特征往往多于两项。
例如我们之前已经讨论过房价预测的问题,假设现在要处理的是关于住房的分类问题,而不是一个回归问题。
假设你对一栋房子的多方面特点都有所了解,你想预测房子在未来半年内能被卖出去的概率,这是一个分类问题。
我们可以想出很多特征,对于不同的房子有可能就有上百个特征,对于这类问题如果要包含所有的二次项,即使只包含二项式或多项式的计算,最终的多项式也可能有很多项,比如 直到 ,接着还有等等很多项。因此即使只考虑二阶项,那么在的情况下最终也有 个二次项。
而且渐渐地随着特征个数n的增加,二次项的个数大约以的量级增长,其中 n 是原始项的个数,即我们之前说过的到 这些项。事实上二次项的个数大约是 ,因此要包含所有的二次项是很困难的,所以这可能不是一个好的做法。
而且由于项数过多,最后的结果很有可能是过拟合的,此外在处理这么多项时也存在运算量过大的问题。当然,我们也可以试试只包含上边这些二次项的子集。例如,我们只考虑 、、直到 这些项,这样就可以将二次项的数量大幅度减少,减少到只有100个二次项。但是由于忽略了太多相关项,在处理类似左上角的数据时,不可能得到理想的结果。
实际上,如果只考虑 到 的平方这一百个二次项,那么你可能会拟合出一些特别的假设。比如,可能拟合出一个椭圆状的曲线,但是肯定不能拟合出像左上角这个数据集的分界线,所以5000个二次项看起来已经很多了。
而现在假设还得包括三次项,例如,事实上,三次项的个数是以的量级增加。当n=100时,可以计算出来最后能得到大概17000个三次项。
所以,当初始特征个数 n 增大时,这些高阶多项式项数将以几何级数递增,特征空间也随之急剧膨胀。当特征个数 n 很大时,如果找出附加项来建立一些分类器,这并不是一个好做法。对于许多实际的机器学习问题,特征个数 n 是很大的。
1.2 计算机视觉
在计算机眼中,图像是以数字矩阵的形式存储的,一张图片被分成了若干个方格,但是方格还没有足够小,随意取出一个方格进行放大,还会有许多多更小的方格,这个小到不能再小的方格叫做一个像素点,像素点有对应的值,在[0,255]之间,数值越大表示这个像素点越亮。
换言之,在计算机世界:
- 图像是就是像素点构成的三维矩阵(row,col,pixel)。
- 像素点的位置由三维矩阵中的row,col确定;如(0,0)代表位于第一行、第一列的像素点。
- 像素点的值由三维矩阵中的pixel确定;像素的值代表图像的亮度。
计算机视觉就是进行图像识别,图像识别就是对图像进行分类。
这个分类问题中特征空间的维数是多少?
显然在真实的情况下,我们不可能只取两个像素点来作为特征。
假设我们用50*50像素的图片,注意,我们的图片已经足够小了哦。长宽只各有50个像素,但这依然是2500个像素点,因此,我们的特征向量的元素数量 n=2500。特征向量X包含了所有像素点的亮度值。
对于典型的计算机图片表示方法,如果存储的是每个像素点的灰度值 (色彩的强烈程度),那么每个元素的值应该在 0 到 255 之间。因此,这个问题中 n=2500。
但是这只是使用灰度图片的情况,如果我们用的是RGB彩色图像,每个像素点包含红、绿、蓝三个子像素,那么 n=7500。
因此,如果我们非要通过包含所有的二次项来解决这个非线性问题,那么仅仅二次项 总共大约有300万个(25002/2 ),这数字大得有点离谱了。对于每个样本来说,要发现并表示所有这300万个项,这计算成本太高了。因此,只是简单的增加二次项或者三次项之类的逻辑回归算法并不是一个解决复杂非线性问题的好办法。因为当 n 很大时,将会产生非常多的特征项。
接下来,我们会讨论解神经网络,它在解决复杂的非线性分类问题上,被证明是是一种好得多的算法,即使你的输入特征空间或输入的特征维数 n 很大,也能轻松搞定。
2 神经元模型
上图中,黄色的圆圈就代表了一个神经元,
为输入向量, 代表神经元的权重(实际上就是我们之前所说的模型参数),
代表激励函数(在神经网络术语中,激励函数只是对类似非线性函数g(z)的另一个术语称呼,)。
记为单个神经元的输出,又称单个神经元的激活项。
实际上,你可以这样理解,神经元就是权重θ。
当讲输入送进神经元后,经计算(实际上就是 )会有一个输出,这个输出再送入激励函数中,便得到了神经元的真实输出。
注意:当我们绘制一个神经网络时,通常我只绘制输入节点 等等,但有时也可以增加一个额外的节点 ,这个节点有时也被称作偏置单位或偏置神经元。但因为总是等于1,所以有时候,我们会画出它,有时我们不会画出,这要看画出它是否对例子有利。
3 最简单的三层神经元网络
上面介绍了单个神经元。神经元网络就是神经元连在一起的集合,如下图:
神经网络就是不同的神经元组合在一起。第一层为输入层,最后一层为输出层,而中间的所有层均为隐藏层。
注意:
- 输入单元,再说一次,有时也可以画上额外的节点。
- 同时,这里有3个神经元,记为 ,然后像输入单元一样,我们可以在这里添加一个 ,这和 一样,代表一个额外的偏度单元,它的值永远是1(注意:中计算的是)的值,而)中存放的就是偏置1)。
为了能理解神经元网络中的计算,我们还要讲几个概念。
由于有3个神经元,其激活项为),与四个输入项(含一个偏置项)进行网状连接。
对于第一个神经元的激活项),其对应于输入项的权重记为,则有:
同理,有:
记,令,记,则有:
推而广之,定义:
- 向量是神经元i在j层的激活项,激活项是指神经元经计算后的输出。
- 矩阵称为权重矩阵,神经网络被该矩阵参数化,该矩阵其控制从第j层到第层的映射。
如果一个网络在第 j 层有 sj个单元,在 j+1 层有 sj+1 个单元,那么矩阵
总之,以上我们的这样一张图,展示了是怎样定义一个人工神经网络的。这个神经网络定义了函数h:从输入 x 到输出 y 的映射。我将这些假设的参数Θ,这样一来不同的Θ,对应了不同的假设,所以我们有不同的函数,比如说从 x 到 y 的映射。
4 前向传播
在前面3个神经元构成的1个输入层、1个隐藏层,1个输出层神经网络中,有:
设,则有:
设,则有:
设,则有:
设,,则有:
再设,则有:
增加,则有:
以上是计算的过程,这个过程叫做前向传播。这个命名的含义是我们从输入层开始,向前传给第一层隐藏层,然后继续前向传播,直到最后的输出层。
5 神经网络与逻辑回归
我们观察上图,如果把输入层遮罩,则有
看起来像逻辑回归。即
这实际上就是一个标准的逻辑回归,只不过是输入特征值是隐藏层的激活项而已。
有趣的是,激活项是通过学习得到的函数输入值,也就是第一层到第二层之间的,而不是由训练输入项得到的,而是自己训练逻辑回归得到的输入项的权重矩阵。