­

nn训练问题记录(1)

  • 2020 年 12 月 15 日
  • AI

nn的output完全一样或者基本差不多。

1、输入没做数据归一化表现就是模型收敛很慢,损失刚几个epochs就卡着不动下不去,主要原因和lr种输入没做归一化导致的两个问题,一个是模型优化问题,模型很难收敛,这一点和第二点类似;

除此之外,第二点,输入如果某些维度非常大也会导致这个问题,特别是对于分类问题尤其严重(回归问题比较少因为一般最后一层都是先行曾),本质上是分类问题的sigmoid或者softmax存在上下限,当输入特别大的时候网路的输出导致了激活函数饱和的问题;

2、学习率太大或太小,太大则损失函数一直在大幅震荡,模型随意学习,导致了某个情况下权重和所有的输入值的计算结果都很大或者很小,这一点对于二分类问题来说尤其严重,当输入都很大或者很小的时候,sigmoid的输出基本上趋近于1或者0,看起来输出都差不多的样子;学习率太小则是网络基本没怎么学习,此时主要和模型的初始化有关,这种问题引发的情况的可能性比较小;

3、问题本身的最佳输出就是可训练到的完全相同的输出,例如对于回归问题:

对于nn来说,上述的直线是很好拟合到的,而曲线的拟合难度相对大的多,在某些特定的情况下,例如网络结构设计的比较简单,难以学习到复杂的折线,此时完全相同的输出的mse是最小的,这种情况下也可能出现输出完全一样的问题;

4、dead relu problem,relu可以是某一层或者输出层,因为dead relu 的问题,某一层的输出全为0,导致后面的输出也都是0,从而表现出输出完全相同的情况,此时的输出完全是bias的计算结果,weights废了;

5、样本极度不均衡,并且大类样本之间非常相似,例如简单的对原始的大类样本进行多次的repeat产生的数据集就存在这样的预测问题;

6、其它待补充:


输出一致的本质问题出在f(x)的计算上,要不就是nn的某些层f出现了问题,要不就是样本x出现了问题,当然前者居多一些,最好的方式还是通过一些手段例如可视化等去debug整个nn的结构,看每一层的输出情况,梯度的更新情况等等,干看调试起来费劲,后续有时间整理一下nn的debug方法