引言
几年前,"神经网络"还是一个只在实验室里出现的词。如今,以 ChatGPT 为代表的大语言模型已经能写代码、做翻译、解数学题;以 Stable Diffusion 为代表的视觉模型能根据文字生成精美的图像。这些技术看似魔法,但背后都是同一套数学框架——人工神经网络。
本文是"AI 底层原理三部曲"的第一篇,聚焦最核心的问题:神经网络到底是什么?它如何从数据中"学习"? 我们将从单个神经元出发,逐步搭建起完整的深度学习训练框架。不需要数学博士学位——只要你对"为什么 AI 能学会东西"感到好奇,这篇文章就是为你写的。
第一部分:神经网络的基石
1.1 一个神经元在做什么?
1943 年,神经生理学家 Warren McCulloch 和数学家 Walter Pitts 发表了一篇开创性的论文,提出了第一个人工神经元的数学模型。他们的灵感直接来自大脑——人脑约 860 亿个神经元通过突触相互连接,当上游神经元释放的神经递质累积超过某个阈值时,下游神经元就会被"激活",产生动作电位并继续传递信号。
人工神经元把这个生物过程抽象成了一个简洁的数学公式:

输出 = 激活函数( w₁x₁ + w₂x₂ + ... + wₙxₙ + b )
让我们拆解这个公式中的每一个组成部分:
符号正式名称含义通俗类比x₁, x₂, ..., xₙ输入(Input)来自前一层神经元或原始数据的信号神经元接收到的刺激强度w₁, w₂, ..., wₙ权重(Weight)每个输入对应的"重要性系数"。可正可负——正权重表示兴奋性连接,负权重表示抑制性连接每个选民的话语权。权重越大,这条输入越能影响最终决定b偏置(Bias)神经元自身的"基础电位"。偏置为正时神经元更容易被激活,为负时更"懒惰"神经元天生的"容易兴奋程度"Σwᵢxᵢ + b净输入(Net Input)所有信号的加权求和,也被称为"logit"综合考虑所有因素后的"倾向性得分"激活函数激活函数(Activation Function)对净输入做一次非线性变换,决定最终的输出值"审批门槛"——得分过线才放行,否则截住
通俗理解:把神经元想象成一位投票委员。多个选民(输入 x)给她提建议,但每个选民的话语权不一样(权重 w)。委员把所有建议加权求和,再加上自身的倾向性(偏置 b),最后过一道"审批门槛"(激活函数),决定最终投赞成还是反对。整个过程不过是一连串的乘法和加法——但在数百万个这样的神经元协同工作时,就能涌现出令人惊叹的智能行为。

一个具体的数值例子:假设我们要判断一封邮件是不是垃圾邮件。输入 x₁ 表示"邮件是否包含'免费'一词"(1 或 0),x₂ 表示"发件人是否在通讯录中",x₃ 表示"邮件是否在深夜发送"。经过训练,模型学到的权重可能是 w₁=2.0("免费"是强信号),w₂=-1.5(在通讯录中是减分项),w₃=0.3(深夜发送略有嫌疑),偏置 b=-1.0(默认倾向"不是垃圾邮件")。最终净输入越大,越可能是垃圾邮件。
1.2 激活函数——为什么不能没有它?
这是初学者最容易忽略、却最核心的问题之一。假设我们不用激活函数(或者说激活函数就是 f(x)=x,恒等变换),会发生什么?
答案是:无论堆多少层,整个网络都等价于一个单层线性模型。因为线性变换的叠加依然是线性变换——就像把你的照片复印 100 次,得到的仍然是同一张照片,不会变得更清晰。没有非线性,神经网络就失去了逼近复杂函数的能力,只能解决"一条直线能分开"的最简单问题。
通俗理解:ReLU 就像一个"只报喜不报忧"的传话筒——负面的东西直接忽略(输出 0),正面的东西原样传递。这个看似简单的设计有一个巧妙的副作用:正区间的梯度恒为 1,不会像 Sigmoid 那样在深层网络中衰减到接近 0。正是这个看似微小的改动,让训练 100 层以上的深层网络成为可能,直接催生了深度学习革命。
1.3 从单层到多层——特征层次结构与万能逼近
单个神经元只能画一条直线(在高维空间中是一个超平面)来分类。这让它在面对异或(XOR)这样经典的问题时束手无策——XOR 的四个点((0,0)→0, (0,1)→1, (1,0)→1, (1,1)→0)无法用一条直线分开。这个困境在 1969 年由 Minsky 和 Papert 在《感知机》一书中严格证明,直接导致了第一次"AI 寒冬"。
但给单层网络加一个隐藏层,情况就完全不同了。万能逼近定理(Universal Approximation Theorem) 告诉我们:只要隐藏层的神经元足够多,一个两层的神经网络就可以以任意精度逼近任何连续函数。这就好比:
输入层 → 隐藏层1 → 隐藏层2 → ... → 隐藏层N → 输出层

每一层学习不同抽象级别的特征,形成一条从具体到抽象的"认知流水线":
- 浅层(第 1-2 层):识别最基本的视觉元素——边缘的方向、颜色分界、简单纹理的重复模式
- 中层(第 3-5 层):将基本元素组合成有意义的结构——圆形眼睛、三角形鼻子、弧线嘴巴
- 深层(第 6-10 层+):抽象出完整的语义概念——"这是一张猫脸"、"这是一辆汽车的前脸"
这恰好对应了人类视觉皮层从 V1 到 IT 区的层级处理方式——这是神经科学和人工智能少数有直接对应关系的地方之一。
通俗理解:把神经网络想象成一条工厂流水线。第一道工序只检查原材料有没有裂纹(边缘检测),第二道工序把合格零件组装成半成品(局部形状),第三道工序检测组装是否符合规格(完整物体识别),最后一道工序贴标签出货(分类决策)。每一道工序只关注自己那一层的事,但整个流水线协作起来就能完成极其复杂的判断。而且最神奇的是——没有人告诉每道工序该做什么,所有的分工都是在训练中自动涌现出来的。
第二部分:网络如何"学习"——反向传播与梯度下降
2.1 损失函数——量化"错得有多离谱"
训练神经网络的核心任务是找一组最优的权重和偏置(在 GPT-3 中,这意味着约 1750 亿个参数),让网络的预测尽可能接近真实答案。为此,我们需要一个客观的"打分标准"——损失函数(Loss Function)。
损失函数本质上是在衡量"你的答案和标准答案之间的差距"。不同任务需要不同的衡量方式:
任务类型常用损失函数数学表达式通俗解释回归(预测数值)均方误差(MSE)(1/n)Σ(yᵢ - ŷᵢ)²预测房价比实际高 5 万还是低 5 万,惩罚一样回归(对异常值不敏感)平均绝对误差(MAE)(1/n)Σyᵢ - ŷᵢ二分类二元交叉熵(BCE)-[y·log(ŷ) + (1-y)·log(1-ŷ)]当你 say"99%确定是猫"但其实是狗时,惩罚很大多分类分类交叉熵-Σ yᵢ·log(ŷᵢ)1000 个类别中,正确答案那张图的概率应该最高LLM 预训练交叉熵损失-log P(正确的下一个token)在 10 万个可能的词中,模型觉得正确那个词的概率有多高
关键理解:损失函数的选择直接影响了模型"在乎什么"。用 MSE 训练的图像生成模型会倾向于输出"模糊但安全的平均值",而用感知损失(Perceptual Loss)训练的模型会输出更锐利逼真的图像——即使像素值和真实图像不完全一样。
2.2 梯度下降——一步一步走向最优解
假设你蒙着眼睛站在山顶,想要走到山谷最低点。你能做的只有感受脚下的坡度,然后朝最陡的下坡方向迈一小步,不断重复——这就是**梯度下降(Gradient Descent)**的核心直觉。
数学上,这个过程表示为:
θ_new = θ_old - η · ∇J(θ)
其中:
- θ(参数):所有要优化的权重和偏置的总称
- J(θ)(损失函数):当前参数下的"错误程度"
- ∇J(θ)(梯度):损失函数在每个参数上的"坡度"——告诉我们往哪个方向调参数能让损失下降最快。如果某个参数的正梯度很大,意味着增大它会让损失大幅增加,所以应该减小它(所以公式里是减去梯度)
- η(学习率 Learning Rate):每一步迈多大。这是最重要的超参数之一——太小则收敛极慢(像蚂蚁下山),太大则可能跳过最优点甚至发散(像从山上直接跳下来)
梯度下降的三种实现方式:
方式每次更新用的数据量优点缺点**批量梯度下降(BGD)整个训练集梯度精确、收敛稳定百万级数据时一次更新都算不动随机梯度下降(SGD)1 个样本超快、可以"边看边学"梯度噪声极大、收敛路径像醉汉走路小批量梯度下降(Mini-batch SGD)**32~256 个样本兼顾速度和稳定性,可利用 GPU 并行batch size 需要调参
现代深度学习使用的几乎都是 Mini-batch SGD 或其变体。一个典型的 batch size 是 32 或 64——这样既能让 GPU 吃饱,又能保证梯度的方向大致正确。
2.3 优化器的完整演进路线——从 SGD 到 AdamW
普通的 SGD 有一个致命缺陷:学习率对所有参数一视同仁。想象你在一个狭长的山谷中——有些方向很陡(需要小步),有些方向很平(需要大步),但你只能用同一个步伐。结果就是 zigzag 式的低效前进。
以下是优化器的发展史,每一步都在解决前一步的痛点:
优化器年份核心思想解决的问题适用场景SGD1951纯梯度下降最基础需要精细调参的场景SGD + Momentum1964积累过去梯度的指数移动平均(惯性)减少 zigzag 振荡、加速通过平坦区比纯 SGD 更快收敛NAG1983先在惯性方向上"瞄一眼"再算梯度让动量更"有远见"Momentum 的改进版AdaGrad2011根据历史梯度平方和自适应调学习率稀疏特征得到更大更新(适合 NLP)后期学习率衰减太快RMSprop2012用指数移动平均替代 AdaGrad 的累加AdaGrad 学习率过早衰减RNN 训练中尤其有效Adam2014Momentum + RMSprop 的结合体两者优势兼得,调参简单2014-2020 的绝对王者AdamW2017将权重衰减(L2 正则化)从 Adam 的自适应学习率中解耦Adam 的 L2 正则化实现有 bugTransformer 训练的事实标准LAMB2019层级自适应学习率支持极大 batch size(32K+)分布式训练大模型
关于 AdamW 的重要细节:原始 Adam 论文中的权重衰减实现方式有误——它将 L2 正则化混入了自适应学习率的计算中,导致正则化效果被稀释。AdamW 将权重衰减从梯度更新中分离出来,变成了一个独立项。2021 年后的几乎所有 LLM 训练都用 AdamW,这不是偶然的——对于千亿参数级别的模型,这个修正确实会影响收敛的最终质量。
2.4 反向传播——链式法则的工程化应用
如果说梯度下降是"往哪走",那反向传播就是"算出每一步该往哪走"。它是深度学习训练的绝对引擎,1986 年由 Rumelhart、Hinton 和 Williams 正式提出并推广。
反向传播(Backpropagation) 的核心流程只有四步:
- 前向传播(Forward Pass):输入数据从第一层流到最后一层,逐层计算,得到最终预测值。同时缓存每一层的中间计算结果(因为反向时需要用到)
- 计算损失(Compute Loss):将预测值和真实标签比较,算出一个代表"差距"的标量
- 反向传播(Backward Pass):从输出层开始,利用微积分中的链式法则(Chain Rule),逐层反向计算"损失函数对每个参数的偏导数(梯度)"——也就是每个参数对最终误差的"贡献度"
- 参数更新(Parameter Update):用优化器(如 AdamW)根据梯度更新所有权重和偏置
一个具体的数值例子:假设有一个极简网络:输入 x=2,权重 w=3,偏置 b=1,激活函数 f(z)=z²(仅为演示),真实标签 y=50。
- 前向传播:z = wx + b = 3×2 + 1 = 7,ŷ = f(z) = 7² = 49
- 损失:L = (ŷ - y)² = (49-50)² = 1
- 反向传播(链式法则):
- ∂L/∂ŷ = 2(ŷ - y) = -2
- ∂L/∂z = ∂L/∂ŷ · ∂ŷ/∂z = (-2) × (2×7) = -28
- ∂L/∂w = ∂L/∂z · ∂z/∂w = (-28) × 2 = -56
- ∂L/∂b = ∂L/∂z · ∂z/∂b = (-28) × 1 = -28
- 参数更新(学习率 η=0.01):w_new = 3 - 0.01×(-56) = 3.56,b_new = 1 - 0.01×(-28) = 1.28
注意 w 和 b 都增大了——因为梯度是负的,减去负的等于加上正的。这让我们离 y=50 更近了一步。
通俗理解:像期末考试后复盘——先看总分比目标差了 1 分(损失),然后追溯:"这道题怎么扣了 3 分?因为公式记错了。为什么公式记错了?因为考前没复习这个知识点。"然后针对性地加强那个知识点(参数更新)。"反向"的本质就是从结果往回追溯每一层的原因。
2.5 梯度消失、梯度爆炸与 Batch Normalization
深层网络训练中最经典的难题有两个:
梯度消失(Vanishing Gradient):梯度从输出层往浅层传时,每传一层就衰减一次(在 Sigmoid 网络中每层大约衰减 4 倍)。传到第 5 层时,梯度已经比原来小了约 4⁵=1024 倍——浅层几乎学不到任何东西。这解释了为什么 2015 年之前,超过 20 层的网络几乎无法训练。
梯度爆炸(Exploding Gradient):相反,如果权重过大,梯度在反向传播中会指数级增长,导致参数更新的步幅大到离谱,网络参数直接变成 NaN。
解决方案的演进:
技术提出年份核心原理ReLU 激活函数2010正区间梯度恒为 1,不受层数影响Xavier/Glorot 初始化2010让每层输出的方差和输入相同,防止信号在前向传播中爆炸或消失He/Kaiming 初始化2015Xavier 的 ReLU 适配版,考虑 ReLU 只保留一半信号Batch Normalization2015对每层的输出做标准化(均值 0,方差 1),然后做可学习的缩放和偏移,大幅加速训练Layer Normalization2016BatchNorm 的变体,对每个样本独立标准化,不受 batch size 影响,适合 NLP 和 Transformer**残差连接(Skip Connection)**2015见下一节
2.6 残差连接——让 1000 层网络成为可能
残差连接(Residual Connection / Skip Connection) 是过去十年深度学习最重要的架构创新之一。它的数学表达式只有一行:
输出 = 网络层(输入) + 输入 // 直接把输入加到输出上

为什么这个简单的加法如此重要?因为它给梯度提供了一条"高速公路",可以从输出层直接传回浅层,绕过中间所有层可能造成的衰减。用数学来说:残差块的导数 = 网络层的导数 + 1。那个 "+1" 确保了即使网络层的导数接近 0,梯度至少为 1,不会完全消失。
ResNet 凭借这个设计赢得了 2015 年 ImageNet 图像识别大赛冠军(152 层 vs 之前的 19 层 VGG),错误率首次低于人类水平。此后,残差连接成为了所有深层架构的标配——从 Transformer 到 Stable Diffusion 的 U-Net,无处不见。
2.7 正则化——防止"死记硬背"
当一个神经网络参数量远超训练样本数时,它完全可能"背下"所有训练样本,丧失泛化能力——这就是过拟合(Overfitting)。以下是最常用的防止手段:
方法原理注意事项L2 权重衰减在损失函数中加入权重平方和的惩罚项,鼓励模型用更小的权重现代实现中通常直接用 AdamW 的 weight_decay 参数Dropout训练时随机"关掉"一部分神经元(置零),迫使网络不依赖任何单一神经元推理时需要关闭 Dropout。比例通常 0.2~0.5DropPath随机丢弃整条残差路径,适合极深网络ViT 和 Swin Transformer 中常用数据增强对训练数据做随机变换(翻转、裁剪、加噪),变相增加数据量几乎零成本的提升,必用Early Stopping当验证集损失不再下降时停止训练最简单但最有效的正则化之一Label Smoothing不要求模型 100% 确定,允许对错误类别分配微小概率LLM 训练中几乎没有使用的必要
总结
我们从单个神经元的数学公式出发,逐步搭建了完整的深度学习训练框架。总结核心要点:
- 神经元 = 加权求和 + 偏置 + 激活函数——最简单的计算单元,但海量组合后能逼近任意函数
- 激活函数提供非线性,没有它再多层也是白搭。ReLU 简洁高效,GELU 更平滑,各有用武之地
- 损失函数定义了什么叫做"好的预测",交叉熵统治分类,MSE 统治回归
- 梯度下降沿着损失函数的坡度一步步走向最优,学习率决定了步幅大小
- 反向传播用链式法则高效算出每个参数的梯度——是现代深度学习的计算引擎
- 优化器从 SGD 演进到 AdamW,每一步都在解决"怎么走得更快更稳"的问题
- 残差连接给梯度开了高速通道,让训练 1000 层网络成为可能
- 正则化防止网络死记硬背,"知道"和"理解"之间的鸿沟靠它来弥合
神经网络的本质,不过是一层一层的矩阵乘法和逐元素的非线性变换——但当成千上万的 GPU 同时运算,以人类文明积累的所有文本为数据时,涌现出的行为确实无限接近"理解"。而这一切的起点,不过是一个会加权求和和过阈值的小小神经元。 —— Iustitiae
