AI大模型学习
入门篇
从函数到神经网络
函数
定义
在早期的人工智能研究中,有一种观点认为可以通过找到一个精确的数学函数来表达和解决所有问题。这种想法基于一种信念:即世界上的每一种现象或规律都可以通过某种形式的函数关系来描述。然而,随着研究的深入,人们逐渐认识到现实世界的复杂性远超最初的想象。
符号主义
符号主义是早期人工智能的一个重要流派,它试图通过逻辑推理、规则匹配等方法来模拟人类的思维过程。这种方法的核心在于寻找并利用那些能够准确描述问题本质的“规律”。然而,在面对极其复杂的现实情况时,符号主义遇到了难以克服的挑战——即如何全面而准确地捕捉到这些规律。
转向近似解
由于直接找到完美匹配所有情况下的通用法则变得几乎不可能,研究人员开始转向另一种思路:即使不能得到完全正确的答案,但至少可以尝试获得一个足够接近真实结果的近似解。这种方法更加灵活,并且能够在一定程度上缓解了对绝对精度的要求。
联结主义
当传统的方法无法有效解决问题时,联结主义提供了一种全新的视角。联结主义主张模仿大脑神经元之间的连接方式来构建模型,通过训练让系统自动学习数据中的模式。这实际上是一种“猜测”加“简化”的策略,其中关键在于如何有效地估计权重(w)和偏置(b)参数值。
- 线性模型:最简单的形式就是线性方程 f(x) = wx + b,其中 w 表示输入 x 对输出的影响程度,b 则是一个常数项。
- 激活函数:为了使模型能够处理非线性的关系,引入了激活函数 g()。例如,sigmoid 或 ReLU 等函数可以将线性组合的结果转换为更复杂的非线性映射。
通过组合构建复杂关系
通过不断地将线性和非线性激活函数相结合,可以创建出非常强大的模型来表示极为复杂的关系。尽管这种方式极大地增强了模型的表现力,但也带来了计算上的难度以及理解上的挑战。
神经网络
神经网络是上述思想的具体实现之一。它由多个层次组成,每个层次包含若干个节点(类似于神经元),这些节点之间通过权重相连。整个网络的工作原理可以用公式 f(x) = g(wx+b) 来概括,其中 g() 是激活函数,wx+b 则是对输入进行线性变换后的结果。通过调整各层之间的权重和偏置,神经网络能够学习到从输入到输出之间复杂的映射关系,从而实现诸如图像识别、自然语言处理等多种任务。
总之,从最初的追求精确到后来接受近似,再到采用更加直观且灵活的联结主义方法,人工智能的发展历程体现了科学研究不断适应新挑战的过程。
输入层 输出层
x y
复杂一点像下图这样 ↓

计算神经网络的参数
损失函数
如图
y为真实数据 y^为预测数据

用于真实值与预测值的误差

我们可以把所有真实值和预测值加起来,这样可以得到预测数据和真实数据之间的总的误差(拟合度)

均方误差 (MSE)
因为绝对值不平滑,我们用平方来代替,一来解决绝对值的误差,二来放大误差较大的值的影响,我们再根据样本的数量平均一下,消除样本数量大小的影响,我们把损失函数记成L,就得到下面的公式

参数视角则为

简单的线性函数

演化过程
展开损失函数

把y^代入

求和符号展开

把上面这组数据带进来(视频里给的最后一个3-4w,大概率是写错了)

平方展开,代入公式是a^2 - 2ab +b^2

化简结果

求导,怎么求呢
图一

计算 w^x = x个 w
原题中
常数项为0,因为他不随w变化
一次项w 一个w在变 ->变化算一次 所以乘以1
两次项 俩个w在变 → 变化算两次 → 乘 2
所以:d/dw(7.5w^2) = 7.5 · 2w = 15
结果

要求最小值,带入进来就是

导数等于0,就可以得到
带入为原直线函数,

y 是模型的输出(预测值 )这个 y 预测损失多少
此时y=x就是让损失函数最小,也就是最拟合真实数据的那条直线

所以它(损失函数)实际上就是一条开口向上的抛物线,我们刚刚就在寻找最低点,采用的办法就是导数=0

复杂的线性函数

图像来解释就是一个三维图像,一个开口向上的网状形状

我们要找到的就是这个二元函数最小值对应的w和b

那么就不再是计算导数,而是偏导数来求解

对w求偏导,就是把b当作常数,在三维图像就是这样的,相当于只看到这个切面

对于b也是如此,对b求偏导,就是把w当作常数,在三维图像就是这样的,相当于只看到这个切面

线性回归
通过寻找一个线性函数,来拟合x和y之间的关系,也就是机器学习中最基本的一种分析方法,我们叫他线性回归

往往呢,我们不能通过像刚刚那样将导数=0来计算出最小值
解决办法呢,简单除暴一点就是一点点试
假如w为5,b为5,损失函数计算结果为10

我们调整了w为6,损失函数为9,这说明w增加让损失函数的值变小了。

再尝试b增加1,结果为11.损失函数增加2,说明b增加让损失函数的值变大了,误差变大了。

我们就反过来对b进行减少,让损失函数继续变小


w变化一点点,使得损失函数也发生变化。

这其实是损失函数对w的偏导数

对b也是如此

我们要做的其实就是w和b不断网偏导数的反方向去变化

具体的变化快慢呢,我们用一个系数n来表示,我们叫他学习率

梯度
这些导数所构成的向量,我们就叫他梯度

梯度下降
不断变化w和b,让损失函数逐渐变小的一个过程,进而求出最终的w和b,这个过程我们叫他梯度下降。

偏导数如何求?
神经网络中,虽然函数本身是一个复杂到变态的非线性函数,直接求导不好求。
但是,层与层之间的关系,确实非常简单的,我们就用前面的这个神经网络结构来举例

只有一个输入和输出,而且中间只有一个隐藏层。
我们通过x来计算出隐藏层a的值,这个g就是随便一个激活函数,比如sigmod
再根据a的值计算出y^的值,然后根据y^的值以及真实值y计算出损失函数L,损失函数就用均方误差了。

由于只有一个输出数据,所以把求符号省略掉了

链式法则
这个神经网络中共有4个参数,w1和w2,b1和b2要通过梯度下降的方式逐渐求解。
w1变化多少,会让L变化多少。
我们就看w1变化一个单位,a变化多少
再看a变化一个单位,会让y^变化多少
最后看y^变化一个单位,会对L变化多少

把三者相乘,就知道w变化一个单位,会使得L变化多少了

也就是微积分中的复合函数求导,在这里也叫做链式法则。
反向传播
因为我们可以从右向左计算求导公式,逐步更新每一层的参数,直到把所有的神经网络的参数,都计算一遍,所以前面计算用到的偏导数的值后面也会用到,所以不必计算太多,而是让这些值从右向左一点点传播过来,这个过程就叫做反向传播。
训练
我们通过前向传播输入x计算输出y,通过反向传播计算出损失函数个参数的梯度,每个参数都向着梯度的反方向变化,这就构成了神经网络的训练。当神经网络进行足够多的训练,直到让损失函数足够小,也就是找到了我们需要的那个函数。

调教神经网络的方法
我们知道神经网络的本质就是线性变换,套上一个激活函数,不断组合而成的一个非常复杂的非线性函数,并且巧妙地通过梯度下降,
我们可以从肉眼看出下面哪个好,一点点计算出神经网络中的一组合适的参数,那这样看起来只要神经网络足够大,岂不是什么问题都能解决了,理论上确实是这样,但是理想很丰满,现实很骨感,令人头疼的问题很快就接踵而至。
上个视频中我们说过,我们的目标是让数据拟合的好,比如左边这个就拟合的挺好,右边这个就不太好

过拟合
那再来一组图,这回你认为是左边好还是右边好呢?

纯从预测值与真实值误差来看,也就是损失值最小化这个目标来看的话,显然右边这个更好但直觉似乎告诉我们,右边这个好像有点好的太过了,结果可能是只适合训练数据,对新数据的预测反而不如左边的准,那这种在训练数据上表现的很完美,但是在没见过的数据上表现的很糟糕的现象,就叫做过拟合。而在没见过的数据上的表现能力我们叫泛化能力。

那为什么会过拟合呢。看看刚刚这个图。

其实就是训练数据本身是个很简单的规律,但模型太复杂了,把那些噪声和随机波动也给学会了,那这该怎么办呢?
自然就是简化一下模型的复杂度
比如说这个案例中
你用一个非常复杂的神经网络模型来训练
效果甚至不如一个线性模型好

这就告诉我们
神经网络不是越大越好
那简化模型复杂度有效果
与之相对的就是增加训练数据的量

数据量足够充足
那原本复杂的模型也就相对变得简单了

数据增强
但有的时候我们确实无法收集
或者懒得收集更多的数据
怎么办呢
那就在原有的数据中创造更多的数据
比如说在图像处理中
我们可以对图像进行旋转翻转
裁剪加噪声等操作
创造出更多新的训练样本
这就叫做数据增强。

鲁棒性(Robostness)
这样不仅仅能够产生更多的数据
还刚好训练了一个让模型不因
输入的一点点小的变化
而对结果产生很大的波动
这就是增强了模型的鲁棒性。
提前终止训练过程
好刚刚是从数据和模型本身入手来防止过拟合
那有没有可能从训练过程入手
阻止过拟合的发生呢
其实训练过程就是不断调整参数的过程吧
那其实只要不让参数继续过分的
向着过拟合的方向发展就可以了

所以有个简单到你都不敢相信的办法
就是提前终止训练过程
意思就是差不多就行了
不用追求那么完美
不过这种办法还是太粗糙了
像咱们这种精致的人
肯定还得追求一些更精细的办法
也就是说有没有什么办法
能够直接抑制参数的野蛮增长呢
非常简单
你想想看参数是怎么被训练出来的
是不是通过让参数往让损失函数变小的方向
不断调整
也就是梯度下降

那我们可以在损失函数中
把参数本身的值加上去
这样在参数往大了调整时

如果让损失函数减小的没有那么多
导致新的损失函数反而是变大的
那么此时调整就是不合适的

神经网络训练优化与高级架构
一、 对抗过拟合
为了防止模型在训练集上表现太好(过拟合),而在未知数据上表现糟糕,我们使用多种方法:
- 正则化
- 核心思想:在损失函数中加入“惩罚项”,抑制模型参数过大或过于复杂。
- L1 正则化:惩罚项为所有权重参数的绝对值之和。倾向于产生稀疏权重(部分权重为0)。
- L2 正则化:惩罚项为所有权重参数的平方和。倾向于让权重均匀地变小。
- 正则化系数:控制惩罚力度的超参数。
- Dropout(丢弃)
- 核心思想:在训练过程中,随机“关闭”(置零)网络中的一部分神经元。
- 效果:迫使网络不依赖任何单个神经元或少数路径,从而增强模型的鲁棒性和泛化能力。
- 特点:由 Geoffrey Hinton 提出,方法简单但效果显著,有点“玄学”但有效。
- 其他方法
- 增加训练数据量。
- 降低模型复杂度(减少层数或神经元数)。
- 提前终止训练。
二、 神经网络基础架构演进
1. 矩阵表示
将繁琐的神经元计算改写为矩阵运算,不仅公式简洁,更能利用 GPU 并行计算 加速训练和推理。
2. 从全连接到卷积网络
- 全连接层:每一层的每个神经元都与上一层的所有神经元相连。处理图像时参数巨大,且无法有效捕捉空间局部特征。
- 卷积神经网络(CNN):
- 核心创新:用卷积层替代全连接层,进行卷积运算。
- 卷积核:一个小的权重矩阵,在输入图像上滑动,计算局部区域的加权和,提取局部特征(如边缘、纹理)。
- 优点:参数共享极大减少了参数量;能有效捕捉图像的空间层次信息。
- 典型结构:卷积层 + 池化层(用于降维)+ 全连接层。
三、 处理序列数据:从词嵌入到 RNN
1. 词嵌入
- 目的:将词语转化为计算机可处理的数值向量。
- 独热编码(One-Hot):维度极高且稀疏,无法表示词义相关性。
- 词嵌入(Word Embedding):将词映射到低维、稠密的连续向量空间(潜空间)。语义相近的词,其向量在空间中的距离也相近。
- 嵌入矩阵:所有词向量的集合,通常通过训练(如 Word2Vec)得到。
2. 循环神经网络(RNN)
- 核心思想:为网络引入“记忆”。每个时间步(处理一个词)的输出不仅取决于当前输入,还取决于上一个时间步的“隐藏状态”。
- 结构:具有循环连接,能将历史信息逐步向后传递。
- 用途:处理文本、语音、时间序列等有顺序关系的数据。
- 缺陷:
- 长程依赖问题:信息随步长增加而衰减或爆炸。
- 串行计算,训练效率低。
- 改进:LSTM、GRU 等门控机制缓解了长程依赖问题。
四、 Transformer:突破性的架构
1. 核心:自注意力机制
- 目标:让模型在处理一个词时,能同时“注意”到句子中所有其他词的信息,且能衡量它们的重要性。
- 过程:
- 为每个输入词向量生成三个向量:查询(Q)、键(K)、值(V)。
- 用当前词的 Q 与所有词的 K 计算相似度(得分)。
- 用 Softmax 将得分归一化为权重。
- 用权重对所有的 V 进行加权求和,得到当前词的新表示,它融合了全局上下文信息。
- 多头注意力:并行运行多个自注意力机制(多个“头”),让模型从不同角度关注信息,最后将结果合并。这是 Transformer 的核心创新。
2. Transformer 整体架构
- 编码器:负责理解输入序列。包含多头注意力层和前馈神经网络层,层间有残差连接和层归一化。
- 解码器:负责生成输出序列。比编码器多一个“编码器-解码器注意力层”,用于关注编码器的输出。
- 位置编码:因为自注意力本身没有顺序信息,需要额外加入位置编码向量来告诉模型词的顺序。
- 意义:彻底抛弃了 RNN 的串行结构,支持高度并行化训练,效果好且可扩展性强,成为现代大语言模型的基石。GPT 系列模型主要基于 Transformer 的解码器部分构建。
五、 大模型关键术语速览
| 概念 | 简要说明 |
|---|---|
| 大模型 / 大语言模型 | 参数量巨大的模型,用于处理自然语言。 |
| 预训练 / 微调 | 先在海量通用数据上训练基础模型,再用特定任务数据精细调整。 |
| 推理 | 使用训练好的模型根据输入生成输出的过程。 |
| 涌现 | 当模型规模达到一定程度时,突然展现出的小规模模型不具备的能力。 |
| 开源 / 闭源模型 | 是否公开模型权重和训练代码。 |
| 私有化部署 | 将模型部署在本地服务器或个人设备上。 |
| 生成式 AI | 能够生成新内容(文本、图像等)的 AI 系统。 |
| 上下文 / Prompt | 输入给模型的所有信息,即“提示词”。 |
| 温度 / Top-k | 控制生成内容随机性的参数。 |
| 幻觉 | 模型生成看似合理但不符合事实或逻辑的内容。 |
| 检索增强生成(RAG) | 先从外部知识库检索相关信息,再结合信息生成答案,减少幻觉。 |
| 向量数据库 | 专门用于存储和检索向量化数据(如词向量)的数据库。 |
| 智能体(Agent) | 能感知环境、规划、调用工具以完成复杂任务的 AI 程序。 |
| 模型压缩 | 使模型变小、变快的方法,如量化、蒸馏、剪枝。 |
| 思维链 | 引导模型通过逐步推理(“让我们一步步思考…”)来提升复杂问题回答的准确性。 |