如何直观地理解条件随机场,并通过PyTorch简单地实现

作者:网友投稿 时间:2018-05-20 09:50

字号
人工智能+区块链的发展趋势及应用调研报告

条件随机场是一种无向图模型,且相对于深度网络有非常多的优势,因此现在很多研究者结合条件随机场(CRF)与深度网络获得更鲁棒和可解释的模型。本文结合 PyTorch 从基本的概率定义到模型实现直观地介绍了 CRF 的基本概念,有助于读者进一步理解完整理论。

假设我们有两个相同的骰子,但是其中的一个是公平的,每个点数出现的概率相同;另一个骰子则被做了手脚,数字 6 出现的概率为 80%,而数字 1-5 出现的概率都为 4%。如果我给你一个 15 次投掷骰子的序列,你能预测出我每次投掷用的是哪一枚骰子吗?

骰子

为了得到较高的准确率,一个简单的模型是,每当「6」出现的时候,我们那就预测使用了有偏的骰子,而出现其他数字时则预测使用了公平的骰子。实际上,如果我们在每次投掷时等可能地使用任意一个骰子,那么这个简单的规则就是你可以做到的最好预测。

但是,设想一种情况:如果在使用了公平的骰子后,我们下一次投掷时使用有偏的骰子的概率为 90%,结果会怎样呢?如果下一次投掷出现了一个「3」,上述模型会预测我们使用了公平的骰子,但是实际上我们使用有偏的骰子是一个可能性更大的选项。我们可以通过贝叶斯定理来进行验证这个说法:

其中随机变量 y_i 是第 i 次投掷所用的骰子类型,x_i 是第 i 次投掷得到的点数。

我们的结论是,在每一步中作出可能性最大的选择只是可行策略之一,因为我们同时可能选择其它的骰子。更有可能的情况是,以前对骰子的选择情况影响了我未来会做出怎样的选择。为了成功地进行预测,你将不得不考虑到每次投掷之间的相互依赖关系。

条件随机场(CRF)是一个用于预测与输入序列相对应标注序列的标准模型。目前有许多关于条件随机场的教程,但是我所看到的教程都会陷入以下两种情况其中之一:1)全都是理论,但没有展示如何实现它们 2)为复杂的机器学习问题编写的代码缺少解释,不能令读者对代码有直观的理解。

之所以这些作者选择写出全是理论或者包含可读性很差的代码教程,是因为条件随机场从属于一个更广更深的课题「概率图模型」。所以要想深入涵盖其理论和实现可能需要写一本书,而不是一篇博文,这种情况也使得学习条件随机场的知识比它原本所需要的更困难。

本教程的目标是涵盖恰到好处的理论知识,以便你能对 CRF 有一个基本的印象。此外我们还会通过一个简单的问题向你展示如何实现条件随机场,你可以在自己的笔记本电脑上复现它。这很可能让你具有将这个简单的条件随机场示例加以改造,用于更复杂问题所需要的直观理解。

一、理论

我们对于理论的讨论将分为三个部分:1)指定模型参数 2)如何估计这些参数 3)利用这些参数进行预测,这三大类适用于任何统计机器学习模型。因此从这个意义上说,条件随机场并没有什么特别的,但这并不意味着条件随机场就和 logistic 回归模型一样简单。我们会发现,一旦我们要面对一连串的预测而不是单一的预测,事情就会变得更加复杂。

1. 指定模型参数

在这个简单的问题中,我们需要担心的唯一的参数就是与从一次投掷转换到下一次投掷状态的分布。我们有六种状态需要考虑,因此我们将它们存储在一个 2*3 的「转移矩阵」中。

第一列对应于「从前一次投掷使用公平骰子的状态,转换到当前使用公平骰子状态的概率或成本(第一行的值),或转换到有偏骰子状态的概率(第二行的值)」。因此,第一列中的第一个元素编码了在给定我本次投掷使用了公平骰子的前提下,预测下一次投掷使用公平骰子的概率。如果数据显示,我不太可能在连续使用公平骰子,模型会学习到这个概率应该很低,反之亦然。同样的逻辑也适用于第二列。

矩阵的第一和第二列假设我们知道在前一次投掷中使用了哪个骰子,因此我们必须将第一次投掷作为一个特例来对待。我们将把相应的概率存储在第三列中。

2. 参数估计

假设给定一个投掷的集合 X* *以及它们相应的骰子标签 Y。我们将会找到使整个训练数据的负对数似然最小的转移矩阵 T。我将会向你展示单个骰子投掷序列的似然和负对数似然是什么样的。为了在整个数据集上得到它,你要对所有的序列取平均。

如何直观地理解条件随机场,并通过PyTorch简单地实现

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
关键词 >>PyTorch CRF 模型
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接