神经网络是什么

神经网络封面

你打开手机相册,长按一张猫的照片,能一键选中相册里所有的「猫」——这件你天天能做的事,背后就是一个神经网络在干。

一句话定义:神经网络是一种模仿大脑神经元分工协作的方式、靠从数据里反复练习、不断调权重来学会判断的机器学习模型。

但别被「模仿大脑」吓到——真正的神经网络比大脑简单亿万倍。用一个你秒懂的类比:它就像一个识别猫的评审委员会,分几道工序层层把关:

  • 第一道工序的每个委员,只盯一个小线索——这只耳朵尖不尖?这撮毛什么颜色?眼睛圆不圆?——各自打出一个「初步印象」;
  • 第二道委员把上一道的印象再综合——有尖耳朵 + 圆眼睛,更像猫了;
  • 最后一道委员拍板:「是猫」还是「不是猫」。

每个委员对每个线索「听不听」,取决于一个数——权重(相当于这个委员给某个线索的话语权)。而整个委员会判断得准不准,靠的是反复练习、不断微调每个委员的话语权——这就是「训练」。

这个类比里,藏着神经网络全部的零件:委员 = 神经元话语权 = 权重拍板前的标准高低 = 偏置委员「要不要把印象往下传」的开关 = 激活函数工序 = 层

从体系上看,神经网络是深度学习的地基,也是今天所有大名鼎鼎的模型的「祖宗」——识别图片的 CNN、处理语言的 RNN、撑起 ChatGPT 的 Transformer,骨子里都是「神经元分层连接 + 从数据学权重」的神经网络,只是连法不同。所以理解了神经网络,就拿到了理解这一整条技术脉络的钥匙。它最早可追溯到 1958 年 Rosenblatt 提出的感知机(Perceptron),是公认的人工神经元雏形。

先认得几个词

术语大白话
神经元(neuron)/ 节点委员会里的一个「委员」:收进几个数(比如「耳朵尖不尖=1」「胡须长不长=0」),做一次简单计算,吐出一个数(比如「有点像猫=0.6」)。单个委员只会这点本事,厉害的是成千上万个连起来。
权重(weight)委员对某条线索的「话语权」——AI 里就是一个跟着线索相乘的数。比如「耳朵尖」这条线索权重是 0.7,就是它能左右「是不是猫」结论的七成;权重是 0,这条线索就被完全无视。(不是日常说的「权力/分量」那种抽象感觉,而是真有一个具体的数。)
偏置(bias)委员本人的「脾气倾向」——AI 里就是一个固定加上去的数,跟线索无关、是委员自带的。偏置是正的,委员心软、证据不太够也容易点头说「是」;偏置是负的,委员眼高手低、证据得很足才肯松口。
激活函数(activation)委员的一道「门槛」——证据够强才把印象往下传,太弱就压成零。为什么非要有它? 没这道门槛,哪怕叠一百个委员,它们合起来也只是一把直尺,只能一刀切(画一条直线把猫和狗分开);有了它,网络才能学会弯弯绕绕的、真正复杂的判断。
层(layer)一道工序:同一层的委员各自独立算,再把结果交给下一道。分输入层、隐藏层(中间若干道)、输出层——层层递进,越往后提炼出的特征越抽象。
训练 / 学习(假熟词)这两个词在 AI 语境和日常不一样:不是人那样读书思考,而是指用数据反复调网络里的权重和偏置,让输出越来越准——文末代码里 loss.backward() + opt.step() 那两行,就是这件事的真实模样。

光记单个词还不够,把它们串起来跑一遍,你才知道这套零件怎么配合。假设有个只盯「耳朵尖」的委员:它收到线索值 1(耳朵确实尖),乘上权重 0.7,再加上自带的偏置 -0.2,算出原始冲动 z=0.7×1+(0.2)=0.5z = 0.7 \times 1 + (-0.2) = 0.5;这个 zz 再过激活函数,就变成传给下一道工序的「印象」。

一句话总结四个词的分工:权重大小决定某条线索多重要,偏置正负决定委员严不严,激活函数决定够不够格往下传——一个神经元就这么把一堆线索揉成了一个判断。完整的逐步手算(含激活函数怎么算),见下一节。

一个神经元在干嘛:加权求和 + 激活

把「委员」拆开看,它干的事出奇地简单,就两步。

第一步:把收到的线索各自乘上话语权,再加一个底数。

z=w1x1+w2x2++wnxn+bz = w_1 x_1 + w_2 x_2 + \cdots + w_n x_n + b

符号解读:

  • xix_i —— 第 ii 个输入线索(比如「耳朵尖不尖」这个数)
  • wiw_i —— 这个线索的话语权(权重),AI 里是相乘的系数
  • nn —— 输入线索的总个数,下标 ii 从 1 取到 nn
  • bb —— 偏置,这个委员的底数(标准高低)
  • zz —— 加权求和的结果,还没过开关的「原始冲动」

第二步:把 zz 过一遍激活函数,决定要不要往下传。

a=f(z)a = f(z)
  • aa —— 激活函数的输出,过完开关后往下传的「初步印象」

ff 就是激活函数,常见的有:

  • ReLUzz 是正的就原样放行,是负的直接归零——「不够明显就不传」。简单粗暴,今天绝大多数网络都用它。
  • Sigmoid:把任意 zz 压进 (0,1)(0,1) 区间,可以当成「概率」——输出层爱用它来给「是猫的概率」打分。
线性与非线性分类边界对比

图 1:激活函数的价值——没有它,网络叠再多也只能画一条直线;有了它,才能学出弯弯绕绕的分界,识别真正复杂的模式。

AI 里的「权重」是相乘的系数、「偏置」是相加的底数,两者都是网络自己学出来的参数。一个神经元用 PyTorch 写,核心就两行:

python
z = self.layer(x)        # 加权求和 z = W·x + b(nn.Linear 把"权重矩阵+偏置"打包成一层)
a = torch.relu(z)        # 过激活函数 a = f(z)

这里的 nn.Linear 把「一堆权重 + 偏置」打包成一层,所以代码里看不到单独的 wiw_ibb——它们被藏进 nn.Linear 自带的参数里了。

手算一个神经元

公式看着抽象,我们用一个只看两个线索的委员实际算一遍,你就知道它怎么把线索变成判断。

已知: 两个输入 x1=1x_1 = 1(「耳朵尖」这个线索出现)、x2=0x_2 = 0(「长胡须」这个线索没出现);权重 w1=0.7w_1 = 0.7(耳朵尖的话语权高)、w2=0.5w_2 = 0.5;偏置 b=0.2b = -0.2(这个委员标准偏高,负数表示「证据不够强就先不倾向下结论」)。激活用 sigmoid。

步骤计算结果
加权求和0.7×1+0.5×0+(0.2)0.7 \times 1 + 0.5 \times 0 + (-0.2)0.7+00.2=0.50.7 + 0 - 0.2 = 0.5
sigmoid 激活11+e0.5\dfrac{1}{1+e^{-0.5}}a0.62\mathbf{a \approx 0.62}

(式中的 ee 是自然对数的底,约等于 2.718,是一个数学常数。)

自检: sigmoid 的输出必须落在 (0,1)(0,1) 区间——0.620.62 在范围内 ✅;加权求和 z=0.5>0z = 0.5 > 0,所以 a>0.5a > 0.5(倾向「是」),方向也对 ✅。

这个 a0.62a \approx 0.62 就是这个委员的「初步印象」,会作为新线索传给下一道工序的委员。

神经元怎么连成一张网:分层与前向传播

一个委员只会做简单的线性判断,但把成百上千个委员分层串起来,奇迹就出现了:每一道工序,都在把上一步的线索揉成更高层、更抽象的印象

  • 输入层:接收原始数据。识猫时,就是图片里每个像素的数字。
  • 隐藏层(中间若干道):第一道可能只认「边缘」「色块」这种零碎线索;后一道把边缘揉成「耳朵」「眼睛」;再后一道揉成「猫脸」。层次越深,提炼出的特征越高级——这就是「深度学习」里「深度」二字的来源。
  • 输出层:最后一道拍板,给出「是猫的概率」。

数据从输入层逐层往后流,每经过一个神经元就做一次「加权求和 + 激活」,最后在输出层得到预测——这个过程叫前向传播(forward)。

神经网络分层抽象示意

图 2:每一层都在把上一层的线索揉成更抽象的特征——像素变成边缘,边缘变成耳朵眼睛,最终汇聚成「是猫」的判断。

注意「深度」不是越深越好:层太多会更难训练,还容易「死记硬背」(术语叫过拟合——把训练题背得滚瓜烂熟,遇到新题却不会做)。多少层合适,是个经验活。

它是怎么学会的:训练 = 看答案、调话语权

到这里,网络其实还什么都不会——所有权重一开始都是随机的,输出基本是瞎猜。让它变聪明的过程叫训练,核心就一个循环:

  1. 前向传播:让网络对一批数据给出预测。
  2. 算误差:把预测和正确答案一比,算出差多少(这个差叫损失 / loss)。
  3. 反向传播:从输出层往回算,揪出每个权重该为误差负多少责任——哪些话语权该调大、哪些该调小。这一步用到的数学工具叫梯度,它指的方向正是「让误差下降最快」的方向。
  4. 更新权重:真的把权重往那个方向挪一点点。

重复这个循环成百上千次,权重越来越准,网络就从瞎猜变成了「会判断」。其中第 3、4 步——反向传播 + 更新——是整个 AI 的心脏。文末代码里 loss.backward()opt.step() 这两行,干的就是这件事。

前向传播与反向传播对照

图 3:训练的一来一回——前向传播让数据向右流得到预测,反向传播让误差向左回流、揪出每个权重该怎么调。

反向传播和「梯度下降」本身是两座大山,本文先点到为止——它们各自值得单开一篇。你只要先记住一句话:训练的本质,就是反复「看答案、调话语权」

神经网络在哪里大显身手

只要一件事能变成「输入一堆数字、输出一个判断」,神经网络就能上手:

  • 图像识别:手机相册按猫狗/人脸自动分类、人脸解锁、拍题识花,背后都是它(更专门的形态叫 CNN)。
  • 语音助手:把你的语音转成文字,再把文字理解成可执行的指令。
  • 机器翻译 / 聊天机器人:今天的大模型(ChatGPT 这类)本质也是神经网络(Transformer 这种连法),只是规模大到惊人。
  • 推荐系统:短视频、购物 App 越用越懂你,靠的就是它学你的偏好。
  • 预测与决策:信用评估、天气预报、医疗影像辅助诊断。

小结

神经网络就是一个分层的识别委员会:每个神经元干的事极简单——把收到的线索按权重加权求和、加个偏置、再过个激活函数z=w1x1++wnxn+bz = w_1x_1+\cdots+w_nx_n+ba=f(z)a=f(z));成千上万个神经元分层连起来,就能把像素这种零碎输入层层提炼成「是不是猫」这样的判断;而它「变聪明」靠的不是人写规则,而是反复看数据、对照答案、微调每个权重(反向传播 + 更新)。它是 CNN、RNN、Transformer 共同的地基——理解了它,就握住了进入深度学习的总钥匙。

完整代码:教一个神经网络认猫

下面把上面的零件翻译成 PyTorch,教一个最小的神经网络学会「尖耳朵 + 长胡须 → 是猫」这条规则。重点看 CatNet.forward 里每一行注释,和文章公式逐条对应。代码已实跑验证:训练后真学会了——尖耳朵 + 长胡须判为猫(概率 0.99),其余三种都判不是(概率 0.00)。

先看懂整体流程,再看代码细节——这段代码回答「怎么教神经网络学会一条判断规则」,骨架是「造大脑 → 备料 → 反复练习 → 考试」:

  • 造大脑class CatNet):把神经网络的零件(两层 nn.Linear + 一个 ReLU 激活)和算法(forward)打包成一个类。
  • 备料:准备 4 条带标签的小数据(两个特征 + 是不是猫),造出大脑实例(权重先随机),备好「调权重的工具」(优化器)和「量误差的工具」(损失函数)。
  • 反复练习(训练循环 500 次):每次循环 4 步——预测(前向传播)→ 算误差(和正确答案比)→ 反向(算每个权重该往哪调)→ 更新(真的去调)。重复 500 次,权重越来越准。
  • 考试(测试):再喂一遍数据,看它现在判什么。学会了就只在「尖耳朵 + 长胡须」时判「是猫」。

记住这个骨架:造 → 备 → 练(预测→误差→反向→改)→ 考。上一篇 RNN 是这个流程,这篇的神经网络也是——变的只是「大脑」内部怎么算。

python
import torch            # torch 是 PyTorch 深度学习库:提供"张量"这种数据容器,还能自动算梯度(调权重就靠它)
import torch.nn as nn   # nn 是 PyTorch 的神经网络模块,Linear/ReLU 等现成的"零件"都在里面

# ===== 任务:教神经网络学会「尖耳朵 + 长胡须 → 是猫」=====
# 两个特征:x1=是否有尖耳朵, x2=是否有长胡须;只有两个都满足才算猫
# torch.tensor 把列表变成"张量"——就是 PyTorch 存数据用的多维数组,是这里所有数据的基本容器
# 注意写成 1.(带小数点):表示这是小数(浮点数),神经网络只认小数、不认整数
X = torch.tensor([[1., 1.],   # 尖耳朵 + 长胡须 → 猫
                  [1., 0.],   # 只尖耳朵 → 不是
                  [0., 1.],   # 只长胡须 → 不是
                  [0., 0.]])  # 都没有 → 不是
y = torch.tensor([[1.], [0.], [0.], [0.]])   # 标签:是不是猫

# ===== 定义最小的神经网络(对应文章结构)=====
# nn.Module 是 PyTorch 所有网络的"模板";自己写网络就照它造(写法 class CatNet(nn.Module),括号里就是"照它造")
class CatNet(nn.Module):
    def __init__(self):
        super().__init__()                          # super().__init__() 是固定写法:让 PyTorch 先把模板该初始化的都初始化好,照抄即可
        self.layer1 = nn.Linear(2, 4)              # 第一道工序:收进 2 个线索(尖耳朵、长胡须),让 4 个神经元各自综合一遍,输出 4 个初步印象(4 是随手定的,换 3 或 8 也行)
        self.act = nn.ReLU()                        # 激活函数 ReLU:正数原样放行、负数砍成 0;有了这步操作,网络才不止会画直线、能学弯弯绕绕的复杂判断
        self.layer2 = nn.Linear(4, 1)              # 隐藏层→输出层:4 个神经元综合 → 1 个"是不是猫"的得分

    # forward 定义"数据怎么从输入流到输出";喂网络数据时 PyTorch 会自动调用它(参数 x 就是喂进来的输入)
    def forward(self, x):
        z1 = self.layer1(x)                         # 第一层加权求和(文章公式 z = W·x + b);4 条数据一起算,每条各得 4 个数
        a1 = self.act(z1)                           # 过 ReLU(文章公式 a = f(z)):把 z1 里负的砍成 0、正的保留
        z2 = self.layer2(a1)                        # 第二层再加权求和:把 4 个印象合成 1 个得分
        return torch.sigmoid(z2)                    # sigmoid 是另一种激活函数:把任意得分压成 0~1 的小数当"是猫的概率"返回(越接近 1 越像猫)

# ===== 训练:反复看 4 条数据,学会"尖耳朵+长胡须=猫"=====
torch.manual_seed(42)   # 固定随机种子:网络初始权重是随机生成的,设了种子后每次跑结果都一样(方便复现文章里的数字)
net = CatNet()          # 造出大脑实例——此刻权重还是随机的、啥都不会,接下来靠训练把它教会
opt = torch.optim.Adam(net.parameters(), lr=0.05)   # 优化器 = 负责"按梯度调权重"的工具;Adam 是常用的一种,net.parameters() 把网络里所有权重交给它;lr 是学习率 = 每次调多大(太大不稳、太小太慢)
loss_fn = nn.BCELoss()                               # 损失函数 = 量"预测离正确答案多远"的尺子;BCELoss 专为「是/不是」二选一设计(错得越离谱、值越大)

for epoch in range(500):   # 一轮(epoch)= 把 4 条数据完整看一遍;重复 500 轮,让网络反复练
    pred = net(X)           # 前向传播:四条数据一起算预测
    loss = loss_fn(pred, y) # 算误差:预测 vs 正确答案
    opt.zero_grad()         # 清空旧梯度(避免累积)
    loss.backward()         # 反向传播:自动算每个权重的梯度
    opt.step()              # 用梯度更新权重——这一对就是"训练"的本质

# ===== 测试:看它学没学会 =====
with torch.no_grad():                          # 测试时不调权重,no_grad 关掉梯度计算省内存
    for i, x in enumerate(X):      # 把 4 条数据逐条取出来测(enumerate 顺手给个编号 i)
        # 把 0/1 翻成中文方便看结果;x[0]、x[1] 就是这条数据的两个特征
        feat = ('尖耳朵' if x[0] else '无尖耳朵') + '+' + ('长胡须' if x[1] else '无长胡须')
        # net(x) 算出概率,[0] 取出那个数,:.2f 保留 2 位小数显示
        print(f"{feat} → 是猫的概率 {net(x)[0]:.2f}")
print(f"训练 loss:{loss.item():.4f}")   # .item() 把 loss 从张量取出成普通小数,:.4f 保留 4 位

运行输出:

尖耳朵+长胡须 → 是猫的概率 0.99
尖耳朵+无长胡须 → 是猫的概率 0.00
无尖耳朵+长胡须 → 是猫的概率 0.00
无尖耳朵+无长胡须 → 是猫的概率 0.00
训练 loss:0.0039

——神经网络真的学会了:只要「尖耳朵 + 长胡须」同时出现,它就判「是猫」(0.99),否则判「不是」(0.00)。这条「两个线索同时满足才成立」的规则(逻辑上的「与」),没有任何人写进代码——网络是自己从 4 条数据里把权重练出来的。把数据换成更复杂的图片像素、把网络加深加宽,同一套「加权求和 + 激活 + 反复调权重」就能识别真实的猫狗,甚至撑起 ChatGPT。

参考资料

  1. What is a neural network? - IBM https://www.ibm.com/think/topics/neural-networks
  2. 多层感知机(5.1 节)- 《动手学深度学习》 https://zh.d2l.ai/chapter_multilayer-perceptrons/mlp.html
  3. But what is a neural network? - 3Blue1Brown(神经网络可视化经典系列) https://www.3blue1brown.com/lessons/neural-networks