【Datawhale AI 夏令营】大模型应用开发——笔记1

一、什么是大模型

大模型其实就是一种非常强大的计算工具,用来解决复杂问题,做出智能决策。为了让小白也能理解,我们可以把大模型比作一个超级聪明的大脑。 截止到目前,语言模型已经演化了四代,可以简单理解为:

第一代大模型:统计语言模型(Statistical Language Model, SLM)

想象一下,你和朋友在玩一个猜单词的游戏。你只能根据前面的几个单词,猜下一个单词是什么。比如,“我吃了一个___”,你可能会猜“苹果”或“香蕉”。统计语言模型就是用类似的方法来预测下一个单词。它根据之前几个单词的组合(n-gram)来猜测下一个单词,使用马尔可夫假设,即每个单词只依赖于前面固定数量的单词。。

第二代大模型:神经语言模型(Neural Language Model, NLM)

这时候,游戏升级了。你的朋友变得更聪明了,不仅会根据前几个单词猜下一个单词,还会理解整个句子的意思,比如“我在森林里看到了一只___”,他能猜出“熊”而不是“香蕉”。神经语言模型就是这样,它用神经网络来理解句子的上下文。RNN等技术可以处理序列数据,并且学习到每个单词在句子中的意思,这就是所谓的词嵌入(word2vec是其中一种方法)。

第三代大模型:预训练语言模型(Pre-trained Language Model, PLM)

接着,游戏又升级了。你的朋友现在成了一个读了很多书的专家。他不仅能猜出下一个单词,还能根据丰富的知识理解句子的深层含义。预训练语言模型就是这样,它们先在大量的无标注数据上进行“预习”(预训练),学会了丰富的语言知识。然后,在特定任务上进行“复习”(微调),比如情感分析或翻译。像ELMo、BERT和GPT-1/2就是这种模型。

第四代大模型:大语言模型(Large Language Model, LLM)

现在,你的朋友不仅是一个专家,还是一个超级聪明的助手。他不仅能理解和回答各种问题,还能创造性地解决复杂问题。大语言模型就是这样,通过增加模型参数和训练数据,它们变得非常强大,不仅能完成复杂任务,还能展现出一些以前模型无法做到的能力,比如推理和规划。像GPT-3、ChatGPT、Claude、Llama就是这种模型。

二、大模型是怎么构建的

通常来说,大模型的构建过程可以分为预训练(Pretraining)有监督微调(Supervised Fine-tuning, SFT)基于人类反馈的强化学习对齐(Reinforcement Learning from Human Feedback, RLHF) 三个阶段。

1、预训练(Pretraining)

想象你要成为一个百科全书般的专家。首先,你需要读大量的书、看很多视频,去获取各种各样的知识。这些知识可能不完全和你未来的工作直接相关,但它们为你打下了一个坚实的基础。

预训练就是这个过程。在预训练阶段,模型会读取大量的文本数据(就像你在广泛阅读),学习语言的基本结构、词汇和常见的表达方式。这让模型在理解语言上变得很有基础,但它还没有专门为某个特定任务做优化。

通俗的来讲,如果那你想学会做饭,首先,你要学会一些基本的做饭技巧,比如切菜、炒菜、煮饭。这时候,你可能还不知道怎么做一道具体的菜,但你掌握了做饭的基础技能。

2、有监督微调(Supervised Fine-Tuning, SFT)

在读完大量书之后,你决定专门学习一个特定的技能,比如写作或编程。你找了一些老师,按照他们的指导,专门练习这些技能,变得更加擅长。

有监督微调就是这个阶段。在这一步,模型已经具备了基础的语言能力,但现在我们给它一些特定的任务(比如翻译、问答),并且告诉它如何完成这些任务(这就是“有监督”的部分)。模型通过学习这些例子,变得在特定任务上更加优秀。

通俗的来讲,接下来,你想学做一道具体的菜,比如炒牛肉。你找到一个食谱,按照上面的步骤一步一步练习,这样你就能专门把这道菜做好。

3、基于人类反馈的强化学习对齐(Reinforcement Learning from Human Feedback, RLHF)

最后,你开始在实际生活中应用你的技能,但你有一个导师会根据你的表现给你反馈。比如,当你写了一篇文章后,导师会告诉你哪里写得好,哪里需要改进。你根据这些反馈不断调整自己的方式,逐渐变得更加出色。

基于人类反馈的强化学习对齐就是这样的过程。在这一阶段,模型已经能够完成任务了,但我们希望它的表现更符合人类的期望。于是,我们让人类来评估模型的输出,告诉它哪些回答好,哪些需要改进。模型根据这些反馈不断调整自己,最终变得更加贴近人类的需求。

通俗的来说,最后,你把做好的菜给别人尝,他们告诉你哪里好吃,哪里不够好。你根据他们的反馈,调整做菜的方式,比如放少点盐或者多炒一会儿,直到这道菜变得非常好吃。

三、开源大模型和闭源大模型

构建大模型不仅需要海量的数据,更依赖于强大的计算能力,以确保模型能够快速迭代和优化,从而达到预期的性能水平。鉴于此,全球范围内能够独立承担起如此庞大计算成本的机构屈指可数。大模型可以分为开源大模型闭源大模型

1、开源大模型

开源大模型就像一本你可以随意拿到的公开食谱。这本食谱不仅让你知道每道菜的做法,还允许你自己尝试、修改,甚至加入自己的创意,然后再分享给别人。 开源的特点:

  1. 公开透明:所有人都可以看到模型的代码和设计,就像你可以看到所有的食谱步骤。
  2. 自由使用和修改:你可以根据自己的需求修改模型,就像你可以根据自己的口味调整食谱。
  3. 社区合作:很多人可以一起改进这个模型,分享他们的修改成果,类似于很多厨师一起改进一道菜的做法。

2、闭源大模型

闭源大模型就像一家著名餐厅的秘密食谱。这个食谱只有餐厅的厨师知道,别人看不到也用不了。你只能吃这家餐厅做好的菜,但你不能知道他们是怎么做的。

闭源的特点:

  1. 不公开:模型的代码和设计对外是保密的,就像你不知道餐厅的秘密食谱。
  2. 限制使用:你不能自己修改或使用模型,只能按照餐厅提供的方式来品尝菜肴,也就是按照模型提供的接口使用它的功能。
  3. 公司控制:模型的所有权和控制权都掌握在公司手里,只有他们能决定怎么改进或分发这个模型。

四、大模型时代挖掘模型能力的开发范式

进入大模型时代,人工智能领域的边界正以前所未有的速度扩展,而如何充分挖掘大模型的内在潜能,成为了应用开发者面前的一道关键课题。

在这一背景下,不同的应用场景催生了多样化的应用开发策略,这些策略不仅展现了大模型应用开发的丰富可能性,也预示着未来AI技术在各行业落地的广阔前景。

1、Prompt工程

想象你在和一个超级聪明的朋友聊天,他能回答你几乎所有的问题,但你要知道怎么问才能得到最好的答案。Prompt工程就是研究如何问出正确的问题,让模型给出更好的回答

示例:生成文本的不同要求

假设你在使用一个大模型生成一段关于猫的文字,结果可能会根据你的“Prompt”(问题)不同而大不相同。

  • Prompt 1: “写一段关于猫的简短介绍。”

    • 输出: “猫是一种小型、柔软的哺乳动物,通常被人类作为宠物饲养。”
  • Prompt 2: “用有趣的语言写一段关于猫的故事。”

    • 输出: “在一个阳光明媚的下午,小猫咪米娅决定挑战它的终极任务——捉住那只在院子里飞来飞去的蝴蝶!”

通过改变你的提问方式(Prompt),你可以控制模型生成的内容风格和形式

2、Embedding辅助

想象你有一位懂很多语言的朋友,但有些词他不太明白。这时,你用一本特别的词典,把那些词解释清楚给他看,这样他就能更好地理解你的意思。Embedding辅助就像这个词典,它帮助模型理解和处理数据,比如把单词转化成模型能理解的数字形式。

示例:文本分类任务

假设你在做一个文本分类任务,比如判断一段评论是“积极的”还是“消极的”。你可以用Embedding来帮助模型理解评论中的词语关系。

  • 文本 1: “这家餐厅的服务太棒了,食物也非常美味。”

    • Embedding表示:模型将这段话转化为一组数字,表示“服务”和“美味”这些词语在上下文中的意义,从而判断这是一个积极的评论。
  • 文本 2: “食物太咸了,服务员也很慢。”

    • Embedding表示:模型将这段话转化为另一组数字,表示“咸”和“慢”这些词语的消极意义,从而判断这是一个消极的评论。

Embedding辅助模型更好地理解文本的含义和情感。

3、参数高效微调

想象你在做菜,菜已经快做好了,但你需要加一点盐或者调料让它更好吃。参数高效微调就像是在原本的模型上做一点小调整,让它在某些特定任务上表现得更好。

示例:在小数据集上优化模型

假设你已经有一个大模型,它在很多任务上表现都不错,但你现在有一个特定的任务,比如在一个新的语言上进行情感分析。你可以通过参数高效微调让模型在这个新任务上表现更好。

  • 现有模型: 已经能很好地处理英文情感分析。
  • 新任务: 你希望模型能够处理西班牙文的情感分析,但你只有一个很小的西班牙文数据集。

微调过程:

  • 你可以使用这个小数据集,微调模型的一部分参数(而不是全部),让模型适应西班牙文的情感分析。
  • 结果: 经过微调,模型现在在西班牙文情感分析上表现得很好,尽管你只有很少的训练数据。

通过参数高效微调,你可以在特定任务上提高模型的表现,而不需要从头开始训练一个新的大模型。

五、客户端和服务端

通常,一个完整的大模型应用包含一个客户端和一个服务端。

客户端接收到用户请求后,将请求输入到服务端,服务端经过计算得到输出后,返回给客户端回复用户的请求。

  1. 客户端

在大模型应用中,客户端需要接受用户请求,并且能将回复返回给用户。 目前,客户端通常使用 GradioStreamlit 进行开发。

  • Gradio输入输出组件、控制组件、布局组件几个基础模块,其中

  • 输入输出组件用于展示内容和获取内容,如:Textbox文本、Image图像

  • 布局组件用于更好地规划组件的布局,如:Column(把组件放成一列)、Row(把组件放成一行)

    • 推荐使用gradio.Blocks()做更多丰富交互的界面,gradio.Interface()只支持单个函数交互
  • 控制组件用于直接调用函数,无法作为输入输出使用,如:Button(按钮)、ClearButton(清除按钮)

Gradio的设计哲学是将输入和输出组件与布局组件分开。输入组件(如TextboxSlider等)用于接收用户输入,输出组件(如LabelImage等)用于显示函数的输出结果。而布局组件(如TabsColumnsRow等)则用于组织和排列这些输入和输出组件,以创建结构化的用户界面。

  • Streamlit 中没有gradio的输入和输出概念,也没有布局组件的概念。

  • Streamlit每个组件都是独立的,需要用什么直接查看官方文档即可,大致有如下几种组件:

      • 页面元素

        • 文本
        • 数据表格
        • 图标绘制(柱状图,散点图等等)
        • 输入(文本框,按钮,下拉框,滑块,复选框,文件上传,等等)
        • 多媒体(图片,音频,视频)
        • 布局和容器
        • Chat(聊天对话控件)
        • 状态(进度条,加载中,等等元素)
        • 第三方组件(提供了更加丰富的组件)
      • 应用逻辑

        • 导航和页面(可以切换页面)
        • 执行流程
        • 缓存和状态
        • 连接和加密(可连接数据库,也可以对内容进行加密处理)
        • 自定义组件
        • 公共组件(用户信息存储,帮助,以及输出html)
        • Config(使用配置文件,来定义一些内容)
      • 工具

        • 应用测试
        • 命令行
  1. 服务端

在大模型应用中,服务端需要与大模型进行交互,大模型接受到用户请求后,经过复杂的计算,得到模型输出。

目前,服务端主要有以下两种方式:

  • 直接调用大模型API:将请求直接发送给相应的服务商,如openai,讯飞星火等,等待API返回大模型回复

    • ✔️ 优点:
      1. 便捷性: 不需要关心模型的维护和更新,服务商通常会负责这些工作。
      2. 资源效率: 避免了本地硬件投资和维护成本,按需付费,灵活调整成本支出。
      3. 稳定性与安全性: 专业团队管理,可能提供更好的系统稳定性和数据安全性措施。
      4. 扩展性: API服务易于集成到现有的应用和服务中,支持高并发请求。
    • ✖️ 缺点:
      1. 网络延迟: 需要稳定的网络连接,可能会受到网络延迟的影响。
      2. 数据隐私: 数据需要传输到服务商的服务器,可能涉及数据安全和隐私问题。
      3. 成本控制: 高频次或大量数据的调用可能会导致较高的费用。
      4. 依赖性: 受制于服务商的政策变化,如价格调整、服务条款变更等。
  • 大模型本地部署 :在本地GPU或者CPU上,下载模型文件,并基于推理框架进行部署大模型

    • ✔️ 优点:
      1. 数据主权: 数据完全在本地处理,对于敏感数据处理更为安全。
      2. 性能可控: 可以根据需求优化配置,减少网络延迟,提高响应速度。
      3. 成本固定: 初始投入后,长期运行成本相对固定,避免了按使用量付费的不确定性。
      4. 定制化: 更容易针对特定需求进行模型微调或扩展。
    • ✖️ 缺点:
      1. 硬件投资: 需要强大的计算资源,如高性能GPU,初期投资成本较高。

      2. 运维复杂: 需要自行管理模型的更新、维护和故障排查。

      3. 技术门槛: 对于非专业团队而言,模型的部署和优化可能较为复杂。

      4. 资源利用率: 在低负载情况下,本地硬件资源可能无法充分利用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值