如何去确定初始参数
有那么多参数,比如说学习率yita,惩罚的大小lambda,以及mini-batch还有网络什么时候停止。
一个比较宏观的思路是为了验证想法,没有必要用全部的数据集,而是采用其中的一部分,验证有效了,再去使用更大的数据集合,而且为了验证想法,可以适当的减小网络的层的深度,而且做更频繁的validation,其实就是相当于做快速的小实验,能够更快的训练网络,看到想法的效果。
所以这样的想法在实验时候非常有效。记住:使用小网络进行小样本的测试。
那么对于学习来说,到底什么样的参数合适呢?
学习率:数量级确定之后越大越好。
Early stop:由于学习的时候学习的正确率在震荡,因此难以确定到底是在哪一轮停止,所以采用比如说n轮准确率不上升来确定该停止了。有可能带来的一个问题就是可能在某一阶段,学习到了一个平台,多了一会儿就继续下降,不过这个问题在考虑的时候不用考虑这么多,因为这样的概率还是比较少的,或者觉得不够好,再修改n。不过这确实是一个即使停止训练的有效的方法。
Lambda:这是为了惩罚w过大,确定了学习率之后进行相关的调试,找到一个比较好的值,反过来再调整一下学习率lambda。这样相互交替,达到一个比较好的结果。其实学习率可以看成是步长,而梯度下降可以看成是方向,我要在某个方向上走长的距离,而lambda决定了方向,按照原来的思路,其实在某一个方向上的数值要进行改变的时候是稍微减小,也不会变化特别的大,于是就是相当于,我不是再当前的点上进行调整,而是稍微减小了一些之后再进行调整,不过总觉的怪怪的,因为虽然说是减小,但是实际上相当于再参数空间变换了一个位置,再按照原来的位置进行一个学习。
Mini-batch size:为了充分发挥计算机的计算能力,可以采用想量化的变成或者是并行计算,这样的计算效率要高好多,所以通过这样的方式能够有效的减少训练的真实时间。
下面问题来了:
1. 有没有一个程序能够自动调参,当然,我说的不是枚举,而是通过某种可以和网络输出结果相互动的方式来进行参数的学习。
2. lambda可以看成是希望减小w,小了之后对于特别奇葩的值就不是很敏感,但是如果从参数空间上来看,是缩放到了另一个点之后再调整,那么这两个点之间有什么关系?