Datawhale | 自然语言处理(8)——神经网络
文章目录
-
一. 神经网络基础概念
-
-
1. 网络结构
-
- 1.1 前馈网络
- 1.2 反馈网络
- 1.3 图网络
-
2. 前馈神经网络
-
-
二. 感知机(perceptron)
-
- 1. 定义
- 2. 学习策略
- 3. 学习算法
-
三. 激活函数
-
-
1. 激活函数性质
-
2.常见的激活函数
-
- 2.1 Sigmoid 型激活函数
-
- 2.11 Logistic 函数
-
2.12 Tanh 函数
- 2.2 修正线性单元 (ReLU)
- 2.3 Maxout 单元
-
-
四. 深度学习中的正则化
-
- 1. 参数范数正则化
- 2. 数据集增强
- 3. 噪声添加
- 4. 早停
- 5. Dropout
-
五. 深度模型中的优化
一. 神经网络基础概念
我们这里所说的神经网络指的是采用误差反向传播来进行学习的一种机器学习模型。从机器学习的角度来看,神经网络就是一个非线性模型,其基本组成单位为具有非线性激活函数的神经元,通过大量神经元之间的连接,使得神经网络成为一种高度非线性的模型。神经元之间的连接权重就是需要学习的参数,可以通过梯度下降方法来进行学习。
1. 网络结构
单一的神经元是远远不够的,需要通过很多神经元一起协作来完成复杂的功能。这样通过一定的连接方式或信息传递方式进行协作的神经元可以看作是一个网络,就是神经网络。
1.1 前馈网络
- 前馈网络中各个神经元按接受信息的先后分为不同的组。每一组可以看作一个神经层。每一层中的神经元接受前一层神经元的输出,并输出到下一层神经元。整个网络中的信息是朝一个方向传播,没有反向的信息传播,可以用一个有向无环路图表示。
- 前馈网络可以看作一个函数,通过简单非线性函数的多次复合,实现输入空间到输出空间的复杂映射。这种网络结构简单,易于实现。
1.2 反馈网络
- 反馈网络中神经元不但可以接收其它神经元的信号,也可以接收自己的反馈信号。和前馈网络相比,反馈网络中的神经元具有记忆功能,在不同的时刻具有不同的状态。反馈神经网络中的信息传播可以是单向或双向传递,因此可用一个有向循环图或无向图来表示。
- 反馈网络可以看作一个程序,具有更强的计算和记忆能力。
1.3 图网络
图网络是定义在图结构数据上的神经网络 。图中每个节点都一个或一组神经元构成。节点之间的连接可以是有向的,也可以是无向的。每个节点可以收到来自相邻节点或自身的信息。
三种不同网络模型的结构示例如下所示:

2. 前馈神经网络
在前馈神经网络中,各神经元分别属于不同的层。每一层的神经元可以接收前一层神经元的信号,并产生信号输出到下一层。第0层叫输入层 ,最后一层叫输出层 ,其它中间层叫做隐藏层 。整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示。
多层前馈神经网络的示例如下所示:

我们用下面的记号来描述一个前馈神经网络:
L:表示神经网络的层数;
• m^{(l)}:表示第l 层神经元的个数;
• f_l(·):表示l 层神经元的激活函数;
• W(l) ∈R^{m(l)×ml−1}:表示l − 1层到第l 层的权重矩阵;
• b^{(l)} ∈R^{m^l}:表示l − 1层到第l 层的偏置;
• z^{(l)} ∈ R^{m^l}:表示l 层神经元的净输入(净活性值);
• a^{(l)} ∈ R^{m^l}:表示l 层神经元的输出(活性值)。
二. 感知机(perceptron)
在机器学习中,感知机是二分类的线性分类模型,属于监督学习算法。输入为实例的特征向量,输出为实例的类别(取+1和-1)。感知机对应于输入空间中将实例划分为两类的分离超平面。感知机旨在求出该超平面,为求得超平面导入了基于误分类的损失函数,利用梯度下降法 对损失函数进行最优化(最优化)。感知机的学习算法具有简单而易于实现的优点,分为原始形式和对偶形式。感知机预测是用学习得到的感知机模型对新的实例进行预测的,因此属于判别模型,是神经网络和支持向量机的基础。
1. 定义
假设输入空间(特征向量)为X⊆R^n,输出空间为Y={-1, +1}。输入x∈X表示实例的特征向量,对应于输入空间的点;输出y∈Y表示示例的类别。由输入空间到输出空间的函数为: f(x) = sign ( w·x+b),其中,参数w叫做权值向量weight,b称为偏置bias。w⋅x表示w和x的点积,sign为符号函数。在二分类问题中,f(x)f(x)的值(+1或-1)用于分类xx为正样本(+1)还是负样本(-1)。感知机是一种线性分类模型,属于判别模型。我们需要做的就是找到一个最佳的满足w⋅x+b=0w⋅x+b=0的w和b值,即分离超平面。
2. 学习策略
核心:极小化损失函数。
如果训练集是可分的,感知机的学习目的是求得一个能将训练集正实例点和负实例点完全分开的分离超平面。为了找到这样一个平面(或超平面),即确定感知机模型参数w和b,我们采用的是损失函数,同时并将损失函数极小化。
对于损失函数的选择,我们采用的是误分类点到超平面的距离(可以自己推算一下,这里采用的是几何间距,就是点到直线的距离): 其中||w||是L2范数。

感知机的损失函数:

其中M为误分类的集合。这个损失函数就是感知机学习的经验风险函数。可以看出,随时函数L(w,b)是非负的。如果没有误分类点,则损失函数的值为0,而且误分类点越少,误分类点距离超平面就越近,损失函数值就越小。同时,损失函数L(w,b)是连续可导函数。
3. 学习算法
感知机学习转变成求解损失函数L(w,b)的最优化问题。最优化的方法是随机梯度下降法
随机梯度算法内容很多,此处就不再赘述,直接附上相关链接:https://en.wikipedia.org/wiki/Gradient_descent
三. 激活函数
1. 激活函数性质
- 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数
- 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率
- 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性
2.常见的激活函数
2.1 Sigmoid 型激活函数
Sigmoid 型函数是指一类S型曲线函数,为两端饱和函数。常用的 Sigmoid 型函数有 Logistic 函数和 Tanh 函数。
2.11 Logistic 函数
Logistic函数定义为:

Logistic 函数可以看成是一个“挤压”函数,把一个实数域的输入“挤压”到(0, 1)。当输入值在0附近时,Sigmoid 型函数近似为线性函数;当输入值靠近两端时,对输入进行抑制。输入越小,越接近于0;输入越大,越接近于1。这样的特点也和生物神经元类似,对一些输入会产生兴奋(输出为1),对另一些输入产生抑制(输出为0)。和感知器使用的阶跃激活函数相比,Logistic 函数是连续可导的,其数学性质更好。
2.12 Tanh 函数
Tanh函数是也一种Sigmoid型函数,其定义为:

Tanh函数可以看作是放大并平移的Logistic函数,其值域是(−1, 1)。
下图给出了Logistic函数和Tanh函数的形状。Tanh函数的输出是零中心化的(Zero-Centered),而Logistic函数的输出恒大于0。非零中心化的输出会 参见第7.4节。使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢

2.2 修正线性单元 (ReLU)
-
定义
修正线性单元(Rectified Linear Unit,ReLU)是目前深层神经网络中经常使用的激活函数。ReLU实际上是一个斜坡(ramp)函数,定义为:

-
优点
采用 ReLU 的神经元只需要进行加、乘和比较的操作,计算上更加高效。ReLU函数被认为有生物上的解释性,比如单侧抑制、宽兴奋边界(即兴奋程度也可以非常高)。在生物神经网络中,同时处于兴奋状态的神经元非常稀疏。人脑中在同一时刻大概只有1 ∼ 4%的神经元处于活跃状态。Sigmoid型激活函数会导致一个非稀疏的神经网络,而ReLU却具有很好的稀疏性,大约50%的神经元会处于激活状态。
在优化方面,相比于Sigmoid型函数的两端饱和,ReLU函数为左饱和函数,且在x > 0时导数为1,在一定程度上缓解了神经网络的梯度消失问题,加速梯度下降的收敛速度。
- 缺点
ReLU 函数的输出是非零中心化的,给后一层的神经网络引入偏置偏移,会影响梯度下降的效率。此外,ReLU神经元在训练时比较容易“死亡”。在训 ReLU 神经元指采用 ReLU练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个ReLU神经元在 作为激活函数的神经元。所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远不能被激活。这种现象称为死亡ReLU问题(Dying 参见公式(4.61)。ReLU Problem),并且也有可能会发生在其它隐藏层。
2.3 Maxout 单元
Maxout 单元也是一种分段线性函数。Sigmoid 型 采用 maxout 单元的神经网函数、ReLU 等激活函数的输入是神经元的净输入 z,是一个标量。而 maxout 络也就做maxout 网络。单元的输入是上一层神经元的全部原始输入,是一个向量x = [x_1; x_2; · · · ,x_d]。每个maxout单元有K 个权重向量w_k ∈R^d 和偏置b_k (1 ≤ k ≤ K)。对于输入x,可以得到K 个净输入z_k, 其中1 ≤ k ≤ K。

其中w_k = [w_{k,1}, · · · , w_{k,d}] T 为第 k 个权重向量。Maxout单元的非线性函数定义为:

Maxout 单元不单是净输入到输出之间的非线性映射,而是整体学习输入到输出之间的非线性映射关系。Maxout 激活函数可以看作任意凸函数的分段线性近似,并且在有限的点上是不可微的。
四. 深度学习中的正则化
神经网络的学习要求大量数据,对计算能力的要求很高。神经元和参数之间的大量连接需要通过梯度下降及其变体以迭代的方式不断调整。此外,有些架构可能因为强大的表征力而产生测试数据过拟合等现象。这时我们可以使用正则化和优化技术来解决这两个问题。
1. 参数范数正则化
L1 和 L2 正则化是最常用的正则化方法。L1 正则化向目标函数添加正则化项,以减少参数的绝对值总和;而 L2 正则化中,添加正则化项的目的在于减少参数平方的总和。根据之前的研究,L1 正则化中的很多参数向量是稀疏向量,因为很多模型导致参数趋近于 0,因此它常用于特征选择设置中。
机器学习中最常用的正则化方法是对权重施加 L2 范数约束。
标准正则化代价函数如下:

其中正则化项 R(w) 是:

另一种惩罚权重的绝对值总和的方法是 L1 正则化:

如果想深入理解L1、L2 正则化的同学,推荐参考:https://zhuanlan.zhihu.com/p/29360425
2. 数据集增强
- 提高模型泛化能力的一个最直接的方法是采用更多的数据来训练。但是通常在现实任务中,我们拥有的数据量有限。解决该问题的一种方法是:创建一些虚拟的数据用于训练。
- 数据集增强仅仅用于模型的训练,而不是用于模型的预测。即:不能对测试集、验证集执行数据集增强。
- 当比较机器学习算法基准测试的结果时,必须考虑是否采用了数据集增强。通常情况下,人工设计的数据集增强方案可以大大减少模型的泛化误差。当两个模型的泛化性能比较时,应该确保这两个模型使用同一套人工设计的数据集增强方案。
- 注意数据集增强和预处理的区别:数据集增强会产生更多的输入数据,而数据预处理产生的输入数据数量不变。
- 常见的图片数据集增强方法:
- 将训练图像沿着每个方向平移几个像素产生新的图像
- 对训练图像进行旋转、翻转或者缩放
- 对训练图像进行随机裁剪。实际上,随机裁剪图像的操作也可以被认为是预处理步骤,而不是数据集增强
- 对训练图像进行颜色抖动:调整饱和度、调整亮度、调整对比度、调整锐度
3. 噪声添加
有两种添加噪声的策略:输入噪声注入和权重噪声注入
- 输入噪声注入:是将噪声作用于输入的数据集,这也是一种数据集增强方法。对于某些模型,在输入上注入方差极小的噪音等价于对权重施加参数范数正则化(Bishop,1995a,b)。但是输入噪声注入远比简单地收缩参数强大,尤其是噪声被添加到隐单元的输入上时。
- 权重噪声注入:是将噪音作用于权重。这项技术主要用于循环神经网络。权重噪声注入可以解释为:将权重视作不确定的随机变量(拥有某个概率分布),向权重注入噪声是对该随机变量采样得到的一个随机值。
4. 早停
- 当训练一个容量较大的模型时会经常发现:训练误差逐渐降低,但是验证误差先下降后上升。当验证误差没有进一步改善时,算法就提前终止。这种策略被称作早停early stopping
- 早停是深度学习中最常用的正则化形式,因为它简单、有效
- 当训练终止时,返回的不是最新的模型参数,而是验证误差最小的模型参数,因此需要频繁存储模型参数
- 早停算法:
输入:当前验证集的误差非最小值的次数、验证集验证的间隔 、初始参数。
输出:最佳参数、获得最佳参数时迭代的步数。
算法步骤:先进行初始化。然后迭代直至满足条件停止。
- 优点:
- 它几乎不需要干涉基本的训练过程,适合任何模型。
- 可以单独使用,或者与其他的正则化策略相结合。
- 早停不仅有正则化的好处,还有降低计算成本的好处。
5. Dropout
- 在前向传播过程中,对网络中的每个隐层,每个隐单元都以一定的概率p_{drop} 被删除,最后得到一个规模更小的网络。在反向传播过程中,仅仅针对该小网络进行权重更新。
- 所谓的删除,即指定该该隐单元的输出都为 0。一旦隐单元的权重为0,则该隐单元对后续神经元的影响均为 0。
- 输入层和输出层的神经元不会被删除,因为这两个层的神经元的数量是固定的。理论上可以对输入层应用dropout ,使得可以有机会删除一个或者多个输入特征。但实际工程中,通常不会这么做。
- 隐单元删除发生在一个训练样本的训练期间。
- 不同的训练样本,其删除的隐单元的集合是不同的,因此裁剪得到的小网络是不同的。
- 不同的训练样本,隐单元被删除的概率 都是相同的。
- 不同batch 之间的同一个训练样本,其删除的隐单元的集合也是不同的。
- 在不同的梯度更新周期,会从完整的网络中随机删除不同的神经元,因此裁剪得到的小网络是不同的。但是在这个过程中,隐单元被删除的概率是相同的。
- 可以指定某一个隐层或者某几个隐层执行dropout,而没有必要针对所有的隐层执行dropout。
- 可以对网络的每个隐单元指定不同的删除概率,但实际工程中,通常不会这么做。
五. 深度模型中的优化
内容太多了,有时间单独写一篇博客描述这块的内容。
