Triplet Response Residual(TRR)与特征表示学习

最开始想到把TRR用在特征表示学习里是受到了Prof.Zhang分享的一个工作[1]的启发。他们的工作是用TRR来做DNN model compression,具体做法是为卷积神经网络的每个filter(or kernel)计算得到一个TRR score,然后根据TRR scores 做一个排序,把TRR score低的filters pass掉,这样做一方面可以减少卷积神经网络的filters数量(即减少了模型参数),只保留特征学得比较好的一些filters,另一方面可以减少模型的计算量。正是受到这个工作的启发,才有了一些关于特征表示学习方面的insight。我们知道在模型参数过多时,容易出现过拟合现象,使得模型只是简单地“记住”了数据的特征表示,但其实并没有学到同类数据背后的一些共性特征。如果模型可以学会物以类聚,即使得同类数据的特征向量在特征空间下尽量逼近,而不同类数据的特征向量在特征空间下尽量疏远,就能学到同类数据的共性特征,使得模型不再是简单地“记住”数据的特征表示,这样也能提升模型的泛化能力。后面通过实验验证了这个想法,即一个过参数化模型并没有学到共性特征,并且在模型泛化能力上不如引入了TRR的模型的泛化能力好。

实验背景

实验数据是通过sklearn生成的一个10分类数据集。每条数据的特征维度是100,其中有20维的冗余特征。为了在不同大小的数据集上验证模型的性能,分别生成不同大小的训练数据集:1000050000100000。验证集大小固定为10000。为了引入TRR,设置Input数据的格式为:{(xanc, xneg, xpos, y)},其中xanc和xpos是同一个类别下的两个不同数据,xneg和xpos属于不同类别下的数据,yxanc和xpos的类别。

Figure 1 模型架构图

模型架构图如figure 1所示,输入为(xanc, xneg, xpos, y),其中xR100 y∈R10(one hot vector),然后经过3层的fully connected layer,激活函数是RELU,最后一层output layer。具体超参数配置如下:

Triplet Response Residual

原始的TRR计算公式为:i代表第i层,xi表示第ifully connected layer的输出特征向量,x0=x。它的物理意义是一种衡量同类别数据特征向量距离与不同类别数据特征向量距离的度量标准。定义loss function

但是因为这一项比较大,所以训练的时候很容易出现value overflow,因此修改原始loss function 为:

其中后面一项即TRR_loss,后来在训练的过程当中发现,后面一项很容易梯度为0,所以重新定义TRR_loss为:

这样设计可以避免模型只学到了,而学不到,同时,由于,而sigmoid函数在x>=0的区域可以近似看成一个凹函数,这样有利于优化。顺带提一下:,因此新的TRR_loss本身是原来的TRR_loss的一个下界。所以修改后的loss function为:

超参数用来控制TRR_loss的权重,实验过程中分别设置为0.01.0,分别表示不引入TRR_loss约束和引入权重为1.0TRR_loss约束。

实验结果和分析

在三个不同大小的训练数据集:1000050000100000上的实验结果见下图:

Figure 2: 10000 samples训练结果(加了early stopping策略)

Figure 3: 50000 samples 训练结果(加了early stopping策略)

Figure 4: 100000 samples 训练结果(加了early stopping策略)

Figure 234分别对应10000,50000,100000 samples的训练结果,其中绿色实线和点线代表加入TRR_loss约束后模型在训练集和验证集上的性能,红色实线和点线代表不加TRR_loss约束的模型在训练集和验证集上的性能。从上面的图片可以看出如果没有TRR_loss的约束,

始终逼近0(参考figure 234上面部分图的红色实线和点线),这意味着,所以此时模型并没有学到同类数据的共性特征。可以理解为,在特征表示空间里同类数据特征向量之间的距离与不同类数据特征向量之间的距离没有差异性,就好像用one hot来表示词向量时,不同词之间的距离总是相等的,这样不能很好地用来表示词之间的某种语法和语义关系。

Figure 5: xancxpos之间的距离等于xancxneg之间的距离

在加了TRR_loss约束后,可以看到模型在验证集上的准确率更加逼近在训练集上的准确率(参考figure234下面部分图),因此模型的泛化能力要比不加TRR_loss约束的模型的泛化能力好。

Model\num samples 10000 50000 100000
No TRR 0.888 0.965 0.979
TRR 0.886(-0.2%) 0.973(+0.8%) 0.981(+0.2%)
TRR_new 0.905(+1.7%) 0.987(+2.2%) 0.990(+1.1%)

Table 1: 不同模型用不同训练集训练在验证集上的最好结果

Table 1所示,其中No TRR表示不加TRR_loss约束,TRR表示在

约束下的模型在验证集上的分类准确率,TRR_new表示在

约束下的模型在验证集上的分类准确率。可以看到在10000,50000,100000训练集下TRR_new都取得了最好的结果,在50000samples下模型效果比不加TRR_loss约束的模型的分类准确率高了2.2%

Future Work

由凸优化相关引理[2]

给定函数h: R→R和函数g: Rn→R,定义复合函数f(x)=h o g=h(g(x)): Rn→R,则如下结论成立:

(1) 如果h是凸函数且非减,g是凸函数,则f是凸函数

(2) 如果h是凸函数且非增,g是凹函数,则f是凸函数

(3) 如果h是凹函数且非减,g是凹函数,则f是凹函数

(4) 如果h是凹函数且非增,g是凸函数,则f是凹函数

表示函数h的扩展值延伸,若点不在函数h的定义域内,赋值为∞(h是凸函数)或者-(h是凹函数)

对应到神经网络的隐藏层输出:

我们可以得到若函数本身为凸函数且非减,则Hi向量里的每个元素的函数表达式关于Hi-1都是凸函数。因此我们只要找到一个函数f,使得函数f是凸函数并且非减,此时-f凹函数且非增,所以根据结论(1)和结论(4)可以推出TRR_loss:

是一个凸或凹函数。或者找到一个函数f,使得函数f是凹函数并且非增,此时-f是凸函数且非减,由结论(4)和结论(1)也可以推出TRR_loss是一个凹或凸函数。

综上,如果可以找到这个函数f,就可以一层层优化底层的特征表示层,并且根据凸优化原理可以求解得到最优数值解。求解得到底层的特征表示层后再训练一个分类器。所以后面的工作主要是去找到这个函数f

References:

[1] https://www.egr.msu.edu/~mizhang/papers/2018_MobiCom_NestDNN.pdf

[2] Stephen Boyd, Lieven Vandenberghe. 凸优化[M]. 清华大学出版社, 2013.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>