神经网络基础

参考资料:深度之眼官方账号 神经网络基础 BV1zX4y1c74i

1. 人工神经元

1943 年心理学家 W.S.McCulloch 和数理逻辑学家 W.Pitts 研究出人工神经元,称为 M-P 模型

其中,$\mathrm{Threshold_T}\left(x\right)=\left\{\begin{aligned}0,x\le T\\1,x\gt T\end{aligned}\right.$

人工神经网络:大量神经元以某种连接方式构成的机器学习模型

第一个神经网络:1958年,计算科学家 Rosenblatt 提出 Perceptron (感知机)

感知机的致命缺点: Minsky 在 1969 年证明 Perceptron 无法解决异或问题

2. 多层感知机

多层感知机(Multi Layer Perceptron, MLP):单层神经网络基础上引入一个或多个隐藏层,使神经网络有多个网络层,因而得名多层感知机。

多层感知机的激活函数

无激活函数,网络退化为单层网络

隐藏层加入激活函数,可避免网络退化

3. 激活函数

  1. 让多层感知机成为真正的多层,否则等价为一层
  2. 引入非线性,使网络可以逼近任意非线性函数(万能逼近定理,universal approximator)

激活函数需要具备以下几点性质:

  1. 连续并可导(允许少数点上不可导),便于利用数值优化的方法来学习网络参数
  2. 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率
  3. 激活函数的导函数的值域要在合适区间内,不能太大也不能太小,否则会影响训练的效率和稳定性

常见激活函数:

  1. $\mathrm{sigmoid}\left(z\right)=\frac1{1+e^{-z}}\\\mathrm{sigmoid}’\left(z\right)=\mathrm{sigmoid}\left(z\right)\left(1-\mathrm{sigmoid}\left(z\right)\right)$
  2. $\tanh\left(x\right)=\frac{e^x-x^{-x}}{e^x+e^{-x}}\\\tanh’\left(x\right)=1-\tanh^2\left(x\right)$
  3. $\mathrm{Relu}\left(x\right)=\max\left(0,x\right)\\\mathrm{Relu}’\left(x\right)=\left\{\begin{aligned}1& & x\gt0\\undefined&&x=0\\0&&x<0\end{aligned}\right.$

$\mathrm{sigmoid}$ 和 $\tanh$ 函数有饱和区,梯度接近于0,当神经元大量落入饱和区时,模型训练困难,所以隐藏层很少使用。

4. 反向传播

前向传播:输入层数据开始从前向后,数据逐步传递至输出层

反向传播:损失函数开始从后向前,梯度逐步传递至第一层

反向传播作用:用于权重更新,使网络输出更接近标签

损失函数:衡量模型输出与真实标签的差异, $\mathrm{Loss}=f\left(\hat y,y\right)$

反向传播原理:微积分中的链式求导法则

网络计算图

方块表示节点(数据),圆圈表示边(操作)

操作要分解成最小操作

梯度下降法(Gradient Decent):权值沿梯度负方向更小,使函数值减小

导数:函数在指定坐标轴上的变化率

方向导数:指定方向上的变化率

梯度:一个向量,方向为方向导数取得最大值的方向

学习率(Learning rate):控制更新步长

5. 损失函数

损失函数(Loss Function):$\mathrm{Loss}=f\left(\hat y,y\right)$

代价函数(Cost Function):$\mathrm{Cost}=\frac1N\sum\limits_{i=1}^Nf\left(\hat y_i,y_i\right)$

目标函数(Objective Function):$\mathrm{Obj}=\mathrm{Cost}+\mathrm{Regularization Term}$

两种常见的损失函数:

  1. MSE(均方误差,Mean Squared Error)

输出与标签之差的平方的均值,常在回归任务中使用。

  1. CE(交叉熵,Cross Entropy)

交叉熵源自信息论,用于衡量两个分布的差异,常在分类任务中使用。

其中,q为预测输出,p为标签

信息熵:描述信息的不确定度

自信息: $I\left(x\right)=-\log P\left(x\right)$ , $P\left(x\right)$ 是某事件发生的概率

信息熵:所有可能取值的信息量的期望

相对熵:又称 K-L 散度,衡量两个分布之间的差异。

交叉熵:

信息熵:

交叉熵 = 信息熵 + 相对熵

其中,信息熵为常数

结论:优化交叉熵等价于优化相对熵

概率有两个性质:

  1. 概率值是非负的
  2. 概率之和等于 1

交叉熵的好伙伴: $\mathrm{Softmax}$ 函数,将数据变换到符合概率分布的形式

  1. 取值数,实现非负
  2. 除以指数之和,实现和为 1

6. 权值初始化

简便但错误的方法:初始化为全 0

会导致一层的所有神经元退化成一个神经元

随机初始化法:搞死分布随机初始化,如 $X\sim N\left(0,0.01\right)$

自适应标准差:自适应方法随机分布中的标准差

其中,a 是输入神经元的个数,b 是输出神经元的个数

扩展阅读: Kaiming初始化(MSRA初始化)

7. 正则化

减小方差的策略,通俗理解为减轻过拟合的策略

误差可分解为偏差、方差和噪声之和。即误差 = 偏差 + 方差 + 噪声之和

偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力

方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响

噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差下界

过拟合现象:方差过大,在训练集表现良好,但在测试集表现糟糕

$\mathrm{Obj}=\mathrm{Cost}+\mathrm{Regularization Term}$

Dropout:随机失活

在训练时神经元有 p 的概率失活,输出为 0

避免过度依赖某个神经元,实现减轻过拟合

训练时随机失活,测试时使用全连接网络。数据尺度发生了变化。所以测试时神经元输出需要乘以 p

扩展阅读:

  • Batch normalization
  • Layer Normalization
  • Instance Normalization
  • Group Normalization