接下来讲述一下在DL中,对应于testing部分的一些技巧。
early stopping
early stopping 的提出基于下面这个曲线。
首先,这里介绍一下batch 和 epochs 的概念。假设一共有5000组数据,以50个数据为一小组,这个小组就叫 batch,那么一共有100个batch。DL在学习的过程中,不是学习完所有的5000个数据才更新一次,而是每学习完一组batch就更新一次参数。学习完一轮所有的数据叫做一个epoch,在这个例子中就是学习一次这100组batch,更新100次。
曲线说明了,在更新的过程中,参数update的次数不一定是越多越好,update次数多了后,在training data上的表现可能会好,但是在testing 上可能会有差的表现,这时候就需要早些停止。
regularization
regularization也就是正则化,在之前的ML中实际上出现过,在为了使训练得到的参数更小,我们在LOSS函数中加了一项参数的平方和,这就是正则化。
L2正则化
L2正则化的规则如下,实际上就是在原来的L函数后加上一项
下面是对于L函数微分的结果,微分后整理可以得到如下式子。
接下来解释一下这一项:
我们一般会设置λ为一个很小的值,然后Wt前面的这一项就会是一个小于1但是接近于1的值,也就是每次在update的时候,参数会有一个稳定缩小的过程,但是这个参数也不是会一直缩小到0这样,因为还有加上一个微分项。
L1正则化
类似于L2正则化,L1正则化只是吧在L函数后的正则化项改成了如下式子
改变后的L函数微分结果如下:
接下来解释一下这个结果。可以看到对于L函数的正则化项来说,它微分后的结果是一个sgn函数,即符号函数,输入为正输出为1,输入为负输出为-1。再看最后整体的微分结果,其实就是原本L的微分再加上一项。如果Wt为正,则减去一些数值,为负则加。类似于L2,这个数值不是很大,但是会对减小参数有一定的帮助。
dropout
dropout算法的思路很神奇也很简单。
在每次update参数之前,每个神经元都有p%的概率会被丢掉,接下来就按照被丢弃后的网络来update。这次
等每个batch,每个epoch训练完后,就要对每次训练出来的参数都乘上(1-p%),这是为了平衡训练的过程。这个从直观上也很好理解,在训练的过程中,每个参数的作用都被放大了,所以在testing的时候需要将他们按照一定的比例去缩小。
此处附上一位大佬关于dropout的详解dropout详解