写给小白的ChatGPT和AI原理
前言
随着ChatGPT等生成式AI的大火,很多开发者都对AI感兴趣。笔者是一名应用层的开发工程师,想必很多类似的开发者都对AI这块不太了解,故而从自己的理解,写一篇給小白的AI入门文章,希望可以帮助到大家。
这是GPT对本文的评价,所以请放心食用:
非常好的解析,非常透彻地阐述了人工智能领域的基本概念和ChatGPT的原理。在这个过程中,你提到了大语言模型和神经网络的概念,并且解释了它们在ChatGPT中的应用。此外,你还提到了其他重要的AI领域,如自然语言处理、计算机视觉、强化学习和自主驾驶等,使得读者可以更加全面地了解人工智能领域的整体情况。
基本概念
先需要介绍下人工智能行业需要用到的基本概念:
-
神经网络(Neural Networks):一种模仿人类神经系统的机器学习算法,用于识别图像、语音、自然语言等任务。
-
自然语言处理(Natural Language Processing,NLP):计算机处理人类语言的技术,包括语音识别、文本处理、机器翻译等。
-
机器学习(Machine Learning):一种人工智能技术,让计算机根据数据集进行学习,以便在新数据上进行预测或决策。
-
深度学习(Deep Learning):一种机器学习的分支,使用多层神经网络进行学习和推断,用于图像识别、语音识别、自然语言处理等领域。
-
强化学习(Reinforcement Learning):一种机器学习技术,让计算机通过与环境互动来学习行为和决策,例如围棋和 Atari 游戏。
-
大模型(LLM):大模型是指具有大量参数和复杂结构的机器学习模型,通常需要大量的计算资源和数据来训练和优化。这些模型可以用于各种任务,如自然语言处理、计算机视觉和语音识别等。一个例子是ChatGPT,它有1750亿个参数。
-
计算机视觉(Computer Vision):一种人工智能技术,让计算机理解和解释图像和视频内容,例如人脸识别、目标跟踪、场景分割等。
-
数据挖掘(Data Mining):一种从大型数据集中自动发现模式和知识的技术,用于商业、医疗和科学等领域。
-
人机交互(Human-Computer Interaction,HCI):研究人类和计算机之间的交互方式,设计更智能、更人性化的用户界面和设计。
-
自主驾驶(Autonomous Driving):基于人工智能技术和传感器的自动驾驶汽车,能够在没有人类干预的情况下行驶和导航。
-
语音识别(Speech Recognition):一种机器学习技术,让计算机能够识别和解释人类语音,从而实现语音交互和控制。
从chatGPT剖析
我们从chatGPT的应用层开始反过来剖析,可以会更加容易读懂。
ChatGPT的原理
它所做的基本上只是反复询问 “鉴于到目前为止的文本,下一个词应该是什么?” —— 而且每次都增加一个词。每一步,它都会得到一个带有概率的单词列表,然后通过不同的随机性进行组装。如果是更加专业的说法,则是使用长短时记忆网络(LSTM)或变换器(Transformer)等深度学习模型,对上下文进行建模,并预测下一个单词或单词序列的概率分布。
概率如何来
我们想象一个场景,以“猫是”为开头,来拼接一个句子。这里展示一个n-gram(注意ChatGPT不是使用该算法)算法的JavaScript例子:
// 定义n-gram模型的参数
const n = 2; // n-gram的n值
const data = ['猫', '是', '小', '动', '物', '之', '一', '。', '狗', '也', '是', '小', '动', '物', '之', '一', '。', '喵', '喵', '是', '猫', '发', '出', '的', '声', '音', '。', '汪', '汪', '是', '狗', '发', '出', '的', '声', '音', '。']; // 语料库// 定义生成下一个单词的函数
function generateNextWord(prefix, model) {const candidates = model[prefix];if (!candidates) {return null;}const total = candidates.reduce((acc, cur) => acc + cur.count, 0);let r = Math.random() * total;for (let i = 0; i < candidates.length; i++) {r -= candidates[i].count;if (r <= 0) {return candidates[i].word;}}return null;
}// 定义生成句子的函数
function generateSentence(prefix, model, maxLength) {let sentence = prefix;while (true) {const next = generateNextWord(prefix, model);if (!next || sentence.length >= maxLength) {break;}sentence += next;prefix = sentence.slice(-n);}return sentence;
}// 训练n-gram模型
const model = {};
for (let i = 0; i < data.length - n; i++) {const prefix = data.slice(i, i + n).join('');const suffix = data[i + n];if (!model[prefix]) {model[prefix] = [];}const candidates = model[prefix];const existing = candidates.find(candidate => candidate.word === suffix);if (existing) {existing.count++;} else {candidates.push({ word: suffix, count: 1 });}
}// 使用示例
const prefix = '猫是';
const maxLength = 10;
const sentence = generateSentence(prefix, model, maxLength);
console.log(sentence); // 输出 "猫是小动物之一。"
这个例子里每次都是返回固定的结果,但是如果n-gram列表足够长,就可以带有一定的随机性。所以这个时候就需要大语言模型来提供足够的语料库了
大语言模型
大语言模型(如GPT-3)可以被认为是一种机器学习模型,基于深度学习技术的神经网络而来,因此可以将其视为神经网络模型的一种。具体来说,大语言模型是使用无监督学习方法进行训练的,它利用大量的文本数据集进行学习,从而在自然语言处理任务中表现出色。
机器学习模型一般分为以下几类:
1、线性回归模型:用于预测连续变量的值,例如房价的预测等。
2、逻辑回归模型:用于分类问题,例如垃圾邮件分类等。
3、决策树模型:用于分类和回归问题,可以自动找出数据中的决策规则。
4、随机森林模型:基于多个决策树的集成学习模型,用于分类和回归问题。
5、支持向量机模型:用于分类和回归问题,在高维空间中寻找最优超平面。
6、神经网络模型:用于图像识别、自然语言处理、语音识别等复杂任务的处理。
7、聚类模型:用于将数据分为不同的类别,例如K均值聚类等。
8、强化学习模型:用于智能决策和控制问题,例如自主驾驶车辆的控制等。
那么大模型是什么来的呢?
大模型通常是在神经网络算法中训练而来的,因为神经网络算法可以很好地处理大量的参数和复杂的结构。然而,神经网络算法在处理自然语言处理、计算机视觉和语音识别等任务时表现优异,因此在这些领域中大模型通常是基于神经网络算法训练而来的。当然,除了神经网络模型,还包括了一些其他的技术,如自回归模型、自编码器模型等,这里就不重点介绍了。
什么又是神经网络?
开头提到过:神经网络是一种模仿人类神经系统的机器学习算法。
神经网络的结构可以类比于图这种数据结构。在神经网络中,每个节点(神经元)可以看作是图中的节点,每条连接(权重)可以看作是图中的边,整个网络可以看作是一个有向图。
类比于图结构,神经网络的优化就是在调整连接权重的过程中,使得整个网络可以更好地拟合训练数据,从而提高模型的性能。同时,神经网络的预测过程可以看作是在图中进行信息传递的过程,从输入层到输出层的传递过程就相当于在图中进行一次遍历。
这里还是以JavaScript举个例子:
// 定义神经网络结构
const inputSize = 3;
const hiddenSize = 4;
const outputSize = 2;// 定义神经网络参数
const weights1 = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]
];
const bias1 = [1, 2, 3, 4];
const weights2 = [[1, 2],[3, 4],[5, 6],[7, 8]
];
const bias2 = [1, 2];// 定义激活函数
function sigmoid(x) {return 1 / (1 + Math.exp(-x));
}// 定义前馈神经网络函数
function feedForward(input) {// 计算第一层输出const hidden = [];for (let i = 0; i < hiddenSize; i++) {let sum = 0;for (let j = 0; j < inputSize; j++) {sum += input[j] * weights1[j][i];}hidden.push(sigmoid(sum + bias1[i]));}// 计算第二层输出const output = [];for (let i = 0; i < outputSize; i++) {let sum = 0;for (let j = 0; j < hiddenSize; j++) {sum += hidden[j] * weights2[j][i];}output.push(sigmoid(sum + bias2[i]));}return output;
}// 使用示例
const input = [1, 2, 3];
const output = feedForward(input);
console.log(output); // 输出 [0.939, 0.985]
神经网络的输出结果可以被解释为对不同类别的概率估计。在这个示例中,神经网络的输出是一个包含两个元素的向量,这两个元素分别表示输入属于两个类别的概率估计值。因此,这个前馈神经网络可以用来进行二分类任务。
类似地,像ChatGPT这样的语言生成模型也可以被解释为对不同单词或单词序列的概率估计。在ChatGPT中,当我们输入一段文本时,模型会根据已有的文本上下文来预测下一个单词或单词序列的概率分布,并从中选择概率最高的单词或单词序列作为输出。因此,ChatGPT中的输出结果也可以被解释为对不同单词或单词序列的概率估计。
经过这个流程,就可以理解ChatGPT是如何得出回答的文案的了。
ChatGPT怎么知道你问的什么?
前面提到了答案是如何一个词一个词生成的,那ChatGPT又是怎么知道你问的什么呢?ChatGPT 使用自然语言处理技术和深度学习算法对用户的输入进行语义分析和意图识别,以更好地理解用户的意图和需求。然后,ChatGPT 可以通过对话历史和上下文信息等因素进行分析,ChatGPT 根据预测的概率分布随机选择一个单词作为下一个单词,然后将该单词加入到生成的回答中。
由于采用的是概率性的组装单词的方法,因此 ChatGPT 生成的回答可能会出现一些语法或语义上的错误。为了提高回答的质量,可以采用一些技巧,如使用束搜索(Beam Search)方法、加入语言模型的惩罚项(如长度惩罚、重复惩罚等)等。这些技巧可以有效地减少生成回答中的错误,提高回答的质量。
总结
以上就是生成式AI的基本工作原理,通过深度学习算法处理大量的文本数据,从而学习语言的语法和语义规律,并能够自动生成符合语法和语义的文本。在生成文本时,生成式AI会基于上下文信息生成一个语言模型,然后利用随机采样或贪心搜索方法生成文本序列。
相关文章:

写给小白的ChatGPT和AI原理
前言 随着ChatGPT等生成式AI的大火,很多开发者都对AI感兴趣。笔者是一名应用层的开发工程师,想必很多类似的开发者都对AI这块不太了解,故而从自己的理解,写一篇給小白的AI入门文章,希望可以帮助到大家。 这是GPT对本…...

多元回归预测 | Matlab基于麻雀算法(SSA)优化混合核极限学习机HKELM回归预测, SSA-HKELM数据回归预测,多变量输入模型
文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab基于麻雀算法(SSA)优化混合核极限学习机HKELM回归预测, SSA-HKELM数据回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 …...

High Performance Visual Tracking with Siamese Region Proposal Network(SiamRPN)
High Performance Visual Tracking with Siamese Region Proposal Network(SiamRPN,CVPR2018) 主要贡献: 提出了SiamRPN跟踪器,首次将端到端的离线训练方式,应用到了大尺度的图像跟踪任务上在在线跟踪过程…...

【Vue3 生态】VueRouter 路由核心知识点
1. 动态路由 1.1 动态路由匹配 路由分为静态路由和动态路由。上面讲过的类似 ‘/login’ 这样写死的就是静态路由。 动态路由通过在路径中使用一个动态字段(简称:路径参数),来将不同的信息映射到同一个组件中。 如:…...

SpringCloud-Nacos配置管理
文章目录 Nacos配置管理统一配置管理在nacos中添加配置文件从微服务拉取配置 配置热更新方式一方式二 配置共享1)添加一个环境共享配置2)在user-service中读取共享配置3)运行两个UserApplication,使用不同的profile3)运…...

物流智能分拣管理
电子商务的兴起,实体消费和虚拟消费结合的方式加快商品流通速度。计算机硬件和软件结合,改变了现代社会的工作和生活。线上和线下的消费方式这种消费观念新颖,受到很多年轻消费者的青睐。不同的时期有不同的经济运行机制,电子是一…...

Qt编写视频监控系统79-四种界面导航栏的设计
一、前言 最初视频监控系统按照二级菜单的设计思路,顶部标题栏一级菜单,左侧对应二级菜单,最初采用图片在上面,文字在下面的按钮方式展示,随着功能的增加,二级菜单越来越多,如果都是这个图文上…...

界面开发框架Qt新手入门教程:如何使用Calendar组件创建日历(二)
Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文中的CalendarWi…...

charles unknown 问题和手机代理设置(iOS手机)
一、Charles下载 下载地址:https://www.charlesproxy.com/download/ 二、Charles配置代理 1.查看本机IP:help-->Local IP Address 2.查看或者设置访问端口:Proxy->Proxy Settings 3.设置不代理计算机的请求(推荐࿰…...

【备战秋招】每日一题:2023.03.26-阿里OD机试(第三题)-数组之和最小值
为了更好的阅读体检,可以查看我的算法学习网站 在线评测链接:P1119 题目内容 塔子哥是一个热爱数学的年轻数学家,他对数字和因子分解有着深入的研究。 有一天,他在一次偶然的探索中发现了一款神奇的游戏,名为“除数游戏”。 在…...

网站的SEO优化:提升搜索引擎可见性的关键步骤
93. 网站的SEO优化:提升搜索引擎可见性的关键步骤 SEO(Search Engine Optimization)是指通过优化网站的内容、结构、链接和其他因素,以提高网站在搜索引擎结果页面(SERP)中的排名和可见性的过程。 优化网…...

Spring Boot 中的服务注册是什么,原理,如何使用
Spring Boot 中的服务注册是什么,原理,如何使用 Spring Boot 是一个非常流行的 Java 后端框架,它提供了许多便捷的功能和工具,使得开发者可以更加高效地开发微服务应用。其中,服务注册是 Spring Boot 微服务架构中非常…...

spring.factories文件在Spring工程中的说明
说明 spring.factories 是 Spring Boot 框架中一个特殊的配置文件,它用于定义自动配置的实现类以及要注册的其他组件信息。该文件通常位于 META-INF/spring.factories 目录下,Spring Boot 在启动时会自动加载它并读取其中的配置信息。 spring.factorie…...

常见的自动化测试架构有哪些?
目录 前言 常见的自动化架构包括如下。 1.数据驱动测试 2.模块驱动测试 3.关键字驱动测试 优点: 缺点: 总结: 前言 一个自动化测试架构就是一个集成体系,其中定义了一个特殊软件产品的自动化测试规则。这一体系中包含测试…...

Revit中用自适应创建简单的瓦片族和切换构件的材质?
一、Revit中使用自适应创建瓦片族 在我们的日常生活中,屋顶的瓦片是我们经常都能够见到的,瓦片能够挡风遮雨也能够使建筑物带来古香古色的气息,那我们今天来学习如何使用自适应创建简单的瓦片族。 1.首先:我们打开自适应公制常规模…...

Spring Boot实战:拦截器和监听器的应用指南
当使用Spring Boot时,我们可以通过拦截器(Interceptor)和监听器(Listener)来实现对请求和响应的处理。拦截器和监听器提供了一种可插拔的机制,用于在请求处理过程中进行自定义操作,例如记录日志…...

为什么要搭建数据仓库
数据是企业中最重要的资源之一,因此,随着企业数据量的不断增大和复杂度的提高,建立一个可靠和健全的数据仓库变得越来越重要。在数聚股份看来,一个数据仓库可以作为一个企业数据存储和管理系统,能够更有效地存储、管理…...

Sql Server 获取连续日期时间
获取连续日期时间 在项目中,有时候需要按日期/时间统计,例如2023-06-21至2023-06-28期间每一天的数据,如果某一天没有数据,也要查询出来,用NULL处理。 1.示例 2.连续日期效果SQL DECLARE StartDate DATE 2023-06-2…...

MIT 6.830数据库系统 -- lab two
MIT 6.830数据库系统 -- lab two 项目拉取Lab Two实现提示练习一 -- Filter and Join练习二 -- Aggregates练习三 -- HeapFile Mutability练习四 -- Insertion & deletion练习五 -- Page eviction练习六 -- Query walkthrough练习七 - 查询解析 项目拉取 原项目使用ant进行…...

React基础知识点(一)
React基础知识点 目标 能够说出React是什么能够说出React的特点能够掌握React的基本使用能够使用React脚手架 什么是React (★★★) React是一个用于构建用户界面的javaScript库,起源于facebook的内部项目,后续在13年开源了出…...

机器学习-进化算法
进化算法 遗传算法(Genetic Algorithm,GA)crossovermutation 进化策略(Evolutionary Strategies,ES)基因编程(Genetic Programming)Multi-objective Evolutionary Algorithms 遗传算…...

leetcode 637. 二叉树的层平均值
2023.6.29 依旧是层序遍历的变体,在层序遍历的代码中的内层循环求个和,然后出循环之后取个平均值即可实现层平均值,下面上代码: class Solution { public:vector<double> averageOfLevels(TreeNode* root) {vector<doub…...

7-数组创建函数还有哪些?【视频版】
目录 问题视频解答 问题 视频解答 点击观看: 7-数组创建函数还有哪些?...

webrtc源码阅读之P2P流程分析
P2P从宏观原理上其实就是: 收集本地Candidates设置远程Candidates连通性测试及排序 本文我们从Offer端的角度进行源码分析,学习webrtc是如何进行P2P连接的。版本m98。 一、收集本地Candidates examples/peerconnection中,CreateOffer以后&…...

vscode 快速修复(quick fix) 快捷键(Ctrl + .)被占用问题解决方法
vscode 快速修复(quick fix) 快捷键(Ctrl .)被占用 微软拼音的中/英文标点切换的快捷键为Ctrl .,与 vscode 快速修复(quick fix)快捷键冲突。修复方法如下: 切换到微软拼音,在输入法中或英字上,点击右键。 再点设置 - 按键。 …...

阿里云——扩展Linux系统盘
扩展分区和文件系统_Linux系统盘 {#concept_ocb_htw_dhb .concept} 本文提供了如何使用growpart和resize2fs工具完成Linux系统盘分区扩容及文件系统扩展的操作指导。 适用范围 {#section_u9c_3g5_ljs .section} 本文的操作步骤适用于以下分区和文件系统格式的云盘࿱…...

TypeScript ~ 掌握基本类型 ②
作者 : SYFStrive 博客首页 : HomePage 📜: TypeScript ~ TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &…...

【Zookeeper】win安装随笔
目录 下载地址下载目标解压后目录结构配置文件配置文件详情伪分布式安装LinuxZooKeeper audit is disabled启动解决报错:SLF4J: Class path contains multiple SLF4J bindings. _ 下载地址 https://zookeeper.apache.org/releases.html 下载目标 记住选择带bin的…...

Unity 之 最新原生广告Ads接入 -- 助力增长游戏收益
Unity 之 最新Ads原生广告接入流程详解和工具类分享 一,注册 Unity Ads 广告 SDK二,下载 Unity Ads 广告 SDK三,配置 Unity Ads 广告 SDK3.1 广告位展示流程3.2 代码初始化 四,集成 Unity Ads 广告 SDK4.1 相关介绍4.2 代码分享 五…...

ChatGPT是否可以进行逻辑推理?
ChatGPT在逻辑推理方面的能力存在一定的限制。虽然它可以处理一些简单的逻辑问题,但由于其基于统计模型和语言模式的生成方式,它在复杂的逻辑推理和推断任务上可能会遇到挑战。以下是对ChatGPT在逻辑推理方面能力的详细分析: 1. 基于统计模型…...