2023.1.1 学习周报

news2024/9/23 9:22:24

文章目录

  • 摘要
  • 文献阅读
    • 1.题目
    • 2.摘要
    • 3.问题和方案
    • 4.介绍
    • 5.方法
      • 5.1 Symbolic Description
      • 5.2 The Short-Term Memory Priority Model
      • 5.3 The STAMP Model
      • 5.4 The Short-Term Memory Only Model
    • 6.实验
      • 6.1 评价指标
      • 6.2 实验结果
    • 7.结论
  • 深度学习
    • 加性模型
    • 点积模型
    • 缩放点积模型
    • 双线性模型
  • 总结


摘要

This week, I read a paper on attention mechanism, which mentioned that the existing methods did not explicitly consider the impact of users’ current behavior on their next action. Therefore, this paper proposes a new short-term attention priority model as a remedy, which can capture the user’s general interest from the long-term memory of the session context, while taking into account the current interest in the short-term memory recently clicked by the user. Finally, the experiment results on the dataset prove the effectiveness of this new short-term attention priority model. I continue to learn about the content of attention. By using code to implement the attention mechanism of different attention scoring functions, I understood the attention mechanism from the perspective of code.

本周,我阅读了一篇关于注意力机制相关的论文,论文中提到了现有的方法都没有明确考虑用户当前行为对其下一步行动的影响。于是,论文中提出了一种新的短期注意力优先级模型作为补救措施,该模型能够从会话上下文的长期记忆中捕获用户的一般兴趣,同时考虑到用户最近点击的短期记忆中的当前兴趣。最后,论文通过在数据集上做实验,实验结果证明了这种新的短期注意力优先级模型的有效性。我继续学习了attention的相关内容,通过用代码去实现不同注意力打分函数的注意力机制,从代码的角度去理解attention机制。


文献阅读

1.题目

文献链接:STAMP: Short-Term Attention/Memory Priority Model for Session-based Recommendation

2.摘要

Predicting users’ actions based on anonymous sessions is a challenging problem in web-based behavioral modeling research, mainly due to the uncertainty of user behavior and the limited information. Recent advances in recurrent neural networks have led to promising approaches to solving this problem, with long short-term memory model proving effective in capturing users’ general interests from previous clicks. However, none of the existing approaches explicitly take the effects of users’ current actions on their next moves into account. In this study, we argue that a long-term memory model may be insufficient for modeling long sessions that usually contain user interests drift caused by unintended clicks. A novel short-term attention/memory priority model is proposed as a remedy, which is capable of capturing users’ general interests from the long-term memory of a session context, whilst taking into account users’ current interests from the short-term memory of the last-clicks. The validity and efficacy of the proposed attention mechanism is extensively evaluated on three benchmark data sets from the RecSys Challenge 2015 and CIKM Cup 2016. The numerical results show that our model achieves state-of-the-art performance in all the tests.

3.问题和方案

问题:几乎所有基于rnn的SRS模型都只考虑将会话建模为一个项目序列,而没有明确考虑到用户兴趣随时间的迁移而产生的变化。

方案:论文中考虑通过在SRS模型中引入一个近期的动作优先机制,即短时注意/记忆优先(STAMP)模型来解决这个问题,该模型可以同时考虑用户的一般兴趣和当前兴趣。

4.介绍

在典型的SRS任务中,会话由一系列命名项组成,用户的兴趣隐藏在这些隐式的反馈中。为了进一步提高RNN模型的预测精度,必须同时具备学习这种隐式反馈的长期利益和短期利益的能力。

论文研究的主要贡献:
1)论文中引入了一个短期注意力/记忆优先级模型:一个包含跨会话项的统一嵌入空间;一个用于基于会话的推荐系统中下一次点击预测的新神经注意力模型。
2)论文针对STAMP模型的实现,提出了一种新的注意力机制,该机制根据会话上下文计算注意权重,并根据用户当前的兴趣进行增强。输出的注意力向量被解读为用户时间兴趣的合成表示,并且比其他基于神经注意力的解决方案更敏感于用户兴趣随时间的迁移。因此,它能够同时捕捉用户的长期兴趣(响应最初的目的)和短期注意(当前的兴趣)。
3)论文中模型分别在两个数据集上进行了评估,分别是来自RecSys 2015的Yoochoose数据集和来自CIKM Cup 2016的Diginetica数据集。实验结果表明,该方法达到了目前的水平,所提出的注意力机制发挥了重要作用。

5.方法

5.1 Symbolic Description

每一个session由S = [s1, s2, … , sN]表示,St = {s1, s2, … , st}表示一个截断的序列,其中1 < t < N。
V = {v1, v2, . . . }是指所有的item,X = {x1, x2, . . . } 是item的embedding。
在这里插入图片描述
其中:yˆ = {yˆ1, yˆ2, … , yˆ|V |}表示输出的score向量,yˆi 对应于item vi的分数,topk用来预测。

根据STAMP模型框架,论文将三个向量的三线性乘积定义为:
在这里插入图片描述

5.2 The Short-Term Memory Priority Model

在这里插入图片描述
从上图中可以看出,STMP模型以两个embeddings (ms和mt)作为输入,其中ms表示用户对当前会话的总体兴趣,被定义为产生过交互物品嵌入的平均表示:
在这里插入图片描述
其中:external memory是指嵌入当前会话St的以前的项序列,mt表示该会话中用户当前的兴趣。

论文中使用lastclick xt表示用户当前的兴趣,即mt =xt;由于xt是从会话的external memory中提取的,因此xt为用户兴趣的短期内存;然后利用两个MLP网络对一般兴趣ms和当前兴趣mt进行处理,实现特征提取。

使用一个简单的没有隐藏层的MLP进行特征抽象,对ms的操作定义为:
在这里插入图片描述
对于给定的候选项目xi∈V,得分函数定义为:
在这里插入图片描述
最后,使用交叉熵函数计算loss:
在这里插入图片描述

5.3 The STAMP Model

在这里插入图片描述
从上图中可以看出,两个模型之间唯一区别:在STMP模型中,通常是从外部存储器ms的平均值去计算用户兴趣的抽象特征向量hs,而在STAMP模型中,hs 是从基于注意力的用户的一般兴趣(实值向量ma)计算出来的。

注意力网络由两部分组成:
1)一个简单的前馈神经网络,负责为当前会话前缀St中的每个项目生成注意力权重。
2)一个注意力组合通常负责计算基于注意力的用户兴趣的函数ma。

用于注意力计算的FNN定义为:
在这里插入图片描述
在获得关于当前会话前缀St的注意力系数向量α=(α1, α2, …, αt ) 后,基于注意力的用户对当前会话前缀St的兴趣ma计算如下:
在这里插入图片描述

5.4 The Short-Term Memory Only Model

为了验证本文提出的短期注意力优先模型的有效性,论文中还提出了一种只有短期注意的网络模型,该模型对于next-item的预测只给予最终产生过交互的物品嵌入st,并且也只使用了一层的简单MLP进行特征提取:
在这里插入图片描述
最终的评分表示为:
在这里插入图片描述

6.实验

6.1 评价指标

P@K分数被广泛用于SRS领域预测准确性的度量,P@K表示在排名列表的前K位具有正确推荐项目的测试用例的比例。P@20可用于所有测试,定义为:
在这里插入图片描述
MRR@20:所需项的倒数秩的平均值,如果秩大于20,则倒数秩为零。
在这里插入图片描述
MRR是一个标准化的范围分数[0, 1],其值的增加反映了大多数在推荐列表的排名中会出现更高的排名,这表明相应的推荐系统性能更好。

6.2 实验结果

在这里插入图片描述
论文所提出的注意力机制可以捕获部分重要项目,以对感兴趣的有用特征进行建模,并通过最新的实验结果证明了STAMP的有效性。

7.结论

1)用户的下一步移动主要受会话前缀的最后一次行为的影响,论文中的模型可以通过时间兴趣展示来有效地利用这些信息。
2)论文提出的注意力机制可以有效地捕获会话的长期和短期兴趣信息,通过实验结果证明了在注意力机制的帮助下,论文中的模型在所有数据集上都达到了最先进的性能。

深度学习

如下图所示,用代码实现下面不同注意力打分函数的注意力机制。
在这里插入图片描述

加性模型

import torch
import torch.nn as nn
import torch.nn.functional as F


class add_attention(nn.Module):
    def __init__(self, q_size, k_size, v_size, seq_len):
        super(add_attention, self).__init__()

        self.linear_v = nn.Linear(v_size, seq_len)
        self.linear_W = nn.Linear(k_size, k_size)
        self.linear_U = nn.Linear(q_size, q_size)
        self.tanh = nn.Tanh()

    def forward(self, query, key, value, dropout=None):
        key = self.linear_W(key)
        query = self.linear_U(query)
        k_q = self.tanh(query + key)
        alpha = self.linear_v(k_q)
        alpha = F.softmax(alpha, dim=-1)
        out = torch.bmm(alpha, value)
        return out, alpha


attention = add_attention(100, 100, 100, 10)
q = k = v = torch.randn((8, 10, 100))  
out, attn = attention(q, k, v)
print(out.shape)
print(attn.shape)

点积模型

import torch
import torch.nn as nn
import torch.nn.functional as F


class dot_attention(nn.Module):
    def __init__(self):
        super(dot_attention, self).__init__()

    def forward(self, query, key, value, dropout=None):
        alpha = torch.bmm(query, key.transpose(-1, -2))
        alpha = F.softmax(alpha, dim=-1)
        out = torch.bmm(alpha, value)
        return out, alpha


attention = dot_attention()
q = k = v = torch.randn((8, 10, 100))
out, attn = attention(q, k, v)
print(out.shape)
print(attn.shape)

缩放点积模型

import torch
import torch.nn as nn
import math
import torch.nn.functional as F


class s_dot_attention(nn.Module):
    def __init__(self):
        super(s_dot_attention, self).__init__()

    def forward(self, query, key, value, dropout=None):
        d = k.size(-1)
        alpha = torch.bmm(query, key.transpose(-1, -2)) / math.sqrt(d)
        alpha = F.softmax(alpha, dim=-1)
        out = torch.bmm(alpha, value)
        return out, alpha


attention = s_dot_attention()
q = k = v = torch.randn((8, 10, 100))
out, attn = attention(q, k, v)
print(out.shape)
print(attn.shape)

双线性模型

import torch
import torch.nn as nn
import torch.nn.functional as F


class bilinear_attention(nn.Module):
    def __init__(self, x_size):
        super(bilinear_attention, self).__init__()

        self.linear_W = nn.Linear(x_size, x_size)

    def forward(self, query, key, value, dropout=None):
        alpha = torch.bmm(query, self.linear_W(key).transpose(-1, -2))
        alpha = F.softmax(alpha, dim=-1)
        out = torch.bmm(alpha, value)
        return out, alpha


attention = bilinear_attention(100)
q = k = v = torch.randn((8, 10, 100))
out, attn = attention(q, k, v)
print(out.shape)
print(attn.shape)

总结

我认为引入Attention机制的原因主要有三点,一是参数少,模型复杂度跟之前学习过的CNN和RNN相比更小,参数也更少,对算力的要求也就更小;二是速度快,Attention解决了RNN不能并行计算的问题,并且attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理;三是效果好,Attention的作用是在比较长的文本中,依然能从中抓住重点,不丢失重要的信息。通过这段时间的学习,我依然还没有搞懂Attention机制的原理,下周我将继续学习Attention机制的相关内容,继续拓展一些内容,加深自己的理解。

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

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

相关文章

数值优化之凸函数

本文ppt来自深蓝学院《机器人中的数值优化》 目录 1 凸函数的性质 ​2 凸函数的性质 1 凸函数的性质 凸函数最重要的性质就是Jensens inequality,也就是琴生不等式。 若能取到等号则是凸函数&#xff0c;若不能取到等号则是强凸函数&#xff0c;若不等号相反&#xff0c;则…

spring session

文章目录Spring Session 架构及应用场景为什么要spring-sessionSR340规范与spring-session的透明继承Spring Session探索特点核心 APIservlet session 与 spring-session 关系webflux 与 spring session 的关系基于 Servlet 的 Spring Session 实现思考题背景1、注册到 Filter …

Java 并发编程知识总结【一】

JUC 是什么&#xff1f; java.util.concurrent 在并发编程中使用的工具类 concurrent:并发 1. 线程基础知识复习 1.1 进程(process) 进程是程序的一次执行过程&#xff0c;或是正在运行的一个程序。是一个动态的过程&#xff1a;有它自身的产生、存在和消亡的过程(生命周期…

【数据集7】全球人类住区层GHSL数据详解

全球人类住区层Global Human Settlement Layer 官网地址-GHSL - Global Human Settlement Layer 1 全球人类住区层GHS-SMOD Global human settlement layer-settlement model grid (GHS-SMOD)&#xff1a;描述 epoch时段: 1975-2030年 5年一个周期resolution空间分辨率: …

Codeforces Round #833 (Div. 2)E. Yet Another Array Counting Problem(笛卡尔树+树形DP)

题目链接&#xff1a;Problem - E - Codeforces 样例输入&#xff1a; 4 3 3 1 3 2 4 2 2 2 2 2 6 9 6 9 6 9 6 9 9 100 10 40 20 20 100 60 80 60 60样例输出&#xff1a; 8 5 11880 351025663题意&#xff1a;给定一个长度为n的数组a[],对于每一个区间[l,r]&#xff0c;这个…

[Python从零到壹] 六十一.图像识别及经典案例篇之基于纹理背景和聚类算法的图像分割

祝大家新年快乐&#xff0c;阖家幸福&#xff0c;健康快乐&#xff01; 欢迎大家来到“Python从零到壹”&#xff0c;在这里我将分享约200篇Python系列文章&#xff0c;带大家一起去学习和玩耍&#xff0c;看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲…

尚医通-查询删除科室接口-添加查询删除排班接口实现(二十)

目录&#xff1a; &#xff08;1&#xff09;数据接口-查询和删除科室接口-功能实现 &#xff08;2&#xff09;数据接口-排版接口-功能实现 &#xff08;1&#xff09;数据接口-查询和删除科室接口-功能实现 查看医院系统中查询科室的对应的方法 查询条件需要用的类&#…

【数据结构】链式存储:链表

目录 &#x1f947;一&#xff1a;初识链表 &#x1f392;二、链表的实现&#xff08;单向不带头非循环&#xff09; &#x1f4d8;1.创建节点类 &#x1f4d2;2.创建链表 &#x1f4d7;3.打印链表 &#x1f4d5;4.查找是否包含关键字key是否在单链表当中 &#x1f4d9;…

Webpack核心概念

1. 核⼼概念 Entry Entry ⽤来指定 webpack 的打包⼊⼝。 依赖图的⼊⼝是 entry&#xff0c;对于⾮代码⽐如图⽚、字体依赖也会不断加⼊到依赖图中。 Entry 的⽤法&#xff1a; 1. 单⼊⼝&#xff1a;entry 是⼀个字符串&#xff1b; module.exports {entry: ./path/to/my…

若依框架-补充篇:Vuex全局状态管理Axios二次封装

在上一篇《若依框架&#xff1a;前端登录组件与图像验证码|用户登录逻辑》中的篇末&#xff0c;对Vuex全局状态管理、Axios二次封装部分介绍的较为粗略&#xff0c;因此就有了这个补充篇。 目录 Vuex全局状态管理 Vuex是什么&#xff1f; 如何理解“状态管理模式”&#xf…

【Java语法】之String类练习1

目录 1.字符串中的第一个唯一字符 2. 最后一个单词的长度 58. 最后一个单词的长度 3.验证回文串 4.字符串相加 5.小结&#xff1a; 1.字符串中的第一个唯一字符387. 字符串中的第一个唯一字符https://leetcode.cn/problems/first-unique-character-in-a-string/ 给定一个字符…

【免费开放源码】审批类小程序项目实战(活动申请详解)

第一节&#xff1a;什么构成了微信小程序、创建一个自己的小程序 第二节&#xff1a;微信开发者工具使用教程 第三节&#xff1a;深入了解并掌握小程序核心组件 第四节&#xff1a;初始化云函数和数据库 第五节&#xff1a;云数据库的增删改查 第六节&#xff1a;项目大纲以及制…

Mac下安装go

1.下载地址 ​​​​​​https://golang.google.cn/dl/ 2.安装Go 3.查看安装效果 go version go env 4.安装vscode和插件 4.1.安装vscode https://code.visualstudio.com/Download 4.2.安装GO插件 4.3.设置goproxy 执行命令&#xff1a;vim ~/.bash_profile export GO1…

数值分布的分散程度对迭代次数的影响

( A, B )---1*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有1个节点&#xff0c;AB各由7张二值化的图片组成&#xff0c;排列组合A和B的所有可能性&#xff0c;固定收敛误差为7e-4&#xff0c;统计收敛迭代次数 1 2 3 4 5 6 7 迭代次数 1b 1b 1b 1b 1b 1b 0 0*0*0…

PHP---文件上传

目录 一、文件上传的概念 二、文件上传的步骤 &#xff08;1&#xff09;表单的制作 三、$_FILES详解 &#xff08;1&#xff09;name &#xff08;2&#xff09;tmp_name &#xff08;3&#xff09;type &#xff08;4&#xff09;error &#xff08;5&#xff09;si…

YOLO v6:一个硬件友好的目标检测算法

本文来自公众号“AI大道理” YOLOv6 是美团视觉智能部研发的一款目标检测框架&#xff0c;致力于工业应用。 YOLOv6支持模型训练、推理及多平台部署等全链条的工业应用需求&#xff0c;并在网络结构、训练策略等算法层面进行了多项改进和优化&#xff0c;在 COCO 数据集上&…

一文轻松明白 Base64 编码原理

把图片丢进浏览器&#xff0c;打开sources能看到一长串字符串&#xff0c;这是图片的Base64编码。这一长串编码到底是怎么生成的呢&#xff1f; 我们接下来探索一下base64编码的原理 Base64 名称的由来 Base64编码要求把3个8位的字节&#xff08;3824&#xff09;转化为4个6…

C++代码编程学习(2):类和对象封装部分的两个案例-立方体与点圆位置

C类与对象 封装的学习 挺有趣的&#xff01; 一、前言 昨日有点事忙了些&#xff0c;今天把昨天学习的两个案例给整理一下&#xff0c;C确实比较原始基础&#xff0c;在学习过程中需要好好总结分析与记录。 二、效果展示 案例一&#xff1a;设计立方体 立方体的面积和体积 用…

阿里微服务质量保障系列(一):微服务知多少

年初买了一本集团巨佬联合出的书《阿里测试之道》&#xff0c;然后认真拜读了下&#xff0c;我相信看过的同学都会获益匪浅&#xff0c;此书分享了阿里在大促保障、移动App测试、大数据测试、AI系统测试、云计算测试、资损防控、物流类测试等领域的方法、技术和工具平台&#x…

十一、Properties、多线程

Properties集合 Properties作为Map集合的使用 介绍 是一个Map体系的集合类Properties可以保存到流中或从流中加载属性列表中的每个键及其对应的值都是一个字符串 基本使用 public static void main(String[] args) {Properties prop new Properties();//增prop.put("…