这部分讨论在有数据缺失情况下的 learning 问题,这里仍然假定了图结构是已知的。

首先需要讨论的是为什么会缺失,很多情况下缺失并不是“随机”的:有的缺失是人为的,那么某些情况下缺失的可以直接补上,而某些情况下我们需要使用额外的随机变量对缺失进行 modeling;有的缺失是随机的,有的是因为的确存在“解释”或者人为赋予了随机性(如 Bayesian 里面对参数假定了分布),这些时候我们会引入所谓的隐变量。这种情况下,我们 learning 的目标是最大化观测到的的数据的 likelihood,而将 missing 的通过 marginalization 去掉。某些不影响的情况下我们甚至可以扔掉 missing value。

这里引入两个概念:MCAR(missing at complete random),指 model 蕴含着 independency assertion,,这里 指控制控制是否缺失的随机变量,如 IID 数据中随机选择若干缺失,这样有以上独立性成立;更多的是 MAR(missing at random),指 ,即给定观测后,隐变量与控制是否缺失的隐变量独立。可以证明,MAR 情况下的 likelihood 可以 decompose 称为两部分,一部分是关于观测数据的,另一部分是关于 (控制 missing 的随机变量)的,这也意味着,learning 问题可以分别进行,特别的,如果我们对 missing 机制不是很感兴趣,我们只需要对观测到数据部分的 likelihood function 进行优化即可。

下面很自然的问题是既然是 MLE,与 fully observed 情况的区别是什么?很自然的一个 solver 就是我们写出 likelihood function,然后对参数求导进行优化,但实际情况并非我们想象的那么简单,去掉了 missing value 后,我们的 margin 往往是一个非常复杂的东西(多峰),特别对 BN 来说一个很好的 learning 性质(在 full observation 可以转换到每个 local likelihood 分开进行优化)已经没有了。说的更加形式化一点,我们会丧失 identifiability,参数模型的 identifiability 指对给定的参数集合,其任意参数均 indentifiable,即不存在其他的参数值导致似然函数值与其相同。往往在 exponential family 上的 MLE 都是 identifiable,而如果存在 missing value,我们往往只能得到 locally identifiable。那么像计算 gradient 的过程往往需要 inference 的结果,比如可以证明 。我们或者对 进行其他的参数化。

另外一种非常重要的思路就是 EM(expectation maximization)。直观的说 EM 的想法就是我们将 missing value 填上(data imputation),这样就可以在 fully observed 情况下进行 MLE,这是我们所熟悉的问题。这就有个 chick and egg 的问题:如果我们希望填上数据,那我们就得知道 model 的参数,可是我们现在正在估计参数呢!因此 EM 使用的是一种 bootstrap 的策略,假象我们有一个参数之后在后验分布下更新参数,如此不断迭代下去。具体来说,

  • E-step,利用给定的参数计算 missing value 的后验分布
  • 将补全后的数据的对数似然函数在后验分布下的平均进行学习,获得新的模型参数

注意这里如果是 BN 补全数据后对数似然函数就可以分解了,故而这里的计算可以直接使用前面的结论。因此 EM 需要不断的进行 inference 和做全观测下的 learning。可以证明 EM 算法会收敛,这是因为每步选择的参数以及

两式相减有

很显然由于最优化前者大于零,而后者也非负。其中我们也可以看出来 M-step 实际上是在选择一个凸下界(很多时候 decouple 后的联合分布的确是个凸函数)。可以证明收敛到的结果是 marginal likelihood 的 stationary point。

EM 的一个变种是使用 MAP 填充而不是在后验分布下进行期望,这称为 hard-assignment EM。但是这个算法与 EM 优化的目标是不同的。实际上它优化的是模型参数以及导致 MAP 的隐变量赋值,从这点来看,我们使用的 k-means 等聚类算法的逻辑就不是仅仅“像 EM”,而是的确是 hard-assignment EM 了。很自然的问题是,gradient ascent 和 EM 相比各有什么特点呢?事实上 EM 算法在迭代初期能够很快的导致优化目标函数的上升,而 gradient ascent 相对较慢。而迭代的后期,如果使用数值算法,如 CG 等收敛的会更快。两个算法与初始值都有较大的关系。

值得注意的是 EM 也好 gradient ascent 也好,其中较为费事的就是在厚颜下面的期望,这个计算在如混合分布下面是非常 trivial 的,但是某些情况下仍然会变得让人无法接受。很显然使用 approximate inference 技术可能能降低这部分的计算代价,但是关键的问题是如果 E-step 换用近似后验,是否得到的还是对原先 marginal likelihood 的合理近似呢?事实上,不少情况下我们是无法 justify 这点的,一般我们只是这样做而已。一种经常使用而且有理由说明这样做合理的情况就是所谓 variational EM,这是我们在对后验分布进行 factorization 假设下获得的近似后验,这样 learning 过程中我们使用它替代 E-step 的后验会进一步简化。诸如 LDA 之类的 training 实际上都是使用的这个技巧。通常知道了近似的目标函数我们才能 track 迭代收敛的情况。在 Bayesian model 里面更多的会用到 sampling 方法(如 Gibbs sampling,比如 LDA 的另外一种 variant 的 training)。事实上在有 missing data 的时候 variational Bayesian 仍然是可以用的,一方面我们的参数是 latent,另一方面我们的 missing data 也是,这样一来我们可以将两者的联合后验写成 factorized 的形式,一样套用前面的做法即可。

一个隐变量模型的重要问题是“cardinality”,比如聚类,我们应该设定几类呢?往往我们会将这个问题当做是模型选择来处理,通过 cross validation、BIC 这些策略来做。通过隐变量我们本质上希望能捕获到其他变量的相互关系。事实上后面我们可以证明,通过 MLE 获得的对数似然函数值正好等于两部分 r.v.s 的互信息减去两部分分别的熵,可以证明 EM 迭代能够增大隐变量与其他 r.v.s 互信息减去后者熵(在当前分布下)的值,这个值高于迭代前的对数似然却不超过后者。这样一来随着迭代的进行,互信息其实在逐步变大。除了前面这些决定 cardinality 的方式以外,还有一个 non-parametric Bayesian 的方式,即 Dirichlet process,这个前面也看过不少了,但是始终觉得还没理解透彻。另外隐变量是可以弄成 hierarchical 的用来 share 某些 information(类似的工作如 hierarchical mixture of experts)。

对于 undirected graph 来说,missing data 更是给繁复的 learning 雪上加霜,比如求梯度获得的两项原先前者是不需要进行 inference,但含有隐变量后也需要进一步 marginalize 掉那部分(在当前 model 下)。那么我们是否能使用 EM 的思想呢?E-step 似乎没有什么困难,然而到了 M-step,对应似然函数并不能解耦开来变成 local likelihood,而是仍然具有 partition function 的对数项,这使得我们必须依靠数值方法才能 maximize 获得下一步的参数,这个难度与直接使用梯度法没有本质差别。因此在这个领域使用 approximate inference 比 BN 更普遍。像 Hinton 为 RBM 提出的所谓 contrastive divergence 就是一类对隐变量存在时 learning 的策略。

——————
And Abraham rose up early in the morning, and took bread, and a bottle of water, and gave it to Hagar, putting it on her shoulder, and the child, and sent her away: and she departed, and wandered in the wilderness of Beersheba.

pgm14的更多相关文章

随机推荐

  1. Selenium:三种等待方式

    UI自动化测试,大多都是通过定位页面元素来模拟实际的生产场景操作.但在编写自动化测试脚本中,经常出现元素定位不到的情况,究其原因,无非两种情况:1.有frame:2.没有设置等待. 因为代码运行速度和 ...

  2. Android之TCP服务器编程

    推荐一个学java或C++的网站http://www.weixueyuan.net/,本来想自己学了总结出来再写博客,现在没时间,打字太慢!!!!,又想让这好东西让许多人知道. 关于网络通信:每一台电 ...

  3. 加解密工具类(含keystore导出pfx)

    java代码如下: package sign; import java.io.FileInputStream; import java.io.FileOutputStream; import java ...

  4. ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法

    ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法 第一种情况,本地开发时,使用本地数据库,如下面的代码 <connectionStrings& ...

  5. 在IIS上部署你的ASP.NET Core项目 (转载)

    概述 与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kest ...

  6. 获取2个集合List<T>的共同元素

    获取2个集合List<T>的共同元素,循环2个集合,然后比对. class Bj { public void GetIntersect() { , , , , , , }; , , , , ...

  7. ML.NET 示例:二元分类之信用卡欺诈检测

    写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...

  8. 网页录像录音功能的实现之MediaRecorder的使用

    前面介绍了通过H5实现在网页内打开摄像头和麦克风,实现截图和图像预览的相关知识. getUserMedia API及HTML5 调用摄像头和麦克风 一个简单的demo  实现摄像头的调用及视频录制,截 ...

  9. package-lock.json的作用

    其实用一句话来概括很简单,就是锁定安装时的包的版本号,并且需要上传到git,以保证其他人在npm install时大家的依赖能保证一致. 引用知乎@周载南的回答 根据官方文档,这个package-lo ...

  10. BZOJ3782 上学路线

    设障碍个数为,\(obs\)则一般的容斥复杂度为\(O(2^{obs})\).但因为这个题是网格图,我们可以用DP解.设\(f[i]\)表示不经过任何障碍到达第\(i\)个障碍的方案数,转移时枚举可以 ...