目录

Huang J., Smola A., Gretton A., Borgwardt K. & Scholkopf B. Correcting Sample Selection Bias by Unlabeled Data. NIPS, 2007.

MMD量化了两组数据是否来自同一个分布的可能性, 那么如何利用这份信息来更好地训练, 增加模型的泛化性呢?

主要内容

我们有两组数据\(Z = ((x_1, y_1), (x_2, y_2), \ldots, (x_m, y_m)) \subseteq \mathcal{X} \times \mathcal{Y}\), \(Z' = ((x_1', y_1'), (x_2', y_2'), \ldots, (x_n', y_n')) \subseteq \mathcal{X} \times \mathcal{Y}\), 分别来自分布\(\mathrm{Pr}(x, y)\)和\(\mathrm{Pr}'(x, y)\).

一般来说, 我们训练一个模型(分类也好回归也罢), 可以归结为如下的风险函数

\[R(\mathrm{Pr}, \theta, \ell(x, y, \theta)) = \mathbb{E}_{(x, y) \sim \mathrm{Pr}} [\ell(x, y, \theta)],
\]

但是我们真正想要优化的是\(R(\mathrm{Pr}', \theta, \ell(x, y, \theta))\), 当然一般的做法是假设二者是一致的. 但实际情况可能是二者并不一致, 但是注意到

\[R[\mathrm{Pr}', \theta, \ell(x, y, \theta)] = \mathbb{E}_{(x, y) \in \mathrm{Pr'}} [\ell(x, y, \theta)]=\mathbb{E}_{(x, y) \sim \mathrm{Pr}} [\frac{\mathrm{Pr}'(x, y)}{\mathrm{Pr}(x, y)} \ell(x, y, \theta)],
\]

并记\(\beta(x, y) := \frac{\mathrm{Pr}'(x, y)}{\mathrm{Pr}(x, y)}\)(若成立), 则

\[R[\mathrm{Pr}', \theta, \ell(x, y, \theta)] = R[\mathrm{Pr}, \theta, \beta(x, y)\ell(x, y, \theta)].
\]

这实际上可以理解为对样本的一个重加权, 所以现在的问题便是, 如何估计\(\beta(x, y)\), 本文研究一种特殊的情况:

\[\mathrm{Pr}(x, y) = \mathrm{P}(y|x) \mathrm{Pr}(x) , \quad \mathrm{Pr}'(x, y) = \mathrm{P}(y|x) \mathrm{Pr}'(x),
\]

即 covariate shift, 此时

\[\beta(x, y) = \frac{\mathrm{Pr}(x)}{\mathrm{Pr}'(x)}.
\]

首先, 根据MMD我们知道, 两个分布差异性可以量化为

\[\mathrm{MMD}[\mathcal{F},p,q] := \sup_{f \in \mathcal{F}} (\mathbb{E}_p [f(x)] - \mathbb{E}_q[f(y)]),
\]

当我们限制\(\mathcal{F}\)为 universal RKHS \(\mathcal{H}\)的时候, 上式可表示为

\[\mathrm{MMD}[\mathcal{H}, p, q] = \sup_{\|f\|_{\mathcal{H}} \le 1} \mathbb{E}_p [f(x)] - \mathbb{E}_q [f(x)]
= \sup_{\|f\|_{\mathcal{H}} \le 1} \mathbb{E}_p [\langle \phi_x, f\rangle_{\mathcal{H}}] - \mathbb{E}_q [\langle \phi_x, f\rangle_{\mathcal{H}}] = \|\mu_p-\mu_q\|_{\mathcal{H}}.
\]

在此处, 我们关注(用\(\phi(x)\)表示\(\phi_x\))

\[\|\mu(\mathrm{Pr}') - \mathbb{E}_{x \sim \mathrm{Pr}(x)} [\beta(x) \phi(x)]\|,
\]

即我们希望找到一个权重\(\beta(x)\)使得上式最小, 由于分布的一些特殊性质, 完整的问题表述如下:

\[\min_{\beta} \quad \|\mu(\mathrm{Pr}') - \mathbb{E}_{x \sim \mathrm{Pr}(x)} [\beta(x) \phi(x)]\| \\
\mathrm{s.t.}\quad \beta(x) \ge 0, \mathbb{E}_{x \sim \mathrm{Pr}(x)}[\beta(x)] = 1.
\]

在实际问题中, 我们只有分布中的有限的采样, 也就是开头的\(Z, Z'\), 上述问题变为

\[\|\frac{1}{m} \sum_{i=1}^m \beta_i \phi(x_i)- \frac{1}{n} \sum_{i=1}^n \phi(x_i')\|^2 = \frac{1}{m^2}\beta^T K \beta - \frac{2}{mn}\kappa^T \beta + \mathrm{const},
\]

其中\(\kappa_i := \sum_{j=1}^{n} k(x_i, x_j')\). 于是, 我们优化如下的问题

\[\min_{\beta} \quad \frac{1}{2} \beta^T K \beta - \frac{m}{n}\kappa^T\beta \\
\mathrm{s.t.} \quad \beta_i \in [0, B], |\sum_{i=1}^m \beta_i - m| \le m\epsilon.
\]

限制条件的前者限制了差异的大小, 后者则是希望其迫近概率分布.

KMM的更多相关文章

  1. Kotlin/Native KMM项目架构

    一.什么是KMM? Kotlin Multiplatform Mobile ( KMM ) 是一个 SDK,旨在简化跨平台移动应用程序的创建.在 KMM 的帮助下,您可以在 iOS 和 Android ...

  2. Kotlin/Native 用KMM写Flutter插件

    一.用KMM写Flutter插件 Google官方有一个写Flutter例子How to write a Flutter plugin,这里把Google plugin_codelab 例子改成用KM ...

  3. UI数据库

    一.数据库 SQL: SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集, 是一种功能齐全的数据库语言. 二.数据库管理系统 数据 ...

  4. 采用ubuntu系统来安装tensorflow

    最近在学习google新开源的深度学习框架tensorflow.发现安装它的时候,需要依赖python2.7.X;我之前一直使用的linux是centos.而centos不更新了,里面的自带的pyth ...

  5. OAF_开发系列07_实现OAF下拉菜单的上下联动Poplist Synchor(案例)

    20150706 Created By BaoXinjian

  6. SQLServer : EXEC和sp_executesql的区别

    MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql.通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就 ...

  7. 01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

    1.什么是Spring : v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:u ...

  8. iOS之类的本质

    1.本质 类的本质其实也是一个对象(类对象) 程序中第一次使用该类的时候被创建,在整个程序中只有一份. 此后每次使用都是这个类对象,它在程序运行时一直存在. 类对象是一种数据结构,存储类的基本信息:类 ...

  9. rfc2616 HTTP Protocl Analysis

    catalog . Introduction . Protocol Parameters . HTTP Message . Request . Response . HTTP Method.Conte ...

随机推荐

  1. 日常Javaweb 2021/11/19

    Javaweb Dao层: //连接数据库,实现增查功能 package dao; import java.sql.Connection; import java.sql.DriverManager; ...

  2. 大规模 K8s 集群管理经验分享 · 上篇

    11 月 23 日,Erda 与 OSCHINA 社区联手发起了[高手问答第 271 期 -- 聊聊大规模 K8s 集群管理],目前问答活动已持续一周,由 Erda SRE 团队负责人骆冰利为大家解答 ...

  3. Docker学习(一)——安装docker

    Suse12上安装docker   对于suse13.2之后的版本,因为docker已经被添加到了suse仓库中,直接使用sudo zypper install docker即可.   suse12不 ...

  4. 监测linux系统负载与CPU、内存、硬盘、用户数的shell脚本

    本节主要内容: 利用Shell脚本来监控Linux系统的负载.CPU.内存.硬盘.用户登录数. 一.linux系统告警邮件脚本 # vim /scripts/sys-warning.sh #!/bin ...

  5. spring boot集成mybatis框架

    概述 中文官网:http://www.mybatis.cn 参考教程:https://www.w3cschool.cn/mybatis MyBatis Plus:http://mp.baomidou. ...

  6. 删除数据库时报错 ERROR 1010 (HY000): Error dropping database (can't rmdir './cart', errno: 39)

    这是因为在数据目录下有表相关的数据(不是表),此时应该进入存放表的目录下删除与表相关的数据,一般数据存放目录默认为/var/lib/mysql,cd到目录下 执行命令:cd /var/lib/mysq ...

  7. python实现skywalking邮件告警webhook接口

    1.介绍 Skywalking可以对链路追踪到数据进行告警规则配置,例如响应时间.响应百分比等.发送警告通过调用webhook接口完成.webhook接口用户可以自定义. 2.默认告警规则 告警配置文 ...

  8. Docker从入门到精通(二)——安装Docker

    通过上面文章,我们大概知道了什么是Docker,但那都是文字功夫,具体想要理解,还得实操,于是这篇文章带着大家来手动安装Docker. 1.官方教程 https://docs.docker.com/e ...

  9. C# 编写一个小巧快速的 Windows 动态桌面软件

    开源自己前段时间使用 C# 编写的 Windows 动态桌面软件,在接下来的博客我将描写一些技术细节和遇到的一些坑.这个软件可以把视频设置成桌面背景播放,不仅如此而且还可以把网页或一个网页文件设置成桌 ...

  10. 跨平台调用之WebService

    一.简介 web service是一种跨编程语言和跨操作系统平台的远程调用技术,是基于网络的.分布式的模块化组件. 跨编程语言就是说服务器端程序采用 Java 编写,客户端程序则可以采用其他编程语言编 ...