【人工智能】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 Needicon-default.png?t=N7T8http://Attention Is All You Need:https://arxiv.org/pdf/1706.03762.pdf


 完~

未经作者同意禁止转载

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

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

相关文章

设计模式之十二:复合模式

模式通常被一起使用,并被组合在同一个解决方案中。 复合模式在一个解决方案中结合两个或多个模式,以解决一般或重复发生的问题。 首先重新构建鸭子模拟器: package headfirst.designpatterns.combining.ducks;public interface Quackable …

【HarmonyOS】ArkUI状态管理:组件内状态、装饰器、高级用法与最佳实战

文章目录 ArkUI状态管理机制详解1. 概述2. 基本概念2.1 状态变量2.2 数据传递和同步2.3 初始化方法3. 装饰器总览3.1 管理组件拥有的状态3.2 管理应用拥有的状态3.3 其他状态管理功能4. @State装饰器详解4.1 使用规则说明4.2 传递/访问规则说明4.3 观察变化和行为表现5. 使用场…

2.一维数组——输入10个成绩,求平均成绩,将低于平均成绩的分数输出

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为一维数组编程题,点滴成长,一起逆袭。 一、题目描述 输入10个成绩,求平均成绩,将低于平均成绩的分数输出 二、题目分析 averagesum/输入个数; 三、…

计算机网络入门

计算机网络 一、计算机网络基础 定义计算机网络计算机网络的发展历程计算机网络的分类(局域网、广域网、互联网等) 1. 计算机网络的定义: 计算机网络是指通过通信链路将多台计算机连接在一起,以便它们之间能够相互通信和共享资…

【nlp】4.2 nlp中标准数据集(GLUE数据集合中的dev.tsv 、test.tsv 、train.tsv)

nlp中标准数据集 1 GLUE数据集合介绍1.1 数据集合介绍1.2 数据集合路径2 GLUE子数据集的样式及其任务类型2.1 CoLA数据集文件样式2.2 SST-2数据集文件样式2.3 MRPC数据集文件样式2.4 STS-B数据集文件样式2.5 QQP数据集文件样式2.6 (MNLI/SNLI)数据集文件样式2.7 (QNLI/RTE/WNLI…

【网络】传输层 --- 详解TCP协议

目录 一、协议段格式及其策略确认应答(ACK)机制6个标志位超时重传流量控制滑动窗口1、先谈滑动窗口一般情况2、再谈特殊窗口 拥塞控制拥塞窗口 延迟应答&&捎带应答面向字节流粘包问题 二、三次握手和四次挥手三次握手为什么是3次?不是2、4、5、6次呢 四次挥…

[datastore@cyberfear.com].Elbie、[thekeyishere@cock.li].Elbie勒索病毒数据怎么处理|数据解密恢复

引言: 随着科技的进步,勒索病毒变得越来越复杂,而[datastorecyberfear.com].Elbie、[thekeyisherecock.li].Elbie勒索病毒是其中的一种令人头疼的威胁。本文将深入介绍[datastorecyberfear.com].Elbie、[thekeyisherecock.li].Elbie勒索病毒…

邻接表存储实现有向网构建

7-2 邻接表存储实现有向网构建 编程实现:以邻接表的存储方式,创建一个有向网,顶点为字符型。 输入格式: 第一行输入顶点个数和边的个数,中间用空格分开。下一行开始依次输入顶点,空格或回车分开。接着依次输入边依附…

NoSQL基础知识小结

NoSQL 基础知识 什么是 NoSQL? NoSQL(Not Only SQL 的缩写)泛指非关系型的数据库,主要针对的是键值、文档以及图形类型数据存储。 NoSQL 数据库天生支持分布式,数据冗余和数据分片等特性,旨在提供可扩展的高可用高…

【代码】基于VMD(变分模态分解)-SSA(麻雀搜索算法优化)-LSTM的光伏功率预测模型(完美复现)matlab代码

程序名称:基于VMD(变分模态分解)-SSA(麻雀搜索算法优化)-LSTM的光伏功率预测模型 实现平台:matlab 代码简介:提出了变分模态分解(VMD)和麻雀搜索算法(SSA)与长短期记忆神经网络 (LSTM)相耦合,…

C语言数组

数组 一维数组 定义一维数组 定义一维数组的一般形式: 类型符 数组名 [常量表达式];其中: 数组名的命名规则和变量名相同,遵循标识符命名规则。常量表达式的值表示数组中元素的个数,也称为数组的长度。常量表达式可以包含常量…

Linux云服务器打包部署前端Vue项目

1. 打包 在项目包的终端使用命令打包成dist文件。 npm run build2. Linux云服务器上创建文件夹 mkdir /home/www/dist注:dist文件夹不用创建,将打包好的dist.zip放进去,然后解压就行。 3. 安装nginx yum install -y nginx4. 修改配置文件…

Spark-06:Spark 共享变量

目录 1.广播变量(broadcast variables) 2.累加器(accumulators) 在分布式计算中,当在集群的多个节点上并行运行函数时,默认情况下,每个任务都会获得函数中使用到的变量的一个副本。如果变量很…

Android 相机库CameraView源码解析 (一) : 预览

1. 前言 这段时间,在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位,在项目前期,的确为我们节省了不少时间。 但随着项目持续深入,对于CameraView的使用进入深水区,逐…

【LeetCode】挑战100天 Day17(热题+面试经典150题)

【LeetCode】挑战100天 Day17(热题面试经典150题) 一、LeetCode介绍二、LeetCode 热题 HOT 100-192.1 题目2.2 题解 三、面试经典 150 题-193.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站,提供各种算法和数据结构的题目&…

java stream流常用方法

filter(Predicate predicate)&#xff1a;根据指定条件过滤元素。 List<Integer> numbers Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); List<Integer> evenNumbers numbers.stream().filter(n -> n % 2 0).collect(Collectors.toList()); System.out.pr…

VS2010 VS2015环境编译boost库

VS2010下安装boost库 去www.boost.org下载最新的boost&#xff0c;我下载了boost_1_46_1.7z&#xff08;我放在D:/cpp目录下&#xff09;解压到当前文件夹打开VS2010->VS TOOLS->VS命令提示CD D:/cpp/boost_1_46_1输入bootstrap&#xff0c;便生成bjam.exe文件输入bjam …

[建议收藏] 一个网站集合所有最新最全的AI工具

今天给大家推荐一个宝藏的AI工具合集网站&#xff0c;有了这个网站&#xff0c;你们再也不用去其他地方找AI工具了。 名称&#xff1a;AI-BOT工具集 这个网站精选1000AI工具&#xff0c;并持续每天更新添加&#xff0c;包括AI写作、AI绘画、AI音视频处理、AI平面设计、AI自动编…

Atcoder Beginner Contest 330——A~F题

A - Counting Passes Description Problem Statement N N N people labeled 1 , 2 , … , N 1,2,\dots,N 1,2,…,N took an exam, and person i i i scored A i A_i Ai​ points. Only those who scored at least L L L points pass this exam. Determine how many peopl…

SpringBoot:邮件发送

官网文档&#xff1a;39. Sending Email (spring.io)。 Sending Email Spring框架提供了JavaMailSender实例&#xff0c;用于发送邮件。 如果SpringBoot项目中包含了相关的启动器&#xff0c;那么就会自动装配一个Bean实例到项目中。 在SpringBoot项目中引入如下Email启动器&a…