计算机视觉中的细节问题(六)

(1)、Batch训练的原理:

batch字面上是批量的意思,在深度学习中指的是计算一次cost需要的输入数据个数。

                                               计算机视觉中的细节问题(六)
在batch可以认为上述cost计算公式中的m。
如果数据集比较小,可以将全体数据看做一个batch,即把数据集中每个样本都计算loss然后取其平均值当做cost。
为什么要用batch?

由上述batch可以理解为计算一次cost需要输入的样本个数,当数据集比较大的时候,一次性将所有样本输入去计算一次cost存储会吃不消,因此会采用一次输入一定量的样本来进行训练:

  1. 遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这称为Batch gradient descent,批梯度下降。这种方法缺点很明显,计算量大,吃内存,不适用与在线学习。
  2. 每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这种方法比较快,但是由于迭代一次仅依靠单一样本,这样很容易在相邻的两次迭代计算的梯度差距非常大,甚至方向相反,因此容易不收敛。
  3. 另一种就是将上述两种方法的折中,称为mini-batch gradient decent。将数据集分成一定数量的批,梯度不容易跑偏容易收敛,同时减少了一次处理的数据数量,因而计算量也小了很多,速度较快。

(2)、smooth l1的计算方法

                                            计算机视觉中的细节问题(六)

                                                          计算机视觉中的细节问题(六)

当预测值与目标值相差很大时,L2 Loss的梯度为(x-t),容易产生梯度爆炸,L1 Loss的梯度为常数,通过使用Smooth L1 Loss,在预测值与目标值相差较大时,由L2 Loss转为L1 Loss可以防止梯度爆炸。

                                                     计算机视觉中的细节问题(六)

L2 loss的导数(梯度)中包含预测值与目标值的差值,当预测值和目标值相差很大,L2就会梯度爆炸。说明L2对异常点更敏感。L1 对噪声更加鲁棒。当差值太大时, loss在|x|>1的部分采用了 l1 loss,避免梯度爆炸。原先L2梯度里的x−t被替换成了±1, 这样就避免了梯度爆炸, 也就是它更加健壮。总的来说:相比于L2损失函数,其对离群点、异常值(outlier)不敏感,可控制梯度的量级使训练时不容易跑飞。