十分钟速通大模型原理!从函数到神经网络
👉目录1 从函数到神经网络2 计算神经网络的参数3 调教神经网络4 矩阵运算5 从词嵌入到RNN7 结束语现在几乎所有人都在使用大模型,连村口的老头都会说让你帮他在手机上装一个,那大模型到底是个啥东西呢?本文带你一探究竟。关注腾讯云开发者,一手技术干货提前解锁👇腾讯云官方社区公众号,汇聚技术开发者群体,分享技术干货,打造技术影响力交流社区。1025篇原创内容公众号11/6晚7:30鹅厂面对面直
👉目录
1 从函数到神经网络
2 计算神经网络的参数
3 调教神经网络
4 矩阵运算
5 从词嵌入到RNN
6 Transformer
7 结束语
现在几乎所有人都在使用大模型,连村口的老头都会说让你帮他在手机上装一个,那大模型到底是个啥东西呢?本文带你一探究竟。
关注腾讯云开发者,一手技术干货提前解锁👇

腾讯云开发者
腾讯云官方社区公众号,汇聚技术开发者群体,分享技术干货,打造技术影响力交流社区。
1025篇原创内容
公众号
11/6晚7:30鹅厂面对面直播继续!

腾讯云开发者
将在11月06日 19:30 直播
预约
让Agent 起飞:上下文工程
01
从函数到神经网络
大家都学过数学,函数这个概念并不陌生,简单理解就是一组数据通过某个规则进行转换,得到另外一组数据。并且在特定的数据集中,这个规律是恒定不变的,可以说是一个法则。好,那么回到现实世界,有哪些函数相关的例子?有的,比如一个勾股定律,当我们的形状明确是一个直角三角形时,两个直角边边长的平方加起来等于斜边长的平方,即:
![]()
。这就是一个函数,通过符号化解释了现实世界的规律。
那么人们就想,是否存在一类函数,他可以解释大部分世界的规律,然后利用机器的理解和运用,实现人工智能?这就是早期人工智能的先驱流派:符号主义。
但是逐渐人们发现,世间规律太过复杂,很多事情无法用确定性的函数来表达,比如如何判断一张照片上的图片是不是一只猫,对于人类来讲就非常简单,但是对于机器来说就过于复杂了,于是联结主义出现,人们承认自己太菜了,所以放弃了寻找万物之间规律的这条路,干脆让机器自己从数据里‘统计’出近似规律——这条数据驱动的路一走就是 30 年。怎么理解呢?见下图:

f(x)=ax+b,这是一个非常简单的函数,但是如果人类一开始并不知道这个逻辑,那怎么办呢?通过上图这种方式,不断调整a和b这两个系数,逐渐让所有的点都与这条线越来越近,直到完全拟合,那么恭喜,你发现了这些数据的规律。
但是复杂的规律,人们怎么调整都找到不到一条完美的线,让所有的点都在这条线上,只能找到近似的一条线,尽量让各个点接近,比如下面这个图:

问题来了,实际上很多数据比上述情况更复杂,通过倾斜和上下移动连近似拟合都无法实现,那么这时候就需要将线性关系升级成非线性关系,比如下面这个图:

通过fx=g(ax+b),将线性函数折成了非线性函数,这里的函数g对ax+b完成了一次平方计算,即fx=(ax+b)²,那么这个将线性关系盘活的函数就称之为激活函数。
问题又来了,如果数据关系更为复杂,使用一个激活函数无法贴近真实数据情况,曲线弯的还不够灵活,怎么办呢?那就再套一个激活函数fx=g(a2(g(a1x+b1))+b2),通过这种套娃的形式可以实现极其复杂的曲线关系。
但是通过这种公式的形式表达太过复杂,于是我们抽象一下:

可以看到,从输入层经过线性变换和激活函数到隐藏层,再经过一次线性变换和激活函数到输出层,整个过程是从左到右一点点传播过去的,这个过程我们就称之为神经网络的前向传播(其实就是一层层函数计算)

随着每一层的神经元个数以及隐藏层的层数不断增加,我们可以得到一个相当复杂的神经网络(非线性函数),如下图:

从函数到神经网络基本搞清楚了,剩下的就是通过调整参数让我们离真实数据情况越来越接近,随着函数越来越复杂,猜的成本也就越来越高,那么我们有没有一些方法可以让这个猜的过程更加高效可控一点呢?有的。
02
计算神经网络的参数
好的,上一个章节我们搞懂了,神经网络其实就是一个尽量拟合真实数据的非线性函数,那么如何评估拟合的好坏呢?先回到之前的线性函数:

可以看到ab两条线,显然a要更接近真实的数据表现,如何量化呢?我们可以计算所有的数据离这条线的距离之和得到损失函数:

绝对值处理起来比较麻烦,我们对这距离进行平方,一是解决绝对值不平滑问题,二是放大误差,然后再通过计算平均值来放大数量带来的误差影响得到均方误差:

那么如何找到这个极值点,让我们损失函数的值尽量小,初中就学过通过求导为零来计算曲线的极值点。

这里是忽略了参数b,如果对两个参数进行求导,其实是求偏导数,你可以想象一个在三维空间中,以二元一次方程顶点为轴心线,通过旋转得到一个碗装的曲面,这里不详细展开。

我们通过对损失函数求导,得出线性模型,来拟合x和y的关系,就是机器学习中最基础的一种分析方法,即线性回归。
但是现实世界中的数据往往比较复杂,只能通过不断地猜测来进行拟合,我们发现在固定b参数情况下,通过不断调整w参数,可以让损失函数不断减小,即损失函数对w的偏导数,我们每次调整的力度通过一个系数去表示,即学习率。

这些偏导数所构成的向量,我们叫做梯度,通过不断调整w和b让损失函数不断减小的过程,称之为梯度下降。
很多教程会用下山来比喻,包括吴恩达的课程,其实就是不断找全局最低点的过程:

回到之前的简单神经元的案例,我们发现从输入层到隐藏层到输出层到损失函数,通过不断调整w的值,来让最终的损失L变小,通过从右向左依次求导,在计算前一层偏导数的值时,后面也会用到,所以不用重复计算而是从右向左一点点传播过来,那么这个过程我们称之为反向传播。
通过前向传播,根据输入x计算得出y,然后通过反向传播计算损失函数关于每个参数的梯度,不断往梯度的反方向变化一点,这样就构成了神经网络的一轮训练。

03
调教神经网络
上一个章节,我们的目的是让这个复杂的神经网络函数无限接近真实数据表现,即让数据拟合的很好,下图中的三个函数,哪个比较好呢?

很显然,A拟合的就不好,B感觉还不错,C貌似太完美了,假如有一些新的数据,那么C可能效果还不如B,这种在训练数据表现的很完美,但是再没见过的数据上表现得很差的情况,我们叫它过拟合。而在没见过的数据上表现的能力我们叫它泛化能力。
那如何避免过拟合呢?一方面可以通过简化模型复杂度,让我们的模型简单一点,不要学会哪些噪声,另一方面可以通过增加数据量,让训练过程可以忽略噪声。
那除了通过调整数据和函数来防止过拟合,有没有其他办法?有的,我们可以通过提前终止训练来防止,这种方式叫早停。但是这种方式比较粗糙,无法精细化控制。
所以有没有一种办法,让每次调整参数的时候,梯度下降的没有那么快呢?我们发现可以把参数本身的值加到损失函数中,当参数增大时,惩罚项会急剧增加,迫使模型优化时主动压缩那些大参数,从而抑制了参数的野蛮增长。

我们把增加的参数绝对值的和称为惩罚项,这种抑制方式称之为正则化,如果是添加绝对值叫做L1正则化,如果是平方和(放大抑制的效果)叫做L2正则化,再通过增加一个系数来调整力度,这个系数叫做正则化系数,这一系列控制参数的参数,我们称之为超参数。
另外,还有一种简单到爆炸的方式,我们可以通过在训练过程中,每次都随机丢弃一些一部分高优参数,这样让模型依赖更多的普通参数,这样来减少过渡依赖少量样本的风险,这种方式叫Dropout(丢弃)虽然听起来感觉挺不靠谱,但确实有效。
04
矩阵运算
回到我们之前讨论的神经网络,从最简单的y=x+b,通过输入层增多x,输出层增多y,我们可以得到非常复杂的神经网络,但是这个公式也太复杂了,有没有一种其他的简洁的表达形式,可以更好理解?

科学家们想到,把加减乘除变为矩阵计算,一方面让公式更直观,另一方面可以利用GPU的并行计算提升训练速度。

05
从词嵌入到RNN
通过神经网络,我们可以通过训练来让模型具备预测没有见过的数据的能力,那么如果说让我们来对一句不完整的话进行预测补充,该怎么做呢?如何设计这个神经网络呢?
先把文字转换成计算机可以识别的数字,有两种方式,第一种是对每个词语或字进行编码,用一个数字表示,比如:

这种方式有一个弊端,就是识别的范围取决于你的词表大小,并且是一维的标识,数字本身没有任何意义,也无法衡量词语之间的相关性,可以理解为就是一个映射表。
另一种方式是准备一个非常大的向量,每个词语或字代表向量的一个维度,比如这样:

这种方式叫做one-hot编码(独热编码),这种编码方式缺点也很明显,就是维度非常高,很稀疏,非常浪费计算和存储资源。
维度太低了不好,维度太高也不好,那有没有一种不高不低的方案呢?有的,这种方式叫做词嵌入(embedding),通过词嵌入得到的词向量维度不高也不低,每个位置都可以理解为一个特征,比如这样:

通过对这组数据进行点积运算或者预先相似度预算,可以发现男人和男孩的关系似乎与女人和女孩的关系有着某种联系,这种代表联系的向量如果放在多维空间中,方向可能是一致的,但是有时候通过人类语言不一定能描述出来,通过大量的数据进行训练,才能得出这种隐型特征,这样我们就发现了数据和数据之间的相关性,那么通过一组词语就可以联想出另外一组词语。
回到之前讲的神经网络,我们如何在神经网络中体现下一层数据和上一层数据之间的关联性呢?很简单,把上次层的结果以中间态的形式放到下一层中计算就可以了,具体做法如下:

将上图简化一下,这就是我们的RNN(循环神经网络):

循环神经网络通过保留中间隐藏状态不断传递,让后面的数据具备了前面数据的关联信息,通过循环传递让每个数据都具备了其他数据的关联信息,这样RNN就具备了理解词和词之间先后顺序的能力,那么预测文字就变得非常容易了。
RNN和经典的神经网络相比,就只是多了一个上一层的隐藏状态,仅此而已,是不是非常简单。
但是RNN有两个明显问题:
- 
  
如果神经网络的层数很大,后面的状态数据会逐渐失真,你可以想象一下“传话游戏”,第一个人描述的非常清楚,到最后一个人讲出来却和原始含义大相径庭。
 - 
  
无法并行计算,因为每一层都要依赖上一层的状态,这明显是一个串行的关系,无法利用到GPU的并行计算。
 
那么有没有一种把所有信息尽收眼底,以一种上帝视角俯瞰全局的方案呢?有的,它就是Transformer!
06
Transformer
如果我们要预测我爱__,该怎么做呢?接下来直接进入正题:
我们先对“我爱你中国”进行词嵌入,然后分别与QKV矩阵进行词向量相乘得到三组QKV矩阵,为了计算出“我”这个向量和其他向量的关系,我们先让q1和每个矩阵的k向量进行点积运算,这样就得到了“我”向量和其他向量的相似度,然后再分别与每个矩阵的v向量相乘,就得到了a1这个向量。该向量包含了其他所有向量的相似性以及其他向量的值。
换句话讲,站在“我”这个字上,你可以看到其他所有词语的相关性以及他们的内容,这个就是注意力机制。

其中:QKV是三组通过训练得到的数据,代表大量数据中的隐藏权重。
- 
  
Query (Q):就像你在搜索引擎里输入的关键词。
 - 
  
Key (K):就像互联网上所有网页的标题和关键词标签。
 - 
  
Value (V):就是这些网页的完整内容。
 
参考搜索引擎,通过你输入的Query与所有网页的Key进行匹配,计算相关度得分,将最终的网页Value汇总给你。
实际上,现实世界的数据可能不止一组QKV权重就能表达出事物所有的“特征”,那么可以通过训练多个QKV矩阵(表示多种视角的隐藏权重),重复上面的运算得到最后的结果,这种叫做多头注意力机制。
恭喜你读到这里,你已经掌握了大模型transformer的最核心的内容:

上图为大名鼎鼎的《Attention Is All You Need 》论文原图,我们把细节屏蔽,比如add&norm,代表的残差网络和归一化处理,目的是解决梯度消失,让分布更稳定而做的优化,这里不展开讲,我们把上图简化一下:

通过编码器对输入内容进行了多头注意力机制的转换,通过全连接神经网络得到K和V矩阵,然后解码器负责对输出进行多头注意力机制(注意这里是掩码了的,解码器需要推理,所以就盖住了后面的数据,让模型可以模拟真实推理)得到Q,然后和编码器送过来的KV矩阵进行多头注意力,然后经过全连接神经网络,通过线性变换投射到词表向量,然后通过softmax得到各个词的概率。然后通过当我要翻译I love china的时候,解码器只需要输出概率词表中最大的那个词,就可以一个个推理出“我 爱 中国”。
我们现在用的chat大模型都是基于transformer的解码器部分实现的,也就是不断预测下一个数据,通过这种“猜”的方案,来实现对话、写文章、写代码等众多的应用场景,方案很简单,但是却非常有用!
07
结束语
好了,到这里我们已经完全搞懂了大模型的原理啦,过去只知道一些注意力机制、模型的推理是靠猜的这些模糊的概念,通过系统性的学习和总结,我们可以更深入的理解大模型的底层到底是什么,这对以后的大模型微调、大模型工程应用都有帮助,如果看到这里忘记了前面的内容,可以再重新理一遍,理解可能会更加深刻哦,bye bye!
AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

  因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量
更多推荐
 


所有评论(0)