在训练模型时可能遇到以下问题。
1、model bias
模型太过简单,不同未知参数得到不同的函式,所有的函式集合成函式集,函式集中没有让loss变低的函式,即让loss变低的函式不在模型可以描述的范围内。
解决方案:重新设计model,增加feature(函式中的x),通过deep learning让他有更大的弹性。
2、optimization issue
没有找到最低的loss,如下图
model bias与optimization issue的区分
在判断该问题时,可以先训练一个较浅或者较简单的网络,再训练一个较深的网络,如果较深的网络得到的loss比浅网络的loss还大,则是optimization issue问题。
3、optimization失败(local minima问题和saddle point问题)
通常optimization失败主要是因为local minima问题和saddle point问题,其问题如下图所示。当问题处于local minima时函数将无处可走,但当问题处于saddle point时问题还可以解决。
要判断损失函数处于local minima情况还是saddle point情况,需要对损失 函数进行计算
首先将损失函数进行泰勒展开,下图中是泰勒展开的式子。
由下图可以观察到,当处于critical point处,绿框中的值为0,则损失函数的变化主要看红框中函数。
所以可以根据来判断此处为local minima还是Saddle point。
上图中将(θ-)用向量v来表示。
如果对任何可能的v,Hv都大于零,也就是说现在θ无论为任何值,红色框里面都大于零。也就是L(θ)>L(),那么在处为local minima。在线性代数中,如果对所有的v,Hv都大于零,那这种矩阵叫做positive definite(正定矩阵),这类矩阵的所有的eigen value(特征值)都是正的。所以如果算出一个hessian,H的eigen value全为正。
若对任何可能的v,Hv都小于零,也就是说现在θ无论为任何值,红色框里面都小于零。也就是L(θ)<L(),那么在出为local maxima。而此处H的eigen value全为负数。
当Hv有时大于0有时小于0时,处为saddle point。此处H的eigen value有正有负。
当确定saddle point后我们还需要确定θ的更新方向。
有线性代数特征可得,当<0时,Hv<0,则,因此,<0时所对应的特征向量即为未知参数的变化量,。
下面我们举个例子,取模型函数为y=w1w2x,随机取数值x=1,在此处=1。
接下来定义该模型的损失函数
该损失函数如下图所示
将Loss的gradient求出来,w₁对L的微分,w₂对L的微分:
如果w₁=0 w₂=0就在圆心,并且w₁代0 w₂代0,w₁对L的微分 w₂对L的微分,算出来就都是零。这个时候就知道原点就是一个critical point,
接下来判断该点是为local minima还是Saddle point,计算H及其特征值。
H举证的特征值一正一副,所以是saddle point。
H知道了驻点的类型为鞍点,那么也可以通过H知道update的方向。
负特征值负特征值对应的特征向量为u,其中u+(其中为[0,0]T)为w1,w2更新的方向
下图为w1,w2更新的方向
4、overfitting
出现现象:训练集loss小,测试集loss大。
如下图所示,右边的函数就是过拟合了,虽然它在训练集上将所有的点都放在了线上,但是如果再来一个点就会不起作用,这就是过拟合
overfitting的解决办法:
1、使用更灵活的模型
2、给模型多些限制(较少的参数、公用参数、较少的feature,提前结束训练 )
如何选出这个最合适的model?训练模型时对训练数据进行分类
根据validation set优化未知参数。
training set 和validation set分类如下图所示,将training set分为n等分,其中一份为val,将这几个数据的不同组合放在不同模型中训练,选出平均Loss最小的模型。