微信扫码
与创始人交个朋友
我要投稿
蚂蚁集团联手上海财经大学:揭开AI大模型在金融领域的神秘面纱 读书笔记 - II
本章节的主题,大模型在金融领域的应用和挑战。
第一,金融专业不足。例如,术语、内涵,无法在模型中体现。
第二,金融情境的理解能力不足。模型使用的人不同的时候,同一信息所展示的内涵不一致。此时,数 据模型难以把握语义差异、心理预期。期望是模型对于情境有更好的体现。
第三,难以完成复杂的金融指令。例如,限价单、止损单,要做到精确表达和执行。由于金融内涵丰富 ,执行起来阻碍也较多。
第四,金融大模型难以满足场景定制需求。例如,一是投研场景,需要的是实时热点分析。二是投顾场 景,需要的是安抚投资者情绪。
第五,难以满足合规需求。例如,反洗钱(AML)、了解你的客户(KYC),数据保护法规、适当义务等 。模型设计时没有考虑进去。
针对上述问题,解决方式 2 个切入点。一是训练和调优出专业大模型。二是搭建衍生模块。例如知识 库、工具库、智能体、合规组件等等。宗旨是,符合金融行业的需求。
基础大模型,加入通识,生成行业大模型;加入专业知识和推理规划,生成行业大模型应用框架。
这一段主要内容是在说,大模型应用在行业内的问题,依据问题我们可以做一些技术上的修改,从而进 一步地研究分析模型本身。
大模型整体框架如图所示,为了解决模型对于一类问题的常有的误判,统称为“幻觉”。
先总结地说一下所谓的金融行业的数据收集和梳理,从三个角度切入,聊这件事情。分别是预训练数据 、指令数据、安全数据。
首先,像语境认知信息、语言结构方面的数据、广泛的知识背景信息。这些都是在训练模型的时候,很 重要的切入角度。
其次,应该是金融行业特有的知识,和特有的表达。
再者,就是金融语料。或许因为行业的关系,数据获取比较困难。这也很容易理解,你平时会聊哪里饭 馆好吃,聊些家常,但是你很少有机会专门聊金融。除非,你在和你的财富管理人说话。
综上,我们就知道,这些知识的获取渠道都是比较少的。
报告还识别了数据来源(这是很重要的信息):
第一,各个公司的财务报告(例如,盈利预测、负债情况),或者年报、季报,以及图形、图表这类信 息。
第二,学术论文、专著的书,这些主要采集知识、教材,或者是一些指南,理财策略、经济学原理等等 。
第三,行业数据、市场研究。包括行业分析、市场分析,一些洞见,通常这些报告都是用采购的。
第四,金融产品说明。例如,基金投资策略,保险条款。
什么叫做金融指令?
指令微调是一种通过在由(指令,输出)对组成的数据集上进一步训练LLMs的过程 。其中,指令代表 模型的人类指令,输出代表遵循指令的期望输出。这个过程有助于弥合LLMs的下一个词预测目标与用 户让LLMs遵循人类指令的目标之间的差距(CSDN,2023)。
从定义来看,模型在进行测试的时候,留给操作人员一定操作空间,这些空间中输入的要素,简称为“ 指令”。
第一,构建指令集合,使得 AI 符合领域专业性和复杂的场景。提升对金融术语的认知,提升精算准确 度。
第二,规范理解和应用。
第三,提供建议和专业的金融服务和支持。
数据来源:
第一,金融知识指令。主要是金融、投资、经济、会计等应用知识,能够提升模型准确性。
第二,金融计算指令。财务分析、复杂公式、将问题转化为财务分析以助力决策。
第三,金融遵循指令。行业规范标准,监管要求,例如,投顾分析师,可以 AI 化。
第四,金融角色指令。
这个段落的含义,要坚守安全底线,不能有非人道的表达。
数据来源:
(1)拒绝回答的数据。例如,敏感问题、隐私泄露、法律合规。
(2)金融价值观。行业价值标准,法律规定。例如,未持牌情况下,避免专业建议或者预测。BTW, Jingyi 可是有 FRM 的,我们还是能够针对机构或者个人,在金融领域出具部分意见的。
关于这部分学习,我对自己的要求,就是知道范畴,以及我自己不太熟悉的术语的定义。如果再不清楚 ,我会照一些案例。例如,一开始针对“指令”这个词不熟悉,多查几篇文章之后就知,是人为的输入 ,但是你不会具体区分是哪个部分的变量。
高质量指令数据集的构建,对于增强模型性能非常重要。通常,这类做法围绕着“意图”、“价值观” 这些比较主观的内容,因此提出的要求是“响应准确”。
与之相对应的,那些非标准的、碎片化的数据,都会使得模型的表现受到影响。因此我们梳理出,这类 问题的挑战,即数据质量不一致,高质量的数据是欠缺的。
关于如何解决。第一,指令生成方面的技术创新,例如设计预期,并进行改进。第二,处理技术改进, 优化并筛选。
举个例子,LIMA(Less is More for Alignment.),Tulu 强调不同数据源,Orca 的“足迹解释”。这里还提到了 Dromedary。
关于指令生成的技术还存在一些问题。第一,分布不平衡。第二,质量层次不齐。这里涉及自指令方法 、进化指令的发展、指令适应的创新。
自指令方法,Self-Instruct,利用少量高质量种子指令数据集作为点,自动从模型本身生成新的指令 信号。Shoelesscai 评注,这里的指令的信号,很可能是 output,将其作为一种输入再进行利用。具 体需要用模型实验来验证。
进化指令,Evol-Instruct,使用规则生成复杂指令的方法。深度、广度的进化策略,使得大语言模型 生成更加复杂和多样的指令。提到 Evol-Instruct 和 WizardLM 应用于编程和数学。
指令适应,Ada-Instruct,针对前两者在领域下游的任务分布对其方面的不足提出改进。通过微调,生 成更加适合下游任务的指令。
指令微调(IT)是提高大型语言模型(LLM)能力和可控性的关键技术。其本质是指在由(INSTRUCTION, OUTPUT)对组成的数据集上以监督的方式进一步训练LLM的过程,它弥合了LLM的下一个词预测目标与用户让LLM遵循人类指令的目标之间的差距。
ShoelessCai 评注,是人类给到 AI 模型【定义】,再给出【符合定义】、【不符合定义】,这些要素。全部用自然语言描述,具有完整的句子。
举个例子,例如 Natural Instruction。
以及 Super Natural Instruction
高效参数微调,即 Parameter Efficient Fine-Tuning,PEFT。这些微调主要优化计算资源,分成增量 微调、部分微调、重参数化。
其中,增量微调,即调整少量额外参数,增强模型表达。例如,Adapter 是最常见的增量微调技术, 主要在注意力 Attention 和 FFN 层之后,添加全连接网络实现。Soft Prompt 又称连续 Prompt, 相对的 Hard Prompt 就是离散 Prompt。
再者,部分微调,即选择性地微调一部分参数,例如,仅微调神经网络的顶层或者特定层。例如, BitFit,调整的数据比例大概是 0.05%,效果虽然与完全微调有一定差异,但是还是具有成本低、推理 负担低等良好效果。
最后,重参数化,即分解大矩阵为小矩阵,针对比较少 Rank,这样可以去掉冗余,使得问题本身更加 紧实,这些紧实的小问题叠加之后,就是原来的大问题。参数自然而然会减少。例如,LoRa 将权重矩 阵分解为两个低秩矩阵乘积。减少计算资源需求,适用于数十亿参数的情况。
注意:这里知识点是有层次的,很多格式没作过多调整,需读者自己用阅读能力来区分。
就像你通过选择不同的设计元素来定制家具一样,Prompt 工程涉及对 AI 的输入进行精细调整,以获 得更加贴合需求的结果。通过改变、添加或精确化输入的提示,你可以引导 AI 产生更符合特定要求或 风格的输出,就像为房间挑选和定制合适的家具一样(腾讯云 - FanStuck,2024)。
在整理这篇文章的时候,回忆到自己 2023 年年初的文章《ChatGPT 的一些“直觉理解”》,当时调研 Prompt 文章的时候,我记得是一 个程序 Yam 写的博客。写得蛮清楚的。我们看几个案例吧!
列举几个 Prompt 示例:
简单日常对话。比如询问对方姓名,是否开心等等。
常识问答。比如问今天是周几,冬天如何取暖等等。
知识问答。比如热力学第二定律是什么,设计模式中的策略模式适用于哪些场景等等。
文本改写。比如给出一段话,让它改简单一些,或换个风格,同时给出要的风格是什么样子的。
过了一年半,想要对 Prompt 进行更多的理解,包括蚂蚁金服的报告,包括腾讯云的文章。用决策树来 理解的,或者用分类指标来理解,就是一种子类,但是是级别比较高的子类。
笔者自己整理了个示意图。
解释一下这个术语,它属于一种微调技术,主要聚焦于道德意识、社会意识。换言之,数据侧重于上述 两方面,但是还是数据化的。金融领域,这意味着模型生成的预测或决策不仅要准确、可靠,还要公正 、透明,并且符合行业规范。
两个切入点:1.基于强化学习、人类反馈训练的对齐。2.对强化学习的化简。
首先,基于强化学习、人类反馈训练的对齐。我们称为 Reinforcement Learning from Human Feedback,即 RLHF,结合监督学习和强化学习技术,依据人类反馈去优化模型。OpenAI 使用的。输入 的是人工注释,将输出和预期进行对比。这个对齐模式,还用了一种算法,叫做 PPO,即 Proximal Policy Optimization 算法,将奖励模型的分数作为反馈,调整模型行为。评注:很可能也是一种 Stacking,只是 Stacking 覆盖面会不一样。
其次,对强化学习的化简。由于 PPO 存在代价高、训练困难等问题,如何改进呢?于是,引入 RAFT, 即 Reward Aligned Fine Tuning,奖励函数排名,替代 PPO,这种方法不用计算梯度,本文后篇有 PPO 公式推导。另外,算法 DPO,即 Direct Preference Optimization,简化了复杂、不稳定的 PPO 过程,目标是二元交叉熵。CoH,即 Chain of Hindsight,简化了奖励函数和强化学习,其反馈转化为 对模型的微调。
大模型推理是指使用训练好的模型对新输入数据进行理解、总结、生成及预测的过程。基于金融行业的 性质,大模型推理需要很高的速度、吞吐量需求。
首先,预期大模型对股价、市场新闻、政策等,具有较好的实时反映。传统方式是人工实时响应。
其次,提供优质的服务。模型用户是谁?广义上是普通用户、研究员、基金经理,包含散户和从业人员 。预期向模型输入高频数据,大模型快速进行推理,关键时刻作出关键决策。
笔者表示,我们先记住这种说法/术语,即基于 Transformer 架构的模型。该框架模型中的注意力机制 ,即 Attention,注意力机制处理的上下文关系。主要管理注意力占用 GPU 内存情况。
我们稍微看一下 PPO 的目标函数和迭代方式。其实,基本思想没什么变化。
奖励函数本质是收益的加权平均。这里的梯度函数我自己没有推导过,我们可以直接记住结论。即加权 平均收益上,对每个概率求 delta。这里所谓的变化,是将 delta(p) 写成 log 形式,delta(log_P) ,或者用离散的表达 delta( p*delta_p/p )。
按照上述推导的方式写出 Loss 之后,每次训练的结果,和自己的预期对比。一个行动(Action)有一 个这样的差距,N 个行动,就是 N 个差距的加权平均。这是 Basic Idea。在实验的时候,我相信还会 有更多问题。
最后,我贴出这篇文章的 Policy 函数。类似的算法,要学会并找到工作,最好自己上手干一遍吧!
点击阅读原文《Proximal Policy Optimization(PPO)算法原理介绍学习笔记 》
Transformer 是一种自然语言处理,和其他序列到序列(sequence-to-sequence)任务的深度学习模型 架构,它在2017年由Vaswani等人首次提出。Transformer架构引入了自注意力机制(self-attention mechanism),这是一个关键的创新,使其在处理序列数据时表现出色。
Transformer 模型之所以如此强大,是因为它抛弃了之前广泛采用的循环网络和卷积网络,而采用了一 种特殊的结构——注意力机制 (Attention) 来建模文本。
以下是Transformer的一些重要组成部分和特点:
自注意力机制(Self-Attention):这是Transformer的核心概念之一,它使模型能够同时考虑输入 序列中的所有位置,而不是像循环神经网络(RNN)或卷积神经网络(CNN)一样逐步处理。自注意 力机制允许模型根据输入序列中的不同部分来赋予不同的注意权重,从而更好地捕捉语义关系。
多头注意力(Multi-Head Attention):Transformer 中的自注意力机制被扩展为多个注意力头,每个 头可以学习不同的注意权重,以更好地捕捉不同类型的关系。多头注意力允许模型并行处理不同的 信息子空间。
堆叠层(Stacked Layers):Transformer 通常由多个相同的编码器和解码器层堆叠而成。这些堆叠的 层有助于模型学习复杂的特征表示和语义。
位置编码(Positional Encoding):由于Transformer没有内置的序列位置信息,它需要额外的位置编 码来表达输入序列中单词的位置顺序。
残差连接和层归一化(Residual Connections and Layer Normalization):这些技术有助于减轻训练 过程中的梯度消失和爆炸问题,使模型更容易训练。
编码器和解码器:Transformer通常包括一个编码器用于处理输入序列和一个解码器用于生成输出序列 ,这使其适用于序列到序列的任务,如机器翻译。
点击阅读原文
评注:这里的 Encoder 和 Decoder 都是一种翻译机制,至少我这么认为。算法是主体,Encoder 是翻 译成同类编码,进行训练,训练完还原过程,成为 Decoder。
NLP 神经网络模型的本质就是对输入文本进行编码,常规的做法是首先对句子进行分词,然后将每个词 语 (token) 都转化为对应的词向量 (token embeddings),这样文本就转换为一个由词语向量组成的矩 阵 X=[x0,x1,...,xn],其中 xi 是第 i 个词向量,维度为 d,因此 X 属于 R[n,d]空间。
在 Transformer 模型提出之前,对 token 序列 X 的常规编码方式是通过循环网络 (RNNs) 和卷积网 络 (CNNs)。
第一,循环神经网络 RNN,文章说 RNN 是个马尔科夫决策过程,难以获取更大范围信息。如果一个词 语 xi 编码之后的结果 y(i),其表达式为 y(t) = f(y(t-1), x(t))。
第二,卷积神经网络 CNN,通过滑动窗口,基于局部上下文来编码文本。例如,Win=3,即前一个词语 ,自身,后一个词语,词向量长度为 3。表达式 y(t)=f(x(t-1), x(t), x(t+1))。CNN 能够并行计算 ,速度较快。长距离语义依赖是较难,意味着更大的窗口,会增加计算难度。
Google《Attention is All You Need》提供了第三个方案:直接使用 Attention 机制编码整个文本。
相比 RNN 要逐步递归才能获得全局信息(因此一般使用双向 RNN),而 CNN 实际只能获取局部信息, 需要通过层叠来增大感受野,Attention 机制一步到位获取了全局信息。
表达式 y(t) = f(x(t), A, B)
其中,A 和 B 是另外的词语序列(矩阵),如果 A=B=X,此时称为 Self-Attention,直接将 x(t) 与 自身序列中的每个词语进行比较,最后算出 y(t) 。
评注:关于 Transformer Attention 我们可以理解为,横向与其他词向量的函数结果。
点击阅读 原文
虽然 Attention 有许多种实现方式,但是最常见的还是 Scaled Dot-product Attention。
这张图足以解释公式了,而数值的生成步骤。
第一,计算注意力权重。w(ij)=F(q(i), k(j)),在外层讨一个 softmax。由于 length(q)=m, length(k)=n,生成的注意力分数矩阵为 m × n。
第二,更新 Token Embedding。q(i) 更新之后记为语义 x(i)。这个数值怎么表达呢?即
x(i) = 求和(w(ij)*v(j)),w 是 q 与 k 的度量,这里的信息也可以知道,q、k、v 都是可以采集到的数据,另外就是,公式中 w 并不体现。
注意力分数矩阵,注意力权重 w(ij) = f(q(i), k(j))。
首先需要将文本分词为词语 (token) 序列,然后将每一个词语转换为对应的词向量 (embedding)。Pytorch 提供了 torch.nn.Embedding 层来完成该操作。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-28
2024-08-13
2024-04-26
2024-08-21
2024-06-13
2024-07-09
2024-08-04
2024-04-11
2024-07-18
2024-07-01