深度学习调参

吴恩达深度学习

train val test 6/2/2
big data train val test 90/10/10 99.5/0.4/0.1
可以没有test
high bias 欠拟合
{big network;train longer}
high variance 过拟合
{more data;regularization}

目标函数的计算

overfitting
underfitting
appropriate-fitting

查准率precision
查全率recall
 dog cat
dog tp fn
cat fp tn
p=tp/(tp+fp)
r=tp/(tp+fn)

exponential_decay(learning_rate, global_step, decay_steps, decay_rate,

staircase=False, name=None)

指数型 lr 衰减法是最常用的衰减方法,在大量模型中都广泛使用。

learning_rate 传入初始 lr 值,global_step 用于逐步计算衰减指数,decay_steps 用于决定衰减周期,decay_rate 是每次衰减的倍率,staircase 若为 False 则是标准的指数型衰减,True 时则是阶梯式的衰减方法,目的是为了在一段时间内(往往是相同的 epoch 内)保持相同的 learning rate。

,decayed_learning_rate为每一轮优化时使用的学习率;

           learning_rate为事先设定的初始学习率;

           decay_rate为衰减系数;

           decay_steps为衰减速度。

而tf.train.exponential_decay函数则可以通过staircase(默认值为False,当为True时,(global_step/decay_steps)则被转化为整数) ,选择不同的衰减方式。
earning_rate:0.1;staircase=True;则每100轮训练后要乘以0.96.

通常初始学习率,衰减系数,衰减速度的设定具有主观性(即经验设置),而损失函数下降的速度与迭代结束之后损失的大小没有必然联系,


同样与Mini-batch 梯度下降法相同,Batch Norm同样适用于momentum、RMSprop、Adam的梯度下降法来进行参数更新

dropout p=1 means no drop ,p is lower means more dropout,

二刷吴恩达博士的《深度学习》时,对batch-normal有了更深的认识,除了上文提到的使代价函数“更圆”的说法外,还有另一种直观认识:通过对隐藏单元的输入进行bn操作(先进行归一化,再进行线性变换),使得隐藏单元的输入数据分布大致相同(每个batch数据的均值和方差基本一样),从而使网络更好地拟合目标,收敛速度加快。


      由于训练过程中,是在batch级别上进行的归一化操作,在计算均值和方差时引入了一些噪音,从而使模型的泛化性更强,因此bn还起到了正则项的作用。另外,使用bn得到的模型,在应用到测试集上时,一般采用指数加权平均来计算测试数据的平均值和方差。

数据库太小一般不会带来不收敛的问题,只要你一直在train总会收敛(rp问题跑飞了不算)。反而不收敛一般是由于样本的信息量太大导致网络不足以fit住整个样本空间。样本少只可能带来过拟合的问题,你看下你的training set上的loss收敛了吗?如果只是validate set上不收敛那就说明overfitting了,这时候就要考虑各种anti-overfit的trick了,如dropout,SGD,增大minibatch的数量,减少fc层的节点数量,momentun, finetune等。(我自己觉得,train不是一定收敛的,但样本信息量太大导致网络不足以fit住整个样本空间是造成不收敛的一种情况)

   learning rate设大了会带来跑飞(loss突然一直很大)的问题,这个是新手最常见的情况——为啥网络跑着跑着看着要收敛了结果突然飞了呢?可能性最大的原因是你用了relu作为激活函数的同时使用了softmax或者带有exp的函数做分类层的loss函数。当某一次训练传到最后一层的时候,某一节点激活过度(比如100),那么exp(100)=Inf,发生溢出,bp后所有的weight会变成NAN,然后从此之后weight就会一直保持NAN,于是loss就飞起来。

猜你喜欢

转载自blog.csdn.net/gloriazhang2013/article/details/87891308
今日推荐