学习笔记-250222

论文:

Learning Hierarchical Prompt with Structured Linguistic Knowledge for
Vision-Language Models
主要研究llm在图像分类中的能力,当提示输入目标类别时,llm能够生成相关的描述以及相应的结构化关系。

1.首先利用llm从普通的描述中获取结构化信息

利用llm来生成与类别相关的描述以及相应的结构化关系;

笑鼠,代码还没看,光看论文觉得太复杂了,引入Q矩阵(e2e和e2a)entity实体。attribute属性。

1.使用结构化知识指导学习得到的基于注意力的矩阵(attention-based matrices),并将这些矩阵集成到文本编码器的不同层中。

在实践中,通过同时计算一组查询(queries)上的注意力函数来实现这一点。这些查询被打包成一个矩阵Q。类似地,键(keys)和值(values)也被分别打包成矩阵K和V。

对于第l层,使用基于注意力的矩阵MlMl​,自注意力的输出通过以下公式计算:

这里,Ml​是为每一层特别设计的矩阵,用于显式表示该层内每个描述的丰富结构关系,从而增强与类别相关的关键信息。

2.层次化的知识建模方法,将来自多个层次的整体语义与结构化关系相结合,有助于发现大型语言模型(LLMs)未能识别的复杂关联。

  • 整合结构化知识:通过在自注意力机制中引入额外的矩阵Ml​,可以更好地捕捉输入数据中的结构化信息,这有助于提高模型对于特定任务的表现。

  • 跨层级自注意力:这种方法允许模型自动学习不同抽象层次之间的关系,无需人为定义这些关系。它通过结合高层次和全局级别的提示,能够捕捉长程依赖性和复杂的语义联系。

  • 增强表达能力:通过上述机制,模型不仅能够理解单个词或短语的意义,还能捕捉整个句子或段落内部以及跨句子、跨段落之间的复杂关系,从而提升对文本深层次含义的理解能力。

该技术通过在自注意力机制中融入结构化知识和跨层级提示,增强了模型理解和表达复杂文本关系的能力。

反正很复杂,看不懂......

250223

迁移:主要是学生不同

或者是知识点不同

如果二者都不一样,那没办法搞啊

阅读文章:

Prompt-to-prompt:让生成的图像保持一致 - 知乎

理了下PromptCD代码:

publisher-PromptCD/PromptCD: PromptCD:传输跨域认知诊断的提示

以irt模型为例:

1.初始化irt模型

初始化中

self.pp_dim = pp_dim                     # 提示向量维度
self.latent_dim = latent_dim             # 潜在特征维度
self.s_irt_net = Source_MIRTNet(         # 源域模型user_num, s_item_num, latent_dim, pp_dim, s_ranges, a_range
)  
self.t_irt_net = Target_MIRTNet(         # 目标域模型(版本1)user_num, t_item_num, latent_dim, pp_dim, s_ranges, a_range
)  
self.t_irt_net2 = Target_MIRTNet2(       # 目标域模型(初始化有优化)user_num, t_item_num, latent_dim, pp_dim, s_ranges, a_range
)
class Source_MIRTNet(nn.Module):def __init__(self, user_num, item_num, latent_dim, pp_dim, s_ranges, a_range, irf_kwargs=None):super(Source_MIRTNet, self).__init__()self.user_num = user_numself.item_num = item_numself.pp_dim = pp_dimself.s_ranges = s_rangesself.latent_dim = latent_dimself.irf_kwargs = irf_kwargs if irf_kwargs is not None else {}self.b = nn.Parameter(torch.rand((self.item_num, self.latent_dim)))nn.init.xavier_uniform_(self.b)self.s_exer_vectors = nn.ParameterList([nn.Parameter(torch.rand(self.pp_dim)) for _ in range(len(s_ranges))])self.theta = nn.ParameterList([nn.Parameter(torch.randn(self.user_num, self.latent_dim))for _ in range(len(s_ranges))])for theta in self.theta:nn.init.xavier_uniform_(theta)self.prompt_theta = nn.Parameter(torch.randn(self.user_num, self.pp_dim))nn.init.xavier_uniform_(self.prompt_theta)self.a = nn.Embedding(self.item_num, 1)self.c = nn.Embedding(self.item_num, 1)self.a_range = 1self.value_range = 8self.fc1 = nn.Linear(self.pp_dim + self.latent_dim, self.latent_dim)self.fc2 = nn.Linear(self.pp_dim + self.latent_dim, self.latent_dim)def forward(self, user, item):prompt_theta_repeated = self.prompt_theta.repeat(len(self.s_ranges), 1)theta_concatenated = torch.cat([theta for theta in self.theta], dim=0)new_theta = torch.cat([prompt_theta_repeated, theta_concatenated], dim=1)new_theta = torch.index_select(new_theta, dim=0, index=user)new_theta = self.fc1(new_theta)new_theta = torch.squeeze(new_theta, dim=-1)temp_vectors = torch.cat([vector.repeat(r[1] - r[0] + 1, 1) for vector, r in zip(self.s_exer_vectors, self.s_ranges)], dim=0)all_b = torch.cat([temp_vectors, self.b], dim=1)new_b = torch.index_select(all_b, dim=0, index=item)new_b = self.fc2(new_b)new_b = torch.squeeze(new_b, dim=-1)new_a = self.a(item)new_a = torch.squeeze(new_a, dim=-1)new_c = torch.squeeze(self.c(item), dim=-1)new_c = torch.sigmoid(new_c)if self.value_range is not None:new_theta = self.value_range * (torch.sigmoid(new_theta) - 0.5)new_b = self.value_range * (torch.sigmoid(new_b) - 0.5)if self.a_range is not None:new_a = self.a_range * torch.sigmoid(new_a)else:new_a = F.softplus(new_a)#------------------------------if torch.max(new_theta != new_theta) or torch.max(new_a != new_a) or torch.max(new_b != new_b):  # pragma: no coverraise ValueError('ValueError:theta,a,b may contains nan!  The a_range is too large.')return self.irf(new_theta, new_a, new_b, new_c, **self.irf_kwargs)
class Source_MIRTNet(nn.Module):def __init__(self, user_num, item_num, latent_dim, pp_dim, s_ranges, a_range, irf_kwargs=None):super(Source_MIRTNet, self).__init__()# 基础参数self.user_num = user_num          # 用户总数self.item_num = item_num          # 题目总数(源域)self.pp_dim = pp_dim              # 提示向量维度(用于迁移学习)self.s_ranges = s_ranges          # 源域题目范围划分(如知识点分类)self.latent_dim = latent_dim      # 潜在特征维度(用户能力θ和题目难度b的维度)self.irf_kwargs = irf_kwargs      # IRT模型参数(如三参数模型配置)self.a_range = a_range           # 区分度a的范围约束(如[0,1])self.value_range = 8             # θ和b的范围约束(如[-4,4])

题目参数:(主要看题目范围参数,每个范围一个pp_dim维向量)

# 题目难度参数(b):每个题目对应一个latent_dim维向量
self.b = nn.Parameter(torch.rand((self.item_num, self.latent_dim)))
nn.init.xavier_uniform_(self.b)  # Xavier初始化# 题目范围嵌入向量(s_exer_vectors):每个范围一个pp_dim维向量
self.s_exer_vectors = nn.ParameterList([nn.Parameter(torch.rand(self.pp_dim)) for _ in range(len(s_ranges))  # 根据s_ranges长度创建(如代数、几何各一个)
])

用户参数:

# 用户能力参数(theta):每个范围独立的能力矩阵(如代数能力、几何能力)
self.theta = nn.ParameterList([nn.Parameter(torch.randn(self.user_num, self.latent_dim))for _ in range(len(s_ranges))
])
for theta in self.theta:  # Xavier初始化每个能力矩阵nn.init.xavier_uniform_(theta)# 用户提示向量(prompt_theta):跨范围共享的迁移适配参数
self.prompt_theta = nn.Parameter(torch.randn(self.user_num, self.pp_dim))
nn.init.xavier_uniform_(self.prompt_theta)

其中:torch.randn 函数用于生成一个形状为 (self.user_num, self.pp_dim) 的张量,其中的元素是从标准正态分布(均值为0,标准差为1)中随机抽取的。
self.user_num 表示用户的数量,而 self.pp_dim 则代表预处理维度或先验/后验维度的大小。这个二维张量可以看作是每个用户对应的一个向量集合,每个向量的长度为 pp_dim。

self.prompt_theta: 此变量被设计用来存储与每个用户相关的“提示”向量。这里的“提示”可能是指某种形式的上下文信息或额外特征,旨在增强模型对不同用户行为的理解能力。这些向量初始时是随机的,但随着模型的训练,它们将根据任务需求进行调整,以更好地捕捉每个用户的独特偏好或特性。
初始化:使用标准正态分布来初始化这些参数是一种常见的做法,因为它有助于打破对称性,使得神经网络中的各个神经元能够学习不同的特征,从而加速训练过程。

题目区分度与猜测函数:

self.a = nn.Embedding(self.item_num, 1)  # 区分度参数a
self.c = nn.Embedding(self.item_num, 1)  # 猜测概率参数c
特征融合层
self.fc1 = nn.Linear(pp_dim + latent_dim, latent_dim)  # 用户特征融合
self.fc2 = nn.Linear(pp_dim + latent_dim, latent_dim)  # 题目特征融合

2. 前向传播逻辑解析

(1) 用户能力生成
def forward(self, user, item):# 步骤1:扩展提示向量以匹配范围数量prompt_theta_repeated = self.prompt_theta.repeat(len(self.s_ranges), 1)# 示例:若s_ranges有2个范围,则每个用户的提示向量复制2次# 步骤2:拼接所有范围的用户能力(theta_concatenated)theta_concatenated = torch.cat([theta for theta in self.theta], dim=0)# 结果形状:(num_ranges * user_num, latent_dim)# 步骤3:将提示向量与用户能力拼接new_theta = torch.cat([prompt_theta_repeated, theta_concatenated], dim=1)# 形状:(num_ranges * user_num, pp_dim + latent_dim)# 步骤4:根据输入的user索引选择对应的融合特征new_theta = torch.index_select(new_theta, dim=0, index=user)# 假设user是批量用户的索引,形状:(batch_size,)# 步骤5:通过全连接层生成最终用户能力new_theta = self.fc1(new_theta)  # 输出形状:(batch_size, latent_dim)new_theta = torch.squeeze(new_theta, dim=-1)

设计意图

  • 分范围能力建模:每个范围(如知识点)的用户能力独立存储,增强模型对领域内细粒度差异的捕捉。

  • 提示向量融合:通过 prompt_theta 引入迁移学习能力,为后续目标域适配提供接口。

# 步骤1:生成题目范围特征(temp_vectors)
temp_vectors = torch.cat([vector.repeat(r[1] - r[0] + 1, 1) for vector, r in zip(self.s_exer_vectors, self.s_ranges)
], dim=0)
# 示例:若s_ranges为[(0,99), (100,199)],则每个范围向量重复100次# 步骤2:拼接范围特征与题目基础难度b
all_b = torch.cat([temp_vectors, self.b], dim=1)  # 形状:(item_num, pp_dim + latent_dim)# 步骤3:根据输入的item索引选择题目特征
new_b = torch.index_select(all_b, dim=0, index=item)  # 形状:(batch_size, pp_dim + latent_dim)# 步骤4:通过全连接层生成最终题目难度
new_b = self.fc2(new_b)  # 形状:(batch_size, latent_dim)
new_b = torch.squeeze(new_b, dim=-1)
(3) 题目参数提取与约束
# 区分度参数a
new_a = self.a(item)                    # 形状:(batch_size, 1)
new_a = torch.squeeze(new_a, dim=-1)    # 形状:(batch_size,)# 猜测概率参数c(通过sigmoid约束到[0,1])
new_c = torch.squeeze(self.c(item), dim=-1)
new_c = torch.sigmoid(new_c)            # 形状:(batch_size,)# 参数范围约束
if self.value_range is not None:new_theta = self.value_range * (torch.sigmoid(new_theta) - 0.5)  # [-value_range/2, value_range/2]new_b = self.value_range * (torch.sigmoid(new_b) - 0.5)          # 同上
if self.a_range is not None:new_a = self.a_range * torch.sigmoid(new_a)                      # [0, a_range]
else:new_a = F.softplus(new_a)  # 确保非负

前向传播流程图——

用户输入 → [分范围theta] → 拼接 → 融合提示向量 → fc1 → 标准化 → IRF
            ↗ (prompt_theta)
题目输入 → [范围嵌入 + 基础b] → fc2 → 标准化 → IRF
           ↘ [a, c] → 标准化 → IRF

就是在target训练的时候,只改变prompt向量部分,达到利用源目标数据的作用。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欧拉回路与哈密尔顿回路: Fleury算法与Hierholzer 算法(C++)

图论中的回路是指一个路径, 它从某个顶点开始, 经过所有边恰好一次, 并回到起始顶点. 定义 欧拉回路: 从一个顶点出发, 经过每条边恰好一次, 并且最终回到起始顶点. 哈密尔顿回路: 从一个顶点出发, 经过每个顶点恰好一次, 并且最终回到起始顶点. 欧拉路径: 从一个顶点出发, …

从图片生成3维场景--NERF原理解析及加速版HashNeRF-pytorch代码实现

概要 NeRF(Neural Radiance Fields)是一种基于神经网络的三维图像生成技术,通过一组从不同角度拍摄的2D图片,生成一个3D场景,并且能够渲染出该场景在任意视角下的图像。这项技术的核心思想是利用神经网络的强大建模能…

PHP-综合4

[题目信息]: 题目名称题目难度PHP-综合42 [题目考点]: PHP综合训练[Flag格式]: SangFor{Ouk3i63BuShgxqdRcn_9kMNqKFDe5j4f}[环境部署]: docker-compose.yml文件或者docker tar原始文件。 http://分配ip:2087[题目writeup]:…

爱普生SG-8101CE可编程晶振赋能智能手机的精准心脏

在智能手机高速迭代的今天,高性能、低功耗与小型化已成为核心诉求。智能手机作为人们生活中不可或缺的工具,需要在各种复杂场景下稳定运行。爱普生SG-8101CE可编程晶振凭借其卓越性能,成为智能手机中不可或缺的精密时钟源,为通信、…

基于SpringBoot的“流浪动物救助系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“流浪动物救助系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统…

【AI】模型量化--模型量化技术基础

1. 背景 对于接触过AI模型的人来说,经常会听说一个词语模型量化,那什么是模型量化?为什么需要模型量化?有哪些常用的模型量化技术呢?本文将一一展开叙述。 2. 概念 模型量化是一种在深度学习和机器学习领域中广泛应用的技术,旨在通过减少模型中数据的表示精度来降低模…

力扣(leetcode)每日一题 1656 设计有序流

1656. 设计有序流 - 力扣(LeetCode) 题目 有 n 个 (id, value) 对,其中 id 是 1 到 n 之间的一个整数,value 是一个字符串。不存在 id 相同的两个 (id, value) 对。 设计一个流,以 任意 顺序获取 n 个 (id, value) …

【附源码】基于opencv+pyqt5搭建的人脸识别系统

文章目录 前言一、人脸检测二、人脸识别1.训练识别器2.识别人脸 三、界面相关1.Qlabel展示图片2.表格跟随内容而增加和减少3.选择图片文件4.警告框 四、源码获取总结 前言 人脸识别技术作为人工智能领域的一颗璀璨明珠,正逐渐渗透到我们生活的每一个角落&#xff0…

【一起学Rust | 框架篇 | Tauri2.0框架】在Tauri应用中设置Http头(Headers)

文章目录 前言一、配置准备1. 检查版本2. 使用条件3. 支持的请求头(并不是全部支持) 二、使用步骤1. 如何配置header2. 框架集成1. 对于Vite系列、Nuxt、Next.js这种前端框架Vite系列框架Angular系列框架Nuxt系列框架Next.js系列框架 2. 对于Yew和Leptos…

计算机毕业设计SpringBoot+Vue.jst0图书馆管理系统(源码+LW文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

SeaCMS V9海洋影视管理系统报错注入

漏洞背景 SQL 注入攻击是当前网络安全中最常见的一种攻击方式,攻击者可以利用该漏洞访问或操作数据库,造成数据泄露或破坏。通常发生在开发人员未能正确处理用户输入时。 在 SeaCMS V9 中,用户输入(如登录、评论、分页、ID 等&a…

Upload-labs

pass-01 先随便上传一个php文件&#xff0c;但提示发现使用了js对不法文件进行了检查&#xff0c;是前端验证 上传php代码<?php phpinfo();?> ,使用bp抓包 将后缀名改为php然后放行 复制图片链接访问&#xff0c;得到有关php的所有信息 Pass-02 根据提示可以知道&…

算法回顾1

class Solution {public int removeElement(int[] nums, int val) {int fast 0;int slow 0;for (fast 0; fast < nums.length; fast) {if (nums[fast] ! val) {nums[slow] nums[fast];slow;}}return slow;} } 用双指针写这道题&#xff0c;快慢指针初始值都为0&#xf…

智能交通系统(Intelligent Transportation Systems):智慧城市中的交通革新

智能交通系统&#xff08;Intelligent Transportation Systems, ITS&#xff09;是利用先进的信息技术、通信技术、传感技术、计算机技术以及自动化技术等&#xff0c;来提升交通系统效率和安全性的一种交通管理方式。ITS通过收集和分析交通数据&#xff0c;智能化地调度、控制…

LangChain 由入门到精通

LangChain 由入门到精通 作者&#xff1a;王珂 邮箱&#xff1a;49186456qq.com 文章目录 LangChain 由入门到精通简介一、LangChain环境搭建1.1 集成大模型提供商1.1.1 集成Ollama 1.2 LangChain安装 二、LangChain开发2.1 提示词工程2.2 示例集 三、LangChain LCEL 工作流编…

使用S32DS部署Tensorflow lite到S32K3

一、概述 1、本文主要介绍如何用S32DS在NXP S32K344 中部署Tensorflow&#xff1b; 2、示例使用了Tensorflow入门代码&#xff0c;主要功能是识别28 * 28 的手写图片的数字&#xff1b; 3、在MCU上开启DSP功能后&#xff0c;最终运行时间在 7ms&#xff08;64神经元&#xf…

【OMCI实践】ONT上线过程的omci消息(五)

引言 在前四篇文章中&#xff0c;主要介绍了ONT上线过程的OMCI交互的第一、二、三个阶段omci消息&#xff0c;本篇介绍第四个阶段&#xff0c;OLT下发配置到ONT。前三个阶段&#xff0c;每个厂商OLT和ONT都遵循相同标准&#xff0c;OMCI的交换过程大同小异。但第四个阶段&…

vue3: directive自定义指令防止重复点击

第一章 前言 相信很多小伙伴会在各个渠道上搜如何防止重复点击&#xff0c;之后会推荐什么防抖、节流来避免这一操作&#xff0c;该方法小编就不继续往下说了。接下来说说小编的场景&#xff0c;项目已经完成的差不多了&#xff0c;但是由于之前大家都是直接点击事件调用方法的…

危化品经营单位安全管理人员的职责及注意事项

危化品经营单位安全管理人员肩负着保障经营活动安全的重要责任&#xff0c;以下是其主要职责及注意事项&#xff1a; 职责 1. 安全制度建设与执行&#xff1a;负责组织制定本单位安全生产规章制度、操作规程和生产安全事故应急救援预案&#xff0c;确保这些制度符合国家相关法…

解决VMware 安装 Ubuntu 后无法全屏的问题

根据以往的经验&#xff0c;一直想安装 VMware-tools&#xff0c;但是看了官方介绍才突然发现早就已经有更好的替代品了。 官方介绍连接在此&#xff1a;Install VMware Tools in VMware products 如上图所述&#xff0c;早期的 Linux 系统推荐安装 VMware-tools&#xff0c;但…