感觉是通俗易懂的大模型入门(一)

最近人工智能非常火爆,大家可能经常听到AI、深度学习、大语言模型等名词。但真正能够将它们拆开来细致讲解的内容并不多。我大学就是学这个的,毕业后一直从事这个领域的工作。所以我打算今年陆续做一些这方面的科普,也借此机会复习巩固一下自己的知识体系。

今天就算是第一期,我们从机器学习这个概念讲起。其实机器学习是个非常庞杂的概念,很多事情都可以归到这个领域,像预测电影票房、识别人脸,以及计算机自动打游戏等,这都属于机器学习。但这个系列我打算专注在语言这个任务上,目的是让大家以及我自己更深入地了解大语言模型、GPT等横空出世的人工智能技术。所以在介绍各种技术概念时,我都会围绕语言领域展开。

在语言分析和语言生成的视角下,机器学习是什么呢?首先我们回顾一下自己当年是如何学习一门新语言的。比如学英语,一开始就是背单词死记硬背。单词表左边是意义不明的字母组合,右边是我们能看懂的中文解释。我们要做的就是记住这些英文词汇和它们的含义。通过将陌生词汇与它们的含义对照,我们就逐步建立起对新语言的认知。这个过程就可以被称为监督学习。监督学习的主要特征是用到了大量标记数据,也就是需要学习的内容通过学习者能够理解的方式做了标记。于是我们才能够将未知信息与已知信息一一对应起来,建立关系,然后再往陌生的更复杂情况去推导。

除了这种监督学习,还有一种情况是我们得不到明确的指导,就像刚出生时我们连中文都不会,或者上世纪很多人出国时外语也没怎么学。但这两种情况最后大家都能适应下来。这时就只能通过阅读听力或观察语言在日常生活中的使用来进行学习。在这种情况下,我们可能会开始识别模式,比如某些词汇总是在类似情境下反复出现,或某些词似乎具有相似结构或音韵特征。

就这样我们逐渐就会摸索出一套监督学习、自监督学习等混合学习模式。

但归根结底,这些方法都是为了让机器能够像人一样学习,通过算法自行找出数据间的关系和模式,而不需要人直接编程具体步骤来执行任务。这一概念正是机器学习与传统编程的根本区别所在。

它的深远意义在于,只要我们找到一套能有效学习到东西的算法,它就可以广泛适用于不同任务。比如我们搞了一套算法为给他人脸照片,它就能学会定位人脸。同样的算法,你让它学定位人手也是可以的,只需给它看大量包含人手的照片就行,而不像传统编程那样需要重新编写规则告诉它人手长什么样。

当我们真正按照这个思路走时,许多具体问题就出来了,主要有数据和模型两个问题。我们已经知道机器学习本质上是构建一套神经网络模型,让模型从大量数据中学习。那怎么获取足够多高质量的数据?怎么构建能力强、学习效率高的模型?就成了影响学习效果的关键。整个机器学习研究史基本上就是围绕着这两点展开的。

今天人工智能领域的热词大语言模型,它就是在这两方面都取得了突破。这一期我们先讲讲模型。在学术界,模型通常被用来表示对现实世界现象的简化和抽象。而在机器学习领域,我们可以把模型看作一个函数,或者说是一个有输入有输出的黑盒子。这个黑盒子内部结构可能无比复杂,但我们不用管,只关心它能否针对输入给出正确的输出,比如输入一张狗的照片,它输出就应该是狗。

在神经网络模型里,每个单元之间的连接都是一个权重数值,这些数值可以在输入输出之间建立无数种映射关系。但怎么才能确定这大量权重数值每个应该是多少呢?这就要靠反向传播算法了。不过在讲反向传播之前,我还要先回顾一下函数和导数的概念。

函数说白了就是一个写死的对应关系,比如y=2x,你输入2它就输出4。而导数就是用来衡量输出相对于输入变化的速度。如果输入变量调大一点从2变成2.1,y=2x这个函数输出就会增加0.2,那它的导数就是2。而神经网络要复杂得多,输入变量远不止一个,比如一张200x200的图片就有4万个像素变量,这就涉及到偏导数的概念了。

总之,神经网络模型通过调整每个神经元之间的权重连接,就能学会从输入映射到正确的输出,这正是机器学习的核心所在。接下来我会继续讲解反向传播算法以及数据获取的相关内容。

那到底哪个因素作用最大呢?这就是偏导数要求解的东西。偏导数要求解的就是这些不同的输入变量分别对应的权重是多少。实际在计算机里,训练一个神经网络的流程是这样的:首先训练程序会为每个输入变量随机分配一个0-1的权重值,比如场景的权重是0.5,人物是0.1,服装是0.4。然后我们假设这三方面都是可以量化的,比如在某一个游戏时刻,场景的精美度是0.1,人物的美观度是0.1,服装的优雅度是0.4。 那这第一轮随机权重计算下来,分数就是0.22。这就完成了一轮前向传播,根据输入把输出算了出来。但这时候,我们发现这个结果是错的,他算出来0.22这个分数并不高,但实际上我可能对着这个0.4分的服装已经兴奋起来了,我的兴奋值可能已经达到了0.6。

所以这个预测值和实际情况就有了偏差。但这个偏差该怎么衡量呢?这就要用到损失函数了。

损失函数通常是基于统计学的数学模型,常见的有均方误差、交叉熵损失、绝对误差等等。损失函数的结果永远是一个非负数值,它不能小于0。而这个数就被用来衡量模型的判断和实际情况的偏差有多大。比如说,咱们用绝对误差,那这个模型的输出和我的实际兴奋值的偏差就是0.38。

那要怎么让这个偏差缩小,让模型真正做到看到一个游戏画面就能准确的知道我有没有兴奋呢?首先我们知道,这个模型的输入输出之间的关系完全是由权重数值决定的,同样的输入,这些权重一变,输出就会完全不一样。可是这些权重该怎么改呢?这时候,我们就可以把这个偏差看成是一个关于这些权重值的函数,也就是刚说的损失函数。我们希望找到的就是损失函数变化最快的方向,也就是梯度。梯度可以看作是一个函数在特定点上的斜率或者坡度,它总是指向函数增长最快的方向。

咱们现在想象你站在某座山上,梯度告诉你的就是往哪个方向走能最快的上山,相应的,加个负号,原地转180度就是下山最快的方向。一直让权向走,损失函数的值,也就是模型预测和实际情况的偏差就会越来越小。这个过程就叫梯度下降。

那回到刚才那个例子,咱们说那三个输入是X1、X2、X3,而对应的三个权重值分别是W1、W2、W3。那现在这个模型给出的映射关系就是y=W1X1+W2X2+W3X3。这时候,如果咱们反过来把它看成是一个y关于权重w的线性函数,那对这三个权重值分别求偏导,结果就是X1、X2、X3。想让偏差减小,就需要把0.22往0.6上拉,也就是沿着1、1、4这个方向走就可以了。

但这只是三个变量,在神经网络的实际使用里面,变量权重的数量可能有上千万,乃至数十亿数百亿个,而且是层层向下传导,这要怎么解决呢?这就要借助链式法则。

链式法则是一种计算复合函数导数的方法,当一个函数是由多个函数嵌套而成的时候,它的导数就等于外部函数的导数再乘以内部函数的导数。按照这个法则,我们就可以把一个很复杂的函数一层层拆解,得到每一层每一个权重值的导数,最后汇集成一个超高维度的梯度,就像是把洋葱一层层剥开一样。

这整个过程就像是倒着看一遍电影,从结尾开始,逐步回溯到开头,理解每个事件、每个线索是如何影响后续事件,最终影响整个故事走向的这一整个流程。运行完这个过程,先把输出算出来,再反向把权重的梯度找出来,最后再让所有的权重沿着这个梯度的方向前进一点点,我们就完成了一步更新模型,朝着更准确的方向又靠近了一些。

一开始,所有权重都是随机生成的,所以模型的修正速度会快一些,但越往后,准确率提得越来越高,这个速度就会逐渐慢下来,这时候就说这个模型的训练收敛了。

等模型收敛是个耐心活,打个形象的比方,就是钓鱼时候那个浮漂。扔下去的时候,它剧烈抖动,然后抖动幅度逐渐变小,但这时候它并没有真的稳下来,稍微再来点刺激,比如小风一吹或者水底一股小暗流,它就又抖起来了。这时候很多人就会忍不住提竿一看,结果啥都没了。但成熟的人就需要再忍耐一会、再坚持一下,这时候,这浮漂往往就会真正的越来越稳,直到最后完全和水面融为一体,真正收敛。

但也并不是所有的模型在训练过程中都一定能收敛。像模型本身有问题、训练数据有问题,或者超参数设置的有问题,都可能会导致模型训不出来,一直在波动,就好比说浮漂本身有破损,或者水太浅,钩沉底了。

咱们先说超参数。常见的超参数包括批量大小、迭代步数、激活函数、优化器选择等,它们不改变模型结构,但会控制模型怎么训练这个过程。这里最重要的一个超参数是学习率。学习率决定的是模型参数的更新幅度。前面咱们说梯度能指出偏差减小最快的那个方向,但这只是基于损失函数这一刻所在的这一个点。那要是一步迈大了,反而可能一下子跳到更高的地方,上去了老也下不去。但你如果步子老是非常小的也不好,一方面你移动的速度会特别慢,另一方面,假设说前面还有个小坑,你可能就直接陷进这个小坑里,再也走不出来了,永远摸不到更低的那个点。所以这也是需要反复测试、积累经验,直到和模型融为一体。

其他的超参数设置也都是类似,各有各的特征和局限,都是需要反复磨练,需要研究人员根据模型的表现,依赖直觉和试验去反复调整。这也是为什么机器学习有时候被叫做炼丹。然而超参数还不是最麻烦的,甚至现在如果你经费充足的话,你都可以直接把超参数丢给机器去学习让电脑自己去试验。

真正从底层决定训练能不能成的,其实是模型的结构本身。当年深度学习曾经差点没发展下去,就是发现层数增加到一定程度之后,模型就学不明白了。前面说模型的输出越来越准,靠的是通过反向传播的过程调整每一层的权重。但是在一个层数非常多的模型里,这个反向传播的过程会把很多导数值接连相乘,层数越多,乘的就越多。模型的权重值一开始都是随机给的,所以这些导数值也都是不确定的。假如有很多值都是大于1的,那这些数乘起来就会导致梯度爆炸,模型开始剧烈波动。而反过来的话,就是梯度消失,模型可能还远远没学明白,但就是不动了。所以深度学习刚有点火的意思就发展不下去了,直到残差网络的出现。

残差网络做的事很简单,他就是在计算网络层输出的时候,从前面再拽一层加到一块。这样在计算梯度的时候,下一层的变化就被上一层的原始信息给稀释了,一部分没有被完全清除掉。从头到尾,梯度变化的稳定性就增强了很多,不会爆炸,也不会消失了。这样一来,构建足够深的神经网络才成为了可能。在残差网络之前,神经网络的深度通常在几层到几十层之间,像著名的AlexNet有8层,VGG是16-19层,那时候这都已经是相当深了。可残差网络出来之后,神经网络都是上百乃至上千层啊,也就具备了解决更加复杂问题的能力。残差网络的作者何凯明,也因此拿到了2016年CVPR的最佳论文奖。今天,残差网络已经成了神经网络里一个几乎必备的结构了,几乎所有的大模型里都可以看到它。

但是走到这里,把超参数调好,把模型深度拉大,就一定能让电脑学明白了吗?其实未必,数据也是很重要的。我让你12年只学数学,然后高考考你英语,你不得干死我。但机器学习领域的学者不会犯这么低级的错误。但有些时候,可能数据太复杂了,以至于模型能力根本不足以找到合适的关系,这就会导致过拟合,也就是模型准确率升到一定程度之后就升不上去了。但这个问题出来的话,其实还挺明显的,所以危害不大,改进就完事了。有时候,模型能力太强了,它干脆把数据全原样背下来了,甚至会记住一些干扰因素。比如我告诉它现在这个视频画面里是林哥,结果它可能继承了有这个键盘的画面就是林哥,换只狗坐这啊,它还是觉得这是林哥,那就坏了。它其实并没有学到真正具备普遍性的规律,这就是过拟合。

过拟合的模型看上去表现很好,但只是在它学习过的数据上,真正拿出去解决实际问题反而解决不了。真正学明白了的模型是要具备泛化能力的。在机器学习里面,泛化指的是模型遇到从未见过的数据的时候能不能整明白,它是衡量模型性能的一个关键指标。一个具有良好泛化能力的模型应该能够适应陌生的数据环境,而不仅仅只是在训练数据上表现出色。因为真实世界的变化是无穷无尽的,只有真正从数据里面学到了底层的规律,才能推而广之,解决更多的同类问题。

那怎么来评估一个模型的泛化能力呢?我们会把数据划分为训练集、验证集和测试集来做这件事。训练集就像是平常的作业和习题,模型通过学习训练集上的数据来识别模式和规律。验证集就像是模拟考试,用来阶段性的评估模型表现。模型通过训练集的数据更新内部的权重值,然后经过验证集检测能力,检测出来发现效果不好的话,我们就调整超参数或者修改网络结构,直到它在验证集这个模拟考试上能拿到高分。这时候就到测试集了,测试集就是最终的高考,它评估的就是模型未来放到真实世界之后最终的性能大概会是什么样。

在之前的过程里,模型只学习过训练集,然后通过对训练过程的调整,它又做到了能把规律推广到验证集上。但测试集它是从来没沾过边的,如果测试集它也能搞定了,那它就大概率成了。

然而当大模型时代到来之后,一个超级超级大、参数几百上千亿的模型,把这个泛化的概念又给颠覆了。由于这种模型真的太大了,即使是一个装了互联网全部文字的数据集,它都有能力给完全背起来。那最终它表现出来的能力,到底是因为真的理解了人类知识,还是在机械的照搬它背下来的文字呢?因此也就有人质疑,就说目前大模型并没有真正体现智能和学习能力,只是背东西比较猛而已。

关于这个话题的探讨,我们就后面再进行吧。但无论如何,今天这种从小型专用模型到大型通用模型的转变,标志着深度学习进入了一个重要的发展阶段。后面,我会基于今天我们讲的这些基础知识,再聊聊机器是如何理解人类语言这套精妙庞杂的符号系统的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

POLYGON - Elven Realm - Low Poly 3D Art by Synty(低多边形精灵王国)

Synty Studios™展示:POLYGON-精灵王国 精灵王国隐藏在群山之间,远离非魔法生物的控制。 精灵人以符文之花为动力,将其作为病房、电源、武器附魔和连接他们陆地之间的门户。 主要功能 -700多项独特资产 -模块化建筑系统,包括悬崖和瀑布。 -包括详细的演示场景 资产 角色(x…

基于Cortex的MCU设计

基于Cortex的MCU设计 今日更新的存货文档,发现日更文章还是很花时间的。保证一周更新三篇文章就行啦,本篇文章的内容起始主要取自于《Cortex-M3 权威指南》和知网下载的论文。写的不详细,想进一步了解的就去看这篇文档或网上找别的资料&#…

mysql实战——mysql5.7保姆级安装教程

1、上传 上传5.7压缩包到/usr/local目录下 2、解压 cd /usr/local tar -zxvf mysql--5.7.38-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.38-linux-glibc2.12-x86_64/ mysql 3、创建mysql用户组和用户 groupadd mysql useradd -g mysql mysql 4、创建数据目录data&#xf…

如何设置远程桌面连接?

远程桌面连接是一种方便快捷的远程访问工具,可以帮助用户在不同地区间快速组建局域网,解决复杂网络环境下的远程连接问题。本文将针对使用远程桌面连接的操作步骤进行详细介绍,以帮助大家快速上手。 步骤一:下载并安装远程桌面连接…

柳宗元,政治坎坷与文学辉煌的交织

💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。 柳宗元,字子厚,生于唐代宗大历年间(公元773年),卒于唐宪宗元和年间(公元…

Python批量docx或doc文档转换pdf

说明: 1、因为项目需要,需要手动将十几个word文档转换成pdf文档 2、python请安装3.9.0以上,否则一些依赖库无法正常用 #! /usr/bin/python3 # -*- coding: utf-8 -*-import os import comtypes.client# 批量将docx文件转换pdf文件 def docx_t…

OpenBMC相关的网站

openbmc官方网站 https://github.com/openbmchttps://github.com/openbmc Dashboard [Jenkins]https://jenkins.openbmc.org/ https://gerrit.openbmc.org/Gerrit Code Reviewhttps://gerrit.openbmc.org/ Searchhttps://grok.openbmc.org/ openbmc参考网站 https://www.c…

脱产二战Top3:终将梦校纳入囊中!

这个系列会邀请上岸学长学姐进行经验分享~ 今天分享经验的同学是小马哥819全程班的学员,二战高分上岸上海交通大学! 经验分享 在去年考研上交失利后,我选择了在家脱产二战一年,所幸还算取得了比较理想的结果。 我本科中部地区…

攒粒是什么?怎么用攒粒赚钱?

攒粒简介 攒粒的前身是91问问,隶属于上海道道永泉市场调查有限公司,是一家专业的全球在线调研服务公司,也是是国内排名前列的社区调查之一,10年在线调研,600万会员亲身体验,提供网络调查、市场调查、问卷调…

KAN(Kolmogorov-Arnold Network)的理解 1

系列文章目录 第一部分 KAN的理解——数学背景 文章目录 系列文章目录前言KAN背后的数学原理:Kolmogorov-Arnold representation theorem 前言 这里记录我对于KAN的探索过程,每次会尝试理解解释一部分问题。欢迎大家和我一起讨论。 KAN tutorial KAN背…

如何从 Android 恢复已删除的相机照片?(7 种行之有效的方法)

如今,随着智能手机的不断创新和突破,我们可以毫不费力地用安卓手机相机拍摄高清照片。然而,随着安卓手机中相机照片的积累,有时我们可能会因为各种原因丢失这些相机照片。那么如何从安卓设备恢复已删除的相机照片就成了困扰许多人…

Megatron-LM源码系列(八): Context Parallel并行

1. Context Parallel并行原理介绍 megatron中的context并行(简称CP)与sequence并行(简称SP)不同点在于,SP只针对Layernorm和Dropout输出的activation在sequence维度上进行切分,CP则是对所有的input输入和所有的输出activation在sequence维度上进行切分&…

06.部署jpress

安装mariadb数据 yum -y install mariadb-server #启动并设置开启自启动 systemctl start mariadb.service systemctl enable mariadb.service数据库准备 [rootweb01 ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id…

HCIP-Datacom-ARST自选题库_10_其他多选【48道题】

1.为什么说可以通过提高链路带宽容量来提高网络的QoS? 链路带宽的增加减小了拥塞发生的几率从而减少了云包的数量 链路带宽的增加可以增加控制协议的可用带宽 链路带宽的增加意味着更小的延迟和抖动 链路带宽的增加可以支持更高的流量 2.当拥塞发生时,通常会影…

VectorDBBench在windows的调试

VectorDBBench在windows的调试 VectorDBBench是一款向量数据库基准测试工具,支持milvus、Zilliz Cloud、Elastic Search、Qdrant Cloud、Weaviate Cloud 、 PgVector、PgVectorRS等,可以测试其QPS、时延、recall。 VectorDBBench是一款使用python编写的…

如何实现倾斜摄影三维模型OSGB格式轻量化

如何实现倾斜摄影三维模型OSGB格式轻量化 倾斜摄影三维模型以其高精度和真实感受在城市规划、建筑设计和虚拟漫游等领域发挥着重要作用。然而,由于其庞大的数据量和复杂的几何结构,给数据存储、传输和可视化带来了挑战。为了解决这个问题,倾斜…

KT6368A蓝牙芯片AT命令会被透传出去,指令对为什么会被透传出去

一、简介 KT6368A再被连接之后,AT命令会被透传出去。被透传的这组AT命令是符合文档要求,不应被透传,实际却经常被透传。并且可以每次都复现 详细描述 有问题部分的串口数据监控结果如下:其中41 54 2B 42 4D 46 30 41 46 42 43 3…

消费增值:国家支持的消费新零售模型

在当下的消费时代,一个全新的概念——消费增值,正逐渐走进大众视野。它不仅仅是一种消费模式,更是一种全新的财富增长途径。那么,消费增值究竟是什么? 首先,消费增值的本质在于将消费行为与投资行为相结合…

【代码随想录——回溯算法——三周目】

1. 子集2 这题需要先进行排序,和候选人那题类似。防止出现重复的子集。 func subsetsWithDup(nums []int) [][]int {path : make([]int, 0)res : make([][]int, 0)sort.Ints(nums)var dfs func(nums []int, start int)dfs func(nums []int, start int) {res app…

智能时代下,人机交互和虚拟现实的机遇和挑战

智能时代下,人机交互和虚拟现实的机遇和挑战