
MMD 还是 CORAL一次搞懂域适应分布对齐的两把钥匙【免费下载链接】transferlearningTransfer learning / domain adaptation / domain generalization / multi-task learning etc. Papers, codes, datasets, applications, tutorials.-迁移学习项目地址: https://gitcode.com/gh_mirrors/tr/transferlearning⚡ 一个翻车现场你正在做迁移学习的域适应任务在电商商品图上训了一个分类器。 准确率很漂亮。 结果一丢到工业质检数据上直接腰斩。 同样的模型同样的类别为什么不行根因只有一个分布偏移。光照、背景、拍摄角度都变了模型却不知道。 问题就清楚了怎么量化并缩小这种偏移 MMD 和 CORAL就是干这件事最老、最稳的两件工具。两种对齐思路分别解决什么问题MMD把两组样本的重心比一比MMD 把样本投影到高维空间再比较两组的重心也就是均值$$ \text{MMD}(X, Y) \left| \frac{1}{n}\sum_{i1}^{n}\phi(x_i) - \frac{1}{m}\sum_{j1}^{m}\phi(y_j) \right|_{\mathcal{H}} $$公式看着唬人意思很直白。 $\phi$ 把样本映到高维空间MMD 只量两组重心的距离。 距离为 0说明两个分布对上了。 你不用自己算高维坐标核函数会自动处理。两域差异是非线性的比如簇的形状完全不同MMD 更靠得住。CORAL把源域的形状掰成目标域的样子CORAL 只做一件事让两个域的协方差矩阵描述特征怎么一起变的表格趋近一致。 数学上是找一个变换矩阵 $A$ 去掰源域特征$$ A \Sigma_s^{-1/2}\Sigma_t^{1/2} $$翻译一下先把源域的形状归一化再乘上目标域的形状。 乘完两域特征形状就对齐了。 深度版本连这步显式变换都省了直接把协方差差当损失反向传播。 差异主要出在二阶统计量特征间怎么共变时CORAL 更对症。两者在项目里都已封装好调用就这么短mmd MMD_loss(kernel_typerbf) loss_mmd mmd(src_feat, tgt_feat) loss_coral CORAL(src_feat, tgt_feat) 三步判断该选 MMD 还是 CORAL按顺序问自己如果特征维度超过 1000且分布差异看起来是非线性的 → 优先 MMD。如果特征是低/中维度算力有限又要稳 → CORAL。如果是深度模型端到端训练想要轻量损失 → 深度 CORAL。如果样本少、怕调参 → 用 MMD 的线性核版本。非线性差异看 MMD二阶统计差异看 CORAL。口诀就这一句。跑通一个最小demo损失怎么加进训练骨架就三步加载数据、算对齐损失、加进总损失。 MMD 损失类在 code/distance/mmd_pytorch.py。 深度 CORAL 在 code/DeepDA/loss_funcs/coral.py。 训练循环只需改这里src_feat, src_out net(src_img) tgt_feat net(tgt_img) cls_loss ce(src_out, src_label) align_loss mmd(src_feat, tgt_feat) total cls_loss 0.1 * align_loss total.backward()想换 CORAL把 mmd 换成 CORAL 即可权重 0.1 可自己调。收束MMD 对齐重心CORAL 对齐形状都是特征对齐的工具也是跨域泛化的关键。 延伸阅读域适应综述经典论文一张清单数据集说明Office-31 等数据集的来源【免费下载链接】transferlearningTransfer learning / domain adaptation / domain generalization / multi-task learning etc. Papers, codes, datasets, applications, tutorials.-迁移学习项目地址: https://gitcode.com/gh_mirrors/tr/transferlearning创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考