一、神经网络是什么?
神经网络结构大概如下:
最基本的神经网络由输入层,隐含层和输出层构成,给定输入量,就能得到一组输出结果。逻辑回归可以看作是一个只有输入层和输出层的简单神经网络,从逻辑回归到神经元(感知器)的过程如下:
其中g(z)为sigmoid函数,在神经网络中叫做**函数或者连接函数,起到归一化的作用。
在上述神经元(感知器)的基础上,添加少量隐含层,就得到了浅层神经网络,如下:
如果增多中间层,就得到了深度神经网络(DNN):
二、为什么要用神经网络?
神经网络应用在分类问题中效果好,特别是针对非线性可分的问题(这是LR和SVM等算法不擅长的),如下图的点分类:
神经元可以完成“逻辑与”操作:
选择参数从上到下为-30,20,20,只有在x1和x2都为1的情况下结果菜为1。
则可以先构造出两条分界线,然后再用神经元的“逻辑与”操作将其组合起来,即用一个三层的神经网络就可解决:
此外,神经元还可以完成“逻辑或”操作,只需要把参数适当修改,如把参数变为-10,20,20,则:
对线性分类器的“与”和“或”进行组合,就可以完美地对平面样本点分布进行分类,如:
三、神经网络表达力与过拟合
1、理论上说单隐层神经网络可以逼近任何连续函数(只要隐层的神经元个数足够多);
2、虽然从数学上看表达能力一致,但是多隐层的神经网络比单隐层的神经网络工程效果要好很多;
3、对于一些分类数据(比如CTR预估),3层神经网络效果优于2层神经网络,但是如果把层数再不断增加(4,5,6层),对最后结果的帮助就没有那么大的跳变了;
4、图像数据比较特殊,是一种深层(多层次)的结构化数据,深层次的卷积神经网络,能够更充分和准确地把这些层级信息表达出来。
5、提升隐层层数或者隐层神经元个数,神经网络“容量”会变大,空间表达力会变强:
但过多的隐层和神经元节点,会带来过拟合问题。不要试图通过降低神经网络参数量来减缓过拟合,要用正则化或者dropout。
四、神经网络之传递函数(**函数)
除了上述所说输出层后有**函数外,隐含层之间,隐含层与输出层之间也存在着**函数。就拿两个隐含层的神经网络来说,如果隐含层之间没有**函数,则第一层隐含层得到的结果(w1x1+b1)直接作为第二层隐含层的输入,则第二层隐含层的输出为w2(w1x1+b1)+b2=(w2w1)x1+(w2b1+b2)=wx+b,则两个隐含层完全可以用一个隐含层来代替,所以神经网络之间要有**函数。**函数的形式可以如下所示:
此外,还有其他的**函数,这里就不一一介绍了。
五、神经网络之BP算法
BP神经网络有“正向传播”和“反向传播”两个过程。”正向传播“求损失(预测结果与真实结果的误差),”反向传播“回传误差,用梯度下降的方法更新参数,即根据误差信号修正每层的权重。
以3层的感知器为例:
有了误差E,E是权重w的函数,我们需要找到使得函数值最小的w。使用梯度下降法来更新参数w,首先要求得E对于w得梯度,公式如下:
举个BP算法的例子:
前向运算如下:
反向传播如下:(这里计算E对w5的偏导)
参数更新:
同理,可以求得更新后的w6,w7,w8…的大小。然后再一步步更新参数,直到到达误差的最小值点,所对应的那组参数就是最佳的参数。