金融分析-Transformer模型(基础理论)

Transformer模型

1.基本原理

transformer的core是注意力机制,其本质就是编码器-解码器。他可以通过多个编码器进行编码,再把编码完的结果输出给解码器进行解码,然后得到最终的output。

1.1·编码器

数据在编码器中会经过一个self-attention的模块进行加权,之后得到一个特征象征Z。

Z的计算公式如下(z=Attention(Q,K,V)):

然后接着我们会进入到编码器的下一个模块---一个拥有两层全连接层的前馈神经网络(他的第一层激活函数是ReLU,第二层激活函数是一个线性激活函数,如下

FFN(Z)= max ( 0, ZW1 + b1 ) W2 + b2

)。

1.2·解码器

在解码器中它多了一个encoder-decoder Attention,两个Attention分别用于计算输入和输出的权值。

encoder-decoder Attention:我正在测试的股价和特征向量之间的关系。

在encoder-decoder attention中, Q 来自于解码器的上一个输出,K 和 V 则来自于与编码器的输出。如图

mask:是指掩码,指把某些值更新使其在参数更新时不产生效果。mask包括padding mask 和 sequence mask。

Padding Mask:(填充加忽略)每个批次输入序列长度是不一样,需要进行对齐。给较短的序列后面填充 0,对于太长的序列,截取左边的内容,把多余的直接舍弃。这些填充的位置加上一个非常大的负数(负无穷),这样的话,经过 softmax,这些位置的概率就会接近0。

Padding mask 通常是一个与输入序列形状相同的张量,其中的每个值都是一个布尔值(Boolean)。具体来说:

  • True:表示该位置是实际的输入数据。

  • False:表示该位置是填充的部分。

  • 为了屏蔽填充部分,padding mask 会被应用到 QK^TQKT 的结果上,具体操作如下:

    masked_attention_scores=attention_scores+padding_mask

    其中,padding mask 是一个与 attention scores 形状相同的张量,填充部分的值为负无穷(如 −∞),而实际输入部分的值为 0。这样,在经过 softmax 操作后,填充部分的权重会接近于零,从而被忽略。

Sequence mask:在序列建模任务中,特别是在自回归模型(如咱们这个Transformer中的解码器)中,模型需要逐个时间步生成输出。为了防止模型在生成当前时间步的输出时“看到”未来的信息,需要使用 sequence mask 来屏蔽未来时间步的信息。

Decoder的输出是浮点数的向量列表。把得到的向量映射为需要的词,需要线性层和softmax层获取预测为词的概率。

线性层是一个简单的全连接神经网络,它是由Decoder堆栈产生的向量投影到一个更大,更大的向量中,称为对数向量

假设实验中我们的模型从训练数据集上总共学习到十万个股价数据("output")这对应的Logits矢量也有十万个长度(每一段表示了一个唯一股价的得分)。在线性层之后是一个softmax层,softmax将这些分数转换为概率。选取概率最高的索引,然后通过这个索引找到对应的股价作为输出。

1.3·self-Attention

self-Attention :这个在我们的金融分析中可以理解为已经测试过的股价和现在正在测试印证的股价之间的关系。

其核心内容是为输入向量每个内容学习一个权重,比如说我输入了上海电气,三年来的1000多个股价数据作为输入向量。那么我的每一天的这个股价就可以学习到一个权重。而且每个股价的权重是由三个不同的向量组成的,分别是Query向量( Q ),Key向量( K)和Value向量( V ),长度均是64。它们是通过3个不同的权值矩阵由嵌入向量 X 乘以三个不同的权值矩阵 WQ,WK ,WV 得到,其中三个矩阵的尺寸也是相同的,均是 512*64。示例如下:

1.嵌入:首先是把输入转换成嵌入向量的X(带有位置编码)。

2.qkv向量:其次我们计算嵌入向量的 qkv三个向量值。

3.注意力打分(即本元素与全部元素间的关联性):接着计算score,对score进行归一化(除以K的维度平方根,及公式中的√dk)。

4.归一化:对score施以softmax激活函数,使得最后的列表和为1(softmax1+softmax2+...+softmaxn=1)

softmax的值表示其在整个向量中的表示程度。

5.加权求和:softmax点乘Value值 v ,得到加权的每个输入向量的评分v,最终求和,生成self-attention层的输出。

计算流程:

但是对于我们金融分析来说,我们并不需要十分了解self-Attention的底层逻辑,那么我把它的底层逻辑换算成简单的原理来解释一下。就是来计算每个数据和其他所有数据之间的关系。比如说我要分析360的股市,那么它有很多概念,网络游戏,AI语料,虚拟数字人,软件服务,信息安全等。(这里我们把360本身去除,为了方便例子理解)那么它的处理流程就可以简化为下图(其中的数字占比表示为自注意机制所得出的两者关系):

与上同理我们这里面所有的输入数据都会进行这一样的计算。

1.4.Multi-Head Attention(h个self-Attention的集合)

1.先把输入数据x输入到h个self-Attention中

得到特征矩阵Zi,i∈{1,2,..,h}

2.把h个特征矩阵Zi,i∈{1,2,..,h}按列向量拼成

一个大的特征矩阵(也可以通过前馈神经网络把

所有特征矩阵降为一个特征矩阵Z)

3.最后进行一层全链接得到z

1.5.Positional Encoding

在介绍Positional Encoding前必须先介绍Embedding,这是在输入的序列被送入编码器前发生,会在每个元素原始数据中嵌入一个数字,使所有元素的嵌入数组组成数字序列,最后嵌入层再把数字序列映射成嵌入向量。

由于模型没有Recurrence/Convolution,因此是无法捕捉到序列顺序信息的,为了使用序列的顺序信息,需要将tokens的相对以及绝对位置信息注入到模型中去。

transformer给encoder层和decoder层的输入添加了一个额外的向量Positional Encoding,维度和embedding(embedding是将这些离散的符号转换为连续的向量表示,从而使得模型能够处理这些符号,并捕捉它们之间的语义关系。)的维度一样,这个向量能决定当前元素的位置,或者说在一个输入矩阵中不同的元素之间的距离。这样,模型可以区分序列中不同位置的元素,从而更好地捕捉序列的顺序信息,计算方法如下

其中pos是指当前元素在输入数据中的位置,i是指向量中每个值的index,偶数位置,使用正弦编码,奇数位置,使用余弦编码dmodel 是词嵌入的维度。最后把这个Positional Encoding与embedding的值加,作为输入送到下一层。

1.6.残差模块与normalization

在transformer中,每一个子层(self-attetion,ffnn)之后都会接一个残差模块,并且有一个Layer normalization;

2个编码器与解码器的例子如下:

那为什么要引入残差呢?因为随着网络深度的增加,训练变得愈加困难,在基于随机梯度下降的网络训练过程中,误差信号的多层反向传播非常容易引发“梯度弥散”(梯度过小会使回传的训练误差信号极其微弱)或者“梯度爆炸”(梯度过大导致模型出现NaN)的现象。而残差的引入就能极大改善这个问题。

残差模块:y=F(x,w)+x 高速公路网络的“变换门”和“携带门”都为恒等映射时(即令T=1,C=1T=1,C=1),就得到了残差网络

  • xx 是输入。

  • F(x, w)F(x,w) 是网络中的一部分,通常是一个或多个卷积层。

  • yy 是输出。

F(x,w) 表示的是网络的“变换”部分,而 x 则是“携带”部分。当“变换门”和“携带门”都为恒等映射时(即 T = 1 和 C = 1),公式简化为:

y = x + F(x, w)

残差网络的核心思想是通过引入“跳跃连接”(skip connection)(跳跃连接允许输入x直接传递到输出,而不经过中间的变换层。这种设计使得网络可以学习到输入和输出之间的残差,而不是整个映射。),使得网络可以直接学习输入和输出之间的残差(即 F(x, w)),而不是直接学习输出。

在引入残差网络后,还需要对网络层输出的数据进行再归一化,来减小反向传播的偏差,这里我们使用layer normalization(归一化数据的一种方式,不过 LN 是在每一个样本上计算均值和方差,而每一个特征维度上进行归一化)。

参考文献:

https://blog.csdn.net/weixin_44695969/article/details/102997574 

https://blog.csdn.net/jiaowoshouzi/article/details/89073944 

https://blog.csdn.net/qq_41664845/article/details/84969266 

https://zhuanlan.zhihu.com/p/139595546 

http://jalammar.github.io/illustrated-transformer

https://zhuanlan.zhihu.com/p/48508221 

https://zhuanlan.zhihu.com/p/60821628 

https://blog.csdn.net/u013069552/article/details/108074349

https://blog.csdn.net/chen_yiwei/article/details/88671959

https://blog.csdn.net/li15006474642/article/details/104391202

https://blog.csdn.net/weixin_42035282/article/details/138375831

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

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

相关文章

【密码学】AES算法

一、AES算法介绍: AES(Advanced Encryption Standard)算法是一种广泛使用的对称密钥加密,由美国国家标准与技术研究院(NIST)于2001年发布。 AES是一种分组密码,支持128位、192位和256位三种不同…

朗致面试---IOS/安卓/Java/架构师

朗致面试---IOS/安卓/Java/架构师 一、面试概况二、总结三、算法题目参考答案 一、面试概况 一共三轮面试: 第一轮是逻辑行测,25道题目,类似于公务员考试题目,要求90分钟内完成。第二轮是技术面试,主要是做一些数据结…

51c嵌入式~单片机~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/12362395 一、不同的电平信号的MCU怎么通信? 下面这个“电平转换”电路,理解后令人心情愉快。电路设计其实也可以很有趣。 先说一说这个电路的用途:当两个MCU在不同的工作电压下工作&a…

网络原理done

文章目录 ARP协议模拟一次ARP过程ARP周边问题ARP欺骗RARP DNS域名解析服务域名简介DNS结论 ICMP协议 NAT技术(重点)NAPTNAT缺点 内网穿透代理服务器正向代理反向代理 NAT和代理服务器区别 ARP协议 以这片区域为例 此时IP报文到达入口路由器R 此时路由器…

MATLAB中Simulink的信号线

Simulink以模块为最小单位,通过信号线互相连接,用户可通过GUI调配每个模块的参数,且仿真的结果能够以数值和图像等形象化方式具现出来。信号线可以传递一维数据、多维数据、向量数据或矩阵数据,甚至Bus型数据。Simulink使用不同的线形表示传递不同数据类型的信号线,…

集成方案 | Docusign + 泛微,实现全流程电子化签署!

本文将详细介绍 Docusign 与泛微的集成步骤及其效果,并通过实际应用场景来展示 Docusign 的强大集成能力,以证明 Docusign 集成功能的高效性和实用性。 在现代企业运营中,效率和合规性是至关重要的。泛微作为企业级办公自动化和流程管理的解决…

基于vue的quasarui框架和.NET CORE实现网站

首先安装quasar cli,然后进行配置 前台代码部分截图 后台部分截图 数据库 网站部分

一行代码解决vue3前端打包部署到服务器,动态配置http请求头后端ip方法教程无bug

只需要一行代码 vue3若依框架前端打包部署到服务器,需要部署到多个服务器上,每次打包会很麻烦,今天教大家一个简单的动态配置请求头api的方法,部署后能动态获取(修改)对应服务器的请求ip, 介绍两种方法,如…

openGauss开源数据库实战二十三

文章目录 任务二十三 openGauss 参数管理任务目标实施步骤一、启动参数文件及参数类型1.参数值修改后必须重新启动数据库的参数2.参数值修改后只需要reload操作的参数 二、设置数据库级参数三、设置用户级参数四、设置会话级参数五、将参数设置为默认值 任务二十三 openGauss 参…

杨振宁大学物理视频中黄色的字,c#写程序去掉(原版改进,三)

上一节,我们分清了主次矛盾,并搞定了主要矛盾(去掉黄色的字),这一节解决次要矛盾(矩形色带)。 我们的想法如图: 1,我们找到稳定黄色的最左边,最右边两点&…

ORACLE逗号分隔的字符串字段,关联表查询

使用场景如下: oracle12 以前的写法: selectt.pro_ids,wm_concat(t1.name) pro_names from info t,product t1 where instr(,||t.pro_ids|| ,,,|| t1.id|| ,) > 0 group by pro_ids oracle12 以后的写法: selectt.pro_ids,listagg(DIS…

JS-手写new

我们先再来理一理原型 Object1 {name:deng,age:18 } Object2 {name:ru,age:18 } const Person function(){} Person.prototype Object1; const p1 new Person(); console.log(p1.name); //deng Person.prototype null; console.log(p1.name); //deng上面给Person的构造函…

LabVIEW实验站反馈控制系统

开发了一套基于LabVIEW的软X射线磁性圆二色实验站的反馈控制系统。这套系统主要用于实现对实验站高电压的精确控制,从而保持照射在样品上的流强稳定性,为分析样品吸收谱提供可靠基准,同时提供了易用的用户界面和强大的数据存储功能。 项目背景…

Matlab笔记---clear、clc、clear all应用

在MATLAB中,clear、clc 和 clear all 是三个常用的命令,它们各自有不同的作用: clc: clc 命令用于清除MATLAB命令窗口中的所有输出。它不会删除任何变量、函数或文件,只是清除屏幕上的显示内容,让你可以更…

Python Segmentation fault错误定位办法

1. 说明 Python3执行某一个程序时,报Segmentation fault (core dumped)错,但没有告知到底哪里出错,无法查问题,这时就需要一个库faulthandler来帮助分析。 2. 安装faulthandler faulthandler在Python3.3之后成为标准库&#xf…

康耐视智能相机(Insight)通过ModbusTCP发送字符串到倍福(BECKHOFF)PLC中

文章目录 1.背景2.分析3.实现3.1.PLC的ModbusTCP_Server3.1.1.安装TF6250-Modbus-TCP3.1.2.PLC设置 3.2.智能相机的ModbusTCP_Client3.2.1.了解ModbusTCP的协议3.2.2.根据协议写代码3.2.2.1.纯函数代码3.2.2.2.脚本代码 3.2.3.非脚本处理时的代码逻辑图3.2.4.关于代码的问题及解…

语音芯片赋能可穿戴设备:开启个性化音频新体验

在科技日新月异的今天,语音芯片与可穿戴设备的携手合作,正引领我们步入一个前所未有的个性化音频时代。这一创新融合,用户可以享受到更加个性化、沉浸式的音频体验。下面将详细介绍语音芯片与可穿戴设备合作的优点和具体应用。 1. 定制化音效…

医学图像之图像分割数据集视神经青光眼分割数据集labelme格式903张2类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):903 标注数量(json文件个数):903 标注类别数:2 标注类别名称:["opticDisc","opticCup"] 每个类…

Linux shell 使用 trap 命令优雅处理程序中断: shell 中的回调、锁与事务、以及 debug 调试

来看一个常见的场景 假设你正在开发一个数据备份脚本。这个脚本需要执行以下操作: 创建临时工作目录将数据复制到临时目录压缩打包清理临时文件 #!/bin/bashWORK_DIR"/tmp/backup_$(date %Y%m%d)"echo "开始备份..." mkdir -p "$WORK_D…

jenkins构建 Webhook 触发器

目的是要让gitlab上面的项目更新了版本,Jenkins上面自动去执行新版本 项目地址 不用插件实现标签触发任务 Jenkins上面创建任务 这里面需要更改下 #网址http://jenkins.wang.org:8080/job/webhook-demo/configure生成个随机密码,测试用123456也可以 […