近期的进展表明,深度网络所学习到的抽象特征只能减少域和域之间的差异,但是并不能够移除这种差异。
深度学习和域适应的结合:
在CNN中添加一个或者几个层,使这些层学习到的特征的分布相近或者添加一个full-connected的子网络来建立一个domain discriminator(域分类器),并且使网络所学习到的特征可以使domain discriminator混淆。但是以上这些方法都建立在“source classifier可以通过网络学习得到的domain-invariant feature 来直接地转换得到target classifier”这样一个假设当中。但是这个假设在source classifier和target classifier不能共享参数的时候不成立。当理想联合假设的组合误差(?the combined error of the ideal joint hypothesis)很大的时候,并不存在一个单一的分类器可以同时在source domain和target domain上有很好的表现。residual network 相关: 这个网络是一个拥有上百层的非常深的网络,学习了一个被称为 ΔF(X) 的residual function(残差函数),最终结果是这个残差函数加上输入本身( identity mappings)的 relu 。作者希望在一个深度网络框架当中,通过residual function ΔF(X) 来桥接source classifier fS(x) 和target classifier fT(x) 作者将target classifier的输出直接给residual function作为输入,可以更有效率地获得source classifier和target classifier之间的联系。source domain:
DS={(xSi,ySi)}nSi=1 有 nS 个labeled data服从的分布为 p 希望学习到的分类器为 y=fS(x)target domain:
DT={xTj}nTj=1 有 nT 个unlabeled data服从的分布为 q ,其中 q≠p 希望学习到的分类器为 y=fT(x)因为分布 p(x,y)≠q(x,y) ,且分类器 fS(x)≠fT(x) ,这些mismatches(不相匹配)可以通过共通的adaptation来修复,使得domain adaptation更加有效。
分类器:source domain上的empirical error(经验误差):
minfS1nS∑i=1nSL(fS(XSi),ySi)) 其中 L(,) 表示交叉熵损失函数。因为卷积层能够学习到一个可以在两个域中转换的普适的特征,所以作者决定对预先训练的卷积层所学到的特征fine-tune(微调)而不是直接adapt。
网络架构:
首先,CNNs之后加一个bottleneck layer(我查了一下,这个瓶颈层是为了减少feature的维度而被创建出来的。。。) fcb 来减少feature的维度。
之后使用multiple layers L={fbc,fcc} 的feature,在source domain上微调(fine-tune) CNNs。目的是为了让source domain和target domain更加相似。
为了使mutiple layers L 的adaptation进行得更加有效,作者建议使用mutiple layers L 之间的张量积来做一个 lossless multi-layer feature fusion(无损多层特征融合)。定义: zSi=Δ⨂l∈Lxsli 定义: zTi=Δ⨂l∈Lxtli 我查了一下,这里的张量积大概是矩阵的张量积也就是克罗内克积,百度百科一下就可以知道。之后,作者之后利用最小化source domain和target domain之间Maximum Mean Discrepancy(MMD,最大平均差异)来做adaptation(域适应)(使用了kernel trick): minfS,fTDL(DS,DT)=∑i=1ns∑j=1nsk(zsi,zsj)n2s+∑i=1nt∑j=1ntk(zti,ztj)n2t−2∑i=1ns∑j=1ntk(zsi,ztj)nsnt 其中,特征核函数 k(z,z′)=e−∥vec(z)−vec(z′)∥2/b 是一个带宽为b的高斯核函数与DAN不同,作者使用了多层特征的MMD惩罚。作者认为他的优势这样可以获取到multilayer之间充分的互动(?can capture full interactions across multilayer features)并且能够更好地选择模型作者认为虽然identity mappings(就是之前提到的x直接作为学习到的函数本身)不太可能是最优的,但是依据这个identity mappings找到一个 perturbation function远比直接学习一个全新的函数要容易的多。residual learning(残差学习?)是成功训练一个非常深的网络的关键所在。
作者基于上述的观察,在网络中加入了residual block(如网络架构图最右侧所示)
推导运算: fS(x) 为source classifier中 fcc 层的输出, fT(x) 为target classifier中 fcc 层的输出但是 fS(x) (大写)被定义为: fS(x)=fT(x)+Δf(x) 因为target domain没有标签所以如果选择 fT(x) 会导致back propagation无法工作最终的输出都经过softmax 激活处理: fs(x)=Δσ(fS(x)) , ft(x)=Δσ(fT(x)) ,其中 σ() 为softmax,为了保证最终的输出为“可能性”。Residual layer fc1−fc2 作为全连接层,并保证 ft(x) 不会偏离 fs(x) 太远。但是即便如此,仍然不能够保证 ft(x) 能够很好的切合target domain,因此作者利用entropy minimization principle(熵最小化原理)来优化参数,通过最小化各个类的条件分布 ftj(xti)=p(ytj=j|xti;ft) 的熵来鼓励target domain上类之间的low-density separation(低密度分离?我的理解是输出更加趋向一个one-hot vector,因为one-hot vector的熵是最低的) minft1nt∑i=1ntH(ft(xti)) 这就是entropy penalty(熵惩罚)。其中条件信息熵 H(ft(xti))=−∑cj=1ftj(xtj)log(ftj(xtj)) , c 为类(label)的数目, j 就是label, ftj(xtj)=p(ytj=j|xti;ft) 为给定数据时标签是 j 的概率,也就是类的后验概率。不了解信息熵可以看一看这里:信息熵,条件熵。