这节课主要介绍半监督机器学习方法,首先解释为什么半监督有用,在概率分布的生成式模型中使用半监督算法(EM算法)
以及self-training和他们对比
剩下一半介绍两种正则方法,Entropy-based Regularization和Smoothness Assumption,前者基于信息论稳定理论,后者基于图结构连通(对近似进行RBF)
pdf 视频
介绍
监督学习:
{
(
x
r
,
y
^
r
)
}
r
=
1
R
\left\{\left(x^{r}, \hat{y}^{r}\right)\right\}_{r=1}^{R}
{(xr,y^r)}r=1R
其中,
x
r
:
x^{r}:
xr: 输入数据
,
y
^
r
:
, \hat{y}^{r}:
,y^r: 类标,一共有R笔(数据+类标)
半监督学习:
{
(
x
r
,
y
^
r
)
}
r
=
1
R
,
{
x
u
}
u
=
R
R
+
U
\left\{\left(x^{r}, \hat{y}^{r}\right)\right\}_{r=1}^{R},\left\{x^{u}\right\}_{u=R}^{R+U}
{(xr,y^r)}r=1R,{xu}u=RR+U
一共有U笔未标签的数据,通常U>>R
Transductive learning:
测试的未标签的数据既是训练数据也是测试数据
Inductive learning:
测试的未标签的数据只作为测试数据
通俗地来说inductive learning是特殊到一般的学习,测试数据只是用来测试这个通用模型的好坏;transductive learning是特殊到特殊的学习,目的就是解决target domain的问题。分类的分法有很多种,如果把半监督学习,即有未标注数据参与训练的学习,分为inductive learning 和 transductive learning的话,如果这个未标注数据同时也是测试数据,则是transductive learning;如果这个未标注数据只是用于帮助训练而不用于测试的话,则是inductive learning。
作者:匿名用户
链接:https://www.zhihu.com/question/68275921/answer/551989257
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
为什么Semi-supervised有用?
假如有猫(蓝)和狗(红)的标签数据了,然后又有未标签的数据(灰),那么未标签的数据分布可以告诉我们一些信息,所以我们可以根据一些假设划分的分界如下:
但是也有可能划分错了,所以取决于假设
Semi-supervised Learning for Generative Model
Supervised Generative Model
回顾一下监督学习的生成模型:
监督学习的生成模型一般是按照以下公式:
P
(
C
1
∣
x
)
=
P
(
x
∣
C
1
)
P
(
C
1
)
P
(
x
∣
C
1
)
P
(
C
1
)
+
P
(
x
∣
C
2
)
P
(
C
2
)
P\left(C_{1} \mid x\right)=\frac{P\left(x \mid C_{1}\right) P\left(C_{1}\right)}{P\left(x \mid C_{1}\right) P\left(C_{1}\right)+P\left(x \mid C_{2}\right) P\left(C_{2}\right)}
P(C1∣x)=P(x∣C1)P(C1)+P(x∣C2)P(C2)P(x∣C1)P(C1)
其中
P
(
x
∣
C
1
)
P\left(x \mid C_{1}\right)
P(x∣C1)和
P
(
x
∣
C
2
)
P\left(x \mid C_{2}\right)
P(x∣C2)未知。
然后求
C
1
C_1
C1分布,我们假设数据分布符合特定的概率模型,比如高斯分布,然后用极大似然求出均值
μ
\mu
μ和方差
Σ
\Sigma
Σ,当共享
Σ
\Sigma
Σ后,分界线可以变为线性分界,此时可以得到上面分界线。由于是二分类,求出
C
1
C_1
C1分布也就知道
C
2
C_2
C2分布。
Semi-supervised Generative Model
直觉上,半监督提供的未标签数据将会影响数据分布( P ( C 1 ) , P ( C 2 ) , μ 1 , μ 2 , Σ P\left(C_{1}\right), P\left(C_{2}\right), \mu^{1}, \mu^{2}, \Sigma P(C1),P(C2),μ1,μ2,Σ),从而影响决策边界
计算步骤:
初始化:
根据标签数据或者随机初始化
θ
\theta
θ
θ
=
{
P
(
C
1
)
,
P
(
C
2
)
,
μ
1
,
μ
2
,
Σ
}
\theta=\left\{P\left(C_{1}\right), P\left(C_{2}\right), \mu^{1}, \mu^{2}, \Sigma\right\}
θ={P(C1),P(C2),μ1,μ2,Σ}
Step 1:
根据已有概率分布
θ
\theta
θ计算未标签数据
P
θ
(
C
1
∣
x
u
)
P_{\theta}\left(C_{1} \mid x^{u}\right)
Pθ(C1∣xu)
Step 2:
更新模型
P
(
C
1
)
=
N
1
+
∑
x
u
P
(
C
1
∣
x
u
)
N
P\left(C_{1}\right)=\frac{N_{1}+\sum_{x^{u}} P\left(C_{1} \mid x^{u}\right)}{N}
P(C1)=NN1+∑xuP(C1∣xu)
N: 样本总数目
N1:属于类C1的数目
P
(
C
1
)
P\left(C_{1}\right)
P(C1)同理
μ 1 = 1 N 1 ∑ x r ∈ C 1 x r + 1 ∑ x u P ( C 1 ∣ x u ) ∑ x u P ( C 1 ∣ x u ) x u \mu^{1}=\frac{1}{N_{1}} \sum_{x^{r} \in C_{1}} x^{r}+\frac{1}{\sum_{x^{u}} P\left(C_{1} \mid x^{u}\right)} \sum_{x^{u}} P\left(C_{1} \mid x^{u}\right) x^{u} μ1=N11∑xr∈C1xr+∑xuP(C1∣xu)1∑xuP(C1∣xu)xu
1 N 1 ∑ x r ∈ C 1 x r \frac{1}{N_{1}} \sum_{x^{r} \in C_{1}} x^{r} N11∑xr∈C1xr是原始均值,加上未标签数据的权重平均。
这样就得到新的
θ
\theta
θ然后再回到Step 1。理论上这个方法会收敛,和Gradient Descent一样,结果很大程度取决于初始值。
补充:这些步骤在EM算法中,Step 1相当于 E Step,Step 2相当于 M Step
ok,上面是比较直觉的做法,现在解释为什么要用上面的算法:
如果都是标签数据,使用极大似然估计可以这么计算:
log
L
(
θ
)
=
∑
x
r
log
P
θ
(
x
r
,
y
^
r
)
\log L(\theta)=\sum_{x^{r}} \log P_{\theta}\left(x^{r}, \hat{y}^{r}\right)
logL(θ)=xr∑logPθ(xr,y^r)
其中
P
θ
(
x
r
,
y
^
r
)
=
P
θ
(
x
r
∣
y
^
r
)
P
(
y
^
r
)
\begin{array}{l} P_{\theta}\left(x^{r}, \hat{y}^{r}\right) =P_{\theta}\left(x^{r} \mid \widehat{y}^{r}\right) P\left(\hat{y}^{r}\right) \end{array}
Pθ(xr,y^r)=Pθ(xr∣y
r)P(y^r)
这个是有闭式解的,所以可以直接求出
如果标签数据+未标签数据,同样使用极大使然求解:
log
L
(
θ
)
=
∑
x
r
log
P
θ
(
x
r
,
y
^
r
)
+
∑
x
u
log
P
θ
(
x
u
)
\log L(\theta)=\sum_{x^{r}} \log P_{\theta}\left(x^{r}, \hat{y}^{r}\right)+\sum_{x^{u}} \log P_{\theta}\left(x^{u}\right)
logL(θ)=xr∑logPθ(xr,y^r)+xu∑logPθ(xu)
其中
P
θ
(
x
u
)
=
P
θ
(
x
u
∣
C
1
)
P
(
C
1
)
+
P
θ
(
x
u
∣
C
2
)
P
(
C
2
)
P_{\theta}\left(x^{u}\right)=P_{\theta}\left(x^{u} \mid C_{1}\right) P\left(C_{1}\right)+P_{\theta}\left(x^{u} \mid C_{2}\right) P\left(C_{2}\right)
Pθ(xu)=Pθ(xu∣C1)P(C1)+Pθ(xu∣C2)P(C2)
因为
x
u
x^u
xu来自
C
1
C_1
C1和
C
2
C_2
C2,但是上面的式子不是convex的,所以才要用EM算法,迭代求解
Self-training
Generative方法是一种概率的方法,即有多大可能为C1。而Self-training方法是一种“非黑即白”的方法,同时直觉上也比较简单。
给定标签数据R笔:
{
(
x
r
,
y
^
r
)
}
r
=
1
R
\left\{\left(x^{r}, \hat{y}^{r}\right)\right\}_{r=1}^{R}
{(xr,y^r)}r=1R
未标签数据U笔:
{
x
u
}
u
=
R
R
+
U
\left\{x^{u}\right\}_{u=R}^{R+U}
{xu}u=RR+U
具体算法:
Repeat:
Step 1:求标签数据的模型
f
∗
f^{*}
f∗(可以用机器学习方法求出,深度学习等)
Step 2:应用模型
f
∗
f^{*}
f∗求未标签数据的标签,得到
{
(
x
u
,
y
u
)
}
u
=
R
R
+
U
\left\{\left(x^{u}, y^{u}\right)\right\}_{u=R}^{R+U}
{(xu,yu)}u=RR+U,称为伪标签(Pseudo-label)
Step 3:然后把这些带有伪标签的数据假如带标签数据集,重新训练模型
f
∗
f^{*}
f∗,重新到Step1
需要注意的是:回归问题不能使用这个方法,因为把带有伪回归值( f ∗ f^{*} f∗输出)的数据加入训练集,我们说同一组参数做了同样事情,所以并不会改变模型 f ∗ f^{*} f∗。
Generative和Self-training对比
其实两者都是迭代算法,不同之处在于给未标签数据进行伪标签时,Generative是Soft label,而Self-training是Hard label
考虑神经网络计算得出模型
f
∗
f^{*}
f∗,即参数
θ
∗
\theta^{*}
θ∗来自标签数据,那么
如果用Soft label是不生效的,和回归问题一样,同一组参数做了同样事情,所以并不会改变模型
f
∗
f^{*}
f∗。也许真是非黑即白的假设使得模型
f
∗
f^{*}
f∗得以迭代更新。但是非黑即白是不是有点太武断了,所以提供了Entropy-based Regularization方法。
Entropy-based Regularization
Entropy-based Regularization也是基于非黑即白的假设。即数据分布的约集中越好,看下图:
那如何判断模型的分布是集中的呢?
可以利用信息熵,信息熵越大说明数据越不稳定,越小说明数据越稳定。比如上图,我们可以根据下面公式判断:
E ( y u ) = − ∑ m = 1 5 y m u ln ( y m u ) E\left(y^{u}\right)=-\sum_{m=1}^{5} y_{m}^{u} \ln \left(y_{m}^{u}\right) E(yu)=−m=1∑5ymuln(ymu)
和L1、L2正则类似,加到损失函数后面:
L
=
∑
x
r
C
(
y
r
,
y
^
r
)
+
λ
∑
x
u
E
(
y
u
)
\begin{aligned} L &=\sum_{x^{r}} C\left(y^{r}, \hat{y}^{r}\right) + \lambda \sum_{x^{u}} E\left(y^{u}\right) \end{aligned}
L=xr∑C(yr,y^r)+λxu∑E(yu)
其中
∑
x
r
C
(
y
r
,
y
^
r
)
\sum_{x^{r}} C\left(y^{r}, \hat{y}^{r}\right)
∑xrC(yr,y^r)来自标签数据,正则项
λ
∑
x
u
E
(
y
u
)
\lambda \sum_{x^{u}} E\left(y^{u}\right)
λ∑xuE(yu)来自未标签数据
Outlook: Semi-supervised SVM
SVM需要做的是找一个边界使得Margin最大,分类Error最小。
在有未标签数据情况下,如下图有4个灰色未标签数据,穷举分类可能
比如:
如果是2分类问题,每个数据有2种可能,那么上图有4个点,所以就有
2
4
=
16
2^4=16
24=16种可能分类情况。上图列举3个,其中中间的Margin最大。如果有1万笔未标签数据,一次性穷举会太多了。所以可以逐批数据添加,如果使得Margin变大,Error不变大,就更新边界,然后继续添加。
Smoothness Assumption
通俗的理解就是有相似的x那么也会有相似的y
核心思想:近朱者赤,近墨者黑
但是有时也有例外,可能x近似,有不同y,所以添加个**高密度区域hightdensity region)**约束,更准确的描述:
- X是不平均分布的,即有部分集中,有部分分散
- 假如x1和x2在高密度区域,即可以通过**高密度路径(hightdensity path)**连通,则认为y1和y2是一样的
比如下面数据分布:
x1和x2中间有密密麻麻的点,组成高密度路径,也就是它们在高密度区域,所以x1和x2有相同y
x2和x3则没有高密度路径,,所以x1和x2有不相同y
举个实际例子1:
如果单独考虑中间的图片更像右边的3,但是左边存在高密度路径,所以可以认为中间的图片字和最左边的图片有相同的类别2。
举个实际例子2:
同样的道理,如果不作处理,那么不同人的侧脸和同一个人的侧脸和正脸比较起来是更近似的。但是如果图片够多,一个人的脸有多张,那么也就存在高密度路径,可以认为正侧面通过45度侧面连通到正面,所以它们有相同y
举个实际例子3:
文本分类也是同理,未标签数据如果和标签数据有重叠,则近似认为有相同y
那么如何求高密度区域,或者说高密度路径呢?下面有2种方法
Cluster and then Label
这种方法,就是进行聚类,但是这一般很难,因为这个取决于聚类算法的准确性。就拿图片来说,有可能不同class长得像也可能不像,只用像素是没法很好聚类的。那么聚类错误就会导致performance不高。如果没有很强的算法对image进行cluster,后期会提到deep autocoder来描述图片,此时也行就能比较好进行聚类。
Graph-based Approach
引入图结构来表示连通。那么所谓高密度路径,在图上就是2点可以连通。
怎么构建图呢?
如果做web或者paper的分类,那么它们本身是存在link或者reference。这样可以直接构建图
其他分类则需要自己构建图,通常的做法:
-
定义相似度 s ( x i , x j ) s\left(x^{i}, x^{j}\right) s(xi,xj),如果图片的话可以基于像素或者auto decoder的特征算相似度
再用径向基函数RBF进一步处理,RBF函数的存在使相似度具有局部响应的特性,也就是靠的足够进,相似度才大
s ( x i , x j ) = exp ( − γ ∥ x i − x j ∥ 2 ) s\left(x^{i}, x^{j}\right)=\exp \left(-\gamma\left\|x^{i}-x^{j}\right\|^{2}\right) s(xi,xj)=exp(−γ∥∥xi−xj∥∥2)
分析一下RBF函数
确实是在 ∥ x i − x j ∥ \left\|x^{i}-x^{j}\right\| ∥∥xi−xj∥∥很小时有比较高的值,一旦远一些就会急剧下降接近0。题外话:RBF神经网络其实也就是RBF作为激活函数,目的也许与这里一致,具有局部响应的特性,只对样本附近的输入有反应。 -
建图:
可以根据KNN算法
比如k=3,去相似度最大的前3个
e-Neighborhood
给定阈值e,相似度只要超过e,就认为连通
连通即构建边 -
给边设置权重,是和相似度成正比
构建好图后:
不光会影响邻居,也还会传染。
ok,上面是定性的说怎么使用图,下面是定量使用图方法:
定义一个东西,叫做label的smoothness,表示有多符合上面提到的Smoothness Assumption
S
=
1
2
∑
i
,
j
w
i
,
j
(
y
i
−
y
j
)
2
S=\frac{1}{2} \sum_{i, j} w_{i, j}\left(y^{i}-y^{j}\right)^{2}
S=21∑i,jwi,j(yi−yj)2
对于所有数据(无论是否标记),更小意味着更smooth
所以,希望得出的label,根据上式越小越好
计算上可以化简一下:
S
=
1
2
∑
i
,
j
w
i
,
j
(
y
i
−
y
j
)
2
=
y
T
L
y
S=\frac{1}{2} \sum_{i, j} w_{i, j}\left(y^{i}-y^{j}\right)^{2}=y^{T} L y
S=21i,j∑wi,j(yi−yj)2=yTLy
其中y是R+U维向量
L是(R+U)*(R+U)矩阵(Graph Laplacian)
L
=
D
−
W
L=D-W
L=D−W
比如:
的W和D
W = [ 0 2 3 0 2 0 1 0 3 1 0 1 0 0 1 0 ] D = [ 5 0 0 0 0 3 0 0 0 0 5 0 0 0 0 1 ] W=\left[\begin{array}{cccc}0 & 2 & 3 & 0 \\ 2 & 0 & 1 & 0 \\ 3 & 1 & 0 & 1 \\ 0 & 0 & 1 & 0\end{array}\right] \quad D=\left[\begin{array}{cccc}5 & 0 & 0 & 0 \\ 0 & 3 & 0 & 0 \\ 0 & 0 & 5 & 0 \\ 0 & 0 & 0 & 1\end{array}\right] W=⎣⎢⎢⎡0230201031010010⎦⎥⎥⎤D=⎣⎢⎢⎡5000030000500001⎦⎥⎥⎤
怎么使用这个S?
在用神经网络求解模型时,S就取决于神经网络的参数,所以
和Entropy-based Regularization方法一样,作为正则项来使得S更小。
L = ∑ r r C ( y r , y ^ r ) + λ S L=\sum_{r^{r}} C\left(y^{r}, \hat{y}^{r}\right)+\lambda S L=rr∑C(yr,y^r)+λS
如果是Deep Network,不仅仅可以接在output,也可以接在其它层,或者多层同时都要smooth
以上参考李宏毅老师视频和ppt,仅作为学习笔记交流使用