神经网络基础知识之感知机

神经网络基础知识

感知机

感知机是第一个人工神经元,其公式:O=σ(<w,x>+b)O = \sigma(<w,x>+b) 其中OO表示输出,σ\sigma 表示**函数,<w,x><w,x> 表示矩阵相乘,bb为偏置。该感知机输出为1或0,是一个传统的二分类模型。但是感知机有致命缺陷,即感知机无法解决异或问题。
​简单证明即:假设模型输入为X0 、X1,则:
O=σ(X0W0+X1W2+b) O = \sigma(X_0*W_0 + X_1*W_2 + b)\\ 不考虑**函数,则有:
O=X0W0+X1W2+bX1=W0W1X0+OW1bW1 O' = X_0*W_0 + X_1*W_2 + b \\ X_1 = -\frac {W_0}{W_1}*X_0 +\frac OW_1 - \frac bW_1 将上式看作X1关于X0的数学表达式,满足直线方程的表达式:y=kx+by = k*x+b,加上**函数的作用,简单的感知机在二维平面内,可以表达为一条线。而对于异或问题而言,无法用简单的一条线将其区分,故感知机无法解决异或问题。神经网络基础知识之感知机为了解决单一感知机的致命缺陷,出现了多层感知机,多层感知机基本模型如下:神经网络基础知识之感知机σ(X13W34)=H14σ(H14W42)=O12 \sigma(X_{1*3}*W_{3*4})=H_{1*4} \\ \sigma(H_{1*4}*W_{4*2})=O_{1*2}
需要特别注意的是,当不存在**函数时,多层感知机将退化为单层,推导如下:
H=XWh+bhO=HWo+bo=(XWh+bh)Wo+bo=XWhWo+bhWo+bo\begin{aligned} H&=X*W_h +b_h\\ O&=H*W_o + b_o\\ &=(X*W_h+b_h)*W_o+b_o\\ &=X*W_h*W_o+b_h*W_o+b_o \end{aligned}其中WhWo=WW_h*W_o=WbhWo+bo=bb_h*W_o+b_o=b,所以有
O=XW+b O=X*W+b
与单个感知机无任何差异,故多层感知机必须存在**函数。

**函数

**函数存在的意义主要在于:

  1. 让多层感知机成为真正意义上的多层
  2. 引入非线性,使得网络可以逼近任何非线性函数(万能逼近定理)

作为**函数需要满足:

  1. 连续并可导(允许少数点不可导,便于优化学习网络参数)
  2. **函数与其倒数要尽可能简单,有利于提高效率
  3. 值域要在合适的区间内,不能过大或者过小,否则影响模型稳定性

常见的**函数主要有:
Sigmoid:g(z)=11+ezg(z)=g(z)(1g(z))Tanh:g(z)=ezezez+ezg(z)=1g(z)2ReLu:g(z)=max(0,z)g(z)={1 if(x>0)undefind if(x=0)0 if(x<0) \begin{aligned} Sigmoid:g(z)&= \frac{1}{1+e^{-z}}\\ g'(z)&=g(z)*(1-g(z))\\ Tanh:g(z)&= \frac{e^z-e^{-z}}{e^z+e^{-z}}\\ g'(z)&=1-g(z)^2\\ ReLu:g(z)&=max(0,z)\\ g'(z)&= \begin{cases} 1\ &if(x>0)\\ undefind\ &if(x=0)\\ 0\ &if(x<0) \end{cases} \end{aligned}

学习率

Wi+1=WiLRg(Wi) W_{i+1}=W_i-LR*g(W_i)
学习率作为深度学习中重要的超参,其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值。在一般情况下,学习率LR取0.1,0.01,0.001等较小的值,只有在特殊情况下才取特殊值。

损失函数

损失函数即通常说的loss函数,用于描述单标本与标签的差异,容易与代价函数,目标函数混淆,三者公式如下:
loss=(yy):cost=1NiNf(yi,yi)obj=cost+RegularizationTerm \begin{aligned} 损失函数&:loss=(y',y)\\ 代价函数&:cost=\frac{1}{N}\sum_{i}^{N}f(y'_i,y_i)\\ 目标函数&:obj=cost+RegularizationTerm \end{aligned}
如公式所述,损失函数主要描绘单样本差异,代价函数描绘的是整个数据集loss的平均,而目标函数则是代价函数与正则项的和,正则项存在的意义在于控制模型的复杂度。

常用的损失函数有两种

  1. MSE均方误差—回归任务中使用
    MSE=i=1N(yiyip)2Np:predict MSE=\frac{\sum_{i=1}^{N}(y_i-y_i^p)^2}{N}\\ p:predict
  2. CE交叉熵—分类任务中使用
    H(p,q)=i=1Np(xi)log(q(xi)) H(p,q)=-\sum_{i=1}^{N}p(x_i)log(q(x_i))
    交叉熵由信息熵与相对熵相加而来。信息熵与相对熵如下:
    I(x)=logP(x)H(x)=i=1NPilog(Pi)PKL(PQ)=ExP[logP(x)Q(x)]=i=1NP(xi)(logP(xi)logQ(xi)) \begin{aligned} 自信息&:I(x)=-logP(x)\\ 信息熵&:H(x)=-\sum_{i=1}^{N}P_ilog(P_i)\\ 相对熵&:P_{KL}(P||Q)=E_{x\sim P}[log\frac{P(x)}{Q(x)}]=\sum_{i=1}^{N}P(x_i)(logP(x_i)-logQ(x_i)) \end{aligned}
    在使用交叉熵时要求模型输出为概率形式,故交叉熵经常与Softmax一同使用。
    损失函数的选择需要根据模型的特点进行选择,没有适合所有任务的损失函数。

权值初始化

在网络搭建后,需要对整个网络进行第一次权值初始化,在选择权重时,不可过大或过小,权重过大容易使得网络输出值落入**函数的饱和区,权重过小则会导致网络退化。权值初始化的方法有很多,如简单的随机初始化:
W(mean,std) W\sim(mean,std)
在初始化N时满足3σ\sigma准则即可。
Xavier初始化:
WU(6a+b,6a+b)a:b W\sim U(-\sqrt{\frac{6}{a+b}},\sqrt{\frac{6}{a+b}})\\ a:输入神经元个数\\ b:输出神经元个数
除此之外还有Kaiming等方法。

正则化方法

正则化方法是减小方差的策略,目的在于减轻过拟合。对于网络而言,误差来自于三个方面,分别是方差,偏差和噪声。

  • 方差:同样大小的数据集的改变所导致的学习性能的变化,用于刻画数据扰动的影响
  • 偏差:学习算法的预测与真实结果的偏离程度,刻画拟合能力
  • 噪声:当前学习任务上任何学习算法所能达到的期望泛化的下界

1.L1与L2正则化是两种经典的正则化方法
L1:iNWi        L2:iNWi2 L1:\sum_i^N|W_i|\ \ \ \ \ \ \ \ L2:\sum_i^NW_i^2
考虑二维平面的情况,则二者图像如下:
神经网络基础知识之感知机其中彩色圆圈代表loss等高线,黑色直线代表正则项曲线。两条曲线的第一个交点即最优解。
对于L1正则化而言,能够得到稀疏的模型,因为L1正则化的最优解一般都出现在坐标轴上(图中也可体现),因此模型中参数会出现很多零,为稀疏矩阵。
对了L2正则化而言,L2正则化也叫权值衰减正则化。正则化项起作用时,推导如下:
Wi+1=Wi+objWi=Wi(coatWi+λWi)=Wi(1λ)coatWi \begin{aligned} W_{i+1}&=W_i+\frac{\partial obj}{\partial W_i}\\ &=W_i-(\frac{\partial coat}{\partial W_i}+\lambda*W_i)\\ &=W_i(1-\lambda)-\frac{\partial coat}{\partial W_i} \end{aligned}
其中0<1λ<10<1-\lambda<1缩小了权值,达到了权值衰减的目的。

2.Dropot(随机失活)
Dropout在使用过程中,会随机的丢弃一些神经元,这样能够避免过度依赖某个神经元,在使用的过程中,也由于Dropout的存在,训练时数据尺度发生了变化,而在测试阶段,使用的是所有的神经元,故测试时神经元的输出需要乘上失活weight(不是很理解)。

3.除此之外,正则化方法还有Batch Normalization、Layer Normalization、Instance Normalization、Group Normalization等等