神经网络和深度学习

前言

距离我第一次学习并实践神经网络已经接近2年了,这2年里我在机器学习和自然语言处理这个领域有明显的进步,现在是时候系统性的总结和提高我的深度学习技能,并将之置于我今后个人实现AI系统的首选工具了。

普通的前向传播网络有两种训练方法:随即梯度下降和批量梯度下降。批量梯度下降通过累计训练样本的误差,反向传播回网络隐层节点来计算真实参数梯度,但缺点是容易受训练样本分布误差的影响而导致网络模型过拟合。随即梯度下降会利用每个训练样本依次计算参数梯度(根据这个样本的模型输出误差)并更新参数值,经验实验表明随即梯度下降能有效的缓解模型过拟合。

 

神经网络的有效性

依靠模型的表征能力,神经网络可以发挥训练数据的最大潜能,但是如果可采集的数据有限,那么神经网络的有效性随之受限。神经网络不能解决某一实践问题的原因一般有两个,第一是由于数据规模的限制导致训练集的构成这一样本分布不能有效逼近总体分布,第二是各种原因导致的模型过拟合。模型过拟合的问题一般与数据规模成反比,即大规模训练数据可以有效缓解过拟合问题。

模型有效性与数据规模的悖论

理论上讲,在真实环境上完美应用的模型需要有反映真实环境所有变量分布的训练集(即所有的可能真实数据),  但如果能够获取这些数据则失去了数学建模的必要性。(模型构建的目的是估计真实的变量分布,根据已知数据预测未知数据) 所以模型训练的最终目的是在训练集构建与模型有效性之间找到一个合理的平衡点,以合理的成本解决实际问题。

循环神经网络(RNN)

在传统的前向神经网络中,所有训练样本按照一定的顺序被依次作为网络输入送入输入层,这时每个训练样本由一个特征向量表示(Vector),这个特征向量的长度和网络的输入层的节点个数相对应。由于这一网络特性的约束,前向神经网络只能处理固定维数的特征输入。

在循环神经网络中(RNN), 每个训练样本同样由一个特征向量表示(Vector), 与前面不同的是,循环神经网络的输入特征向量是对训练样本离散时间维度的建模,每个维度代表在当前离散时间点上样本的特征值。为了拟合这种表征离散时间维度的特征向量,循环神经网络把隐层输出接入(同一或不同)隐层的输入,在隐层自身(或与其他隐层)之间形成闭环用以将参数更新与不同时间节点特征值之间的共现关系联系起来(在传统前向网络中特征向量中特征值之间的向后关系同样可以表征这种联系,只是由于网络自身的结构特性所以不适合此类任务)

在循环神经网络中,单个训练样本特征向量的所有维度(时间点)特征值被依次送入网络输入层,网络计算所有时间点的输出并累计误差值。