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

news2024/10/7 14:23:53

引言

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

条件随机场(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 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络】为什么是TCP四次挥手,可以变成三次吗?

【计算机网络】为什么是TCP四次挥手&#xff0c;可以变成三次吗&#xff1f; 文章目录 【计算机网络】为什么是TCP四次挥手&#xff0c;可以变成三次吗&#xff1f;引言TCP 四次挥手为什么 TCP 挥手需要四次呢&#xff1f;粗暴关闭 vs 优雅关闭 什么情况会出现三次挥手&#xf…

MySQL—SQL优化详解(下)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

FFmpeg 内存模型分析

标题 1. 内存模型图2. 分析流程3.追溯本源————源码分析3.1 AVPacket队列 什么时候生成的&#xff1f; 4 .AVPacket和AVFrame相关操作API5. av_read_frame源码分析 1. 内存模型图 2. 分析流程 我们解复用后,媒体流数据就会被分离开来,分别生成对应AVPacketList,然后通过av_…

BART论文解读

1 概述 全称&#xff1a;Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension。BART来源于Bidirectional and Auto-Regressive Transformers发表时间: 2019.10.29团队&#xff1a;Facebook AI Paper地址​arxiv.o…

chatgpt赋能python:Python怎么求解方程

Python怎么求解方程 在数学中&#xff0c;求解方程是一种基本的技能。Python作为一种广泛应用于科学计算和数据分析领域的编程语言&#xff0c;可以帮助我们求解各种类型的方程。Python提供了多个库和函数&#xff0c;使得求解方程在Python中变得非常轻松。 一元方程求解 一…

Android Framework分析SystemServer进程

SystemServer进程是Android系统的核心进程&#xff0c;运行在Android系统启动后&#xff0c;负责管理和加载系统服务。本文将介绍SystemServer进程的详细结构和工作原理&#xff0c;并使用代码注释的方式阐述其关键部分代码。 结构&#xff1a; SystemServer进程的核心是Syste…

SSH基本概念,带你了解SSH

1、SSH基本概念 SSH&#xff08;Secure Shell&#xff09;是一种网络协议&#xff0c;用于在不安全的网络中安全地传输数据。它是一种加密协议&#xff0c;可以保护数据在传输过程中不被窃取、篡改或伪造。SSH协议最初是由芬兰的Tatu Ylonen开发的&#xff0c;现在已经成为了一…

Hadoop集群之模板虚拟机的安装

Hadoop集群之模板虚拟机的安装 文章目录 Hadoop集群之模板虚拟机的安装0. 写在前面1. CentOS的安装1.1 配置电脑1.1.1 进入VMware1.1.2 自定义新的虚拟机1.1.3 解决虚拟机的兼容性1.1.4 选择当前虚拟机的操作系统1.1.5 选择虚拟机将来需要安装的系统1.1.6 电脑的具体配置1.1.7 …

KUKA机器人通过示教器进行关机冷启动的具体方法演示

KUKA机器人通过示教器进行关机冷启动的具体方法演示 如下图所示,首先需要登录管理员权限,默认密码:KUKA,然后点击左上角的机器人图标进行菜单选项,找到并点击“关机”选项, 如下图所示,找到并点击“重新启动控制系统PC”, 如下图所示,此时系统提示:确实要重新启动…

chatgpt赋能python:Python生成序列的方法详解

Python生成序列的方法详解 在Python编程中&#xff0c;序列&#xff08;Sequence&#xff09;是常用的数据类型之一。序列是有序的&#xff0c;可以通过下标访问其中的元素。Python中有多种方法可以生成序列&#xff0c;下面将对常用的几种方法进行详细介绍。 利用range函数生…

2023-06-16 Android Studio 使用CMakeList编译JNI ,最简单的demo源码

一、代码结构图&#xff0c;代码路径https://download.csdn.net/download/qq_37858386/87913001 二、cmakedemo\app\build.gradle 加下面的代码 externalNativeBuild {cmake {cppFlags "-frtti -fexceptions"}}externalNativeBuild {cmake {path src/main/jni/CMakeL…

国内大模型研究

自从chatgpt发布以来&#xff0c;国内大模型发展非常迅速。我对这项目技术也保持了非常多的持续关注&#xff0c;我一直认识&#xff0c;chatGPT以及其他GPT会给社会带来更大的变革。经过专业训练的大模型可以替代部分客服&#xff0c;部分程序员&#xff0c;部分美工&#xff…

Vue全家桶实战 从零独立开发企业级电商系统(免费升级Vue3.0)

Vue全家桶高仿小米商城–项目简介 文章目录 Vue全家桶高仿小米商城--项目简介电商项目选型--小米商城的页面流程&#xff1a;业务开发流程&#xff1a;项目内容&#xff1a;商城组件部分&#xff1a;课程所包含的知识图谱&#xff1a;章节介绍&#xff1a; 商城的界面展示&…

基于web漏洞扫描及分析系统设计_kaic

基于web漏洞扫描及分析系统设计 摘 要 随着信息技术的发展和网络应用在我国的普及&#xff0c;针对我国境内信息系统的恶意网络攻击也越来越多&#xff0c;并且随着黑客攻击技术的不断地更新&#xff0c;网络犯罪行为变得越来越难以应对&#xff0c;用户日常访问的网站是否安全…

【八大排序(六)】快排终极篇-快速排序非递归版

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:八大排序专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习排序知识   &#x1f51d;&#x1f51d; 快排非递归版 1. 前情回顾2. 快排非递归基…

A100 GPU服务器安装CUDNN教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

从Window中先多瞥几眼

JavaFx17官方文档中有如下的描述: Window类是一个顶层窗口类,在其中可以承载场景,并与用户交互。窗口可以是Stage、PopupWindow或其他类似的顶层窗口。 JavaFX Stage类是顶级的JavaFX容器。初级阶段由平台搭建。其他Stage对象可以由应用程序构造。 许多Stage属性是只读的…

chatgpt赋能python:Python入门:如何添加Seaborn库

Python入门&#xff1a;如何添加Seaborn库 Python是一种易于学习的、功能强大的编程语言&#xff0c;在数据分析和科学计算方面尤其闻名。Seaborn是一个建立在Matplotlib之上的Python可视化库&#xff0c;它提供了一组简单易用的界面&#xff0c;用于绘制优美的统计图形——包…

几个Caller-特性的妙用

System.Runtime.CompilerServices命名空间下有4个以“Caller”为前缀命名的Attribute&#xff0c;我们可以将它标注到方法参数上自动获取当前调用上下文的信息&#xff0c;比如当前的方法名、某个参数的表达式、当前源文件的路径&#xff0c;以及当前代码在源文件中的行号。 一…

RedisSon高并发分布式锁实战RedisSon源码解读

Redis高并发分布式锁实战 1.分布式场景下的synchronized失效的问题–用redis实现分布式锁 synchronized是通过monitor实现的jvm级别的锁&#xff0c;如果是分布式系统&#xff0c;跑在不同的虚拟机上的tomcat上&#xff0c;会导致synchronized无法锁住对象 ----------- 需要分…