概述
Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶
过拟合、欠拟合及其解决方案
第一反应是训练数据集大小带来的影响,或许有很多研究怎么丰富数据集的文献吧,数据集大,那么复杂的模型就更好发挥作用。
1.过拟合常用的模型层面的应对方法:
- 权重衰减,也即L2-Norm Regularization。从公式和名字易见,该方法加入了对权重系数的2范数作为惩罚项从而学习到数值较小的参数。(那么自然而然会产生的问题就是:为什么不对偏置做正则化,这个可以去实验一下,应该会发现偏置没有权重敏感)
- 丢弃法。我的理解是,按照设定的概率丢掉(置为0)某个参数单元,从而减少参数依赖性。丢掉的数量算数学期望就能得到。
2.欠拟合:数据样本不足、模型过于简单(复杂度过低)导致
3.K折交叉验证:用不同子数据集来验证模型,贫穷限制了数据集,那就穷人孩子早当家。
梯度消失、梯度爆炸
容易想象,网络层数多的时候, 计算会指数爆炸或者衰减。梯度的原理也类似。严格地说就是数值稳定性问题。
1.随机初始化模型参数:因为假若隐藏单元都初始化相同值的时候,本质上只有1个隐藏单元在发挥作用,就好浪费。
2.Xavier随机初始化主要考虑到,模型参数初始化后,每层输出的方差不该受该层输入个数影响,且每层梯度的方差也不该受该层输出个数影响。(没看懂)
3.概念偏移,标签偏移,协变量偏移,乍一看没太看懂,也不知道为什么这个环境因素的内容会放在这一节。从课后习题来理解的话,用冬季的数据训练的模型,测试的时候混入了夏季的数据。
顺便看到了这类文章:
https://www.jiqizhixin.com/articles/2018-07-16-14 “众所周知,由于内部协变量偏移问题,深度神经网络很难被优化。”
4.梯度消失:对参数的优化步长过小,收效甚微,模型收敛十分缓慢(sigmoid激活函数就有可能会出现梯度消失的缺陷)
梯度爆炸:对参数的优化步长过大,难以收敛
均会导致模型训练困难。
5.模型训练流程:
- 获取数据集(观察样本感觉挺重要的,想到那句观察者即创造者)
- 数据预处理
- 模型设计
- 模型验证和模型调整(调参)
- 模型预测及提交
循环神经网络进阶
印象很深刻的就是视频讲得很清楚,让人听得聚精会神,甚至在模型代码那里听到一声汽车鸣笛(?)
理解可参考:
https://zhuanlan.zhihu.com/p/32481747
1.GRU和LSTM都引入了“门控”结构,稍有不同但大致理解起来差不多,GRU、LSTM都能捕捉时间序列中时间步距离较⼤的依赖关系,能一定程度缓解梯度消失与梯度爆炸的问题。
查了一下提出时间,LSTM1997年,GRU2014年,以及据说考虑硬件计算能力和时间成本,使用GRU比较多?
2.初步学习办法就是:首先观察图示结构,自己写一遍公式,以及size,还要考虑开头结尾的输入输出。
3.双向lstm,双向合理化。前向后向用concat联结。
4.有些门看起来形式是一样的,所以可能是训练完之后参数决定了他们的功能?下面这些不是很理解
5.根据课后题总结:
- LSTM单元中控制当前时间步输入的结构是输出门。
- 实现深层循环神经网络需要修改的参数是num_layers。
- GRU有重置门和更新门,没有遗忘门。重置门有助于捕捉时间序列里短期的依赖关系,更新门有助于捕捉时间序列⾥长期的依赖关系。
- 在LSTM模型的初始化中,需要初始化的参数是:第0个循环单元的记忆细胞和循环单元的值、门控单元中用于计算遗忘门的权重与偏差、用于计算输出的权重与偏差。不需要初始化的参数:每个循环单元中的记忆细胞和循环单元的值。(每个循环单元中的记忆细胞和循环单元的值为LSTM模型中的隐状态,而非参数,因此不需要初始化。)
- 深层循环网络层数越深效果未必越好,层数的加深会导致模型的收敛变得困难。
最大的问题在于,课程内容涉及到的东西其实还挺多的,暂时眼高手低没时间去弄代码。但按之前的经验来说,理解最快的办法就是看代码,所以问题还是在于对torch和python不太熟。
最后
以上就是怕孤独煎蛋为你收集整理的【动手学深度学习】Task03笔记汇总Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶的全部内容,希望文章能够帮你解决【动手学深度学习】Task03笔记汇总Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复