从 RAG 1.0到RAG 2.0,这次做对了什么?

RAG是目前最流行的补充生成式人工智能模型的方式,最近 RAG 的开创者提出了新的上下文语言模型 (CLM) ,他们称之为“ RAG 2.0 ”。

今天让我们一块来从RAG目前的原理和缺点出发,看看他们所提出的RAG2.0是否能够为行业带来新的希望。

LLM的时间有效性

您应该知道,所有独立的大型语言模型 (LLM)(例如 ChatGPT 等)都有知识截止点。

这意味着预训练是一次性的练习(与持续学习方法不同)。换句话说,LLM 掌握的数据是在某个时间点之前的。

例如,在写文章时,ChatGPT 更新至 2023 年 4 月。因此,他们不准备回答该日期之后发生的事实和事件。

而这就是 RAG 发挥作用的地方。

语义相似性

顾名思义,这个想法是从已知的数据库中检索数据,这些数据是LLM以前从未见过的数据,并将其实时输入到模型中,以便它已经更新,在语义上相关的上下文来提供准确的答案。

但这个检索过程是如何进行的呢?

整个架构源于一个原则:检索与请求或 prompt 上下文相关的语义有意义的数据的能力。

这个过程涉及到三个元素的使用:

  1. embedding 模型
  2. 检索器,通常是矢量数据库
  3. 还有生成器,LLM

首先也是最重要的,为了使此检索过程正常进行,您需要对数据进行 embedding ,即数字向量化。

更重要的是,这些嵌入具有相似性原则:相似的概念将具有相似的向量。

完成embedding后,我们将它们插入向量数据库(检索器)。

应用相似性原则

然后,每当用户发送如下请求*“给我与‘黄猫’类似的结果”时,*矢量数据库就会执行“语义查询”。

通俗地说,它提取与用户查询最接近的向量(距离)。

由于这些向量代表基本概念,因此相似的向量将代表相似的概念,在本例中是其他猫。

一旦我们提取了内容,我们就构建 LLM prompt,封装包括:

  • 用户的请求
  • 提取的内容
  • 一般来说,还有一组系统指令

简而言之,这就是 RAG,一个为用户实时查询提供相关内容以增强 LLM 响应的系统。

RAG 系统之所以起作用,首先要归功于LLM的最大超能力:上下文学习,它允许模型使用以前未见过的数据来执行准确的预测,而无需权重训练。

但这个过程听起来好得令人难以置信,当然,事情并不像看起来那么令人惊奇。

RAG的问题:缝合怪

前 RAG 系统做一个形象的比喻,就是下面的裤子:

尽管这些裤子可能适合某些观众,但大多数人永远不会穿它们,因为没有统一性,尽管打补丁的初衷是希望让人接受。

这种类比背后的原因是,标准 RAG 系统组装了三个不同的组件,这些组件分别经过预先训练,并且根据定义,它们从来不应该组合在一起。

而在RAG 2.0系统中从一开始就被定义为“一件事”。

RAG2.0

我们将上下文语言模型 (CLM) 与跨多个轴的冻结 RAG 系统进行了比较:

  • 开放域问答: 我们使用规范的自然问题(NQ)和TriviaQA数据集来测试每个模型正确检索相关知识并准确生成答案的能力。我们还在单步检索设置中评估 HotpotQA (HPQA) 数据集上的模型。所有数据集都使用完全匹配 (EM) 指标。
  • 忠实性: HaluEvalQA 和 TruthfulQA 用于衡量每个模型保持基于检索到的证据和幻觉的能力。
  • 新鲜度: 我们使用网络搜索索引来衡量每个 RAG 系统泛化到快速变化的世界知识的能力,并在最近的 FreshQA 基准测试中显示准确性。

RAG 2.0的核心创新在于它的端到端优化设计,将语言模型和检索器视为一个整体进行训练和微调。这种设计不仅提高了模型在特定任务上的准确性,也提升了其适应新问题的能力,使其在多项标准测试中达到了前所未有的性能水平。

与传统的 RAG 系统相比,RAG 2.0能够更有效地处理知识密集型任务,因为它不受训练期间接触资料的限制。通过动态检索外部资料,如Wikipedia、Google或内部公司文件,RAG 2.0能够获取并利用最新、最相关的信息来增强其回答的准确度和可靠性。

在实践中,整个系统在连接时进行端到端训练,就像假设LLM应该始终有一个与之绑定的矢量数据库以保持更新。

这意味着,在反向传播过程中,训练这些模型的算法,梯度不仅通过整个 LLM 传播,而且还通过检索器传播,以便整个系统作为一个整体从训练中学习数据。

结果也证明了这一点:

尽管使用的独立模型肯定比 GPT-4 差,但这种新方法的性能优于 GPT-4 和其他检索系统之间所有其他的 RAG 1.0 组合。

原因很简单:在 RAG 1.0 中,我们单独训练事物,然后将它们缝合在一起,并希望得到最好的结果。但在 RAG 2.0 中,情况大不相同,因为所有组件从一开始就在一起。

但尽管 RAG 2.0 的优势显而易见,但仍然存在一个大问题。

RAG的未来面临挑战

尽管 RAG 2.0 看起来似乎带来了巨大的好处**,因为它的设计专门针对不愿意与 LLM 提供商共享机密数据的公司,但现实中它的落地面临巨大挑战。**

超长上下文

我相信您非常清楚这样一个事实,即我们今天的前沿模型,例如 Gemini 1.5 或 Claude 3 等模型,拥有巨大的上下文窗口,在其生产发布的模型中多达 100 万个token(75 万个单词),而在实验室中更是达到了1000万token(750 万个单词)

通俗地说,这意味着这些模型可以在每个提示中输入非常长的文本序列。

作为参考,《指环王》书籍总共有 576,459 个单词,而《哈利·波特》的整本书传奇大约有 1,084,170 个单词。因此,一个 750 万字的上下文窗口可以在每个提示中将两个故事组合在一起,五倍。

在这种情况下,我们真的需要一个知识库检索器,而不是仅仅在每个prompt中提供信息

放弃此选项的原因之一可能是准确性。序列越长,模型检索正确的上下文就越困难,对吗?

另一方面,RAG 过程允许仅选择语义相关的数据,而不是在每个 prompt 中提供整个上下文,从而使其整体上成为一个更高效的过程。

然而,的研究正在超长上下文中,LLM的工作也显示出几乎 100% 的准确性。

这些模型无论长度如何都能表现出惊人性能的背后的技术支持是,这些模型的基本操作符——注意力机制——具有绝对的全局上下文,因为注意力机制迫使序列中的每一个单独的令牌(也就是一个单词或子词)去关注序列中每一个其他的之前的单词。

这确保了无论依赖关系有多远,无论信号有多小(关键信息可能存储在一个距离数百万单词的单个单词中),模型应该能够——而且确实能够——检测到它。

因此,在我看来,RAG 最终能否生存并不取决于准确性,而是取决于技术之外的另一个关键因素:

成本。

需要商业落地来验证

如今,由于 Transformer 无法压缩上下文,较长的序列不仅意味着成本的二次增加(序列增加 2 倍意味着计算成本增加 4 倍,或者增加 3 倍意味着计算成本增加 9 倍),而且还意味着由于KV Cache大小的增加而爆炸。简而言之,运行很长的序列是非常昂贵的。

KV缓存是模型的“缓存内存”,避免不得不重新计算大量冗余的注意力数据,否则这个过程在经济上是不可行的。这里是关于KV缓存是什么以及它如何工作的深入回顾。

简而言之,运行非常长的序列是非常昂贵的,以至于对于具有极长序列长度的模态,如DNA,甚至不考虑使用Transformer。

事实上,在像EVO这样的DNA模型中,研究人员使用了海纳(Hyena)操作符而不是注意力来避免前面提到的二次方关系。海纳操作符使用长卷积而不是注意力来以次二次方的成本捕捉长距离依赖。

本质上,虽然你在时间域中计算卷积,但你是作为频率域中的逐点乘积来计算它,这更快、更便宜。其他替代方案寻求一种混合方法,而不是完全放弃注意力,而是找到注意力和其他操作符之间的最佳平衡点,以在保持性能的同时降低成本。

总结

最近的示例包括Jamba,它巧妙地将Transformer与其他更高效的架构(如Mamba)混合在一起。

Mamba、Hyena、Attention……你可能认为我只是为了证明一个观点而随意列举一些花哨的词汇。

所有这些名字背后都归结为同一个原则:它们是揭示语言模式的不同方式,帮助我们的AI模型理解文本。

注意力机制驱动了当今99%的模型,其余的只是在尝试找到尽可能最小的性能降低的更便宜的方式,使大型语言模型(LLM)更加经济。

总而言之,我们很快就能看到极长序列的处理成本仅为目前价格的一小部分,这应该会增加对RAG架构需求的怀疑。

如果RAG可以成为平衡成本的一个好方案,那么未来应该会有更好的发展。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓
在这里插入图片描述

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

在这里插入图片描述

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

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

相关文章

提交链码-编辑前后端,调用链码功能

一 . 链码介绍 1.什么链码? • 链码是一段用 Go、Node.js 或者 Java 实现了规定接口的程序。链码在安全的Docker容器中运行, 与背书节点的进程隔离。通过应用程序提交的交易,链码初始化和管理账本状态。• 链码通常处理网络成员协商达成的业…

若依文件下载

后端自带工具controller package com.ruoyi.web.controller.common;import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.Logger…

docker常用基本命令

把jar包和 dockerfile文件放到同一目录下#构建Docker镜像 注意后面的 . 不能省略 docker build -t your-image-name .#运行并创建一个容器 docker run -d -p 8080:8080 --name container_name your-image-name# 停止容器 767fce4cb990 容器ID (容器名也可以) docker stop 767f…

HarmonyOS开发案例:【rating组件】

介绍 将引导开发者使用rating组件实现星级打分功能。 相关概念 [rating组件]:评分条,可根据用户判断进行打分。 环境搭建 软件要求 [DevEco Studio]版本:DevEco Studio 3.1 Release及以上版本。OpenHarmony SDK版本:API vers…

sCrypt全新上线RUNES功能

sCrypt智能合约平台全新上线一键etch/mint RUNES功能! 请访问 https://runes.scrypt.io/ 或点击阅读原文体验! 关于sCrypt sCrypt是BSV区块链上的一种智能合约高级语言。比特币使用基于堆栈的Script语言来支持智能合约,但是用原生Script编…

宁盾LDAP统一用户认证与单点登录:构建高效安全的企业身份认证

在信息化时代,企业面临着众多的应用系统和数据资源,如何有效地管理和保护这些资源,确保信息安全和高效利用,成为了企业信息化建设的核心问题。LDAP统一用户认证和单点登录(SSO)作为一种高效、安全的身份验证…

Quarto Dashboards 教程 2:Dashboard Layout

「写在前面」 学习一个软件最好的方法就是啃它的官方文档。本着自己学习、分享他人的态度,分享官方文档的中文教程。软件可能随时更新,建议配合官方文档一起阅读。推荐先按顺序阅读往期内容: 1.quarto 教程 1:Hello, Quarto 2.qu…

srpingMVC基本使用

文章目录 1. springMVC基本功能(1) maven坐标导入(2) 编写表现层(3) springMVC配置类编写(4) 部署tomcat访问 2. 各种请求方法get请求post请求put请求delete请求请求参数提取 3. 请求参数接收(1) param参数接受封装到对象中 (2) 路劲参数接收集合接受时间类型接收json参数接收m…

1.C++入门(上)

目录 1.C关键字 2.命名空间 作用域方面的优化 a.命名空间定义 b.命名空间使用 3.C 输入&输出 1.C关键字 C有63个关键字,C语言有32个关键字,存在重叠如荧光笔标出 2.命名空间 作用域方面的优化 如果变量,函数和类的名称都存在于全…

java 词法分析练习

import parser.Parser;import java.util.ArrayList; import java.util.Arrays; import java.util.List;public class Main {public static void main(String[] args) {// 关键词List<String> keyList new ArrayList<>(Arrays.asList("int","String…

鸿蒙APP开发页面组件之间的属性关系

我们将对于多页面以及更多有趣的功能展开叙述&#xff0c;这次我们对于 HarmonyOS 的很多有趣常用组件并引出一些其他概念以及解决方案、页面跳转传值、生命周期、启动模式&#xff08;UiAbility&#xff09;&#xff0c;样式的书写、状态管理以及动画等方面进行探讨 页面之间…

mac 教程 终端如何拆墙

一直觉得自己写的不是技术&#xff0c;而是情怀&#xff0c;一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的&#xff0c;希望我的这条路能让你们少走弯路&#xff0c;希望我能帮你们抹去知识的蒙尘&#xff0c;希望我能帮你们理清知识的脉络&#xff0…

【Paddle】PCA线性代数基础 + 领域应用:人脸识别算法(1.1w字超详细:附公式、代码)

【Paddle】PCA线性代数基础及领域应用 写在最前面一、PCA线性代数基础1. PCA的算法原理2. PCA的线性代数基础2.1 标准差 Standard Deviation2.2 方差 Variance2.3 协方差 Covariance2.4 协方差矩阵 The Covariance Matrix2.5 paddle代码demo①&#xff1a;计算协方差矩阵2.6 特…

4.8 Python dict字典

Python dict字典详解 Python字典&#xff08;dict&#xff09;是一种无序的、可变的序列&#xff0c;它的元素以“键值对&#xff08;key-value&#xff09;”的形式存储。相对地&#xff0c;列表&#xff08;list&#xff09;和元组&#xff08;tuple&#xff09;都是有序的序…

【Android12】Bugreport实现原理

Bugreport实现原理 Bugreport Bugreport介绍 Android Bugreport是一个用于记录和收集 Android设备上系统信息、日志和调试信息的工具。 系统发生某些问题时&#xff0c;可以通过bugreport把系统当前时刻点&#xff08;运行BugRepot的时刻&#xff09;的系统相关的状态和信息…

HarmonyOS 实战开发-MindSpore Lite引擎进行模型推理

场景介绍 MindSpore Lite 是一款 AI 引擎&#xff0c;它提供了面向不同硬件设备 AI 模型推理的功能&#xff0c;目前已经在图像分类、目标识别、人脸识别、文字识别等应用中广泛使用。 本文介绍使用 MindSpore Lite 推理引擎进行模型推理的通用开发流程。 基本概念 在进行开…

YOLOv5利用Labelimg标注自己数据集

目录 一、Labelimg介绍二、Labelimg下载三、Labelimg安装四、Labelimg使用1、准备2、开始标注 一、Labelimg介绍 LabelImg是一款开源的图片标注工具&#xff0c;使用Python编写&#xff0c;基于PyQt5框架。它提供了一个直观的图形用户界面&#xff0c;方便用户对图片进行标注&…

axios——503响应超时重复多次请求——技能提升

今天在写后台管理系统时&#xff0c;遇到一个问题&#xff0c;就是每天早上一启动项目&#xff0c;接口会提示503超时&#xff0c;因此项目运行必须重新刷新请求成功后才可以正常使用。 后端同事说请求超时了&#xff0c;需要前端处理一下&#xff0c;如果是503的状态码&#…

Golang特殊init函数

介绍 init()函数是一个特殊的函数&#xff0c;存在一下特性 不能被其它函数调用&#xff0c;而是子main()函数之前自动调用不能作为参数传入不能有传入参数和返回值 作用&#xff1a; 对变量进行初始化检查/修复程序状态注册运行一次计算 以下是<<the way to go>>…

Web APIs 学习归纳1---Web API概述简单的元素获取

JS基础中我们学习了JS的基本语句&#xff0c;这些是后续学习中的基础。 有了上述JS的基础以后&#xff0c;我们就可以开始学习交互效果的实现方法。这里很多时候直接调用JS封装好的API即可。 一、Web APIs 和 JS 基础关联性 这里有一张图很好的解释了这个问题&#xff1a; 我们…