1957年,Frank Rosenblatt从纯数学的角度重新考察这一模型,指出能够从一些输入输出对(X, y)中通过学习算法获得权重W和b。
感知器算法和SVM的本质区别:感知器算法是思路是一个一个样本的看,如果对就不管它,如果不对更新W和b,SVM的思路是将样本集视为整体。
感知器很像我们日常生活,比如考试经常考第一,就不去调整,如果语文没考好,就要调整学习语文的方法。SVM算法是全局,感知器算法是针对每一个个体去调整。
算法本质是:
那么原来的算法可以改成:
Minsky第一次提出了线性可分(不可分)的概念。1969年《Perceptron》。日常生活中有很多分类问题是非线性可分的。
这本书的出现,使人们意识到感知器的算法是如此狭窄,使得人工智能项目的经费都批不下来。十年左右的停滞。
第二次复兴:用非线性的函数集合(模型)去区分非线性的样本
φ(*)是非线性函数,因为若不是的话,和上面的单层网络没有任何区别。
定理:当φ(*)为阶跃函数时,三层网络可以模拟任意决策面。
阶跃函数就是让大于0的地方等于1,让小于0的地方等于1。
举例:两层神经网络模拟一个非线性决策面,最后W取[1,1,1], b取-2.5:
如果决策面是四边形,第二层神经元就有4个,最后W取[1,1,1,1], b取-3.5。
如果决策面是圆的话,第二层就有无穷多个神经元,去逼近圆。
如果决策面分开了,要在第二层里把神经元竖着写下去,并且加一层神经元,把他们的结果合并起来。
对于两个三角形的情况,最后W取[1,1], b取-0.5。只要有一个1,最后结果就是1;都是0,最后结果就是0。
神经网络理论并不完备,对于某类问题适合什么样的模型并没有答案,只能用实验的方法。
梯度下降法求局部极值(Gradient Descent Method)
中间的式子中,α大于0,所以f(wk+1) <f(wk)
先找到一个下降的方向,然后再想具体怎么走。所以梯度下降法有很多变种。梯度下降法只负责找一个方向。
先从一个简化版本入手:
和上面公式的不同是,上面是一维的,用d,这里是多维的,所以用偏导。
每输入一个X,求一次W和b,直到全部输完。
先算y、a1、a2的偏导,因为这三个点连接关系最丰富。
为什么叫后向传播算法?输入一个X,首先进行前向计算,得到y、z、a等,然后计算偏导,计算偏导的时候是从后面算到前面,即y、a1、a2直到w等。
常见的非线性函数:
要让后向传播算法能够进行,必须改造φ(x),因为阶跃函数的φ'(x)在除了x=0的时候都等于0,这显然不合适。比如改造成sigmod函数。φ'(x) = φ(x)*(1-φ(x))
将sigmoid函数或者tanh函数替换阶跃函数,也能用三层网络模拟任何决策面。
sigmoid函数和tanh函数的问题在于,当x特别大的时候,y被压制了,导致信息无法从这一层传导到下一层。而Relu函数可以。第四种被称为Leak Relu函数,当x<0时,用较小的斜率压缩,而不是都将其变为0.
BP流程:
某一层W是m*n,就是m个神经元,b和z的维度都是m,和神经元个数一致。
求偏E/偏Zi,需要先求偏E/偏ai,然后乘以偏ai/偏Zi,因为Zi并不和E直接相连,它们通过ai连接。
i,j容易混淆,就是定义W的时候[[w11, w12, w13, ...], [w21, w22, w23], ...]
优势:
劣势:
随机梯度下降好处,降低随机性,同时不要让参数进行太剧烈的变化,即通过平均值改变,可以降低噪声的影响。
做均值和方差归一化。目的:使输入的特征每一个维度对后面的影响都差不多。
梯度消失现象:如果WT+b一开始很大或很小,那么梯度将趋近于0,反向传播后前面与之相关的梯度也趋近于0,导致训练缓慢。因此,我们要使y=±1一开始在零附近。
W和b的初始化问题,最近很火,有很多相关文章
google论文:Batch normalization accelerating deep network training by reducing internal covariate shift (2015)
基本思想:既然我们希望每一层获得的值都在0附近,从而避免梯度消失现象,那么我们为什么不直接把每一层的值做基于均值和方差的归一化呢?
batch normalization中的均值和方差,是在不断输入样本中累积和记录的。
和上面一样,值不能都集中在0附近,否则就变成了线性模型,没有充分利用其非线性的性质,以至于分类效果不佳。因此不能就只是归一化这样结束,还要用β和γ,将它放缩掉。β和γ作为训练的参数。
1. 增加关于W的正则,原因:W不应该很大,否则输入输出会很大,从而不可控。
2. 如果是分类问题,F(W)可以采用SOFTMAX函数和交叉熵的组合。
如果F(W)是SOFTMAX函数和交叉熵的组合,那么求导将会有非常简单的形式:
最后输出的时候,强行用softmax变成概率。比如猫狗分类问题,有可能有个样本60%像猫,40%像狗。softmax在图像识别中特别常见。
交叉熵中,可以通过Jensen不等式证明,如果所有的p和为1,所有的q和为1,那么E一定大于0。并且如果q和p越像,那么E越小。
之前求E的方法,称为Mean Squared Error (均方误差)
nn.W{k} = nn.W{k} - nn.learning_rate*nn.W_grad{k};
nn.b{k} = nn.b{k} - nn.learning_rate*nn.b_grad{k};
SGD的问题
(1)(W,b)的每一个分量获得的梯度绝对值有大有小,一些情况下,将会迫使优化路径变成Z字形状。
上图中的线可视为等高线,E相等的线,一个方向gradient很大,另一个方向很小。梯度的分量有的特别大,有的特别小的时候,优化的路径不是特别好。
(2)SGD求梯度的策略过于随机,由于上一次和下一次用的是完全不同的BATCH数据,将会出现优化的方向随机的情况。
解决各个方向梯度不一致的方法:
(1)AdaGrad
AdaGrad:如果某一个方向上的梯度的绝对值特别大或特别小,就除以这个梯度的绝对值,使得梯度绝对值高的步长不要太大,梯度绝对值低的步长不要太小。
不仅如此,它不只算了某一个batch里的梯度,还做了叠加。从而越到后面梯度和r越来越大,步长越来越小,而开始时很大。
(2)RMSProp
RMSProp:给以前的累积梯度r和现在的梯度加一个权重ρ,二者权重之和为1,之前等于是各0.5。用此权重平衡更看重谁。
(3)Momentum
Momentum:第一次算出来的方向对第二次还有一点点影响。
(4)Adam
Adam:综合以上方法,让梯度各个方向差不多,同时让梯度下降方向相对平滑。ρ1:0.9,ρ2:0.999。结果证明并不好用。
第二条的原因是:过拟合,尽信书不如无书。在训练集上效果很好,但在测试集上效果不好,就是书呆子。
要调的最重要的一个参数是学习率。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有