专栏介绍:本栏目为 “2021秋季中国科学院大学胡玥老师的自然语言处理” 课程记录,不仅仅是课程笔记噢~ 如果感兴趣的话,就和我一起入门NLP吧
目录
- 人工神经元模型
- 激活函数
- 前馈神经网络DNN结构
- 反向传播算法(Back Propagation)
- 1.损失函数
- 2.梯度下降算法
- 步骤
- 问题
- 种类
- 3.梯度消失问题
- 问题定义
- 可能导致梯度消失的激活函数
- 解决方法
人工神经元是对生物神经元的模仿
1. 生物神经元
从图中可以看出生物神经元连接这多个轴突,有多个输入和一个输出
2. 人工神经元模型:
人工神经网络:由多个神经元组成的具有并行分布结构的神经网络模型
从本节课开始,我们慢慢会接触到很多模型,对于一个模型,要求我们明确四点
- 输入是什么?
- 输出是什么?
- 参数是什么?
- 函数关系是什么?
其中Y和Z是通过激励函数映射起来的,我们展开来讲激活函数
相比于 Logistic/sigmoid,Tanh激活函数,ReLu有一些优点,可以看这篇博客中的简答题:
【一起入门MachineLearning】中科院机器学习-期末题库-【单选题54,47,51,64+简答题8,10,23】
前馈神经网络中,各神经元分别属于不同的层。整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示 。
DNN的参数是层间连线权重W以及各层权重b,那这些参数应该如何学习得到呢?这就需要引入反向传播算法了。
核心思想:将输出误差以某种形式反传给各层所有的单元,各层按照本层误差修正各单元连接权值。那么就有两个问题需要考虑:
我们用损失函数来描述标准答案与实际输出之间的误差,常见的损失函数有以下三种:
在反向传播算法中,每一层都需要依据反传回来的误差调整权重,调整的目标无疑是尽可能让误差最小,而沿着梯度的方向调整,将会最快达到误差的最小值,即损失函数(也可以叫目标函数)的极小值。
1. 参数初始值如何定?
参数初始设置将影响参数学习效果,为避免各参数初值设置为相同值,参数初值设置因可能随机。
2. 学习率应该如何设置?
学习率不应该太大也不应该太小。如果学习率过大,很可能会越过最优值,找不到。如果学习率过小,优化的效率可能会迭代很多次才找到最优解,收敛速度慢。
梯度下降算法的分类是根据不同损失函数而言的,这三种梯度下降算法的损失函数如下图所示:
至此,我们可以总结出DNN的训练过程:
- 前馈计算每层的状态和激活值,直到最后一层
- 反向传播计算每一层的误差
- 计算每一层参数的偏导数,并更新参数
在误差反向传播过程中,需要对损失函数求导,损失函数描述了标准答案与实际输出的误差,在DNN中,输出是要经过一个激活函数的。这就意味着,损失函数的倒数一定与激活函数的导数有关联关系:
激活函数的误差从输出层反向传播时每一层都要乘激活函数的导数,当激活函数的导数值小于1时,误差经过每一层传递都会不断衰减,当网络很深时甚至消失。这就是梯度消失问题。
如果激活函数的导数值很大,误差经过每一层传递都会不断放大,这就会造成梯度爆炸问题,解决梯度爆炸问题的方法是梯度剪枝。
解决过拟合问题的方法
- 损失函数中加入适当的正则项
- Dropout
DNN网络的pytorch实现可以参考这次的作业:
NLP作业一:RNN,DNN,CNN 进行猫狗分类(pytorch入门)【代码+报告】