学习笔记
一、循环神经网络
LSTM
长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息,对很多需要“长期记忆”的任务来说,尤其好用。
其中:
遗忘门:控制上一时间步的记忆细胞 输入门:控制当前时间步的输入
输出门:控制从记忆细胞到隐藏状态
记忆细胞:⼀种特殊的隐藏状态的信息的流动
GNU
GRU(Gate Recurrent Unit)是循环神经网络(Recurrent Neural Network, RNN)的一种。和LSTM(Long-Short Term Memory)一样,也是为了解决长期记忆和反向传播中的梯度等问题而提出来的。相比LSTM,使用GRU能够达到相当的效果,并且相比之下更容易进行训练,能够很大程度上提高训练效率,因此很多时候会更倾向于使用GRU。
其中:
重置门有助于捕捉时间序列里短期的依赖关系;
更新门有助于捕捉时间序列里长期的依赖关系。
深度循环神经网络和双向循环神经网络
1.深度循环神经网络不是越深越好,越深对于数据集要求更高;
2.双向循环神经网络中两者隐藏状态H的连接是1维连接,也就是concat中参数dim=1,最后1维的维度变为两者1维维度之和。
二、梯度消失和梯度爆炸
梯度消失和梯度爆炸
tanh、sigmoid等存在饱和的激活函数会出现梯度消失
深度模型有关数值稳定性的典型问题是梯度消失和梯度爆炸。当神经网络的层数较多时,模型的数值稳定性更容易变差。
层数较多时,梯度的计算也容易出现消失或爆炸。
随机初始化模型参数:
在神经网络中,需要随机初始化参数。因为,神经网络模型在层之间各个单元具有对称性。否则会出错。
若将每个隐藏单元参数都初始化为相等的值,则在正向传播时每个隐藏单元将根据相同的输入计算出相同的值,并传递至输出层。在反向传播中,每个隐藏单元的参数梯度相等。因此,这些参数在使用基于梯度的优化算法迭代后值依然相等。之后的迭代亦是如此。 据此,无论隐藏单元有几个,隐藏层本质上只有一个隐藏单元在发挥作用。所以,通常将神经网络的模型参数,进行随机初始化以避免上述问题。
例如:PyTorch的默认随机初始化、Xavier随机初始化。
环境因素
- 协变量偏移:
输入分布 P(x)改变,条件分布 P(y∣x)不改变
如猫和狗中,训练数据使用的是猫和狗的真实的照片,但是在测试时,我们被要求对猫和狗的卡通图片进行分类。这就是输入特征发生了变化 - 标签偏移:
标签P(y)上的边缘分布的变化,但类条件分布P(x∣y)是不变的
如训练数据集,数据很少只包含流感p(y)的样本。 而测试数据集有流感p(y)和流感q(y),其中不变的是流感症状p(x|y)。 - 概念偏移:
条件分布 P(y∣x)发生了变化
如在建立一个机器翻译系统中,分布P(y∣x)可能因我们的位置的不同而发生变化。
三、过拟合和欠拟合
一类是模型无法得到较低的训练误差,我们将这一现象称作欠拟合(underfitting);
另一类是模型的训练误差远小于它在测试数据集上的误差,我们称该现象为过拟合(overfitting)。 在实践中,我们要尽可能同时应对欠拟合和过拟合。虽然有很多因素可能导致这两种拟合问题,在这里我们重点讨论两个因素:模型复杂度和训练数据集大小。
解决方法:
1.尽量大一点的训练集;
2.正则化惩罚项(权重衰减)减少过拟合: 范数正则化等
3.丢弃法减少系数,但在测试模型时,我们为了拿到更加确定性的结果,一般不使用丢弃法。
4.留出法和交叉验证法处理数据集(oob)。