对于非线性分类问题,如果用多元线性回归进行分类,需要构造许多高次项,导致特征特多学习参数过多,从而复杂度太高。
一个简单的神经网络如下图所示,每一个圆圈表示一个神经元,每个神经元接收上一层神经元的输出作为其输入,同时其输出信号到下一层,其中每一层的第一个神经元称为bias unit,它是额外加入的其值为1,通常用+1表示,下图用虚线画出。
符号说明:
后一层的神经元的值根据前一层神经元的值的改变而改变,以上图为例,第二层的神经元的更新方式为
其中g(z)为sigmoid函数,即 g(z)=11+e−z
如果我们以向量角度来看待上述的更新公式,定义
a(1)=x=⎡⎣⎢⎢⎢x0x1x2x3⎤⎦⎥⎥⎥ z(2)=⎡⎣⎢⎢⎢z(2)1z(2)1z(2)1⎤⎦⎥⎥⎥ θ(1)=⎡⎣⎢⎢⎢θ(1)10θ(1)20θ(1)30θ(1)11θ(1)21θ(1)31θ(1)12θ(1)22θ(1)32θ(1)13θ(1)23θ(1)33⎤⎦⎥⎥⎥
则更新公式可以简化为
可以看到,我们由第一层的值,计算第二层的值;由第二层的值,计算第三层的值,得到预测的输出,计算的方式一层一层往前走的,这也是前向传播的名称由来。
考虑上图没有隐藏层的神经网络,其中 x=⎡⎣⎢⎢⎢x0x1x2x3⎤⎦⎥⎥⎥ , θ=[θ0θ1θ2θ3] ,则我们有 hθ(x)=a(2)1=g(z(1))=g(θx)=g(x0θ0+x1θ1+x2θ2+x3θ3) ,可以看到这正是Logistic回归的假设函数!!!这种关系表明Logistic是回归是不含隐藏层的特殊神经网络,神经网络从某种程度上来说是对logistic回归的推广。
对于如下图所示的线性不可分的分类问题,(0,0)(1,1)为一类(0,1)(1,0)为另一类,神经网络可以解决(见5)。首先需要一些简单的神经网络(1-4),其中图和真值表结合可以清楚的看出其功能,不再赘述。
该神经网络用到了之前的AND操作(用红色表示)、NAND操作(用青色表示)和OR操作(用橙色表示),从真值表可以看出,该神经网络成功地将(0, 0)(1,1)分为一类,(1,0)(0,1)分为一类,很好解决了线性不可分的问题。
符号说明:
[1] Andrew Ng Coursera 公开课第四周
[2] Neural Networks. https://www.doc.ic.ac.uk/~nd/surprise_96/journal/vol4/cs11/report.html
[3] The nature of code. http://natureofcode.com/book/chapter-10-neural-networks/
[4] A Basic Introduction To Neural Networks. http://pages.cs.wisc.edu/~bolo/shipyard/neural/local.html