《统计学习方法》——条件随机场#习题解答#

引言

这是统计学习方法第十一章条件随机场的阅读笔记,包含所有公式的详细推导。

条件随机场(conditional random field,CRF)是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔可夫随机场。

建议先阅读概率图简介,了解一些概率图的知识。


  1. 《统计学习方法》——条件随机场(上)
  2. 《统计学习方法》——条件随机场(中)
  3. 《统计学习方法》——条件随机场(下)
  4. 《统计学习方法》——条件随机场#习题解答#

习题解答

习题11.1

  写出图11.3中无向图描述的概率图模型的因子分解式。

image-20230608143356559

图11.3 无向图的团和最大团

根据因子分解式的定义:将概率无向图模型的联合概率分布表示为其最大团上的随机变量的函数的乘积形式的操作,称为概率无向图模型的因子分解。

上图中包括两个最大团: { Y 1 , Y 2 , Y 3 } \{Y_1,Y_2,Y_3\} {Y1,Y2,Y3} { Y 2 , Y 3 , Y 4 } \{Y_2,Y_3,Y_4\} {Y2,Y3,Y4}

可以得因子分解:
P ( Y ) = Ψ ( 1 , 2 , 3 ) ( Y ( 1 , 2 , 3 ) ) ⋅ Ψ ( 2 , 3 , 4 ) ( Y ( 2 , 3 , 4 ) ) ∑ y [ Ψ ( 1 , 2 , 3 ) ( Y ( 1 , 2 , 3 ) ) ⋅ Ψ ( 2 , 3 , 4 ) ( Y ( 2 , 3 , 4 ) ) ] P(Y) = \frac{\Psi_{(1,2,3)}(Y_{(1,2,3)})\cdot \Psi_{(2,3,4)}(Y_{(2,3,4)})}{ \sum_y [\Psi_{(1,2,3)}(Y_{(1,2,3)})\cdot \Psi_{(2,3,4)}(Y_{(2,3,4)})]} P(Y)=y[Ψ(1,2,3)(Y(1,2,3))Ψ(2,3,4)(Y(2,3,4))]Ψ(1,2,3)(Y(1,2,3))Ψ(2,3,4)(Y(2,3,4))

习题11.2

  证明 Z ( x ) = a n T ( x ) ⋅ 1 = 1 T ⋅ β 0 ( x ) Z(x)=a_n^T(x) \cdot \boldsymbol{1} = \boldsymbol{1}^T \cdot \beta_0(x) Z(x)=anT(x)1=1Tβ0(x),其中 1 \boldsymbol{1} 1是元素均为1的 m m m维列向量。

在前文的前向后向算法推导中有证明。

习题11.3

  写出条件随机场模型学习的梯度下降法。

条件随机场可表示为

P ( y ∣ x ) = 1 Z ( x ) exp ⁡ ∑ k = 1 K w k f k ( y , x ) Z ( x ) = ∑ y exp ⁡ ∑ k = 1 K w k f k ( y , x ) P(y|x) = \frac{1}{Z(x)} \exp \sum_{k=1}^K w_k f_k(y,x) \\ Z(x) = \sum_y \exp \sum_{k=1}^K w_k f_k(y,x) P(yx)=Z(x)1expk=1Kwkfk(y,x)Z(x)=yexpk=1Kwkfk(y,x)

P w P_w Pw是一个由式 ( 11.15 ) (11.15) (11.15)和式 ( 11.16 ) (11.16) (11.16)给出的条件随机场模型时,对数似然函数为
L ( w ) = ∑ j = 1 N ∑ k = 1 K w k f k ( y j , x j ) − ∑ j = 1 N log ⁡ Z w ( x j ) L(w) = \sum_{j=1}^N \sum_{k=1}^K w_kf_k(y_j,x_j) -\sum_{j=1}^N \log Z_w(x_j) L(w)=j=1Nk=1Kwkfk(yj,xj)j=1NlogZw(xj)
将目标函数转换成 f ( w ) = − L ( w ) f(w) = -L(w) f(w)=L(w),即通过极小化 f ( w ) f(w) f(w)来更新 w w w

目标函数的梯度为:
g ( w ) = ∇ f ( w ( k ) ) = ( ∂ f ( w ) ∂ w 1 , ∂ f ( w ) ∂ w 2 , ⋯   , ∂ f ( w ) ∂ w k ) g(w) = \nabla f(w^{(k)}) = \left( \frac{\partial f(w)}{\partial w_1}, \frac{\partial f(w)}{\partial w_2},\cdots, \frac{\partial f(w)}{\partial w_k}\right) g(w)=f(w(k))=(w1f(w),w2f(w),,wkf(w))
其中每项

∂ f ( w ) ∂ w i = − ∑ j = 1 N f i ( y j , x j ) + ∑ j = 1 N 1 Z w ( x j ) ⋅ ∂ Z w ( x j ) ∂ w i = − ∑ j = 1 N f i ( y j , x j ) + ∑ j = 1 N 1 Z w ( x j ) ⋅ ∑ y [ ( exp ⁡ ∑ k = 1 K w k f k ( y , x j ) ) ⋅ f k ( y , x j ) ] \begin{aligned} \frac{\partial f(w)}{\partial w_i} &= -\sum_{j=1}^N f_i(y_j,x_j) + \sum_{j=1}^N \frac{1}{Z_w(x_j)} \cdot \frac{\partial Z_w(x_j)}{\partial w_i} \\ &= -\sum_{j=1}^N f_i(y_j,x_j) + \sum_{j=1}^N \frac{1}{Z_w(x_j)} \cdot \sum_y \left[ \left(\exp \sum_{k=1}^K w_kf_k(y,x_j) \right) \cdot f_k(y,x_j) \right] \end{aligned} wif(w)=j=1Nfi(yj,xj)+j=1NZw(xj)1wiZw(xj)=j=1Nfi(yj,xj)+j=1NZw(xj)1y[(expk=1Kwkfk(y,xj))fk(y,xj)]

得到梯度下降法算法如下:

输入: 目标函数 f ( w ) f(w) f(w),梯度函数 g ( w ) = ∇ f ( w ) g(w) = \nabla f(w) g(w)=f(w),计算精度 ϵ \epsilon ϵ

输出: f ( w ) f(w) f(w)的极小点 w ∗ w^* w

(1) 取初值 w ( 0 ) ∈ R n w^{(0)} \in \Bbb R^n w(0)Rn,令 k = 0 k=0 k=0

(2) 计算 f ( w ( k ) ) f(w^{(k)}) f(w(k))

(3) 计算梯度 g k = g ( w ( k ) ) g_k=g(w^{(k)}) gk=g(w(k)),当 ∣ ∣ g k ∣ ∣ < ϵ ||g_k|| < \epsilon gk<ϵ时,停止迭代,令 w ∗ = w ( k ) w^*=w^{(k)} w=w(k);否则,令 p k = − g ( w ( k ) ) p_k=-g(w^{(k)}) pk=g(w(k)),求 λ k \lambda_k λk使
f ( w ( k ) + λ k p k ) = min ⁡ λ ≥ 0 f ( w ( k ) + λ p k ) f(w^{(k)} + \lambda_k p_k) = \min_{\lambda \geq 0} f(w^{(k)} + \lambda p_k) f(w(k)+λkpk)=λ0minf(w(k)+λpk)
(4) 置 w ( k + 1 ) = w ( k ) + λ k p k w^{(k+1)}=w^{(k)} + \lambda_kp_k w(k+1)=w(k)+λkpk,计算 f ( w ( k + 1 ) ) f(w^{(k+1)}) f(w(k+1))

∣ ∣ f ( w ( k + 1 ) ) − f ( w ( k ) ) ∣ ∣ < ϵ ||f(w^{(k+1)}) - f(w^{(k)})|| < \epsilon f(w(k+1))f(w(k))<ϵ ∣ ∣ w ( k + 1 ) − w ( k ) ∣ ∣ < ϵ ||w^{(k+1)} - w^{(k)}|| < \epsilon w(k+1)w(k)<ϵ时,停止迭代,令 w ∗ = w ( k + 1 ) w^*=w^{(k+1)} w=w(k+1)

(5) 否则,置 k = k + 1 k=k+1 k=k+1,转(3)。

习题11.4

参考图11.6的状态路径图,假设随机矩阵 M 1 ( x ) , M 2 ( x ) , M 3 ( x ) , M 4 ( x ) M_1(x),M_2(x),M_3(x),M_4(x) M1(x),M2(x),M3(x),M4(x)分别是
M 1 ( x ) = [ 0 0 0.5 0.5 ] , M 2 ( x ) = [ 0.3 0.7 0.7 0.3 ] M 3 ( x ) = [ 0.5 0.5 0.6 0.4 ] , M 4 ( x ) = [ 0 1 0 1 ] M_1(x)=\begin{bmatrix}0&0 \\ 0.5&0.5 \end{bmatrix} , M_2(x)=\begin{bmatrix}0.3&0.7 \\ 0.7&0.3\end{bmatrix} \\ M_3(x)=\begin{bmatrix}0.5&0.5 \\ 0.6&0.4\end{bmatrix}, M_4(x)=\begin{bmatrix}0&1 \\ 0&1\end{bmatrix} M1(x)=[00.500.5],M2(x)=[0.30.70.70.3]M3(x)=[0.50.60.50.4],M4(x)=[0011]
求以 start = 2 \text{start}=2 start=2为起点 stop = 2 \text{stop}=2 stop=2为终点的所有路径的状态序列 y y y的概率及概率最大的状态序列。

这里简单地通过代码实现一下,下一篇文章会基于Pytorch实现一个可以自动求导的CRF模型,然后用于LSTM和BERT等模型上来解决NER等问题。

from itertools import product

class CRF:
  def __init__(self, matrices, start, stop):
    self.matrices = matrices
    self.start = start
    self.stop = stop
    self.path_prob = []

  def _generate_path(self):
    """生成所有可能的路径"""
    step_num = len(self.matrices) - 1
    options = [1, 2] # 可能的状态
    middle_states = list(product(options, repeat=step_num))
    paths = [[self.start] + list(path) + [self.stop] for path in middle_states ]

    return paths

  def compute(self):
    """计算所有可能路径对应的非规范化概率,并按照概率排序"""
    paths = self._generate_path()
    for path in paths:
      prob = 1
      for i in range(len(path)-1):
        from_ = path[i]
        to = path[i+1]
        prob *= self.matrices[i][from_-1][to-1] # 基于公式11.24
      
      self.path_prob.append((prob, path))
    
    self.path_prob.sort(key=lambda x: x[0], reverse=True)
    self.show()
  
  def show(self):
    idx = 0
    for prob, path in self.path_prob:
      print(f"Path: {'→'.join([str(x) for x in path])}  Probility: {prob:.3f} {'☆' if idx ==0 else ''}")
      idx += 1

    
    


输出:

Path: 21212  Probility: 0.210 ☆
Path: 22112  Probility: 0.175 
Path: 22122  Probility: 0.175 
Path: 21222  Probility: 0.140 
Path: 22212  Probility: 0.090 
Path: 21112  Probility: 0.075 
Path: 21122  Probility: 0.075 
Path: 22222  Probility: 0.060 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/30098.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

低学历又如何?我这样的程序员照样可以逆袭

今天分享的这个主题&#xff0c;很可能会带来争议&#xff0c;因为目前优秀毕业生0年就可以拿到 20K 的待遇&#xff0c;这里暂且抛开硕士&#xff0c;985&#xff0c;211的 Top 前几高学校本科生。 毕竟今天的主题的初衷是地点低的程序员如何才能 2-3 年实现 20K 的目的&…

naive-ui NPopconfirm怎么用vue3的h()渲染

先看效果 然后我先贴代码&#xff0c; 你们看懂的先运行下&#xff0c; 文章后面我教你怎么 添加这种有template&#xff0c;有slot插槽的组件 h(NPopconfirm,{positiveButtonProps: {size: tiny,color: #007293,bordered: true,},negativeButtonProps: {size: tiny,color: #…

k8s 基本架构

k8s 中支持的 node 数 和 pod 数 k8s 也是逐步发展过来的&#xff0c;来看看以前和现在支持的 node 数 和 pod 数对比 node 即 节点 &#xff0c; 早期的 k8s 版本能够支持 100 台节点&#xff0c;现在 k8s 可以支持到 2000 台了 pod 数&#xff0c;早期的版本可以支持 1000 …

CleanMyMacX4.13.4中文免费版mac电脑管家

CleanMyMac X这款软件集成清理、mac保护、速度优化维护、应用程序管理和文件管理5大功能&#xff0c;使用过程安全高效&#xff0c;用户不必担心误操作导致系统的崩溃。作为一款专业的mac电脑系统管家&#xff0c;CleanMymac X一直致力于更加智能、便捷地全方位维护我们的电脑&…

最近跳槽,压力真大...

前几天&#xff0c;跟个老朋友吃饭&#xff0c;他最近想跳槽去大厂&#xff0c;觉得压力很大&#xff0c;问我能不能分享些所谓的经验套路。 每次有这类请求&#xff0c;都觉得有些有趣&#xff0c;不知道你发现没有大家身边真的有很多人不知道怎么面试&#xff0c;也不知道怎…

数据库表的操作

目录 前言 1.创建表 2.查看表 2.1查看表结构 2.2查看表中插入的数据 3.修改表 4.删除表 总结 前言 前面已经介绍了对数据库的操作&#xff0c;今天我们介绍的是数据库表的操作&#xff0c;数据库表简单可以理解为存储数据的介质。有了这个认识之后&#xff0c;下面我们…

系统架构设计师 2:计算机基础

一、计算机硬件 1 处理器&#xff08;CPU&#xff09; 处理器是计算机系统运算和控制的核心部件。 1.1 指令集 处理器的指令集按照其复杂程度可分为复杂指令集&#xff08;CISC&#xff09;与精简指令集&#xff08;RISC&#xff09;。 随着研究的深入&#xff0c;RISC已经…

Python面向对象编程1-面向过程的简单纸牌游戏程序 项目1.6 完整的猜大小纸牌游戏

总项目目标&#xff1a;用面向过程思想设计一个简单的纸牌游戏程序&#xff0c;称为"Higher or Lower"&#xff08;高还是低&#xff09;。游戏中&#xff0c;玩家需要猜测接下来的一张牌是比当前牌高还是低。根据猜测的准确性&#xff0c;玩家可以得到或失去相应的积…

2024考研408-计算机组成原理第三章-存储系统

文章目录 前言一、存储器概述1.1、层次结构1.2、存储器分类1.2.1、层次分类1.2.2、存储介质分类1.2.3、存取方式1.2.4、按照信息的可更改性&#xff08;读写、只读区别&#xff09; 1.3、存储器性能指标知识回顾 二、主存储器2.1、主存储器的基本组成&#xff08;介绍DRAM&…

专业是要选软工还是人工智能?

大家好&#xff0c;我是帅地。 在帅地的训练营里&#xff0c;也有不少 26 届的学员&#xff0c;不过大一即将过去&#xff0c;部分学校是到了大一后面或者大二才开始细分专业方向的&#xff0c;包括一些想要转专业的同学&#xff0c;也需要选择一个细分的方向&#xff0c;而且…

Python基础知识进阶之数据爬虫

一、爬虫概述 爬虫是指利用网络抓取模块对某个网站或者某个应用中有价值的信息进行提取。还可以模拟用户在浏览器或者APP应用上的操作行为&#xff0c;实现程序自动化。简单来说就是我们把互联网有价值的信息都比喻成大的蜘蛛网&#xff0c;而各个节点就是存放的数据&#xff0…

Vue-Element-Admin项目学习笔记(7)用Node.js写一个简单后端接口

前情回顾&#xff1a; vue-element-admin项目学习笔记&#xff08;1&#xff09;安装、配置、启动项目 vue-element-admin项目学习笔记&#xff08;2&#xff09;main.js 文件分析 vue-element-admin项目学习笔记&#xff08;3&#xff09;路由分析一:静态路由 vue-element-adm…

黑苹果 或者 Mac 因 mds资源占用过高,导致频繁死机

开机后不久&#xff0c;风扇狂转&#xff0c;温度升高&#xff0c;然后死机&#xff0c;关机。 1. 使用 “Apple 诊断”测试 Mac 先看看硬件层面是否有问题。 使用“Apple 诊断”测试 Mac。 这款 Mac 的处理器是 Intel &#xff0c;开启 Mac&#xff0c;然后在 Mac 启动时立…

状态机编程实例-嵌套switch-case法

嵌入式软件开发中&#xff0c;状态机编程是一个比较实用的代码实现方式&#xff0c;特别适用于事件驱动的系统。 本篇&#xff0c;以一个炸弹拆除的小游戏为例&#xff0c;介绍状态机编程的思路。 C/C语言实现状态机编程的方式有很多&#xff0c;本篇先来介绍最简单最容易理解…

KW 新闻 | KaiwuDB 亮相数字中国并发布离散制造场景解决方案

4月26-30日&#xff0c;以“加快数字中国建设&#xff0c;推进中国式现代化”为主题的第六届数字中国建设峰会在福州市圆满召开。KaiwuDB 受邀亮相大会参展并发布“离散制造场景解决方案”&#xff0c;旨在以数字化方案驱动生产方式、治理方式变革&#xff0c;推进离散制造业物…

45道SQL题目陆续更新

文章目录 学习视频配置环境第一天内连接 外连接sql执行顺序 第二天group by 的用法 第三天第四天order bycase when窗口函数 第五天第六天第七天limit第八天 45、查询下月过生日的学生信息 学习视频 学习视频 配置环境 四张表 配置四张表的sql语句 #创建发据库 create dat…

TOGAF10®标准中文版--(阶段A — 架构愿景)方法

3.5.1 概述 阶段 A 从收到发起组织向架构组织发出的架构工作请求开始。 在TOGAF 标准 —EA能力和治理中讨论了确保公司管理层的适当认可和确认&#xff0c;以及直线管理层的支持和承诺所涉及的问题。 A阶段还定义了架构工作的范围内和范围外的内容以及必须处理的约束条件。在…

浅析 xml 数据格式文件

浅析 xml 数据格式文件 xml ( Extensible Markup Language ) 全称 -> 可拓展的标记语言&#xff1b; xml文件的主要用途&#xff1a;xml文件主要用于数据的 传输 和 存储&#xff0c;并不是展示&#xff1b; xml标签与html的区别&#xff1a;节点的标签使用方式和 html 十分…

linuxOPS系统服务_linux高级命令

find命令 find 路径 [选项 选项的值] … 选项作用-name根据文件的名称进行-type按文件类型进行搜索&#xff0c;f代表普通文件&#xff0c;d代表文件夹 find命令查找文件 示例1 查找一个文件 案例1 ,在linux整个系统中查找 test.txt文件 find / -name test.txt -type f案例…

算法刷题-字符串-重复的子字符串

KMP算法还能干这个 459.重复的子字符串 力扣题目链接 给定一个非空的字符串&#xff0c;判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母&#xff0c;并且长度不超过10000。 示例 1: 输入: “abab” 输出: True 解释: 可由子字符串 “ab” 重复两…