神经网络(neural networks)
生物学上的神经元
(图片来自百度图片)
从三张图片中可以看到,神经元由细胞体,轴突和树突构成。在两个神经元传送脉冲的过程中,神经元1将脉冲从其轴突传出,神经元2的树突接受1传出的脉冲。
神经元的数学定义
(图片来自吴恩达cousera机器学习课程)
Layer 1:输入层(input layer)
Layer 2:隐藏层(hidden layer)(可能不止一个)
Layer 3:输出层(output layer)
a(j)i
:在第j层单元i的“激励”(activation)(可以看做第j层的输出)
各层所做的事:
这里的上标都代表这个值属于第几层。从公式中我们可以看到 x0 和 a(2)0 ,这些在图中是没有的,他们的值都是1,称为偏置单位(bias unit)或偏置神经元(bias unit)。(个人想法:这里的偏置单位是为了简化计算为矩阵乘法所设,将常数项设为 x0=1 )
y=g(x) 是逻辑回归中介绍过的s函数,或者叫逻辑激励函数(logistic activation function)或者s激励函数(sigmoid activation function)。
如果神经网络在第j层有 sj 个单元,那么 Θ(j) 是一个 sj+1∗(sj+1) 维的矩阵,如上面的第1层有3个单元,第2层有3个单元, Θ(1) 矩阵是3*4的。(提矩阵是为了方便编程实现)
神经网络计算向量化
我们将sigmoid函数的加权输入(
Θ
可以看做权重)提取为一个数
z
,那么每一层的输入相当于一个
令:
那么:
这里我们得到 a(2) 之后,需要增加 a(2)0 ,产生一个长度为4的向量,满足下一层的输入,所以在编程实现的时候我们需要注意不要忘记这个细节。
神经网络的隐藏层到输出层与逻辑回归很相似。那么神经网络和逻辑回归的不同在于逻辑回归以输入层
x
作为输出层
另外,我们可以想象由很多类似上图的神经元可以组成一个神经网络。一些神经元的输出可以作为某个神经元的输入,这就是生物学上神经元轴突和树突的概念启发而来。
另外,我们上面提及的是一种前向传播在神经网络中工作的方式,即由输入层激活(‘activate’)中间的隐藏层,最后激活输出层进行输出。