🎯
type
status
date
slug
summary
tags
category
icon
password
本文介绍了几种对样本流进行采样的方法,采样后可以减少参与训练的样本量,提升训练速度,同时尽可能保证效果。
1. 均匀采样和纠偏
这是最常见的采样方法,一般对负样本进行概率为
的均匀采样,这样可以减少
的负样本量,大大提升训练的速度。同时,均匀负采样会让正负样本的差异变小,特别是长尾样本,因此会降低模型对这部分样本的区分度,所以在模型的泛化能力不足的情况下,这样做可以减少这些样本对模型的影响,优化一部分模型的泛化能力,当模型的泛化能力足够好的时候,均匀负采样就是纯粹的提升训练效率。由于采样后改变了正负样本的分布,因此需要对结果进行纠偏,通常有两种纠偏方法:
(1) serving 阶段纠偏,即用采样后的数据正常 training,在 serving 的时候进行纠偏。但这种方法非常不灵活,比如数据流在不同时间段的采样率不一样,或者构成数据流的不同路数据采样率不一样的时候,就无法在 serving 阶段进行纠偏。因此业界一般都是在 training 阶段进行纠偏;
(2) training 阶段纠偏,即在训练时,对模型的输出进行校正后再计算 loss 和梯度,保证模型的输出直接就是无偏的,在 serving 阶段无需再进行处理。这样可以非常灵活地根据时间或者不同路的数据流进行采样率的设计。
🎯
type
status
date
slug
summary
tags
category
icon
password
前段时间,VGG 的一拨人搞了个叫 curveball 的优化算法,能够将二阶信息用起来,同时避免了之前的传统方法要么去近似 Hessian 矩阵的逆,要么通过 conjugate-gradient 的方法去得到 Hessian 矩阵的逆,这些传统方法既耗时又对噪声敏感。而 curveball 算法并不需要直接算 Hessian 矩阵和它的逆,每次只是去估计梯度与 Hessian 矩阵的乘积即可,所付出的代价仅仅是额外的两次正向传播。 由于这篇文章写的极为简略,很多过程都直接略掉了,今天我们就来推导这个算法,将作者略去的部分补上。
文章链接:点我
文章代码 github 链接:点我
本文推导内容的 pdf 链接:点我