【一起入门NLP】中科院自然语言处理第3课-前馈神经网络DNN(反向传播+梯度下降)

专栏介绍:本栏目为 “2021秋季中国科学院大学胡玥老师的自然语言处理” 课程记录,不仅仅是课程笔记噢~ 如果感兴趣的话,就和我一起入门NLP吧

目录

  • 人工神经元模型
  • 激活函数
  • 前馈神经网络DNN结构
  • 反向传播算法(Back Propagation)
    • 1.损失函数
    • 2.梯度下降算法
      • 步骤
      • 问题
      • 种类
    • 3.梯度消失问题
      • 问题定义
      • 可能导致梯度消失的激活函数
      • 解决方法

人工神经元模型

人工神经元是对生物神经元的模仿

1. 生物神经元
【一起入门NLP】中科院自然语言处理第3课-前馈神经网络DNN(反向传播+梯度下降)_第1张图片
从图中可以看出生物神经元连接这多个轴突,有多个输入和一个输出

2. 人工神经元模型:
人工神经网络:由多个神经元组成的具有并行分布结构的神经网络模型

从本节课开始,我们慢慢会接触到很多模型,对于一个模型,要求我们明确四点

  1. 输入是什么?
  2. 输出是什么?
  3. 参数是什么?
  4. 函数关系是什么?

【一起入门NLP】中科院自然语言处理第3课-前馈神经网络DNN(反向传播+梯度下降)_第2张图片

  • 举例:这个神经元模型用来判断–小明会不会去电影
  • 输入:x1=小明刚好有时间,x2=有精彩的电影上线,x3=天气适合出行,xn=…即,输入是众多可能会里带来影响的因素
  • 权重:每个输入会配有一个权重,用来描述这个输入的影响程度,如果小明并不在乎天气情况,那么x3的权重就会很小,甚至为0
  • 偏置:可理解为与输入无关的其他固有影响因素,比如小明本就是一个特别讨厌看电影的人,那么无论输入是什么,小明去看电影的可能性受到这个偏置的影响,会变得很小。
  • 输出:描述小明最后会不会去电影院,1表示去,0表示不去。
  • 参数:权重W 偏置b
  • 函数关系:在这个模型中我们要考虑两个地方的函数关系,一个是Z,一个函数

其中Y和Z是通过激励函数映射起来的,我们展开来讲激活函数

激活函数

  • 为什么需要激活函数?
    • 增强网络的表达能力,加入非线性因素,解决线性模型所不能解决的问题
  • 激活函数的性质
    • 连续并可导(允许少数点上不可导)的非线性函数:可导的激活函数可以直接利用数值优化的方法来学习网络参数。
    • 激活函数及其导函数要尽可能的简单:有利于提高网络计算效率。
    • 激活函数的导函数的值域要在一个合适的区间内:不能太大也不能太小,否则会影响训练的效率和稳定性。
  • 常见激活函数及导数
    • Logistic/sigmoid,ReLu,Tanh
      【一起入门NLP】中科院自然语言处理第3课-前馈神经网络DNN(反向传播+梯度下降)_第3张图片

相比于 Logistic/sigmoid,Tanh激活函数,ReLu有一些优点,可以看这篇博客中的简答题:
【一起入门MachineLearning】中科院机器学习-期末题库-【单选题54,47,51,64+简答题8,10,23】

前馈神经网络DNN结构

前馈神经网络中,各神经元分别属于不同的层。整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示 。
【一起入门NLP】中科院自然语言处理第3课-前馈神经网络DNN(反向传播+梯度下降)_第4张图片
DNN的参数是层间连线权重W以及各层权重b,那这些参数应该如何学习得到呢?这就需要引入反向传播算法了。

反向传播算法(Back Propagation)

核心思想:将输出误差以某种形式反传给各层所有的单元,各层按照本层误差修正各单元连接权值。那么就有两个问题需要考虑:

  1. 误差如何表示?- 损失函数
  2. 权值如何修正?- 梯度下降

1.损失函数

我们用损失函数来描述标准答案与实际输出之间的误差,常见的损失函数有以下三种:

  1. 绝对值损失函数
  2. 平方损失函数
  3. 交叉熵损失函数
    【一起入门NLP】中科院自然语言处理第3课-前馈神经网络DNN(反向传播+梯度下降)_第5张图片

2.梯度下降算法

在反向传播算法中,每一层都需要依据反传回来的误差调整权重,调整的目标无疑是尽可能让误差最小,而沿着梯度的方向调整,将会最快达到误差的最小值,即损失函数(也可以叫目标函数)的极小值。

步骤

  1. 定义损失函数(和上文中所提到的三种损失函数一样,只是换了一个表示形式)
    【一起入门NLP】中科院自然语言处理第3课-前馈神经网络DNN(反向传播+梯度下降)_第6张图片

  2. 优化损失函数:通过求损失函数的极小值来确定参数。

  • 损失函数E对参数w的梯度表示为:
    在这里插入图片描述
  • 梯度方向是表示值大小增大的方向,而此处需要找最小值,因此需要梯度下降,即下降最快的方向是梯度的负方向
    【一起入门NLP】中科院自然语言处理第3课-前馈神经网络DNN(反向传播+梯度下降)_第7张图片
  • 其中参数a表示学习率,决定了参数移动到最优值速度快慢。

问题

1. 参数初始值如何定?
参数初始设置将影响参数学习效果,为避免各参数初值设置为相同值,参数初值设置因可能随机。
2. 学习率应该如何设置?
学习率不应该太大也不应该太小。如果学习率过大,很可能会越过最优值,找不到。如果学习率过小,优化的效率可能会迭代很多次才找到最优解,收敛速度慢。

种类

  1. 梯度下降法:将所有的输入一起调
  2. 随机梯度下降法:用一条数据调整一次参数
  3. mini-batch梯度下降法:输入最小数据集

梯度下降算法的分类是根据不同损失函数而言的,这三种梯度下降算法的损失函数如下图所示:
【一起入门NLP】中科院自然语言处理第3课-前馈神经网络DNN(反向传播+梯度下降)_第8张图片

至此,我们可以总结出DNN的训练过程:

  1. 前馈计算每层的状态和激活值,直到最后一层
  2. 反向传播计算每一层的误差
  3. 计算每一层参数的偏导数,并更新参数

3.梯度消失问题

问题定义

在误差反向传播过程中,需要对损失函数求导,损失函数描述了标准答案与实际输出的误差,在DNN中,输出是要经过一个激活函数的。这就意味着,损失函数的倒数一定与激活函数的导数有关联关系:在这里插入图片描述
激活函数的误差从输出层反向传播时每一层都要乘激活函数的导数,当激活函数的导数值小于1时,误差经过每一层传递都会不断衰减,当网络很深时甚至消失。这就是梯度消失问题。

如果激活函数的导数值很大,误差经过每一层传递都会不断放大,这就会造成梯度爆炸问题,解决梯度爆炸问题的方法是梯度剪枝。

可能导致梯度消失的激活函数

  1. sigmoid函数:导数的最大值只有0.25,小于1
  2. Tanh函数:导数的最大值为1,且当|x|>3时,导数几乎为0。
    【一起入门NLP】中科院自然语言处理第3课-前馈神经网络DNN(反向传播+梯度下降)_第9张图片

解决方法

  1. 选择合适的激活函数
  2. 用复杂的门结构代替激活函数
  3. 残差结构

解决过拟合问题的方法

  1. 损失函数中加入适当的正则项
  2. Dropout

DNN网络的pytorch实现可以参考这次的作业:
NLP作业一:RNN,DNN,CNN 进行猫狗分类(pytorch入门)【代码+报告】

你可能感兴趣的:(自然语言处理,自然语言处理,神经网络,dnn)