为什么要引入神经网络呢?
随着特征个数n的增加二次项的个数大约以n^2的量级增长, 其中n是原始项的个数即我们之前说过的x1到x100这些项事实上二次项的个数大约是(n^2)/2。因此要包含所有的二次项是很困难的,所以这可能 不是一个好的做法;而且由于项数过多,最后的结果很有可能是过拟合的。此外,在处理这么多项时也存在运算量过大的问题。这个就是我们即将讲非线性分类器。
然而,在应用中,有的时候Non-linear hypotheses往往有更多的特征。举个例子,假设你想要使用机器学习算法来训练一个分类器使它检测一个图像来判断图像是否为一辆汽车。取出汽车门把手图片中的一小部分将其放大表明当人眼看到一辆汽车时,计算机实际上看到的却是这个一个数据矩阵或像这种格网它们表示了像素强度值告诉我们图像中每个像素的亮度值。
这个分类问题中特征空间的维数是多少?假设我们用50*50像素的图片我们的图片已经很小了长宽只各有50个像素但这依然是2500个像素点。因此我们的特征向量的元素数量N=2500。因此 如果我们非要通过包含所有的二次项来解决这个非线性问题那么这就是式子中的所有条件XixXj连同开始的2500像素总共大约有300万个。这数字大得有点离谱了对于每个样本来说要发现并表示所有这300万个项,这计算成本太高了。
这个时候就是神经网络用武之地了。
人脑神经元
我们的大脑中充满了 这样的神经元 神经元是大脑中的细胞 其中有两点 值得我们注意 一是神经元有 像这样的细胞主体 二是神经元有 一定数量的 输入神经 这些输入神经叫做树突 可以把它们想象成输入电线 它们接收来自其他 神经元的信息 神经元的输出神经叫做轴突 这些输出神经 是用来 给其他神经元传递信号 或者传送信息的。简而言之 神经元是一个计算单元 它从输入神经接受一定数目的信息 并做一些计算,然后将结果通过它的 轴突传送到其他节点 或者大脑中的其他神经元 下面是一组神经元的示意图 神经元利用微弱的电流 进行沟通 这些弱电流也称作动作电位 其实就是一些微弱的电流
如下图,是一个神经细胞,它有轴突(输出),树突(输入),和胞体。
神经元模型( Logistic unit)
人们仿照神经元设计了神经元模型( Logistic unit)。
这样的logistic 模型可以组成多级的结构,完成复杂的运算。
那么神经网络的问题就简单转化为,如何通过输入计算出h(x),即:
神经网络的术语:
- 网络中的第一层 也被称为输入层 因为我们在这一层 输入我们的特征项 x1 x2 x3
- 最后一层 也称为输出层 因为这一层的 神经元我指的这个 输出 假设的最终计算结果
- 中间的两层 也被称作隐藏层
- a上标(j) 下标i表示 第j层的 第i个神经元或单元,如a上标(2) 下标1 表示第2层的第一个激励 即隐藏层的第一个激励
- 所谓激励(activation) 是指 由一个具体神经元读入 计算并输出的值
- 矩阵参数化 θ上标(j)它将成为一个波矩阵控制着 从一层比如说从第一层到第二层或者第二层到第三层的作用。
- 如果一个网络在第j 层有sj个单元, 在j+1层有sj+1个单元,那么矩阵θ(j) 即控制第j层到 第j+1层映射 的矩阵的 维度为s(j+1) * (s(j)+1)。即如下图所示,θ上标(j)如何发挥作用。
从输入层的激励开始,然后进行前向传播给隐藏层并计算隐藏层的激励。然后,我们继续前向传播并计算输出层的激励。这个从输入层到隐藏层再到输出层依次计算激励的过程叫前向传播。这里我们可以发现,其实神经网络就像是logistic regression,只不过我们把logistic regression中的输入向量[x1x3]变成了中间层的[a(2)1a(2)3], 即
总结下神经网络的公式推算,上图可以简化为:
其中
如果把输入和中间值表示为:
那么Z可表示为:
a可表示为:
h(x)可表示为: