这篇文章是用Markdown重写的以前发布的文章。图像分类中,深度学习训练时将图片随机剪裁(random crop)已经成为很普遍的数据扩充(data augmentation)方法,随机剪裁不但提高了模型精度,也增强了模型稳定性,但是它如此有效的核心原因是什么呢?仅仅是因为数据扩充吗?这个是下面我们需要研究的问题。
神经网络的学习(参数估计)本质就是建立输入X与输出Y的统计关系,神经网络的学习问题仍是统计机器学习问题,而神经网络学习往往需要大量的数据,但是我们用大量的数据学习到的模型是否稳定呢?因为神经网络广为诟病的黑箱问题,我们很难用数学原理来推断模型的稳定性(目前模型测试以黑盒测试为主,依赖于测试样本,包括但不限于模型的同分布测试,多场景、跨分布测试,边界测试,极端条件测试等)。模型是否学到了我们希望的特征呢?比如在人脸识别中,人识别相似但不同的人的方法往往是关注几个重要的脸部器官的差异,脸部轮廓的差异,以及明显的特征点(如:痣、胎记等)。但是在训练神经网络的时候很难告诉他我们关注的特征,让他用我们的方法来学习,神经网络不像人那样,你告诉他某个人脸上的胎记可以很好的辨别这个人,他就知道胎记是关键特征,往往只能给他足够多的数据以便于在统计意义上获得我们希望他关注的特征。但是问题来了,比如
这个故事说,美国军方试图训练一台电脑来区分俄罗斯和美国坦克的照片。 它们的分类准确度非常高,但俄罗斯坦克的所有照片都模糊不清,而美国坦克是高清晰度的。该算法不是识别坦克,而是学习区分模糊和清晰的照片。
所以模型训练时会存在这样的问题,即:目的和数据不符合(我们给了模型错误的数据)。 「俄罗斯坦克问题」本质上是一个集合中的概率问题,假设每类训练图片数量基本相同,图片包含4个因子特征:
俄罗斯坦克 R ,美国坦克 A,模糊 X,清晰 Y
而类别标签,俄罗斯坦克为 C r C_r Cr,美国坦克为 C a C_a Ca;所以俄罗斯坦克的图片为 I r = { R , X } I_r=\{R,X\} Ir={R,X},美国坦克的图片为 I a = { A , Y } I_a=\{A,Y\} Ia={A,Y}; 这里存在多映射关系即
P ( C r ∣ R ) = P ( C r ∣ X ) = P ( C r ∣ I r = { R , X } ) P(C_r|R)=P(C_r|X)=P(C_r|I_r=\{R,X\}) P(Cr∣R)=P(Cr∣X)=P(Cr∣Ir={R,X}) P ( C a ∣ A ) = P ( C a ∣ Y ) = P ( C a ∣ I a = { A , Y } ) P(C_a|A)=P(C_a|Y)=P(C_a|I_a=\{A,Y\}) P(Ca∣A)=P(Ca∣Y)=P(Ca∣Ia={A,Y})我们的目的是给定图片,学习 R → C r R\rightarrow C_r R→Cr及 A → C a A\rightarrow C_a A→Ca的映射关系,但是如果模型建立了 X → C r , Y → C a X\rightarrow C_r,Y\rightarrow C_a X→Cr,Y→Ca 的映射关系,用以上数据测试仍然显示为正确,但用数据 I c = { R , Y } 或 I d = { A , X } I_c=\{R,Y\}或I_d=\{A,X\} Ic={R,Y}或Id={A,X}测试会发现模型建立了错误的关系。
所以为了避免数据与目的不符,需要在数据中加入因子X或Y,即数据变为,俄罗斯坦克的图片:
I r = { R , X } , I c = { R , Y } I_r=\{R,X\},I_c=\{R,Y\} Ir={R,X},Ic={R,Y}美国坦克的图片:
I a = { A , Y } , I d = { A , X } I_a=\{A,Y\},I_d=\{A,X\} Ia={A,Y},Id={A,X}这时当X,Y在每类均匀分布的时候,X,Y被学习器视作为了噪音,即
P ( R ∣ X ) P ( A ∣ X ) = P ( R ∣ Y ) P ( A ∣ Y ) = 1 \frac{P(R|X)}{P(A|X)}=\frac{P(R|Y)}{P(A|Y)}=1 P(A∣X)P(R∣X)=P(A∣Y)P(R∣Y)=1
所以特征 X,Y对分类的信息增益为 0,即 X,Y无预测能力,这时才正确建立了与我们目的相符的映射关系。
* XY对分类的信息增益计算如下
信息熵公式:
H ( χ ) = − ∑ i = 1 c p i log p i H(\chi ) = - \sum_{i = 1 }^{c} p_i\log p_i H(χ)=−i=1∑cpilogpi其中 c c c 为分类数。信息增益:
G a i n ( D , α ) = H ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ H ( D v ) Gain(D,\alpha )=H(D)-\sum_{v=1 }^{V}\frac{\left | D^v \right |}{\left | D \right |}H(D^v) Gain(D,α)=H(D)−v=1∑V∣D∣∣Dv∣H(Dv)这里 D D D 指数据集, V = 2 V=2 V=2 即清晰与模糊。这里只有两类,理想情况下样本中每类分布概率为0.5,所以样本的信息熵为:
H ( D ) = − ( 0.5 log 2 ( 0.5 ) + 0.5 log 2 ( 0.5 ) ) = 1 H(D) = -(0.5\log_2(0.5)+0.5\log_2(0.5))=1 H(D)=−(0.5log2(0.5)+0.5log2(0.5))=1而清晰与模糊特征在每类中均匀分布则概率为0.5,各特征的信息熵为:
H ( D X ) = H ( D Y ) = − ( 0.5 log 2 ( 0.5 ) + 0.5 log 2 ( 0.5 ) ) = 1 H(D^X) =H(D^Y) = -(0.5\log_2(0.5)+0.5\log_2(0.5))=1 H(DX)=H(DY)=−(0.5log2(0.5)+0.5log2(0.5))=1所以信息增益为:
G a i n ( D , X Y ) = H ( D ) − ( 0.5 ∗ H ( D X ) + 0.5 ∗ H ( D Y ) ) = 0 Gain(D,XY)=H(D) - (0.5*H(D^X)+0.5*H(D^Y)) = 0 Gain(D,XY)=H(D)−(0.5∗H(DX)+0.5∗H(DY))=0所以如果某个特征在各类间是均匀分布的,那么该特征的信息增益是 0,读者可以扩展到多类问题上。同样的简单举例,如果所有图片都是清晰的,那么清晰对分类也是无预测能力的,套用以上公式信息增益算出来也是 0。
俄罗斯坦克问题还存在另一个问题,即特征难易问题,这里的特征难和易主要指特征提取的难易问题,分类也占了部分,这个和数据特征提取后的最小维度相关。
这里简单定义特征的难易:以 ϵ \epsilon ϵ(其中 ϵ → 0 \epsilon \rightarrow 0 ϵ→0)的误差正确分类该特征的最小模型容量或函数复杂度。这里特征是高维的,该分类问题包含特征降维(提取)过程,即模型容量包含了降维函数+分类函数的容量(其他可参考VC维及模型容量的概念)。
1 n ∑ i = 0 n ∥ inf F ( x ) − C ∥ < ϵ ; s . t . ϵ → 0 \frac{1}{n}\sum _{i=0}^{n}\left \| \ \inf F(x)-C \right \|<\epsilon \ \ ; \ s.t. \ \epsilon \rightarrow 0 n1i=0∑n∥ infF(x)−C∥<ϵ ; s.t. ϵ→0 inf F ( x ) \inf F(x) infF(x)即满足该条件的下界模型容量,所以如上,虽然概率上各特征相同
P ( C r ∣ R ) = P ( C r ∣ X ) = P ( C r ∣ I r ) P(C_r|R)=P(C_r|X)=P(C_r|I_r) P(Cr∣R)=P(Cr∣X)=P(Cr∣Ir) P ( C a ∣ A ) = P ( C a ∣ Y ) = P ( C a ∣ I a ) P(C_a|A)=P(C_a|Y)=P(C_a|I_a) P(Ca∣A)=P(Ca∣Y)=P(Ca∣Ia)但是模型对特征的偏好不同,在保证分类误差最小的情况下,模型越简单该模型会更倾向于选择更简单特征(更简单特征的最优模型容量与该模型容量的距离更小)。这里假设区分模糊比区分坦克类型更简单,那么模型将更容易学习到区分模糊和清晰。所以在作训练的时候,目的分类特征越难,越需要保证其他无关特征的分布在类间的均匀。
这个裁剪并不仅仅是增加数据,而如上文也是一个弱化数据噪声与增加模型稳定性的方法。比如假设:
二类分类问题(如区分人脸与猫脸), C 1 C_1 C1类别主要特征为 { E 1 , F 1 , G 1 } \{E_1,F_1,G_1\} {E1,F1,G1}, C 2 C_2 C2为 { E 2 , F 2 , G 2 } \{E_2,F_2,G_2\} {E2,F2,G2},这里的特征可能是非离散的,如人脸的局部patch(眼睛及周围区域,嘴巴及周围区域,为了容易书写用离散的方式)
增加背景数据或噪音: C 1 , C 2 C_1,C_2 C1,C2随机加入 N 1 , N 2 , N 3 N_1,N_2,N_3 N1,N2,N3,这里同上可以表示为非人(猫)脸背景区域
这个时候随机剪裁可以得到图片(这里为了方便,未考虑组合特征对类别的相关关系,即多个局部特征可以组合为全局特征,这时全局特征有关于类别的关联关系):如
I 1 = { E 1 , F 1 , G 1 } I_1=\{E_1,F_1,G_1\} I1={E1,F1,G1} I 2 = { E 1 , F 1 , G 1 , N 1 } I_2=\{E_1,F_1,G_1,N_1\} I2={E1,F1,G1,N1} I 3 = { E 1 , F 1 , N 2 } I_3=\{E_1,F1,N_2\} I3={E1,F1,N2} I 4 = { F 1 , G 1 , N 3 } I_4=\{F_1,G_1,N_3\} I4={F1,G1,N3} . . . ... ...因为 N 1 , N 2 , N 3 N_1,N_2,N_3 N1,N2,N3 为随机的而 E 1 , F 1 , G 1 E_1,F_1,G_1 E1,F1,G1 总是能高概率产生 E 1 , F 1 , G 1 → C 1 E_1,F_1,G_1\rightarrow C_1 E1,F1,G1→C1 的映射,这时 { E 1 , F 1 , G 1 } \{E_1,F_1,G_1\} {E1,F1,G1} 中任意因子相对于 N 1 , N 2 , N 3 N_1,N_2,N_3 N1,N2,N3有更高的信息增益或者权重。即:
P ( C 1 ∣ x ∈ { E 1 , F 1 , G 1 } ) ≫ P ( C 1 ∣ x ∈ { N 1 , N 2 , N 3 } ) P(C_1|x\in\{E_1,F_1,G_1\})\gg P(C_1|x\in\{N_1,N_2,N_3\}) P(C1∣x∈{E1,F1,G1})≫P(C1∣x∈{N1,N2,N3})
如果 N 1 , N 2 , N 3 N_1,N_2,N_3 N1,N2,N3 在类别 C 2 C_2 C2 也有相应的分布,那么 N 1 , N 2 , N 3 N_1,N_2,N_3 N1,N2,N3 对分类的信息增益接近于零。
假设模型未见过数据 I x = { F 1 , G 1 , N 1 , N 3 } I_x=\{F_1,G_1,N_1,N_3\} Ix={F1,G1,N1,N3},那么模型如何预测该数据?通过上式我们可以看到 F 1 , G 1 F_1,G_1 F1,G1的权重远高于其他特征,即使其他未见过的噪声加入, F 1 , G 1 F_1,G_1 F1,G1因子的权重仍然起主要作用,而个别的因子特征缺失并不会大幅影响模型的预测结果,这个和深度学习中的dropout原理相同,区别是dropout更加随机,所以模型有更高的稳定性。
随机裁剪相当于建立每个因子特征与相应类别的权重关系,减弱背景(或噪音)因子的权重,且使模型面对缺失值不敏感,也就可以产生更好的学习效果,增加模型稳定性。
所以,数据增强中的光照强度,对比度,柔和度,噪声水平等等,也是同样的道理,看上去是增加模型对于不同数据分布条件下的适应能力,本质上还是这些因子的分布在训练集中是不平衡的,这样就会导致模型的因子偏好,从而影响模型稳定性。
Approximating CNNs with Bag-of-local-Features models works surprisingly well on ImageNet
Why do deep convolutional networks generalize so poorly to small image transformations
Adversarial Examples Are Not Bugs, They Are Features
Imagenet-Trained CNNs Are Biased Towards Texture Increasing Shape Bias Improves Accuracy And Robustness