Making Deep Networks Robust to Label Noise: a Loss Correction Approach

A CVPR 2017 paper

Updated on Dec, 06

Making Deep Networks Robust to Label Noise: a Loss Correction Approach

摘要部分

问题的背景是数据中的label含有noise,且是与类别独立相关的。大前提是已知每一类的label被弄错成另一种类别的概率,相当于有一个概率转移矩阵。因此label的操作可能会有矩阵求逆,矩阵相乘的操作。

提出一种基于理论的方法来训练神经网络,包括递归网络。想法应该是想办法修正loss,试图估计一下label的概率转移情况。通过这种方法减小noise label的影响,做到稳健性。

另一个结论是,如果只有ReLU作为非线性单元,则loss曲线的情况与noise label的情况无关!这个似乎有点恐怖?!

模型setup

基本记号:

  • c是正整数,定义$[c] = \{1, \cdots, c\}$
  • 粗体表示列向量或者矩阵
  • c维的单纯形$\Delta^{c-1}\subset [0, 1]^c$

数据生成模型setup,c类监督学习,

  • 特征空间$\mathcal{X}\subseteq \mathbb{R}^d$,d维数据
  • label空间$\mathcal{Y} = \{e^i:i\in [c]\}$,$e^i$是c维向量,元素值为0或1,只有第i维是1,其它都是0,这个维度就对应了label值

一个数据$(\boldsymbol{x}, \boldsymbol{y})$生成的方式是未知的分布$p(\boldsymbol{x},\boldsymbol{y}) = p(\boldsymbol{y}|\boldsymbol{x})p(\boldsymbol{x})$。

神经网络模型,n层layers,其实就是一模一样的全连接网络做分类,只是这里它说的数学很详细,可以作为不错的介绍材料。(下面可看可不看)

整个网络$\boldsymbol{h}:\mathcal{X}\rightarrow \mathbb{R}^c$,$\boldsymbol{h} = (\boldsymbol{h}^{(n)} \circ \boldsymbol{h}^{(n-1)} \cdots \boldsymbol{h}^{(1)})$,就是网络是n层的。其中前n-1层网络都是正常的全连接及激活(激活只要求保持一致不变就好),最后一层由于分类的需要就不激活了。其中未知的参数包括每一层的权重矩阵和bias向量。后面不写了,实际上是完全能懂的。最后用的softmax去近似分类条件概率$p(\boldsymbol{y}|\boldsymbol{x})$,并且用交叉熵作为损失函数。如果概率p加了尖上标,表示预测的结果;弯上标表示转移后的观测标签。其交叉熵损失是这样定义的

把每个label对应的结果组合起来成为loss向量$\boldsymbol{l} \in \mathbb{R}^c$

后面将证明一些温和条件下loss的结论$\sim$

带噪标签和loss的稳健性

标签的噪声是不对称或者是不均匀asymmetric的,概率转移是指每个标签$\boldsymbol{y}$都可能以一定概率$p(\tilde{\boldsymbol{y}}|\boldsymbol{y})$变成一个别的标签$\tilde{\boldsymbol{y}}$。

注意这里真实标签是$\boldsymbol{y}$但是观测到的样本标签是$\tilde{\boldsymbol{y}}$。所以我们在拟合的其实是分布$p(\boldsymbol{x}, \tilde{\boldsymbol{y}}) = \sum_{\boldsymbol{y}}p(\tilde{\boldsymbol{y}}|\boldsymbol{y})p(\boldsymbol{y}|\boldsymbol{x})p(\boldsymbol{x})$。其中标签转移的概率表示为noise转移矩阵$T\in [0, 1]^{c\times c}$的元素$T_{ij} = p(\tilde{\boldsymbol{y}} = e^j|\boldsymbol{y} = e^i)$。T只需要满足行和为1。

一般来说实际数据中可能有些类别本身很接近,人也不太能精确识别,因此容易出现标签出错的情况。

我们通过两种修正loss函数的方法达到loss稳健性。

修正1:向后修正

向后修正loss仍然是原loss的无偏估计,即

定理1 标签转移矩阵T非奇异,已知原loss函数l,定义向后修正的loss为

向后loss是对带噪数据预测的loss,原loss是指干净数据上的loss。称之为向后是指本来干净标签y经T变换成为带噪标签,现在loss上给了个T逆,是一步step back。

它的无偏性是指

因此其极小,即神经网络期望的优化结果minimizer相等:

证明 只需证明无偏性

式子中第一步是换元,T是两个元之间的转化关系;

第二步是loss的def。$\blacksquare$

注意T逆一般可以算,但是可能条件数很大,比较难算。所以修改一下T,让他好算点比较舒服。

修正2:向前修正

定理2 标签转移矩阵T非奇异,已知原loss函数$\boldsymbol{\ell}_{\boldsymbol{\psi}}$且是proper composite的。定义向前修正的loss为

向前loss

这里没有了无偏性,但是期望的minimizer仍然相等(一眼看不出来的)

证明 向前loss利用了交叉熵的一个性质

预测标签$\hat{p}(\boldsymbol{y}|\boldsymbol{x})$和任一标签$e^i$之间的交叉熵,真实标签$e^j$,但是观测标签$\tilde{\boldsymbol{y}}$却在干扰

用矩阵的形式就是

这样的话,loss被T处理了,就叫做向前

在定理中,loss是proper composite,带来一个性质:

给定可逆的link函数$\psi: \Delta^{c-1} \rightarrow \mathbb{R}^{c}$,则复合loss定义为$\ell_{\psi}$,$\ell_{\boldsymbol{\psi}}(\boldsymbol{y}, \boldsymbol{h}(\boldsymbol{x}))=\ell\left(\boldsymbol{y}, \boldsymbol{\psi}^{-1}(\boldsymbol{h}(\boldsymbol{x}))\right)$,这里softmax就是$\boldsymbol{\psi}^{-1}$。它对应minimizer的性质$\underset{h}{\operatorname{argmin}} \mathbb{E}_{\boldsymbol{x}, \boldsymbol{y}} \ell_{\boldsymbol{\psi}}(\boldsymbol{y}, \boldsymbol{h}(\boldsymbol{x}))=\psi(p(\boldsymbol{y} | \boldsymbol{x}))$。

$\therefore$由link函数的定义,向前loss表示为

新的符号$\phi^{-1}=\psi^{-1} \circ T^{\top}$,$\therefore \mathbb{E}_{\boldsymbol{x}, \tilde{\boldsymbol{y}}} \boldsymbol{\ell}^{\rightarrow}_{\boldsymbol{\psi}}(\boldsymbol{y}, \boldsymbol{h}(\boldsymbol{x})) = \mathbb{E}_{\boldsymbol{x}, \tilde{\boldsymbol{y}}} \ell_{\boldsymbol{\phi}}(\boldsymbol{y}, \boldsymbol{h}(\boldsymbol{x})) $

得到$\underset{\boldsymbol{h}}{\operatorname{argmin}} \mathbb{E}_{\boldsymbol{x}, \tilde{\boldsymbol{y}}} \ell_{\boldsymbol{\phi}}(\boldsymbol{y}, \boldsymbol{h}(\boldsymbol{x}))=\phi(p(\tilde{\boldsymbol{y}} | \boldsymbol{x}))$
$=\psi\left(\left(T^{-1}\right)^{\top} p(\tilde{\boldsymbol{y}} | \boldsymbol{x})\right)=\psi(p(\boldsymbol{y} | \boldsymbol{x}))$

$\blacksquare$

结论是向前修正的loss得到的minimizer与是干净数据上的一样。link函数起到了此作用,不用关心noise的水平。

整个算法

哎呀懒得写了,大概的意思就是说假设每一类都至少有一个正确标签的观测样本,且softmax的确近似了T中的元素。

既然一般T不知道,我们先在noisy数据上xjb练一波,用练好的分类器去试试一些unlabelled的数据,把T估计一下,估计的方法就是默认真实标签是概率最大的那个,其它累死了。

这样有了T之后可以用向前或者向后修正的loss重新刚数据集啦!!