1. 穿插熵损失函数
在物理学中,“熵”被用来示意热力学零碎所出现的无序水平。香农将这一概念引入信息论畛域,提出了“信息熵”概念,通过对数函数来测量信息的不确定性。穿插熵(cross entropy)是信息论中的重要概念,次要用来度量两个概率分布间的差别。假设 p 和 q 是数据 x 的两个概率分布,通过 q 来示意 p 的穿插熵可如下计算:
$H\left(p,q\right)=-\sum\limits_{x}p\left(x\right)\log q\left(x\right)$
穿插熵刻画了两个概率分布之间的间隔,旨在描述通过概率分布 q 来表白概率分布 p 的艰难水平。依据公式不难理解,穿插熵越小,两个概率分布 p 和 q 越靠近。
这里依然以三类分类问题为例,假如数据 x 属于类别 1。记数据 x 的类别散布概率为 y,显然 y=(1,0,0)代表数据 x 的理论类别散布概率。记 $\hat{y}$ 代表模型预测所得类别散布概率。那么对于数据 x 而言,其理论类别散布概率 y 和模型预测类别散布概率 $\hat{y}$ 的穿插熵损失函数定义为:
$cross entryy=-y\times\log(\hat{y})$
很显然,一个良好的神经网络要尽量保障对于每一个输出数据,神经网络所预测类别散布概率与理论类别散布概率之间的差距越小越好,即穿插熵越小越好。于是,可将穿插熵作为损失函数来训练神经网络。
图 1 三类分类问题中输出 x 的穿插熵损失示意图(x 属于第一类)
在下面的例子中,假如所预测两头值 (z1,z2,z3)通过 Softmax 映射后所得后果为 (0.34,0.46,0.20)。因为已知输出数据 x 属于第一类,显然这个输入不现实而须要对模型参数进行优化。如果抉择穿插熵损失函数来优化模型,则 (z1,z2,z3)这一层的偏导值为 (0.34−1,0.46,0.20)=(−0.66,0.46,0.20)。
能够看出,$Softmax$ 和穿插熵损失函数互相联合,为偏导计算带来了极大便当。偏导计算使得损失误差从输入端向输出端传递,来对模型参数进行优化。在这里,穿插熵与 Softmax 函数联合在一起,因而也叫 $Softmax$ 损失(Softmax with cross-entropy loss)。
2. 均方差损失(Mean Square Error,MSE)
均方误差损失又称为二次损失、L2 损失,罕用于回归预测工作中。均方误差函数通过计算预测值和理论值之间间隔(即误差)的平方来掂量模型优劣。即预测值和实在值越靠近,两者的均方差就越小。
计算形式: 假如有 n 个训练数据 $x_i$,每个训练数据 $x_i$ 的实在输入为 $y_i$,模型对 $x_i$ 的预测值为 $\hat{y_i}$。该模型在 n 个训练数据下所产生的均方误差损失可定义如下:
$MSE=\dfrac{1}{n}\sum\limits_{i=1}^n\left(y_i-\hat{y}_i\right)^2$
假如实在目标值为 100,预测值在 -10000 到 10000 之间,咱们绘制 MSE 函数曲线如 图 1 所示。能够看到,当预测值越靠近 100 时,MSE 损失值越小。MSE 损失的范畴为 0 到∞。
3.CTC 损失
3.1 CTC 算法算法背景 —– 文字辨认语音等序列问题
CTC 算法次要用来解决神经网络中标签和预测值无奈对齐的状况 , 通常用于文字辨认以及语音等序列学习畛域。举例来说,在语音辨认工作中,咱们心愿语音片段能够与对应的文本内容一一对应,这样能力不便咱们后续的模型训练。然而对齐音频与文本是一件很艰难的事,如 图 1 所示,每个人的语速都不同,有人谈话快,有人谈话慢,咱们很难依照时序信息将语音序列切分成一个个的字符片段。而手动对齐音频与字符又是一件十分耗时耗力的工作
图 1 语音辨认工作中音频与文本无奈对齐
在文本辨认畛域,因为字符距离、图像变形等问题,雷同的字符也会失去不同的预测后果,所以同样会会遇到标签和预测值无奈对齐的状况。如 图 2 所示。
图 2 不同表现形式的雷同字符示意图
总结来说,假如咱们有个输出(如字幅图片或音频信号)X,对应的输入是 Y,在序列学习畛域,通常会碰到如下难点:
- X 和 Y 都是变长的;
- X 和 Y 的长度比也是变动的;
- X 和 Y 相应的元素之间无奈严格对齐。
3.2 算法概述
引入 CTC 次要就是要解决上述问题。这里以文本辨认算法 CRNN 为例,剖析 CTC 的计算形式及作用。CRNN 中,整体流程如 图 3 所示。
图 3 CRNN 整体流程
CRNN 中,首先应用 CNN 提取图片特色,特色图的维度为 $m×T$,特色图 x 能够定义为:
$x=(x^1,x^2,…,x^T)\quad\text{}$
而后,将特色图的每一列作为一个工夫片送入 LSTM 中。令 t 为代表工夫维度的值,且满足 $1<t<T$,则每个工夫片能够示意为:
$x^t=(x_1^t,x_2^t,\ldots,x_m^t)$
通过 LSTM 的计算后,应用 softmax 获取概率矩阵 y,定义为:
$y=(y^1,y^2,\ldots,y^T)$
通过 LSTM 的计算后,应用 softmax 获取概率矩阵 $y^t$,定义为:
$y^t=(y_1^t,y_2^t,\ldots,y_n^t)$
n 为字符字典的长度,因为 $y_i^t$ 是概率,所以 $\Sigma_i y_i^t=1$。对每一列 $y^t$ 求 argmax(),就能够获取每个类别的概率。
思考到文本区域中字符之间存在距离,也就是有的地位是没有字符的,所以这里定义分隔符 −来示意当前列的对应地位在图像中没有呈现字符。用 $L$ 代表原始的字符字典,则此时新的字符字典 $L′$ 为:
$L’=L\cup\{-\}$
此时,就回到了咱们上文提到的问题上了,因为字符距离、图像变形等问题,雷同的字符可能会失去不同的预测后果。在 CTC 算法中,定义了 B 变换来解决这个问题。B 变换简略来说就是将模型的预测后果去掉宰割符以及反复字符(如果同个字符间断呈现,则示意只有 1 个字符,如果两头有宰割符,则示意该字符呈现屡次),使得不同表现形式的雷同字符失去对立的后果。如 图 4 所示。
这里举几个简略的例子便于了解,这里令 T 为 10:
$\begin{array}{c}B(-s-t-aative)=state\\ \\ B(ss-t-a-t-e)=state\\ \\ B(sstt-aat-e)=state\end{array}$
对于字符两头有分隔符的反复字符则不进行合并:
$B(-s-t-t state)=state$
当取得 LSTM 输入后,进行 B 变换就能够失去最终后果。因为 B 变换并不是一对一的映射,例如上边的 3 个不同的字符都能够变换为 state,所以在 LSTM 的输出为 x 的前提下,CTC 的输入为 l 的概率应该为:
$p(l|x)=\Sigma_{\pi\in B^{-1}(l)}p(\pi|x)$
其中,$pi$ 为 LSTM 的输入向量,$\pi\in B^{-1}(l)$ 代表所有能通过 B 变换失去 l 的 $pi$ 的汇合。
而对于任意一个 π,又有:
$p(\pi|x)=\Pi_{t=1}^T y_{\pi_t}^t$
其中,$y_{\pi_t}^t$ 代表 t 时刻 π 为对应值的概率,这里举一个例子进行阐明:
$\begin{array}{c}\pi=-s-t-aattte\\ y_{\pi_t}^t=y_-^1*y_s^2*y_-^3*y_t^4*y_-^5*y_a^6*y_a^7*y_t^8*y_t^9*y_e^10\\ \end{array}$
不难理解,应用 CTC 进行模型训练,实质上就是心愿调整参数,使得 $p(\pi\text{}|x)$ 取最大。
具体的参数调整办法,能够浏览以下论文进行理解:Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks
4. 均衡 L1 损失(Balanced L1 Loss)— 指标检测
指标检测 (object detection) 的损失函数能够看做是一个多任务的损失函数,分为分类损失和检测框回归损失:
$L_{p,u,tu,v}=L_{cls}(p,u)+\lambda[u\geq1]L_{loc}(t^u,v)$
$L_cls$ 示意分类损失函数、$L_loc$ 示意检测框回归损失函数。在分类损失函数中,p 示意预测值,u 示意实在值。$t_u$ 示意类别 u 的地位回归后果,v 是地位回归指标。λ 用于调整多任务损失权重。定义损失大于等于 1.0 的样本为 outliers(艰难样本,hard samples),残余样本为 inliers(简略样本,easy sample)。
均衡上述损失的一个罕用办法就是调整两个工作损失的权重,然而,回归指标是没有边界的,间接减少检测框回归损失的权重将使得模型对 outliers 更加敏感,这些 hard samples 产生过大的梯度,不利于训练。inliers 相比 outliers 对整体的梯度贡献度较低,相比 hard sample,均匀每个 easy sample 对梯度的奉献为 hard sample 的 30%,基于上述剖析,提出了 balanced L1 Loss(Lb)。
Balanced L1 Loss 受 Smooth L1 损失的启发,Smooth L1 损失通过设置一个拐点来分类 inliers 与 outliers,并对 outliers 通过一个 $max(p,1.0)$ 进行梯度截断。相比 smooth l1 loss,Balanced l1 loss 能显著晋升 inliers 点的梯度,进而使这些精确的点可能在训练中表演更重要的角色。设置一个拐点辨别 outliers 和 inliers,对于那些 outliers,将梯度固定为 1,如下图所示:
Balanced L1 Loss 的核心思想是晋升要害的回归梯度(来自 inliers 精确样本的梯度),进而均衡蕴含的样本及工作。从而能够在分类、整体定位及精确定位中实现更均衡的训练,Balanced L1 Loss 的检测框回归损失如下:
$L_{loc}=\sum\limits_{i\in x,y,w,h}L_b(t_i^u-v_i)$
其相应的梯度公示如下:
$\dfrac{\partial L_{loc}}{\partial w}\propto\dfrac{\partial L_b}{\partial t_i^u}\propto\dfrac{\partial L_b}{\partial x}$
基于上述公式,设计了一种推广的梯度公式为:
$\dfrac{\partial L_b}{\partial x}=\begin{cases}\alpha ln(b|x|+1),if|x|<1\\ \gamma,otherwise\end{cases}$
其中,$α$ 管制着 inliers 梯度的晋升;一个较小的 α 会晋升 inliers 的梯度同时不影响 outliers 的值。$γ$ 来调整回归误差的上界,可能使得不同工作间更加均衡。α,γ 从样本和工作层面管制均衡,通过调整这两个参数,从而达到更加均衡的训练。Balanced L1 Loss 公式如下:
$L_b(x)=\begin{cases}\frac ab(b|x|+1)ln(b|x|+1)-\alpha|x|,if|x|<1\\ \gamma|x|+C,otherwise\end{cases}$
其中参数满足下述条件:
$\alpha ln(b|x|+1)=\gamma\quad\text{}$
默认参数设置:α = 0.5,γ=1.5
Libra R-CNN: Towards Balanced Learning for Object Detection
本文参加了 SegmentFault 思否写作挑战赛,欢送正在浏览的你也退出。