机器学习之条件随机场CRF一点理解

2023-11-08

1. 前言

  最近看了一些有关于CRF的论文,基本概念懂,但是到求解的部分有些疑惑。CRF问题容易构成NP-hard问题,求解过程还需要再学习。下面稍微介绍一些CRF的学习吧,这里前面CRF内容主要参考了下面博文,讲的非常好:
http://blog.sina.com.cn/s/blog_6d15445f0100n1vm.html

2. 介绍

  条件随机场(Conditional random fields),是一种判别式图模型,因为其强大的表达能力和出色的性能,得到了广泛的应用。从最通用角度来看,CRF本质上是给定了观察值集合(observations)的马尔可夫随机场。在这里,我们直接从最通用的角度来认识和理解CRF,最后可以看到,线性CRF和所谓的高阶CRF,都是某种特定结构的CRF。

2.1. 随机场

  简单地讲,随机场可以看成是一组随机变量的集合(这组随机变量对应同一个样本空间)。当然,这些随机变量之间可能有依赖关系,一般来说,也只有当这些变量之间有依赖关系的时候,我们将其单独拿出来看成一个随机场才有实际意义。

2.2. Markov随机场(MRF)

  这是加了Markov性质限制的随机场。首先,一个Markov随机场对应一个无向图。这个无向图上的每一个节点对应一个随机变量,节点之间的边表示节点对应的随机变量之间有概率依赖关系。因此,Markov随机场的结构本质上反应了我们的先验知识——哪些变量之间有依赖关系需要考虑,而哪些可以忽略。
马尔科夫链最重要的则是考虑一步转移概率,放在图模型中理解,就是知道当前节点的状态,那么下一步转移到下个节点的概率分布是如何的。例如下图4个节点一步状态转移概率:
这里写图片描述
  马尔科夫链一步转移概率想要描述的问题即是,例如当前状态位于节点0,那么下次转移到节点0、1、2、3的概率分别是 p00 p01 p02 p03 。那么我们可以将所有状态的一步转移概率放到一个表格中,表示为转移概率表,其中每一行的每个数据为对应行状态转移到其他状态的概率。因为表示下个状态出现在各个节点的概率,状态不可能凭空消失,所以每一行的概率和一定为1。那么如果把这些数据存储到一个矩阵中,则是转移矩阵(Transition Matrix)。如下图:
这里写图片描述
  关于马尔科夫链这块的理解可以参考下面博文:
  http://blog.csdn.net/makenothing/article/details/41363971
  其实构建转移概率,哪些节点相连通是需要深入研究的,它决定了在后面计算中,哪些节点会产生相互影响。上面的表中其实也反映了,概率大于0的表示之间节点是相互连接的,后面迭代计算其特征或者性质会对其连接的节点产生影响。当这种相互影响通过迭代到无穷趋于稳定,反应的则是稳态后状态的分布。
  Markov性质是指,对Markov随机场中的任何一个随机变量,给定场中其他所有变量下该变量的分布,等同于给定场中该变量的邻居节点下该变量的分布。这让人立刻联想到马式链的定义:它们都体现了一个思想:离当前因素比较遥远(这个遥远要根据具体情况自己定义)的因素对当前因素的性质影响不大。
  例如2013年发表在CVPR上一篇关于显著性目标检测的经典论文,虽然使用的是流行排序算法,但是实质跟马尔科夫随机场有很多相似的地方。这篇文章,先将图片进行超像素分割,即性质相似的像素先聚类在一起构成一块一块的具有相似性质的像素集,称为超像素(superpixel),然后将每个超像素分割作为一个节点,整幅图像所有无重叠的超像素构成一个无向图。而在构建转移矩阵上,作者认为每个超像素和其相邻接的超像素,以及相连接超像素的相连接超像素之间是相互连通的,即某个超像素是否显著会由这些超像素影响。另外,作者考虑先验知识,即图像边界的超像素之间都是连接的,因为一般一幅图像中显著区域不会出现在边界区域。节点连接结果如下图所示:
  这里写图片描述
  图中只画了一个超像素和邻接超像素的连通性,以及边界超像素的连通性。而各个节点之间的边权重则是由Lab颜色特征的欧氏距离决定,越相似值越大,最后每一行标准化就构成了上面类似的转移矩阵。作者设置初始状态在边界上,即由边界先验性质的边界超像素为背景,然后通过转移概率迭代平滑,当达到收敛取反则高亮处为显著目标区域。当然,作者还经过了二次游走排序,具体内容请读者自行阅读研究。
  论文题目是:Saliency Detection via Graph-Based Manifold Ranking。
  下载地址在下面:

http://202.118.75.4/lu/Paper/CVPR2013/cvpr13_saliency_final.pdf

  另外需要强调下,这篇文章是大连理工大学张立和老师及其研究生研究成果,在显著性目标检测领域有很大影响,最近好像也扩充发表在了PAMI期刊上。
  插讲了一些其他内容,下面继续回到主要内容。
  Markov性质可以看作是Markov随机场的微观属性,那么其宏观属性就是其联合概率的形式。
  假设MRF的变量集合为

    S={y1,...yn},
    P(y1,...yn)= 1/Z * exp{-1/T * U(y1,..yn)}

  其中Z是归一化因子,即对分子的所有y1,..yn求和得到。U(y1,..yn)一般称为energy function, 定义为在MRF上所有clique-potential之和。T称为温度,一般取1。什么是click-potential呢? 就是在MRF对应的图中,每一个clique对应一个函数,称为clique-potential。这个联合概率形式又叫做Gibbs distribution。Hammersley and Clifford定理表达了这两种属性的等价性。
  如果click-potential的定义和clique在图中所处的位置无关,则称该MRF是homogeneous;如果click-potential的定义和clique在图中的朝向(orientation)无关,则称该MRF是isotropic的。一般来说,为了简化计算,都是假定MRF即是homogeneous也是iostropic的。

2.3. 从Markov随机场到CRF

   现在,如果给定的MRF中每个随机变量下面还有观察值,我们要确定的是给定观察集合下,这个MRF的分布,也就是条件分布,那么这个MRF就称为CRF(Conditional Random Field)。它的条件分布形式完全类似于MRF的分布形式,只不过多了一个观察集合x,即P(y1,..yn|x) = 1/Z(x) * exp{ -1/T * U(y1,…yn,x)。U(y1,..yn,X)仍旧是click-potential之和。

2.4. 训练

  通过一组样本,我们希望能够得到CRF对应的分布形式,并且用这种分布形式对测试样本进行分类。也就是测试样本中每个随机变量的取值。
  在实际应用中,clique-potential主要由用户自己定义的特征函数组成,即用户自己定义一组函数,这些函数被认为是可以用来帮助描述随机变量分布的。而这些特征函数的强弱以及正向、负向是通过训练得到的一组权重来表达的,这样,实际应用中我们需要给出特征函数以及权重的共享关系(不同的特征函数可能共享同一个权重),而clicque-potential本质上成了对应特征函数的线性组合。这些权重就成了CRF的参数。因此,本质上,图的结构是用户通过给出特征函数的定义确定的(例如,只有一维特征函数,对应的图上是没有边的)还有,CRF的分布成了对数线性形式。
  看到这个分布形式,我们自然会想到用最大似然准则来进行训练。对其取log之后,会发现,表达式是convex的,也就是具有全局最优解——这是很让人振奋的事情。而且,其梯度具有解析解,这样可以用LBFGS来求解极值。
此外,也可以使用最大熵准则进行训练,这样可以用比较成熟的GIS和IIS算法进行训练。由于对数线性的分布形式下,最大熵准则和最大似然准则本质上是一样的,所以两者区别不是很大。
  此外,由于前面两种训练方法在每一轮迭代时,都需要inference,这样会极大地降低训练速度。因此普遍采用另一种近似的目标函数,称为伪似然。它用每个随机变量的条件分布(就是给定其他所有随件变量的分布)之积来替代原来的似然函数,根据markov性质,这个条件分布只和其邻居有关(Markov Blanket),这样在迭代过程中不需要进行全局的inference,速度会得到极大的提升。我自己的经验表明,当特征函数很多取实数值时,伪似然的效果跟最大似然的差不多,甚至略好于后者。但对于大量二元特征(binary-valued),伪似然的效果就很差了。

2.5.推断

  如前所述,训练的过程中我们需要概率推断,分类的时候我们需要找出概率最大的一组解,这都涉及到推断。这个问题本质上属于图模型上的概率推断问题。对于最简单的线性框架的结构,我们可以使用Viterbi算法。如果图结果是树形的,可以采用信念传播(belief propogation),用sum-product得到概率,用max-product得到最优的configuration.但是对于任意图,这些方法就无效了。一种近似的算法,称为loopy-belief propogation,就是在非树形结构上采用信念传播来进行推断,通过循环传播来得到近似解。这么做据说在某些场合下效果不错。但是,在训练时如果采用近似推断的话,可能会导致长时间无法收敛。
  求解这块一直没有深入研究过,这些内容都是摘抄自其他论文,相关具体求解请查阅相关论文。
  基于任意图上的概率推断算法称为junction tree。这个算法能够保证对任意图进行精确推理。它首先把原来的图进行三角化,在三角化的图上把clique按照某种方式枚举出来作为节点(实际上就是合并特征函数),clicque之间如果有交集,对应的节点之间就有边,这样就得到一个新的图,通过对这个图求最大生成树,就得到了Junction tree. 最后在junction tree上进行信念传播可以保证得到精确解。
  本质上这3中算法都属于动态规划的思想。Viterbi的想法最直观,信念传播首先将特征函数都转换为factor,并将其与随机变量组合在一起形成factor-graph, 这样在factor-graph上用动态规划的思想进行推断(即做了一些预处理)。junction tree的做法是通过合并原有的特征函数, 形成一种新的图,在这个图上可以保证动态规划的无后效性,于是可以进行精确推理。(做了更为复杂的预处理)
  值得注意的是,junction tree虽然极大地避开了组合爆炸,但由于它要合并特征函数并寻找clique, 用户的特征函数如果定义的维数过大,它得到新的clique也会很大,这样在计算的时候还是会很低效,因为在推断的过程中它需要遍历所有clique中的配置,这和clique的大小是呈指数级的。所以,用户要避免使用维数过高的特征。
  更深入研究可以阅读这篇论文:

  Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials


个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

转载请注明出处:CSDN 无鞋童鞋。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习之条件随机场CRF一点理解 的相关文章

  • JDBC连接mysql遇到的问题

    本地安装的mysql是5 7版本 pom中引用的mysql connector java依赖是8 0 11版本 驱动使用Class forName com mysql cj jdbc Driver 连接的url为 jdbc mysql 12
  • android使用C/C++调用SO库

    有时候 我们反编译apk得到一个so库 如果直接使用这个so库的话 必须使用原来so库同样的package名字 才能用 这样人家反编译你的apk 就知道你侵犯了人家的版权 为了达到混淆的目的 我们可以再写一个so库调用人家的so库 即把人家
  • Nessus 扫描问题处理

    Nessus扫描后 如下问题 SSH Weak Key Exchange Algorithms Enabled 和 SSH Server CBC Mode Ciphers Enabled 解决方法如下 修改 etc ssh sshd con
  • 使用JSCH连接Linux系统并执行命令

    一 关于JSCH技术的简单描述 JSCH是SSH的一个纯Java实现 说直白点 就是一个远程连接你其他Linux或者Unix服务器的一个java代码包 其实就是我们使用jsch这个jar包来方便我们编写代码来连接自己linux系统的 SSH

随机推荐

  • Deepdive原理

    Deepdive原理 DeepDive是一种新型数据管理系统 能够从非结构化的文本中提取出结构化的数据 可以在单个系统中解决提取 集成和预测问题 使用户能够快速构建复杂的端到端数据管道 例如黑暗数据BI 商业智能 系统 通过允许用户端到端构
  • 基于Spring Boot垂钓服务系统的设计与实现毕业设计源码071739

    目 录 摘要 1 绪论 1 1 研究背景 1 2研究意义 1 3相关技术介绍 1 4论文结构与章节安排 2 垂钓服务系统需求分析 2 1 可行性分析 2 1 1 技术可行性分析 2 1 2 经济可行性分析 2 1 3 操作可行性分析 2 1
  • java 增加内存_如何增加java虚拟机可以使用的最大内存

    java虚拟机可使用的最大内存是有限制的 缺省值通常为64MB或128MB 如果一个应用程序为了提高性能而把数据加载内存中而占用较大的内存 比如超过了默认的最大值128MB 需要加大java虚拟机可使用的最大内存 否则会出现Out of M
  • 前端踩坑(七)--------------------------react 动态操作className

    前端踩坑 七 react 动态操作className 文章目录 前端踩坑 七 react 动态操作className 问题描述 如何动态修改一个元素的CSS样式呢 一 react 动态操作className 二 设置多个className
  • oracle 介于日期之间_oracle 月份中日的值必须介于 一 和当月最后一日之间

    oracle 月份中日的值必须介于 1 和当月最后一日之间 请教大家 在oracle存储过程中 有一个insert语句 总是报错 找到是插入时间的问题 比如 case when nvl pa ptm 0 0 then v invptm el
  • win10系统CMD运行无反应,闪一下后消失

    原因是 未知 解决办法 注册表HKEY CURRENT USER Software Microsoft Command Processor 中发现autorun这一项 删除后可以正常打开
  • 模式识别与机器学习第四章特征选择和提取

    特征选择 从原始特征中挑选 从n个度量值集合 x1 x2 xn 中 按某一准则选取出供分类用的子集 作为降维 m维 m
  • anchor iview 悬浮_iview 表头table 悬浮提示tooltip ;iview 单元格悬浮提示 ;iview table header cell tooltip;...

    一 批量悬浮提示 二 提示数据举例 三 核心方法 单元格提示 function renderCell h params console log h h console log params params var tipsContent ge
  • 【算法】KMP算法实现顺序串各种模式匹配运算的算法设计

    C 版 一 设计任务 编写程序 利用顺序串的基本运算 建立目标串以及模式串 用BF算法求出t在s中的位置 求出模式串的next数组以及nextval数组 KMP算法使用next数组以及改进的KMP算法使用nextval数组求出t在s中的位置
  • Redis缓存穿透-击穿-雪崩详细分析加解决办法

    Redis 缓存穿透 问题描述 如图 缓存穿透的原因 key 对应的数据在数据源并不存在 每次针对此key 的请求从缓存获取不到 请求都会压到数据源 可能压垮数据源 比如 用一个不存在的用户id 获取用户信息 不论缓存还是数据库都没有 若黑
  • Qt浅谈之二十二Qt样式表

    一 简介 不断总结好的样式表 美化自己的界面 在实际工作中会不断的更新 二 详解 1 加载样式表文件 html view plain copy QFile file qss stylesheet qss file open QFile Re
  • 外星人m15键盘灯光设置_Alienware Command Center灯光软件高级设置

    文章内容 症状 目录 点开桌面 首先我们先对AW Command Center 高级界面进行介绍 电源按钮高级设置 电源按钮动作只能一个 无法创建多个动作 灯光多动作多变化模式设置 动作 颜色模式 单一种颜色常亮 默认常亮3s受Action
  • 数据库原理第十章---数据库恢复技术

    1 事务的基本概念 事务 所谓事务是用户定义的一个数据库操作序列 这些操作要么全做 要么不做 是一个不可分割的工作单位 事务的开始和结束可以由用户显示控制 如果用户没有显示定义事务 则由数据库管理系统按默认规定自动划分事务 在SQL中定义事
  • 用Python导入表格

    刚刚博主学到如何用Python来导入表格 现在就将过程写给大家看看 我是用了Pycharm 的2019 3 1 版本的 这还得需要下载Python 3 7 Interpreter 才能运行 这个可是弄了很久才弄好的 不说那么多了 直接上代码
  • 每日一学13——Unity Debug.Log控制开关

    学习来源 https blog csdn net blog lee article details 81389692 其实我并不是在乎一丢丢性能的影响 我只关心能不能关闭Log 这样就可以在不想看log的时候全都不显示 不过文中的方法也不错
  • ActionScript 3.0 学习笔记(二)

    使用HTTP请求进行URL导航 flash中最普通的http请求是使用URLRequest类和navigateToURL 方法进行URL导航 创建HTTP请求 在创建HTTP请求时 需要URLRequest类参与处理所有的通信 在创建HTT
  • 详解Android中的屏幕方向

    分类 android 2014 09 19 09 07 113人阅读 评论 0 收藏 举报 详解Android中的屏幕方向 屏幕方向是对Activity而言的 所以你可以在AndroidManifest xml文件中 通过
  • 嵌入式模型部署学习笔记 ——在Jetson TX1上部署Yolov5模型

    Jetson TX1实现TensorRT加速YOLOv5进行实时检测 一 前言 二 移动端部署思路 三 部署步骤 1 克隆YOLOv5工程文件 2 pt 转 ONNX 安装 ONNX 转换文件 3 移动端部署 克隆工程 生成 wts 文件
  • 访问www.baidu.com全过程

    1 域名解析成IP 每个主机在网络中都是IP为标识的 IP才是主机在网络中的位置 域名只是为了方便用户记忆而已 这就要求浏览器能够识别域名并且将其转化为对应的IP地址 所以浏览器会有一个DNS缓存 其中记录了一些域名与IP的对应关系 供浏览
  • 机器学习之条件随机场CRF一点理解

    1 前言 最近看了一些有关于CRF的论文 基本概念懂 但是到求解的部分有些疑惑 CRF问题容易构成NP hard问题 求解过程还需要再学习 下面稍微介绍一些CRF的学习吧 这里前面CRF内容主要参考了下面博文 讲的非常好 http blog