神经网络的调参效果不理想时->(解决思路)

github博客传送门
csdn博客传送门

非过拟合情况

  1. 是否找到合适的损失函数?(不同问题适合不同的损失函数)(理解不同损失函数的适用场景)
    (解决思路)选择合适的损失函数(choosing proper loss )
    神经网络的损失函数是非凸的,有多个局部最低点,目标是找到一个可用的最低点。非凸函数是凹凸不平的,但是不同的损失函数凹凸起伏的程度不同,例如下述的平方损失和交叉熵损失,后者起伏更大,且后者更容易找到一个可用的最低点,从而达到优化的目的。
    -. Square Error(平方损失)
    -. Cross Entropy(交叉熵损失)
  2. batch size是否合适?batch size太大 -> loss很快平稳,batch size太小 -> loss会震荡(理解mini-batch)
    (解决思路)采用合适的Mini-batch进行学习,使用Mini-batch的方法进行学习,一方面可以减少计算量,一方面有助于跳出局部最优点。因此要使用Mini-batch。更进一步,batch的选择非常重要,batch取太大会陷入局部最小值,batch取太小会抖动厉害
  3. 是否选择了合适的激活函数?(各个激活函数的来源和差异)
    (解决思路)使用激活函数把卷积层输出结果做非线性映射,但是要选择合适的激活函数。
    -. Sigmoid函数是一个平滑函数,且具有连续性和可微性,它的最大优点就是非线性。但该函数的两端很缓,会带来猪队友的问题,易发生学不动的情况,产生梯度弥散。
    -. ReLU函数是如今设计神经网络时使用最广泛的激活函数,该函数为非线性映射,且简单,可缓解梯度弥散。
  4. 学习率,学习率小收敛慢,学习率大loss震荡(怎么选取合适的学习率)
    (解决思路)学习率过大,会抖动厉害,导致没有优化提 , 学习率太小,下降太慢,训练会很慢
  5. 是否选择了合适的优化算法?(比如Adam)(理解不同优化算法的适用场景)
    (解决思路)在梯度的基础上使用动量,有助于冲出局部最低点。


如果以上五部分都选对了,效果还不好,那就是产生过拟合了,可使如下方法来防止过拟合,分别是:



过拟合情况

  1. Early Stopping(早停法)
    (详细解释)早停法将数据分成训练集和验证集,训练集用来计算梯度、更新权重和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
  2. Regularization(正则化)
    (详细解释) 权重衰减(Weight Decay)。到训练的后期,通过衰减因子使权重的梯度下降地越来越缓。
    *. Batch Normalization
    *. Dropout
    *. L1 , L2
  3. 调整网络结构
  4. 增大训练数据量
    *. 获取更多的数据
    *. 数据扩充(图片: 镜像 , 翻转 , 随机裁剪等.)
print_r('点个赞吧');
var_dump('点个赞吧');
NSLog(@"点个赞吧!")
System.out.println("点个赞吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!\n");
cout << "点个赞吧!" << endl;
Console.WriteLine("点个赞吧!");
fmt.Println("点个赞吧!")
Response.Write("点个赞吧");
alert(’点个赞吧’)
posted @ 2018-12-23 14:29  账号  阅读(5566)  评论(0编辑  收藏  举报