当前位置: 首页 > news >正文

【AI大模型】大模型应用开发学习线路

文章目录

  • 壹. LLM基础
    • 一. 数学基础
    • 二. Python库的学习
    • 三. 深度学习基础
    • 四. 自然语言处理(NLP)
  • 贰. LLM应用工程
    • 一. 部署和调用LLM
      • LLM API之openAI
      • 提示工程
      • 构建应用程序
      • 其他
    • 二. 构建向量存储
    • 三. (RAG)检索增强生成
    • 四. 高级 RAG
    • 五. 推理优化(ing)
    • 六. 生产化部署 LLM
    • 七. 加固LLM

壹. LLM基础

一. 数学基础

在掌握机器学习之前,了解驱动这些算法的基本数学概念非常重要。

  • 线性代数:对于理解例如深度学习中使用的算法至关重要。关键概念包括向量、矩阵、行列式、特征值和特征向量、向量空间和线性变换。
  • 微积分:许多机器学习算法涉及连续函数的优化,这需要理解导数、积分、极限和级数。多变量微积分和梯度概念也很重要。
  • 概率与统计:理解模型如何从数据中学习并做出预测至关重要。关键概念包括概率论、随机变量、概率分布、期望、方差、协方差、相关性、假设检验、置信区间、最大似然估计和贝叶斯推断。

 

二. Python库的学习

Python特别适用于机器学习,这得益于其可读性、一致性和健壮的数据科学库生态系统。

  • Python基础:基本语法、数据类型、错误处理和面向对象编程。
  • 数据科学库:
    • NumPy进行数值操作;
    • Pandas进行数据处理和分析;
    • Matplotlib和Seaborn做数据可视化。
  • 数据预处理:涉及特征缩放和规范化、处理缺失数据、异常检测、类别数据编码,以及将数据分割为训练、验证和测试集。
  • 机器学习库:
    • Scikit-learn:提供广泛的监督和无监督学习算法的python库。
    • 理解如何实现线性回归、逻辑回归、决策树、随机森林、最近邻(K-NN)和K均值聚类等算法。
    • 降维技术如PCA和t-SNE对于可视化高维数据很有帮助。

 

三. 深度学习基础

神经网络是许多机器学习模型的基础部分,特别是在深度学习领域。

  1. 基础知识:深度神经网络的基本结构、工作原理以及常见的层类型(如全连接层、卷积层、循环神经网络等)、权重、偏差和激活函数(sigmoid、tanh、ReLU等)。
  2. 训练和优化:熟悉反向传播和不同类型的损失函数,如均方误差(MSE)和交叉熵。理解各种优化算法,如梯度下降、随机梯度下降、RMSprop和Adam。
  3. 过拟合:理解过拟合的概念(模型在训练数据上表现良好但在未见数据上表现不佳)并学习各种正则化技术(dropout、L1/L2正则化、提前停止、数据增强)来防止它。
  4. 实现多层感知机(MLP):使用PyTorch构建一个MLP,也称为全连接网络。

 

四. 自然语言处理(NLP)

NLP桥接了人类语言与机器理解之间的差距。从简单的文本处理到理解语言细微差别,NLP在许多应用中发挥着关键作用,如翻译、情感分析、聊天机器人等等。

  1. 文本预处理:学习各种文本预处理步骤,如分词(将文本分割成单词或句子)、词干提取(将词汇还原到其根形式)、词形还原(类似于词干提取但考虑上下文)、停用词移除等。
  2. 特征提取技术:将文本数据转换为机器学习算法能理解的格式的技术。关键方法包括词袋(BoW)、词频-逆文档频率(TF-IDF)和n-gram。
  3. 词嵌入(embedding):词嵌入是一种词表示方式,允许意义相近的词有相似的表示。关键方法包括Word2Vec、GloVe和FastText。
  4. 循环神经网络(RNNs):理解RNN的工作原理,RNN是一种设计用来处理序列数据的神经网络。探索LSTM和GRU,这两种RNN变体能够学习长期依赖。

【大模型应用极简开发入门(1)】LLM概述:LLM在AI中所处位置、NLP技术的演变、Transformer与GPT、以及GPT模型文本生成逻辑

【大模型应用极简开发入门(2)】GPT模型简史:从GPT-1到GPT-4:从小数据量的微调到大数据量的强化学习不断优化模型

 
 

贰. LLM应用工程

一. 部署和调用LLM

由于高硬件要求,运行LLM可能很困难。可以简单地通过API(如GPT-4)来调用大模型。

  1. LLM API:API是部署LLM的便捷方式。这个领域分为私有LLM(OpenAI、Google、Anthropic、Cohere等)和开源LLM(OpenRouter、Hugging Face、Together AI等)。
  2. 开源LLM:Hugging Face Hub是寻找LLM的好地方。您可以直接在Hugging Face Spaces中运行其中一些,或者下载并在诸如LM Studio的应用中或通过CLI与llama.cpp或Ollama在本地运行它们。
  3. 提示工程:常见技术包括零次提示、少次提示、思维链和ReAct。它们在更大的模型上效果更好,但可以适应较小的模型。
  4. 结构化输出:许多任务需要结构化输出,如严格的模板或JSON格式。库如LMQL、Outlines、Guidance等可用于引导生成并遵循给定结构。

LLM API之openAI

【大模型应用开发极简入门】ChatGPT-hello world

【使用ChatGPT的API之前】OpenAI API提供的可用模型

【大模型应用开发极简入门】使用GPT-4和ChatGPT的编程起点:ChatCompletion详解

【大模型应用开发极简入门】agent之前:Function Calling:将自然语言转换为API调用或数据库查询

【大模型应用开发极简入门】广泛使用API之前:考虑成本和数据隐私

【大模型应用开发极简入门】其他OpenAI API和功能:embedding(文本之间的向量相关性)、Moderation(内容审核模型)、Image generation

 

提示工程

常见技术包括零次提示、少次提示、思维链和ReAct。它们在更大的模型上效果更好,但可以适应较小的模型。

【大模型应用开发极简入门】提示工程一:1. 通过context、task、role文本结构设计有效的提示词、 2. OpenAI的提示词任务示例

【大模型应用开发极简入门】提示工程二:零样本学习、少样本学习与改善提示效果

 

构建应用程序

【使用ChatGPT构建应用程序】应用程序开发概述:1. 管理秘钥、2. 数据安全、3. 与应用程序解耦、4. 注意提示语的注入攻击

【大模型应用开发极简入门】构建新闻稿生成器:提示词的使用与基于事实的提示词

 

其他

【大模型应用开发极简入门】微调(一):1.微调基础原理介绍、2. 微调的步骤、3. 微调的应用(Copilot、邮件、法律文本分析等)

【大模型认识】警惕AI幻觉,利用插件+微调来增强GPT模型

 

二. 构建向量存储

创建向量存储是构建检索增强生成(RAG)管道的第一步。文档被加载、拆分,相关块被用来生成向量表示(嵌入)。

  1. 文档摄入(Ingesting documents):文档加载器可以处理多种格式:PDF、JSON、HTML、Markdown等。
  2. 文档拆分(Splitting documents):文本拆分器将文档拆分成较小的、语义上有意义的块。
  3. 嵌入模型(Embedding models):嵌入模型将文本转换为向量表示。这对于进行语义搜索是必要的,因为它允许更深入、更细腻的理解语言。
  4. 向量数据库(Vector databases):向量数据库(如Chroma、Pinecone、Milvus、FAISS、Annoy等)被设计用于存储嵌入向量。它们根据余弦相似度检索最相似的数据。

 

三. (RAG)检索增强生成

使用RAG,LLM从数据库检索上下文文档以提高其回答的准确性。RAG是一种增强模型知识而无需任何微调的流行方式。

  1. 协调器(Retrievers):协调器(如LangChain、LlamaIndex、FastRAG等),用于将LLM与工具、数据库、记忆等连接并增强其能力。
  2. 检索器(Retrievers):用户指令不是为检索优化的。可以应用不同技术(例如,多查询检索器、HyDE等)来重述/扩展它们并提高性能。
  3. 记忆(Memory):为了记住之前的指令和答案,像ChatGPT这样的LLM和聊天机器人将这些历史添加到其上下文窗口中。这个缓冲区可以通过摘要(例如,使用较小的LLM)、向量存储+RAG等进行改进。
  4. 评估(Evaluation):我们需要评估文档检索(上下文的精确度和召回率)和生成阶段(忠实度和答案相关性)。可以使用工具Ragas和DeepEval来简化这一过程。

 

四. 高级 RAG

现实生活中的应用可能需要复杂的流程,包括 SQL 或图数据库,以及自动选择相关工具和 API。

  1. 查询构建(Text-to-SQL):存储在传统数据库中的结构化数据需要特定的查询语言,如 SQL、Cypher、元数据等。我们可以直接将用户指令翻译成查询语言,以查询构建方式访问数据。
  2. 代理和工具(Agents and tools):代理通过自动选择最相关的工具来增强 LLM 的功能,以提供答案。这些工具可以简单到使用 Google 或 Wikipedia,也可以复杂到使用 Python 解释器或 Jira。
  3. 后处理(Post-processing)(context ing):喂给 LLM 的输入的最终处理步骤。它通过重排序、RAG-融合 和分类来提高检索文档的相关性和多样性。

【大模型应用开发极简入门】agent之前:Function Calling:将自然语言转换为API调用或数据库查询

 

五. 推理优化(ing)

文本生成是一个成本高昂的过程,需要昂贵的硬件。除了量化,还提出了各种技术来最大化吞吐量和减少推理成本。

  • 快速注意力(Flash Attention):优化注意力机制,将其复杂性从二次方降低到线性,加速训练和推理。
  • 键值缓存(Key-value cache):了解键值缓存及在 多查询注意力(MQA)和分组查询注意力(GQA)中引入的改进。
  • 推测性解码(Speculative decoding):使用小模型产生草稿,然后由更大的模型复审,以加速文本生成。

 

六. 生产化部署 LLM

在多个GPU 集群上部署 LLM 是一项工程壮举。在其他场景中,演示和本地应用可以通过更低的复杂性来实现。

  1. 本地部署:本地 LLM 服务器(如 LM Studio、Ollama、oobabooga、kobold.cpp 等)可以为本地应用提供动力。
  2. 演示部署:像 Gradio 和 Streamlit 这样的框架有助于原型应用的开发和演示分享。你也可以轻松地在线托管它们,例如使用 Hugging Face Spaces。
  3. 服务器部署:在大规模部署 LLM 需要云(参见 SkyPilot)或本地基础设施,并且经常利用优化的文本生成框架,如 TGI、vLLM 等。
  4. 边缘部署:在受限环境中,如 MLC LLM 和 mnn-llm 这样的高性能框架可以在网络浏览器、Android 和 iOS 中部署 LLM。

 

七. 加固LLM

由于LLM的训练和提示方式,它们存在如下弱点:

  1. 提示攻击:与提示工程相关的不同技术,包括提示注入(额外的指令以劫持模型的答案)、数据/提示泄露(检索其原始数据/提示)和越狱(制作提示以绕过安全特性)。
  2. 后门:攻击向量可以直接针对训练数据本身,通过污染训练数据(例如,使用错误信息)或创建后门(在推理期间改变模型行为的秘密触发器)。
  3. 防御措施:保护您的LLM应用程序的最佳方式是对这些漏洞进行测试(例如,使用红队测试和像garak这样的检查)并在生产中观察它们(使用像langfuse这样的框架)。

 

参考:

https://zhuanlan.zhihu.com/p/690025227
https://github.com/mlabonne/llm-course/

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Mysql的聚集索引、散列度、联合索引以及回表和覆盖索引
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • Java中等题-最长回文子串(力扣)
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • 技术周总结 2024.07.29 ~ 08.04周日(MyBatis, 极限编程)
  • Cocos Creator2D游戏开发(9)-飞机大战(7)-爆炸效果
  • 使用ImDisk将Python安装到RAM磁盘提高运行速度
  • web小游戏开发:2048(完)移动操作及动画效果
  • 巧用casaos共享挂载自己的外接硬盘为局域网共享
  • CSP 2020 第三题:表达式
  • 【时时三省】unity test 测试框架 使用 code blocks 移植(核心文件:unity.c, unity_fixture.c)
  • PCB设计
  • OS X El-Capitan 安装 virtualenvwrapper 遇到 Operation not permitted
  • 模型微调(Fine-Tuning)及其在AI中的作用(优缺点)
  • 构建智能手写数字和符号识别系统:深度学习与YOLO模型的结合
  • hexo+github搭建个人博客
  • 【mysql】环境安装、服务启动、密码设置
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Android Studio:GIT提交项目到远程仓库
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Markdown 语法简单说明
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • SSH 免密登录
  • SwizzleMethod 黑魔法
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue-cli在webpack的配置文件探究
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 反思总结然后整装待发
  • 猴子数据域名防封接口降低小说被封的风险
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​如何在iOS手机上查看应用日志
  • ​学习一下,什么是预包装食品?​
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • %@ page import=%的用法
  • (2)STM32单片机上位机
  • (a /b)*c的值
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (二)hibernate配置管理
  • (二)Linux——Linux常用指令
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (转载)利用webkit抓取动态网页和链接
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .net反编译的九款神器
  • ::before和::after 常见的用法
  • @KafkaListener注解详解(一)| 常用参数详解