机器学习之结构学习
1、什么是结构学习
-
所谓结构学习就是输入或输出是有结构的数据,比如说语句、列表、树和边界框(
bounding box
).而通常的网络学习之中,输入和输出都是向量。而在结构学习中,我们需要学习的是一个函数F,它的输入是一种形式,输出是另外一种形式,比如输入的是你语音,输出对应的文本、输入中文,输出英文,输入图像,输出bounding box
,等等。2、结构学习统一框架
-
结构学习具有一个统一的框架,可以表示为下图中的形式:
<center style="margin-block-start: 0px; margin-block-end: 0px;">
image
</center> -
在训练的过程中,我们希望找到一个这样的函数f,用它来评价我们的输入与我们的输出目前有多匹配,在测试的过程中,给定了一个x,我们穷举所有的y,使得F(x,y)最大的y即位测试结果。
2.1 目标检测
-
目标检测所要达到的目的是。输入一张图片,我们使用一个边界框在图像中标注出确定目标的位置。具体的训练的框架如下所示:
<center style="margin-block-start: 0px; margin-block-end: 0px;">
image
</center> -
在这里训练的过程就是在估计边界框与目标之间的匹配程度。
2.2 生成摘要
- 摘要生成的结构学习与上面的目标检测十分相似,首先训练一个函数 F使得摘要和文本的匹配程度最好,之后在测试阶段,穷举所有的摘要,从中选择得分最高的那一个。
3、 从统计的角度看待统一框架
-
结构学习的统一框架与概率模型之间有着如下的对应关系:
<center style="margin-block-start: 0px; margin-block-end: 0px;">
image
</center> -
其中学习到的函数 F因为是在评估 x,y 之间的匹配程度的,所以可以认为是 x,y 同时出现的概率;而给定x 找最匹配的结果实际上可以认为是再找给定 x 的一个最大后验概率,所以这个过程实际上课贝叶斯分类的过程是十分相像的。
-
但是使用概率的方法有有点也有缺点。优点在于概率模型是可解释的,有意义的;缺点在于并不是多有的东西都可以用概率进行描述,其次对于一个连续函数对所有的可能的结果进行求和是没有办法实现的。
4、 结构学习与DNN之间的关系
-
DNN实际上可以看作是结构学习的一个特例,两者之间的关系如下图所示:
<center style="margin-block-start: 0px; margin-block-end: 0px;">
image
</center> -
在上面的神经网络中,我们将 x 输入神经网络中,将输出与 y 做交叉熵,那F就是两者交叉熵的相反数,然后在测试的时候,穷举所有的标签,带入F中找使他最大的y。
5、结构学习统一框架要解决的三个问题
-
问题1 :估计输入间的相似程度应该用什么方法,也就是说 F(x,y)应该长成什么样子 ;
-
问题2:如何解决那个穷举所有找出最大的问题;
-
问题3:给定了训练数据,怎么样找打合适的 F(x,y)。
-
如下图所示:
<center style="margin-block-start: 0px; margin-block-end: 0px;">
image
</center>
5.1 问题1:F(x,y) 的具体形式
-
F(x,y) 的具体形式如下图所示
<center style="margin-block-start: 0px; margin-block-end: 0px;">
image
</center> -
其中 ϕ(x,y)表示通过输入的数据和输出的共同构成的特征,而 w是对应的权重,这里通过权重与特征的线性组合,然后将这些线性组合以向量的点积的形式表示出来,就得到了 F(x,y) 。
-
其中 ϕ(x,y)可以是自己定义的特征,也可以是通过深度学习得到的特征。
问题2:如何解决那个穷举所有找出最大的问题
-
这里假设已经得到如下的一个标签:
<center style="margin-block-start: 0px; margin-block-end: 0px;">
image
</center> -
在这里我们假设是可以通过穷举或者某一种方式得到 y 。
问题3:如何训练得到一个 F(x,y)
-
因为在问题1中我们已经知道了这个 F(x,y) 是关于 w的函数,通过训练我们应该使我们的模型满足下面的条件:
<center style="margin-block-start: 0px; margin-block-end: 0px;">
image
</center> -
也就是说正确的标签所得到的函数值要大于所有非正确的标签的函数值。
-
F(x,y) 的训练过程实际上十分简单,如下图所示:
<center style="margin-block-start: 0px; margin-block-end: 0px;">
image
</center> -
输入是训练数据,输出模型的权重,在这里首先将 w初始化为0,一直重复以下操作直到 w不能被更新。
-
对于某一组数据 (xr,y^r),找到使 w⋅ϕ(xr,y)最大的 y˜r,如果得到的 y˜r≠y^r,就执行如上的更新。
-
其实这个更新的原则也很好理解,就是让w离正确的值越来越近。
PS:码字不容易,如果对您有帮助的话,帮忙转发一下,谢谢啦~
微信搜索公众号:轮子工厂
会定期分享一些实用工具和学习笔记~
image.png