深度学习之收敛问题

  1. 数据库太小一般不会带来不收敛的问题,只要你一直在train总会收敛(rp问题跑飞了不算)。反而不收敛一般是由于样本的信息量太大导致网络不足以fit住整个样本空间样本少只可能带来过拟合的问题,你看下你的training set上的loss收敛了吗?如果只是validate set上不收敛那就说明overfitting了,这时候就要考虑各种anti-overfit的trick了,比如dropout,SGD,增大minibatch的数量,减少fc层的节点数量,momentum,finetune等。
  2. .learning rate设大了会带来跑飞(loss突然一直很大)的问题,这个是新手最常见的情况——为啥网络跑着跑着看着要收敛了结果突然飞了呢?可能性最大的原因是你用了relu作为激活函数的同时使用了softmax或者带有exp的函数做分类层的loss函数。当某一次训练传到最后一层的时候,某一节点激活过度(比如100),那么exp(100)=Inf,发生溢出,bp后所有的weight会变成NAN,然后从此之后weight就会一直保持NAN,于是loss就飞起来啦。
    在做GNN实验的时候,经常遇到准确率突然下降的情况,自己也发现不了原因,因为准确率一直不错,索性就一直保留着这个为题,如图,可以看到期间一共跑飞过两次,因为学习率设的并不是非常大所以又拉了回来。如果lr设的过大会出现跑飞再也回不来的情况。这时候你停一下随便挑一个层的weights看一看,很有可能都是NAN了。对于这种情况建议用二分法尝试。0.1~0.0001.不同模型不同任务最优的lr都不一样。深度学习之收敛问题_第1张图片
  3. 尽量收集更多的数据。有个方法是爬flickr,找名人标签,然后稍微人工剔除一下就能收集一套不错的样本。其实收集样本不在于多而在于hard,比如你收集了40张基本姿态表情相同的同一个人的图片不如收集他的10张不同表情的图片。之前做过试验,50张variance大的图per person和300多张类似的图per person训练出来的模型后者就比前者高半个点。
  4. 尽量用小模型。如果数据太少尽量缩小模型复杂度。考虑减少层数或者减少kernel number。

你可能感兴趣的:(深度学习实验)