过拟合&欠拟合
我们使用测试集上的误差来近似泛化误差。所以不能在测试数据上调整参数,这样会造成完全的过拟合。
k折交叉验证会轮流留出一部分进行调参。
造成这些现象的有模型复杂度和训练数据集大小等因素。
欠拟合可能是由于模型复杂度不高。
一般有两种方法来应对过拟合:
- 权重衰减(L2范数正则化)
- Dropout(以一定概率丢弃隐藏单元)、
丢弃法中,隐藏单元有概率p会被丢弃,1-p概率被 1 1 − p \frac {1}{1-p} 1−p1拉伸。丢弃发不改变整体输入的期望值。
梯度消失&梯度爆炸
在深层神经网络中,模型数值稳定性容易变差。
另外通常需要随机化模型参数,特别是权重参数。防止在参数更新过程中出现参数相同的情况而导致更新效果差/无法更新。有一种常用的方法为Xavier随机初始化。
环境因素:
协变量偏移:特征分布出现了变化(协变量的变化)
标签偏移:测试集标签分布与训练集不同/出现了新标签
概念偏移:标签定义本身在逐步变化
循环神经网络进阶
RNN中,仅仅使用梯度裁剪只能应对梯度爆炸,无法应用梯度衰减。通过一些高级的RNN架构来完善这个问题。
GRU:门控RNN。可以捕捉长时间的序列中依赖关系。
每个循环单元中,有重置门(捕捉短期依赖关系),有更新们(捕捉长期依赖关系)。
LSTM:长短期记忆。通过记忆细胞
C
t
C_{t}
Ct来记录隐藏层状态之外的额外信息。
每个循环单元中,有遗忘门(控制上一时间步的记忆细胞信息),有输入门(控制当前记忆细胞输入),有输出门(控制从记忆细胞信息到隐藏状态)。
深度循环神经网络:多层隐藏层。内部作用更加抽象。注意盲目加深层数会使得收敛困难。
双向循环神经网络:隐藏层之内,既有上一个时间步对当前时间步的作用,又有当前时间步队上一时间步的作用,综合影响下才会得出输出结果。即
H
t
=
(
H
t
→
,
H
t
←
)
H_{t}=\left ( \overrightarrow {H_{t}}, \overleftarrow {H_{t}}\right )
Ht=(Ht,Ht)
H
t
→
\overrightarrow {H_{t}}
Ht和
H
t
←
\overleftarrow {H_{t}}
Ht间通过concat连结。