NLP学习笔记40-神经网络收敛性

一 序

  本文属于贪心NLP训练营学习笔记系列。

二 optimization of deeplearning

这里老师简单提了下,我们知道凸函数是有全局最优解的。深度学习是非凸函数, highly non-convex function.

只有局部最优解。特点:很难训练。

如何在所有的局部最优解里面寻找最好的局部最优解,导致两个领域的发展 , "如何更好初始化参数"和"寻求更好地优化器"。

知乎上看了下深度学习为啥非凸?没找到很清晰通俗的解释。没看懂这块,我猜测收敛的局部极小值不会与全局的差太多,老师说如果能找到这样的优化方法,就不用这么多层网络模型了 。

高票答案是反证法:https://www.zhihu.com/question/265516791

一个高维凸函数可以等价于无数个一维凸函数的叠加。

反证:存在这样的线。找到这个方向上找到两个点,他们平均的函数值比他们平均值上的函数值要低就行了。

2.2 plateau 问题

NLP学习笔记40-神经网络收敛性_第1张图片

上图是一个函数的曲线,加入我们使用梯度下降法,就是我们沿着梯度的方向前进,当遇到一段平行的区间(红圈内),梯度已经平稳或者损失函数不在变化,所以会误认为达到终止条件。

通常需要使用momentum动量 ,好处:可以很轻松的跳出伪最优解。下面还有一个好处,使用动量梯度下降法(gradient descent with momentum),其速度会比传统的梯度下降算法快的多。。推荐看知乎 的这篇文章:https://zhuanlan.zhihu.com/p/34240246

初学者知道有这么问题及优化思路即可。

3 SGD收敛性(SGD with Converge)

在开始本节学习之前。先回顾下神经网络之前的损失函数介绍。

深度学习算法这里,抛去去模型选择,主要是对于任意给定的网络结构,计算出最优的网络参数,换句话说模型训练过程本质上就是求解一个最优化问题。

就是  min f( \theta ) ,其中f为损失函数,\theta为网格参数。

具体来说,对于样本集{x_k,y_k} ,x是输入,y是标签。

损失函数为各个样本损失函数的和,f计算的是预测值与真实值y之间的损失值。预测值依赖于输入值x,网络结构 ,网络参数\theta

argmin_{\theta }=\frac{1}{T} \sum_t L(f(x^{(t)} ;\theta ),y^{(t)} ) + \lambda \Omega (\theta )

之前学习sgd, \theta _t= \theta _{t-1}-\eta _t \Delta _{\theta ^{t-1}} f(\theta )

这里\eta _t 步长有关,\eta _t太大 会有可能不收敛diverge,\eta _t太小,时间成本大slow converge.

理论上:满足以下条件时SGD一定会收敛。

\sum_{t=1}^{+ \infty } \eta _t= + \infty  式子1

\sum_{t=1}^{+ \infty } \eta _t^2 < + \infty 式子2

举例当\eta _t =\frac{1}{2^t}时,\sum_{t=1}^{+ \infty } \eta _t= \frac{1}{2} + \frac{1}{2^2}+\frac{1}{2^3}+...<1 不符合式子1.

通常\eta _t=\frac{\alpha }{ 1+ \delta t}  其中 \alpha是固定的类似于常数项, \delta是下降函数。

上面都是理论 的,  \eta _t使用了变长的步长。

实际情况下,我们想要验证某个模型的准确率,一开始我们不确定是不是我们程序是不是正确的。

使用固定步长小一些,有助于我们先跑通,减少不确定性参数,方便定位问题。第二步再去做调优。

Early Stopping

NLP学习笔记40-神经网络收敛性_第2张图片

这个图x轴,代表的是nums of epochs. y轴是错误数

epoch 是指当一个完整的数据集通过了神经网络一次并且返回了一次,(换个说法所有训练样本在神经网络中都进行了一次正向传播和一次反向传播 )

为啥要nums of epochs 》1?或者要更新多次。

我们需要将完整的数据集在同样的神经网络中传递多次效果更好,通常会验着上图画大的那样在训练数据上。

 通常我们 在训练的时候已经把数据提前分好了,一部分数据是训练数据,一部分数据是验证数据。一边在训练集上训练,一边也在验证集上验证的。注意竖线左侧分割为欠拟合,右侧过拟合。

在验证的时候突然发现错误率在验证集上提高了,那就要停下来。在这个点上的参数就是我们最优的参数了。这里老师用了表达叫with look ahead. 

   不是上升了立即停,此时可能存在波动的情况,就是截图的右下角绿色曲线。遇到错误率上升了我们先把这个节点记下来,再执行10个循环试试,确实上升了。才真正停止。

在深度学习训练的时候我们经常会采用EarlyStopping的方式,老师认为它跟dropout  都是有效的防止过拟合的方法。

补充一个现象:traindata  与验证数据 之间曲线距离叫gap.  简单模型如线性回归会比较接近,但是复杂模型如RNN会差距大。

 

 

你可能感兴趣的:(NLP,SGD收敛性,神经网络,Early,Stopping)