why semi-supervised learning?
- 收集数据简单,收集标签困难
- 作为人类,我们的学习方式也是 semi-supervised learning --- 从课堂到自学,从老师到无师。
unlabeled data 虽然只有数据没有标签,但是 unlabeled data 的分布可以告诉我们一些东西。比如可以告诉我们什么样的边界是更好的。
semi-supervised learning 使用 unlabeled data 的情况经常伴随一些假设。semi-supervised learning 有没有效果就取决于你的假设好不好。
semi-supervised learning 未必有用,这取决于你的假设是否足够好。
semi-supervised learning for Generative Model
回忆之前讲过的 Supervised Generative Model, 我们假设每一个 class 的数据点的分布都是一个 gaussian distribution(类的分布共享 \(\Sigma\)):
\(P(x|y_1) \sim G(\mu_1, \Sigma)\) \(P(x|y_2) \sim G(\mu_2, \Sigma)\)
得到 prior proba 然后就可以根据公式得到 posterior proba:
\(P(y_1|x_{new}) = \frac{P(x_{new}|y_1)P(y_1)}{P(x_{new}|y_1)P(y_1) + P(x_{new}|y_2)P(y_2)}\)
对于 semi-supervised Generative Model, 由于我们多了很多 unlabeled data, 这回改变我们对原来(仅仅通过 supervised Generative Model)获取的分布的认知。就像 KNN 每个新来的数据都会改变原来的中心点的位置。
算法:
- Initiliazation: \(\Theta = \{P(C_1), P(C_2), \mu_1, \mu_2, \Sigma\}\)
- step1: compute the posterior probability of unlabeled data: \(P_{\Theta}(C_1|x^{\mu})\)
- step2: update model:
3.1 update prior proba:
\(P(C_1) = \frac{N_1 + \Sigma_{x^{\mu}}P(C_1|x^{\mu})}{N}\)
\(N\): total number of examples
\(N_1\): number of examples belonging to C1
\(x^u\): unlabeled data
这里注意,supervised learning 中计算 \(P(C_1)\)的公式是:
\(P(C_1) = \frac{N_1}{N}\)
现在需要考虑 unlabeled data 对于分类的贡献。
我们可以把 Posterior praba \(P(C_1|x^u)\) 近似的理解成 (xu贡献的)C1的出现次数,毕竟概率也可以看做是(0.7个,0.5个。。。),我们只要加总所有样本对于 C1 的后验概率,就可以将其近似的理解成 unlabeled data 贡献的分类数据。
\(\Sigma_{x^{\mu}}P(C_1|x^{\mu})\)
3.2 update \(\mu_1\)
这里注意,supervised learning 中计算 \(\mu_1\)的公式是:
\(\mu_1 = \frac{1}{N_1}\Sigma_{x^r\in{C_1}}x^r\)
现在需要考虑 unlabeled data 对于分类的贡献。
对于 unlabeled data 我们同样需要借用 posterior probability 来计算 unlabeled data 的 weighted sum 的平均。
\(\frac{1}{\sum_{x^u}P(C_1|x^u)}\sum_{x^u}P(C_1|x^u)x^u\)
- back to step 2
理论上这个方法会收敛,但是初始值对结果的影响非常大。同时这个方法也可以理解为 EM 算法。
maximum likelihood of unlabeled data vs. that of labeled data
两者最大的区别是前者只能通过 EM 算法进行 iteratively 解;后者有公式解。
我们是通过【 Maximum likelihood 来找到分类为 Ci 的样本点的最有可能的高斯分布】来求得 Prior proba \(P(x|C_i)\), 我们优化的公式很好解:
\(logL(\Theta)=\sum_{x^r}logP_{\Theta}(x^r, \hat{y}^r)\)
但是对于 unlabeled data 我们怎么估测 \(logL(\Theta)\) 呢?
\(logL(\Theta) = \sigma_{x^r}logP_{\Theta}(x^r) + ?\)
这里的思想与【把\(P_{\Theta}(C_i|x^u)\)看做 \(x^u\) ‘贡献’的‘次数’】思想类似,只不过利用的是 Prior probability因为我们并不知道 \(x^u\)的分类是多少,所以他可能属于任何分类。
所以这里 \(P_{\Theta(x^u)}\) 应该等于 \(x^u\) 与每个分类的联合概率的和:
\(P_{\Theta}(x^u)=P_{\Theta}(x^u|C_1)P(C_1) + P_{\Theta}(x^u|C_2)P(C_2)\)