天天看点

hint-based learning快速理解

FITNETS: HINTS FOR THIN DEEP NETS

论文地址:https://arxiv.org/abs/1412.6550

这篇论文主要是研究如何在更深的学生网络上取得更好的效果。之前提出的知识蒸馏,是用比较小的学生模型来模仿比较大的老师模型的知识、信息、输出,在这里为了取得更好的表现,我们希望学生模型更大一点更深一点,更为了防止更深的网络在模仿时出错,我们不只考虑老师模型的最终输出,也考虑模仿中间层的输出,来指导学生模型的训练。

只考虑单纯的知识转移的蒸馏过程,核心点是对softmax层的输入添加了温度参数。

学生网络的输出

P S τ = s o f t m a x ( a S τ ) P^{\tau}_S=softmax(\frac{a_S}{\tau}) PSτ​=softmax(τaS​​)

老师网络的软化输出(软标签):

P S τ = s o f t m a x ( a S τ ) P^{\tau}_S=softmax(\frac{a_S}{\tau}) PSτ​=softmax(τaS​​)

最终的损失函数是由两部分组成的,一个是学生输出和硬标签的差距,一个是学生输出和软标签的差距。

L K D ( W s ) = H ( y t r u e , P s ) + λ H ( P T τ , P S τ ) L_{KD}(W_s)=H(y_{true},P_s)+\lambda H(P^{\tau}_T,P^{\tau}_S) LKD​(Ws​)=H(ytrue​,Ps​)+λH(PTτ​,PSτ​)

H H H在这里是交叉熵损失, λ \lambda λ是平衡两个损失的权重。

在面对比较深的学生模型时,引入了一个hint的概念。A hint is defined as the output of a teacher’s hidden layer responsible for guiding the student’s learning process。hint指的是用来指导学生模型学习过程的老师模型的中间层的输出。在这里要考虑到的一点是,老师模型和学生模型的结构不一样,所以中间层的差距也会很大,比如说大小和通道数。所以为了让老师模型的hint层和学生模型的guided层相匹配,我们会在学生模型的guided层后面加一个回归层,使得两个输出的大小之类的保持一致。

最终的损失函数是:

L H T ( W G u i d e d , W r ) = 1 2 | u h ( x ; W H i n t ) − r ( v g ( x ; W G u i d e d ) ; W r ) | 2 L_{HT}(W_{Guided},W_r)=\frac{1}{2}|u_h(x;W_{Hint})-r(v_g(x;W_{Guided});W_r)|^2 LHT​(WGuided​,Wr​)=21​|uh​(x;WHint​)−r(vg​(x;WGuided​);Wr​)|2

在这里 r r r表示的就是我们加上去的回归层, W h i n t W_{hint} Whint​和 W G u i d e d W_{Guided} WGuided​分别是老师模型中的hint层和学生模型中的guided层的参数。 u h u_h uh​和 r r r都是非线性的,并且两个的输出需要是可比的(这也是添加回归层的目的:可比)。

使用全连接层作为回归层会需要太多的参数并且有更多的内存和计算损耗,所以可以使用卷积层。

在进行训练时,hint learning的部分和knowledge distillation的部分是分开的。首先是对学生模型的中间层参数进行训练,假设学生模型的初始参数是 W S W_S WS​,老师模型的初始参数是 W T W_T WT​,从开始到老师模型的hint层的参数为 W H i n t W_{Hint} WHint​,从开始到学生模型的guided层的参数为 W G u i d e d W_{Guided} WGuided​。学生模型的guided层后面的回归层参数为 W r W_r Wr​。第一部分训练目的是让guided层学习hint层,我们最小化hint层和回归层输出的差距,对guided层以及之前的层的参数进行调整,这就是学习老师模型的中间层的信息。

在第一部分训练结束后,我们再在已经调整好的参数基础上,进行整体的蒸馏。

hint-based learning快速理解

第一张图是整体的比较,第二张图代表着hint-learning,第三张图就是传统的知识蒸馏。图中的 W G u i d e d ∗ W^*_{Guided} WGuided∗​指的是经过调整后的guided层以及之前层的参数,其余的层的参数还是初始值,不需要再次进行更改。

前面的没什么难理解的,最后翻译一下conclusion部分。

我们提出了一个新的可以将大而深的网络压缩成瘦而更深的网络的方法,也就是引入一个中间层hint来指导学生模型训练过程。我们能用这个方法来训练参数比较小的特别深的学生模型,这种模型泛化更好并且运行起来也比老师模型快。我们的实验表明用教师模型的中间层作为hint要比用分类结果作为hint效果好得多。我们在benchmark数据集上的结果表明啊能力不太强的深度网络也能提取出比拥有它10倍参数的网络能提取的更好的特征表达。我们的hint-based learning效果建议我们应该更努力的寻找新的训练策略来充分体用深度网络的能力。

继续阅读