神经网络基础知识
感知机
感知机是第一个人工神经元,其公式:O=σ(<w,x>+b) 其中O表示输出,σ 表示**函数,<w,x> 表示矩阵相乘,b为偏置。该感知机输出为1或0,是一个传统的二分类模型。但是感知机有致命缺陷,即感知机无法解决异或问题。
简单证明即:假设模型输入为X0 、X1,则:
O=σ(X0∗W0+X1∗W2+b)不考虑**函数,则有:
O′=X0∗W0+X1∗W2+bX1=−W1W0∗X0+WO1−Wb1将上式看作X1关于X0的数学表达式,满足直线方程的表达式:y=k∗x+b,加上**函数的作用,简单的感知机在二维平面内,可以表达为一条线。而对于异或问题而言,无法用简单的一条线将其区分,故感知机无法解决异或问题。为了解决单一感知机的致命缺陷,出现了多层感知机,多层感知机基本模型如下:σ(X1∗3∗W3∗4)=H1∗4σ(H1∗4∗W4∗2)=O1∗2
需要特别注意的是,当不存在**函数时,多层感知机将退化为单层,推导如下:
HO=X∗Wh+bh=H∗Wo+bo=(X∗Wh+bh)∗Wo+bo=X∗Wh∗Wo+bh∗Wo+bo其中Wh∗Wo=W,bh∗Wo+bo=b,所以有
O=X∗W+b
与单个感知机无任何差异,故多层感知机必须存在**函数。
**函数
**函数存在的意义主要在于:
- 让多层感知机成为真正意义上的多层
- 引入非线性,使得网络可以逼近任何非线性函数(万能逼近定理)
作为**函数需要满足:
- 连续并可导(允许少数点不可导,便于优化学习网络参数)
- **函数与其倒数要尽可能简单,有利于提高效率
- 值域要在合适的区间内,不能过大或者过小,否则影响模型稳定性
常见的**函数主要有:
Sigmoid:g(z)g′(z)Tanh:g(z)g′(z)ReLu:g(z)g′(z)=1+e−z1=g(z)∗(1−g(z))=ez+e−zez−e−z=1−g(z)2=max(0,z)=⎩⎪⎨⎪⎧1 undefind 0 if(x>0)if(x=0)if(x<0)
学习率
Wi+1=Wi−LR∗g(Wi)
学习率作为深度学习中重要的超参,其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值。在一般情况下,学习率LR取0.1,0.01,0.001等较小的值,只有在特殊情况下才取特殊值。
损失函数
损失函数即通常说的loss函数,用于描述单标本与标签的差异,容易与代价函数,目标函数混淆,三者公式如下:
损失函数代价函数目标函数:loss=(y′,y):cost=N1i∑Nf(yi′,yi):obj=cost+RegularizationTerm
如公式所述,损失函数主要描绘单样本差异,代价函数描绘的是整个数据集loss的平均,而目标函数则是代价函数与正则项的和,正则项存在的意义在于控制模型的复杂度。
常用的损失函数有两种
- MSE均方误差—回归任务中使用
MSE=N∑i=1N(yi−yip)2p:predict
- CE交叉熵—分类任务中使用
H(p,q)=−i=1∑Np(xi)log(q(xi))
交叉熵由信息熵与相对熵相加而来。信息熵与相对熵如下:
自信息信息熵相对熵:I(x)=−logP(x):H(x)=−i=1∑NPilog(Pi):PKL(P∣∣Q)=Ex∼P[logQ(x)P(x)]=i=1∑NP(xi)(logP(xi)−logQ(xi))
在使用交叉熵时要求模型输出为概率形式,故交叉熵经常与Softmax一同使用。
损失函数的选择需要根据模型的特点进行选择,没有适合所有任务的损失函数。
权值初始化
在网络搭建后,需要对整个网络进行第一次权值初始化,在选择权重时,不可过大或过小,权重过大容易使得网络输出值落入**函数的饱和区,权重过小则会导致网络退化。权值初始化的方法有很多,如简单的随机初始化:
W∼(mean,std)
在初始化N时满足3σ准则即可。
Xavier初始化:
W∼U(−a+b6,a+b6)a:输入神经元个数b:输出神经元个数
除此之外还有Kaiming等方法。
正则化方法
正则化方法是减小方差的策略,目的在于减轻过拟合。对于网络而言,误差来自于三个方面,分别是方差,偏差和噪声。
- 方差:同样大小的数据集的改变所导致的学习性能的变化,用于刻画数据扰动的影响
- 偏差:学习算法的预测与真实结果的偏离程度,刻画拟合能力
- 噪声:当前学习任务上任何学习算法所能达到的期望泛化的下界
1.L1与L2正则化是两种经典的正则化方法
L1:i∑N∣Wi∣ L2:i∑NWi2
考虑二维平面的情况,则二者图像如下:
其中彩色圆圈代表loss等高线,黑色直线代表正则项曲线。两条曲线的第一个交点即最优解。
对于L1正则化而言,能够得到稀疏的模型,因为L1正则化的最优解一般都出现在坐标轴上(图中也可体现),因此模型中参数会出现很多零,为稀疏矩阵。
对了L2正则化而言,L2正则化也叫权值衰减正则化。正则化项起作用时,推导如下:
Wi+1=Wi+∂Wi∂obj=Wi−(∂Wi∂coat+λ∗Wi)=Wi(1−λ)−∂Wi∂coat
其中0<1−λ<1缩小了权值,达到了权值衰减的目的。
2.Dropot(随机失活)
Dropout在使用过程中,会随机的丢弃一些神经元,这样能够避免过度依赖某个神经元,在使用的过程中,也由于Dropout的存在,训练时数据尺度发生了变化,而在测试阶段,使用的是所有的神经元,故测试时神经元的输出需要乘上失活weight(不是很理解)。
3.除此之外,正则化方法还有Batch Normalization、Layer Normalization、Instance Normalization、Group Normalization等等