NLP修炼之旅(Day8)

  1. 前馈神经网络、网络层数、输入层、隐藏层、输出层、隐藏单元、激活函数的概念。
  2. 感知机相关;利用tensorflow等工具定义简单的几层网络(激活函数sigmoid),递归使用链式法则来实现反向传播。
  3. 激活函数的种类以及各自的提出背景、优缺点。(和线性模型对比,线性模型的局限性,去线性化)
  4. 深度学习中的正则化(参数范数惩罚:L1正则化、L2正则化;数据集增强;噪声添加;early stop;Dropout层)、正则化的介绍。
  5. 深度模型中的优化:参数初始化策略;自适应学习率算法(梯度下降、AdaGrad、RMSProp、Adam;优化算法的选择);batch norm层(提出背景、解决什么问题、层在训练和测试阶段的计算公式);layer norm层。
  1. 前馈神经网络

前馈(feedforward)也可以称为前向,从信号流向来理解就是输入信号进入网络后,信号流动是单向的,即信号从前一层流向后一层,一直到输出层,其中任意两层之间的连接并没有反馈(feedback),亦即信号没有从后一层又返回到前一层。如果从输入输出关系来理解,则为当输入信号进入后,输入层之后的每一个层都将前一个层的输出作为输入

假设有三个函数 f 1 , f 2 , f 3 f_{1}, f_{2}, f_{3} f1,f2,f3组成链式复合结构,则: f ( x ⃗ ) = f 3 ( f 2 ( f 1 ( x ⃗ ) ) ) f(\vec{x})=f_{3}\left(f_{2}\left(f_{1}(\vec{x})\right)\right) f(x )=f3(f2(f1(x )))
其中 f 1 f_{1} f1被称作网络的第一层 f 2 f_{2} f2为网络第二层, f 3 f_{3} f3称为网络第三层。链的全长称作模型的深度或者神经网络的层数

  1. 特征学习

  • 线性模型简单高效,且易于求解。但是它有个明显的缺陷:模型的能力被局限在线性函数中,因此它无法理解任意两个输入变量间的非线性相互作用
  • 深度学习中,将representation参数化为 ϕ ( x ⃗ , θ ⃗ ) \phi(\vec{x}, \vec{\theta}) ϕ(x ,θ ),并使用优化算法来寻找 θ ⃗ \vec{\theta} θ 从而得到一个很好的 representation
  • 通过特征学习来改善模型不仅仅适用于前馈神经网络,也适用于几乎所有的深度学习模型
  1. 训练

  • 训练一个深度前馈网络和训练一个线性模型的选项相同:选择优化算法、代价函数、输出单元的形式。

  • 除此之外还需要给出下列条件:
    由于深度前馈网络引入了隐层的概念,因此需要选择适用于隐层的激活函数。激活函数接受隐层的输入值,给出了隐层的输出值。

    深度前馈网络的网络结构也需要给出,其中包括:有多少层网络、每层网络有多少个单元、层级网络之间如何连接。

    深度神经网络训练时需要计算复杂函数的梯度,通常这采用反向传播算法(back propagation)和它的现代推广来完成

  1. 激活函数

激活函数的设计是一个非常活跃的研究领域,并且目前还没有明确的指导性理论,难以决定何时采用何种类型的激活函数是最佳方案。
通常不能预先判断哪种类型的激活函数工作的最好,所以设计过程中需要反复试错,通过测试集评估其性能来选择合适的激活函数。

一般默认采用的激活函数是修正线性单元(relu),但是仍然有许多其他类型的激活函数。

某些激活函数可能并不是在所有的输入上都是可微的。如:修正线性单元 g ( z ) = max ⁡ { 0 , z } g(z)=\max \{0, z\} g(z)=max{0,z}在z=0处不可微,这使得在该点处梯度失效。
事实上梯度下降法对这些隐单元的表现仍然足够好,原因是:

  • 神经网络的训练算法通常并不会达到代价函数的局部最小值,而仅仅是显著地降低代价函数的值即可。因此实际上训练过程中一般无法到达代价函数梯度为零的点,所以代价函数取最小值时梯度未定义是可以接受的。

  • 不可微的点通常只是在有限的、少数的点上不可微,在这些不可微的点通常左导数、右导数都存在。

  • 神经网络训练的软件实现通常返回左导数或者右导数其中的一个,而不是报告导数未定义或者产生一个错误。这是因为计算机计算 0 点的导数时,由于数值误差的影响实际上不可能计算到理论上 0 点的导数,而是一个微小的偏离:向左侧偏离就是左导数,向右侧偏离就是右导数

  1. 激活函数对比

sigmoid主要缺点:
容易饱和从而使得梯度消失。当激活函数取值在接近0或者1时会饱和,此时梯度为近似为0。函数输出不是零中心的。这会导致后续神经元的输出数值总是正数。

tanh
优点:函数输出是零中心的。
缺点:容易饱和从而使得梯度消失。
tanh 激活函数几乎在所有场合都是优于sigmoid 激活函数的。但是有一种情况例外:如果要求函数输出是0~1 之间(比如表征某个概率),则二者之间必须用sigmoid。

**relu**:

优点:对随机梯度下降的收敛有巨大的加速作用,而且非常容易计算。
缺点:可能导致神经元死掉。
当一个很大的梯度流过 relu 神经元时,可能导致梯度更新到一种特别的状态:在这种状态下神经元无法被其他任何数据点再次激活。此后流过这个神经元的梯度将变成 0,该单元在训练过程中不可逆的死亡。
如果学习率设置的过高,可能会发现网络中大量神经元都会死掉。整个训练过程中,这些神经元都不会被激活。

leaky relu :为了解决 relu 死亡神经元的问题的尝试,但是效果并不明显。

  1. 正则化

正则化常用于缓解模型过拟合。过拟合发生的原因是模型的容量过大,而正则化可以对模型施加某些限制,从而降低模型的有效容量。

目前有多种正则化策略:

  • 有些正则化策略是向模型添加额外的约束,如增加对参数的限制。这是对参数的硬约束。

  • 有些正则化策略是向目标函数增加额外项。这是对参数的软约束。

  • 正则化策略代表了某种先验知识,即:倾向于选择简单的模型。

    在深度学习中,大多数正则化策略都是基于对参数进行正则化。正则化以偏差的增加来换取方差的减少,而一个有效的正则化能显著降低方差,并且不会过度增加偏差。

    在深度学习的实际应用中,不要因为害怕过拟合而采用一个小模型,推荐采用一个大模型并使用正则化

  1. 线性变换

对于某些任务来说,创建虚拟数据非常困难。如:在密度估计任务中,除非预先知道了密度函数,否则无法产生新的虚拟数据。
对于分类问题来说,创建虚拟数据非常简单。对于一个分类器,它将高维的输入
映射到类别。这意味着这种映射规则是不随坐标系的改变而改变的。因此可以通过线性变换,将训练集中的对图像分类问题,数据集增强特别有效。数据集增强也可以应用于语音识别任务。
常见的图片数据集增强方法:

  • 将训练图像沿着每个方向平移几个像素产生新的图像

  • 对训练图像进行旋转、翻转或者缩放

  • 对训练图像进行随机裁剪。实际上,随机裁剪图像的操作也可以被认为是预处理步骤,而不是数据集增强

  • 对训练图像进行颜色抖动:调整饱和度、调整亮度、调整对比度、调整锐度。
    对比度:图像画面的明暗反差程度。对比度越高,则图片亮的地方更亮,暗的地方越暗
    亮度:图像的明暗程度。亮度越高,则图像整体越亮
    饱和度:图像颜色种类的多少。饱和度越高,则图像的颜色种类越多,图像越鲜艳
    锐度:图像的边缘轮廓的锐利程度。锐度越高,则图像的边缘越清晰。

    在使用线性变换执行数据集增强时需要注意:

  • 某些线性变换会改变正确的类别。如:字符识别任务中, b/d以及6/9的图像, 不能执行水平翻转变换和旋转 180 度变换。

  • 某些线性变换难以执行。如:平面外的绕轴旋转(类似于翻页)难以通过简单的几何运算在输入图片上实现

  1. 参数初始化策略

有些优化算法是非迭代的,可以直接解析求解最优解;有些优化算法是迭代的,但是它们是初始值无关的。深度学习不具有这两类性质,通常是迭代的,且与初始值相关。

深度学习中,大多数算法都受到初始值的影响。初始值能够决定:算法最终是否收敛、以及收敛时的收敛速度有多快、以及收敛到一个代价函数较高还是较低的值。

深度学习中,初始值也会影响泛化误差,而不仅仅是目标函数的最优化。因为如果选择一个不好的初始值,则最优化的结果会落在参数空间的一个较差的区域。此时会导致模型一个较差的泛化能力。

目前深度学习中,选择初始化策略是启发式的。

大多数初始化策略使得神经网络初始化时实现一些良好的性质。但是这些性质能否在学习过程中保持,难以保证。
有些初始化点从最优化的观点是有利的,但是从泛化误差的观点来看是不利的。
设定一个好的初始化策略是困难的,因为神经网络最优化任务至今都未被很好理解。
对于初始点如何影响泛化误差的理论是空白的,几乎没有任何指导。
通常的参数初始化策略为:随机初始化权重,偏置通过启发式挑选常数,额外的参数也通过启发式挑选常数。

也可以使用机器学习来初始化模型的参数。在同样的数据集上,即使是用监督学习来训练一个不相关的任务,有时也能够得到一个比随机初始化更好的初始值。原因是:监督学习编码了模型初始参数分布的某些信息。

  1. 权重初始化

通常权重的初始化是从高斯分布或者均匀分布中挑选出来的值。从高斯分布还是均匀分布中挑选,看起来似乎没有很大差别,实际上也没有被仔细研究。该分布的范围(如均匀分布的上、下限)对优化结果和泛化能力有很大的影响。
初始权重的大小很重要,下面的因素决定了权重的初始值的大小:

  • 更大的初始权重具有更强的破坏对称性的作用,有助于避免冗余的单元。
  • 更大的初始权重也有助于避免梯度消失。
  • 更大的初始权重也容易产生梯度爆炸。

循环神经网络中,更大的初始权重可能导致混沌现象:对于输入中的很小的扰动非常敏感,从而导致确定性算法给出了随机性结果。
关于如何初始化网络,正则化和最优化有两种不同的角度:

  • 从最优化角度,建议权重应该足够大,从而能够成功传播信息。
  • 从正则化角度,建议权重小一点(如 正则化),从而提高泛化能力。
    实践中,通常需要将初始权重范围视作超参数。如果计算资源允许,可以将每层权重的初始数值范围设置为一个超参数,然后使用超参数搜索算法来挑选这些超参数。
  1. 偏置初始化

偏置的初始化通常更容易。大多数情况下,可以设置偏置初始化为零。
有时可以设置偏置初始化为非零,这发生在下面的三种情况:

  • 如果偏置是作为输出单元,则初始化偏置为非零值。假设初始权重足够小,输出单元的输出仅由初始化偏置决定,则非零的偏置有助于获取正确的输出边缘统计。
  • 有时选择偏置的初始值以免初始化引起激活函数饱和。如:ReLU 激活函数的神经元的偏置设置为一个小的正数,从而避免ReLU 初始时就位于饱和的区域。
  • 有时某个单元作为开关来决定其他单元是使用还是不使用。此时偏置应该非零,从而打开开关
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值