【人工智能】Chatgpt的训练原理
前言
前不久,在学习C语言的我写了一段三子棋的代码,但是与我对抗的电脑是没有任何思考的,你看了这段代码就理解为什么了:
void computerMove(char Board[ROW][COL], int row, int col)
{while (1){unsigned int i = rand() % ROW, j = rand() % COL;if (Board[i][j] == ' '){Board[i][j] = '#';break;}}
}
电脑的走的棋子是随机产生的,于是我想赋予电脑一定的智能,给它写一些思考函数,但是,一种一种的if嵌套if的逻辑代码写下来不仅极易出错,而且后续想要Debug也十分困难。
我们知道人工智能是可以下棋的,但是人工智能自主学习的源码是怎么实现的呢?
于是,我想起了Chatgpt,虽然Chatgpt并非是严格通过代码来实现的,但是它的原理确实很有趣。
定位 “信息”
人工智能的运作离不开信息;
信息这个词语,我们耳熟能详,但是信息到底在时间和空间上有什么地位呢?换句话说:它的位置是什么?
如图:

在物质上,从地球出发,地球是最大的生态系统,生态系统的三个功能是:
能量流动,物质循环,信息传递;
在生态系统中,三大功能密不可分,相互作用和相互依存。
这幅图我们暂且搁置,作为铺垫。
纵观人类的历史的发展历程, 我们经历了这几个历史时期:

每一个时期都是一个阶段,每一个阶段都是一次跨越,是量变以后的质变。
每一个时期由于相对于上一个时期,新时期的技术往往更加有优势,新时期的技术往往会淘汰旧时期的技术,所以人类历史是向前发展的。
小结
在生态系统中,信息是动态的,它不断流动,传递,从而发挥作用;
直到人类通信技术及计算机技术的飞速发展和广泛应用。标志着人类进入了信息化时代,直到这时,我们才真正注意起信息的作用。
从信息的定位来看:
1.信息的地位是很重要的
2.计算机的出现使得几乎所有信息都可以用数据表现,信息可被计算机表现,意味着可被计算,计算机可 表示信息,搜索信息,甚至通过信息,预测将要出现的新的信息。
预测信息
预测信息可以做什么吗,可以做天气预报,可以预测股价,甚至可以实现人工智能!
什么是人工智能
概念
人工智能,是指通过计算机技术模拟人类智能的理论、方法、技术和应用系统。AI能够让机器像人类一样思考、理解、判断、学习、推理、规划、决策等,从而能够完成各种智能任务。
发明
1956年夏季,以麦卡赛、明斯基、罗切斯特和申农等为首的一批有远见卓识的年轻科学家在一起聚会,共同研究和探讨用机器模拟智能的一系列有关问题,并首次提出了“人工智能”这一术语,它标志着“人工智能”这门新兴学科的正式诞生。
为什么人工智能可行
我们之所以称AI为AI,是因为我们想要了解智能的实质,想要通过计算机模拟实现智慧人的思考来认识什么是智能。
实现人工智能的两种方法:
工程学方法:
即不考虑所用方法是否与人等智慧体所用的方法相同,只要能达到相应的效果就行。
模拟法:
即不仅要看效果,还要求实现方法与人等智慧体所用方法一致。
怎么理解呢?
e.g.1
我们解一个一元二次方程,用到求根公式,但是计算机不知道有求根公式这个东西,它解这
个方程,用的是穷举法,将自变量的值一个一个代入尝试,最后输出最接近真实值的根。
当然我们也可编写一个程序,与机器交流,告诉它有个求根公式,并且它可以使用。
但是,这并不代表按照我们设定好的程序运行的机器有了智能;可以说这只是算法的优化,
但是机器距离真正的智能还有很大的差距。
e.g.2
回顾刚开始的例子:
如果我为电脑编写一套程序,告诉它,if(判断){怎么走}(当然这样对编写程序的我来说十分痛苦),这是也许实现人工智能的一种方法,但是电脑并没有真正的 ”思考“,因为他只是按照代码执行而已。
这样(制定一套规则来指导计算机)是有很大缺陷的:
1.人工编程繁琐,工作量大
2.易出错
3.一旦出错,需要 调试 ,修改源码 ,编译,运行 ,最终人工提供新的版本
如果为电脑编写一种方法,让他从下三子棋的对局中汲取教训,不断学习,最终达到依靠自己的数据库来达到自我决策的目的,这可能也是实现人工智能的一种方法。
也就是说,我只要实现一个智能系统,虽然刚开始它什么也不懂,就像婴儿一样,但是他可以学习,它能够渐渐适应环境,以应对各种复杂情况。
前期发展
首先,引入一种假设:
马尔可夫假设:一个词语出现的概率,只和前面的词语有关,而与更早的词语或者往后的词语无关。
假设与前(n-1)个词语有关(也就是N-gram模型),但是n需要有一个范围,需要满足,该出现高频的词语,在样本中出现高的频率;该出现低频的词语,在样本中出现低的频率。
但是n的值是不易确定的:
如果n值过大,那么需要记录的概率分布将呈指数级增长,于是n不能无限大,即不能有很长的上下文;同时,n过大,那么这个词语就很可能依靠很久以前的上下文,那么这个模型就显得很低效了。
如果n值太小,那么结果的准确性很难保证。
这也就是N-gram模型,后来的RNN(循环神经网络)虽然解决了N-gram的部分问题,但是RNN仍有自己的问题——梯度削减(因为有激活函数的存在,在反向传播的时候,出现了原来的占小部分的被忽略的情况,因为较小的部分对值的变化不敏感)
Transformer 模型
直到后来,一个新的模型被Goggle提出《Attention Is All You Need》——GPT模型
(论文链接放在文章末尾)

词语向量化
为什么要将词语向量化?
计算机的底层是二进制,现实世界的信息若交给计算机处理,那么都会被转化为数字。
一个富有语义的词语在计算机内部仅仅是一串0,1组成的数字串,计算机怎么理解它们呢?
我们是一个智慧体,可以将判断,处理信息;早期的计算机只是一个储物柜,他来帮我们储存信
息,就像我们在冰箱存储食物一样。冰箱不认得食物的种类,它的任务仅仅是储存,重要的是我们
认识食物的种类就行了。如何让冰箱认得食物的种类呢?
词语向量化就是解决这一问题的方法。
词语向量化可以使得词汇之间的语义关系,在向量空间中得以体现,而向量是可以计算的这就为计算机理解词汇奠定基础。
我们想要达到什么效果呢?
想象一下:
e.g.1
king向量减去man向量加上woman向量正好是queen向量;
e.g.2
如图,king和queen象征着王权,man和woman象征着性别,这样一来,我们大致可以认为王权在一个轴分量较多,性别在另一个轴分量较多;

上述两个例子,都是让词汇向量化的例子。
在一个合适的向量空间中,词语之间的空间关系反映了 它们现实之间的实际关系。
如何达到这样的效果呢?
由于向量是可以计算的,也就是正确结果与结果之间的差距可以计算,这两者的差距可以用函数关系表示,这个函数就是损失函数,而一旦转化为函数,那么训练的过程就是可计算的数学方法了,也就是损失函数要收敛。
信息压缩与特征提取
我们人类,可以通过大脑的注意力机制,忘记一些无关紧要的信息,保留一些重要的信息,我们可以通过对问题中的主要信息的处理来回答问题。
但是计算机并没有大脑的这一功能,于是,我们想要找到提取语言特征的方法。
但是在一般的模型如N-gram和RNN模型都有一定的局限性,比如:
小明看了博主的文章,他很喜欢,伸手就给了博主一个______:
A:三连 B:大嘴巴子
显然,我们作为智慧体,有大脑的重要信息提取的加持,很容易得到推断结果——三连;
(在这一过程中,我们的大脑通过提取 ”文章“ ”喜欢“ 等词语,推测结果,但是计算机没有这一功能)
但是如果仅靠N-gram和RNN模型,模型首要注意的是距离推测内容最近的词语,这样计算机就很有可能给博主的 就不是三连了。 (0_=_0)..
Attention Is All You Need
简单来说,让句子中的词语分别和句子中的所有词做向量点乘,对得出的结果再次进行训练,最终训练得到的结果会让电脑根据一个词语与句子中其他词语的点乘结果来推测这个词语后面出现其他词语的可能性,根据可能性来输出下一个词语。
在合适的特征提取训练下,计算机学会了如何把话说得漂亮;ChatCPT本身就是一个语言模型,它被发明出来的目的并不是解决实际问题,而是怎样把话说得漂亮,之所以我们认为ChatGPT说得很有道理,是它阅读了大量语料库,经过大量训练的结果。
ChatGPT根据上文的内容去推测下一个词是什么,然后把这个词加进去,继续推测。
ChatGPT能取代人类吗?
ChatGPT只是一个语言模型,它能够为我们解决问题提供一定的参考,但是并不能真正的解决问题。它确实可以取代一些人,令人们失业,但是如果这些人能够利用好GPT的优势,让它成为自己的力量,而不是排斥它,贬斥它,那么,GPT的出现并不应引起我们的焦虑,而是应引起我们的思考。
Attention Is All You Need
http://Attention Is All You Need:https://arxiv.org/pdf/1706.03762.pdf
完~
未经作者同意禁止转载
相关文章:
【人工智能】Chatgpt的训练原理
前言 前不久,在学习C语言的我写了一段三子棋的代码,但是与我对抗的电脑是没有任何思考的,你看了这段代码就理解为什么了: void computerMove(char Board[ROW][COL], int row, int col) {while (1){unsigned int i rand() % ROW, …...
一文讲明SpringMVC 【爆肝整理一万五千字】
我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) 🎃 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 ✈️已经旅游的地点 | 新疆-乌鲁木齐、新疆-吐鲁番、广东-广州…...
【Python爬虫实战项目】ip代理池项目原理及代码解析
视频讲解链接:https://www.bilibili.com/video/BV1e8411r7xX/ 代码链接:https://github.com/w-x-x-w/Spider-Project 大家好,这一季我们来介绍一个Python爬虫实战项目-ip代理池项目,这一集我们会首先介绍ip代理池的工作原理流程&a…...
Ardupilot开源飞控之VTOL之旅:配件规格
Ardupilot开源飞控之VTOL之旅:配件规格 1. 源由2. 飞控板 Aocoda-RC H743Dual3. PDB分电板 Aocoda-RC PDB30604. GPS BN8805. 摄像头 RunCam 1200TVL6. 模拟图传 JHEMCU RuiBet Tran-3016W 5.8GHZ 1.6W7. 打印件7.1 飞控/GPS座子7.2 VTX/天线座子7.3 接收机天线座 8…...
Binlog vs. Redo Log:数据库日志的较劲【基础】
🎏:你只管努力,剩下的交给时间 🏠 :小破站 Binlog vs. Redo Log:数据库日志的较劲 前言第一:Binlog与Redo Log的基础概念Binlog(二进制日志)的基础概念Redo Logÿ…...
代理模式-C语言实现
UML图: 代码实现: #include <stdio.h>// 抽象主题接口 typedef struct {void (*request)(void*); } Subject;// 具体主题类 typedef struct {void (*request)(void*); } RealSubject;void RealSubject_request(void* obj) {printf("RealSubj…...
解密 sqli靶场第一关:一步一步学习 SQL 注入技术
目录 一、判断是否存在注入点 二、构造类似?id1 --的语句 三、判断数据表中的列数 四、使用union联合查询 五、使用group_concat()函数 六、爆出数据库中的表名 七、爆出users表中的列名 八、爆出users表中的数据 🌈嗨!我是Filotimo__🌈。很…...
Flask 使用Jinja2模板引擎
Jinja2,由Flask框架的创作者开发,是一款功能丰富的模板引擎,以其完整的Unicode支持、灵活性、高效性和安全性而备受推崇。最初受Django模板引擎启发,Jinja2为Flask提供了强大的模板支持,后来也成为其他项目的首选。在本…...
C/C++内存管理,malloc,realloc,calloc,new,delete详解!!!
1.初步了解内存中各个区间存储的数据特征 1.栈区:存储一些局部变量、函数参数、返回值等,跟函数栈振有关,出了作用域,生命周期结束。 2.堆区:用于动态开辟空间,如果不主动销毁空间,则程序运行结…...
高级JVM
一、Java内存模型 1. 我们开发人员编写的Java代码是怎么让电脑认识的 首先先了解电脑是二进制的系统,他只认识 01010101比如我们经常要编写 HelloWord.java 电脑是怎么认识运行的HelloWord.java是我们程序员编写的,我们人可以认识,但是电脑不…...
论文阅读——MCAN(cvpr2019)
补充一下MCAN-VQA: 对图片的处理:首先输入图片到Faster R-CNN,会先设定一个判断是否检测到物体的阈值,这样动态的生成m∈[10,100]个目标,然后从检测到的对应的区域通过平均池化提取特征。第i个物体特征表示为ÿ…...
mac电脑文件比较工具 UltraCompare 中文for mac
UltraCompare是一款功能强大的文件和文件夹比较工具,用于比较和合并文本、二进制和文件夹。它提供了丰富的功能和直观的界面,使用户能够轻松地比较和同步文件内容,查找差异并进行合并操作。 以下是UltraCompare软件的一些主要特点和功能&…...
XML Schema 的extension 元素
XML Schema 的extension 元素对complexContent、simpleContent元素进行扩展。 例如,下面通过增加了两个属性,对simpleContent进行了扩展: <xs:element name"condition" maxOccurs"unbounded" minOccurs"0"…...
每日一题2023.11.26——打印沙漏【PTA】
题目要求: 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ************ *****所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;…...
【C++】类和对象——拷贝构造和赋值运算符重载
上一篇我们讲了构造函数,就是对象实例化时会自动调用,那么,我们这里的拷贝构造在形式上是构造函数的一个重载,拷贝构造其实也是一种构造函数,那么我们就可以引出这里的规则 1.拷贝构造函数的函数名必须与类名相同。 2.…...
基于acme免费申请泛域名证书
参考文档:https://github.com/acmesh-official/acme.sh 文章目录 step1: 获取阿里云的ak、skstep2: 安装acmestep3: 安装通配符证书step4: 查看证书step5: 证书的使用step6: 删除证书 step1: 获取阿里云的ak、sk export Ali_Key"LTAI5tG8888888CDoEjLzkE"…...
系列十九、Spring实例化bean的方式
一、概述 所谓实例化bean,大白话讲就是Spring如何把这一个个的普通的Java对象创建为Spring bean的。 二、方式 Spring中实例化bean常用的有以下四种,即: ① 构造器方式; ② 静态工厂方式; ③ 实例工厂方式;…...
WordPress无插件实现css、js加速 实现动静态分离
“Wordpress网站现在普遍较慢”,其实是没有做好优化罢了,像我的网站生成页面的时间才0.06s,而且我这网站还有提速的机会呢,如css、js使用CDN加速,实现动静态分离,我安装过,Memcache和PHP加速脚本就已经让我…...
2017年五一杯数学建模B题自媒体时代的消息传播问题解题全过程文档及程序
2017年五一杯数学建模 B题 自媒体时代的消息传播问题 原题再现 电视剧《人民的名义》中人物侯亮平说:“现在是自媒体时代,任何突发性事件几分钟就传播到全世界。”相对于传统媒体,以互联网技术为基础的自媒体以其信息传播的即时性、交往方式…...
虹科分享 | AR世界揭秘:从二维码的起源到数据识别与位姿技术的奇妙融合!
引言:探索AR的神奇世界,我们将从二维码的诞生谈起。在这个科技的海洋中,二维码是如何帮助AR实现数据获取与位姿识别的呢?让我们一起揭开这层神秘的面纱! 一、二维码的由来 二维码是将数据存储在图形中的技术ÿ…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
