diva-notes
  • README
  • Ads
    • 定价策略
    • 广告层级
    • 归因模型
    • 买量
    • Chat GPT
    • Google
  • AI
    • 参考资料
    • Chat GPT
    • stable-diffusion-webui安装
  • Algorithm
    • 倍增
    • 并查集
    • 参考
    • 环的判断
    • 凸包
    • 蓄水池抽样
    • 最短路径
    • 最小生成树
    • KMP算法
    • Rabin-Karp算法
    • Tarjan桥算法
  • Architecture
    • Serverless
  • Career
  • CICD
    • 代码质量
    • CICD实践
  • Data Structure
    • 布谷鸟过滤器
    • 布隆过滤器
    • 浮点
    • 红黑树
    • 锁
    • LSM树
  • DB
    • My SQL
      • 隔离级别
      • 架构
      • 索引
      • 锁
      • 页结构
      • 主从同步
      • ACID
      • Log
      • MVCC
      • Questions
    • Postgres
      • 持久化
      • 对比MySQL
      • 隔离级别
      • 索引
      • Greenpulm
      • MVCC
    • 倒排索引
    • 列式存储
    • H Base
    • HDFS
    • MPP数据库选型
    • Questions
  • Distributed System
    • 分布式事务
    • 服务网格
    • BASE理论
    • CAP
    • Etcd
    • Raft协议
    • ZAB协议
  • Go
    • 1.语言基础
      • 1.CPU寄存器
      • 2-1.函数调用
      • 2-2.函数调用栈
      • 2.接口
      • 3.汇编
      • 4.调试
    • 2.编译
      • 1.编译
      • 2.词法与语法分析
      • 3.类型检查
      • 4.中间代码生成
      • 5.机器码生成
    • 3.数据结构
      • 1.数组array
      • 2.切片slice
      • 3.哈希表map
      • 4.字符串
    • 4.常用关键字
      • 1.循环
      • 2.defer
      • 3.panic和recover
      • 4.make和new
    • 5.并发编程
      • 1.上下文Context的实现
      • 2-1.runtime.sema信号量
      • 2-2.sync.Mutex的实现
      • 2-3.sync.WaitGroup
      • 2-4.sync.Once的实现
      • 2-5.sync.Map的实现
      • 2-6.sync.Cond
      • 2-7.sync.Pool的实现
      • 2-8.sync.Semaphore的实现
      • 2-9.sync.ErrGroup
      • 3.定时器Timer的实现
      • 4.Channel的实现
      • 5-1.调度-线程
      • 5-2.调度-MPG
      • 5-3.调度-程序及调度启动
      • 5-4.调度-调度策略
      • 5-5.调度-抢占
      • 6.netpoll实现
      • 7.atomic
    • 6.内存管理
      • 1-1.内存分配基础-TCmalloc
      • 1-2.内存分配
      • 2.垃圾回收
      • 3.栈内存管理
    • 参考
    • 各版本特性
    • 坑
    • Go程序性能优化
    • http.Client
    • net.http路由
    • profile采样的实现
    • Questions
    • time的设计
  • Kafka
    • 高可用
    • 架构
    • 消息队列选型
    • ISR
    • Questions
  • Network
    • ARP
    • DNS
    • DPVS
    • GET和POST
    • HTTP 2
    • HTTP 3
    • HTTPS
    • LVS的转发模式
    • NAT
    • Nginx
    • OSI七层模型
    • Protobuf
    • Questions
    • REST Ful
    • RPC
    • socket缓冲区
    • socket详解
    • TCP滑动窗口
    • TCP连接建立源码
    • TCP连接四元组
    • TCP三次握手
    • TCP数据结构
    • TCP四次挥手
    • TCP拥塞控制
    • TCP重传机制
    • UDP
  • OS
    • 磁盘IO
    • 调度
    • 进程VS线程
    • 零拷贝
    • 内存-虚拟内存
    • 内存分配
    • 用户态VS内核态
    • 中断
    • COW写时复制
    • IO多路复用
    • Questions
  • Redis
    • 安装
    • 参考
    • 高可用-持久化
    • 高可用-主从同步
    • 高可用-Cluster
    • 高可用-Sentinel
    • 缓存一致性
    • 事务
    • 数据结构-SDS
    • 数据结构-Skiplist
    • 数据结构-Ziplist
    • 数据结构
    • 数据类型-Hashtable
    • 数据类型-List
    • 数据类型-Set
    • 数据类型-Zset
    • 数据淘汰机制
    • 通信协议-RESP
    • Questions
    • Redis6.0多线程
    • Redis分布式锁
    • Redis分片
  • System Design
    • 本地缓存
    • 错误处理
    • 大文件处理
    • 点赞收藏关注
    • 短链接生成系统
    • 负载均衡
    • 高并发高可用
    • 规则引擎
    • 集卡活动
    • 秒杀系统
    • 评论系统
    • 熔断
    • 限流
    • 延迟队列
    • Docker
    • ES
    • K 8 S
    • Node.js
    • Questions
  • Work
    • Bash
    • Charles
    • Code Review
    • Ffmpeg
    • Git
    • intellij插件
    • I Term 2
    • Mac
    • mysql命令
    • Nginx
    • postgresql命令
    • Protoc
    • Ssh
    • Systemd
    • Tcp相关命令
    • Vim
Powered by GitBook
On this page
  1. AI

Chat GPT

ChatGPT 其实本质上非常简单,它没有理解你的问题,也没有去真正查阅什么资料来回答你,它的本质就是一个词语接龙。

比如它先输出一个"很"字,然后它根据"很"作为上下文,计算出下一个字是"高"。

然后它又用"很高"作为上下文,计算出下一个字是"兴"。以此类推,直到输出一段完整的话,比如"很高兴见到你"。

所以它实际上并没有理解你的问题,也没有构思出回答你问题的解答思路,它就是一个字一个字地往下猜,直到拼接成一句话或一段话。这也是 Copilot 的实现原理。

它是怎么做到一个字一个字往下猜,却能如此像人说的话呢?一个是模型,一个是数据,数据是用来训练模型的,这个大家都知道。

而训练过程分为三个阶段,第一阶段是投喂给它大量杂乱无章的信息,这叫做无监督学习。第二阶段是给它一些规范的对话范本,这叫做监督学习。第三阶段是让他自己回答问题,然后人们给出每个答案的评分,让它根据评分再次调整模型参数,这个叫做强化学习。

无监督学习虽然可以吸收海量的知识,但回答问题的时候可能会少了点规矩,因此需要监督学习给它提供格式规范的回答范本。但这些都是投喂固定的信息,可能导致少了创造性的答案,因此需要强化学习来让 AI 看起来真正掌握这些知识。ChatGPT 的聪明之处就在于,它把第三阶段开放给公众,公众在对话的同时,实际上也在帮 OpenAI 进行强化学习。

它的回答,只是根据给它投喂的材料训练出的模型计算出来的,根本没有所谓的数据库,也不会去查阅哪些资料。

数据量和模型参数的数量,在一定程度上决定了 AI 的上限。下面是 GPT-1 到 GPT-3 的数据量和模型参数。

GPT-1 5GB 1.17亿 GPT-2 40GB 15亿 GPT-3 45TB 1750亿

最新出来的 GPT-4 的模型参数据说达到了 10 - 100 万亿。

当数据量和模型参数比较少的时候,你还能看出它是根据已有的资料强行训练出的结果,但现在的数据量和模型已经只能用超大模型来描述了,模型的参数已经大到让人无法想象,也无法真正理解模型的计算结果。

所以看似产生了学习新知识的能力,但其实仍然是模型根据已有的信息训练出的结果,在数据量足够大的时候,产生了质变,似乎产生了智能。

ChatGPT中的GPT是什么

1982年,深度学习模型中有一个非常经典的模型叫做RNN,即 Recurrent Neural Networks(循环神经网络)1。RNN 的出现是为了更好地处理序列信息,RNN 隐藏层的值不仅受到当前输入的影响,还取决于上一次隐藏层的值。比如:“我 爱 你”三个字,“爱”不仅仅是“爱”,还包含了“我”的语义信息。但是对于较长的序列或者句子,RNN的机制会出现梯度消失的问题,简单说就是当句子是:“我爱你中国,我爱你春天蓬勃的秧苗,我爱你秋日金黄的硕果,我爱你青松气质,我爱你红梅品格,我爱你家乡的甜蔗,好像乳汁滋润着我的心窝。”最后一个“心窝”已经没有办法包含太多的第一个“我”的语义信息了。

而后,最早在计算机视觉里应用的 Attention机制被拿来用在了自然语言处理。该机制的思想就是把注意力集中在重要的信息上,而忽视不重要的信息(可见Attention图解2)。2017年,Google的研究人员发表了《Attention Is All You Need》3,这篇文章中的 Transformer 模型是 GPT的基石,整个网络结构是由Attention 机制组成4,并且将序列中的任意两个位置之间的距离缩小为一个常量,其次 Transformer 具有好的并行性,符合现有的GPU框架。这里必须要提一下:Transformer设置了一种“位置编码”(position encoding)机制,用来向序列数据添加位置信息,进而让模型学到“顺序”。做法简单巧妙:用正弦、余弦函数生成沿时间轴变化的波形,然后把这种波形叠加到 Transformer 的输入中。

GPT 是基于 Transformer 的模型,全称 Generative Pre-Training Transformer。去掉了Transformer的多头注意力(Multi-head Attention),然后在进行模型输出时,利用特定的下游任务进行微调(分类任务、自然语言推理、语义相似度、问答和常识推理)。具体而言,GPT采用了Hinton等人2006年提出的一种经典的神经网络训练策略:“预训练+微调”的二段式训练策略7。在预训练阶段,首先基于庞大的生语料训练一个生成式语言模型;在微调阶段,使用标注数据继续训练模型。

这样的生成式模型可以给他输入N个单词(也称为Token)的序列,输出是最有可能在输入序列末尾放置的单词的预测。即词语接龙

从GPT模型提出以来,OpenAI就在不断进行模型优化。GPT系列的模型结构秉承了不断堆叠Transformer的思想,通过不断的提升训练语料的规模和质量,提升网络的参数数量来完成GPT系列的迭代更新8。其中,GPT3模型是ChatGPT的基石,该模型拥有1750亿的参数,利用45TB的数据进行训练,其训练费用高达1200多万美元

InstructGPT 是 ChatGPT 最初始的模型了,而后,模型又加入了RLHF策略(Reinforcement Learning from Human Feedback,基于人工反馈的强化学习)

参考

Previous参考资料Nextstable-diffusion-webui安装

Last updated 2 years ago

闪客-人机
shutianma - 一篇不是很枯燥的ChatGPT闲谈
微软的DeepSpeed
langchain - 自动将过往会话带入 ChatGPT API 请求体中
图片