遇到burn-in不明白,所以记录下来:
"burn-in"这个概念最早来自于统计学和机器学习中的马尔可夫链蒙特卡洛(MCMC)采样,其中在开始采样之前,通常会运行一段时间的马尔可夫链以达到平稳分布。同样的概念也被应用到了循环神经网络(RNN)的训练中。
在RNN中,"burn-in"过程是指在开始学习之前先通过网络运行一段时间的序列数据,使得RNN的隐藏状态有机会收敛到某种有意义的状态。这样,当我们开始学习时,RNN的隐藏状态就已经包含了一些有用的历史信息,而不仅仅是初始的零状态。这种方法尤其对处理长序列的任务有帮助,因为这些任务可能需要网络记住距离当前时刻较远的历史信息。
具体实施的话,对于一段序列,首先运行RNN一段时间(称为"burn-in"期),然后再开始训练。"burn-in"期间的输出通常会被忽略,不用于训练。实际的"burn-in"长度可能需要通过实验来确定。
---------------------------------------------------------------------------------------------------------------------------------
burn_in=1000:在迭代次数小于burn_in时候,学习率的更新有一种方式,大于burn_in时,才采用policy的更新方式
---------------------------------------------------------------------------------------------------------------------------------
darknet的cfg文件中有一个配置参数: burn_in
burn_in=1000
这个参数在caffe中是没有的,一旦设置了这个参数,当update_num小于burn_in时,不是使用配置的学习速率更新策略,而是按照下面的公式更新
lr = base_lr * power(batch_num/burn_in,pwr)
其背后的假设是:全局最优点就在网络初始位置附近,所以训练开始后的burn_in次更新,学习速率从小到大变化。update次数超过burn_in后,采用配置的学习速率更新策略从大到小变化,显然finetune时可以尝试。
参考:
1.RNN in RL - 知乎