神经网络是一种数学模型,它通过让数字经过多层简单运算,把输入转换成输出。每一层都会接收前一层的数值,做加权求和、加上偏置、应用非线性激活函数,然后把结果继续向前传递。

这个描述听起来有些抽象,但核心思想其实很简单:网络会学习许多可调的权重,让输入中的有用模式在输出端变成有用的预测。

什么是神经网络

对于一个具有输入 x1,x2,,xnx_1, x_2, \dots, x_n 的神经元,基本计算是

z=w1x1+w2x2++wnxn+bz = w_1x_1 + w_2x_2 + \dots + w_nx_n + b

然后再经过一个激活函数:

a=g(z)a = g(z)

这里,w1,,wnw_1, \dots, w_n 是权重,bb 是偏置,gg 是激活函数,例如 ReLU、sigmoid 或 tanh。

一个完整的前馈神经网络会在多层中重复这种模式。用紧凑的形式表示,一层通常写成

a(l)=g ⁣(W(l)a(l1)+b(l))a^{(l)} = g\!\left(W^{(l)} a^{(l-1)} + b^{(l)}\right)

其中 a(l1)a^{(l-1)} 是前一层的输出。

通常最容易让人真正理解的直觉

每个神经元都在根据它看到的输入提出一个带权重的问题。较大的正权重会让某些特征更重要。负权重则可能抑制某种模式。偏置会移动阈值,而激活函数则决定这个神经元应该有多强的响应。

把多层堆叠起来后,网络就能分阶段构造特征。前面的层检测简单模式,后面的层再把这些模式组合成对最终任务更有用的内部信号。

这就是为什么神经网络不只是“很多公式同时存在”。它们是简单函数的复合,而真正带来灵活性的正是这种复合结构。

一个完整示例

考虑一个很小的网络:有两个输入、一个隐藏层和一个输出。设输入为

x=[21]x = \begin{bmatrix} 2 \\ 1 \end{bmatrix}

假设隐藏层有两个神经元,并使用 ReLU,其中

ReLU(z)=max(0,z)\operatorname{ReLU}(z) = \max(0, z)

取下面这些隐藏层计算:

z1=12+(1)1+0=1z_1 = 1 \cdot 2 + (-1) \cdot 1 + 0 = 1 h1=ReLU(z1)=1h_1 = \operatorname{ReLU}(z_1) = 1 z2=0.52+0.511=0.5z_2 = 0.5 \cdot 2 + 0.5 \cdot 1 - 1 = 0.5 h2=ReLU(z2)=0.5h_2 = \operatorname{ReLU}(z_2) = 0.5

现在把这些隐藏层数值送到输出神经元:

s=2h1h2=2(1)0.5=1.5s = 2h_1 - h_2 = 2(1) - 0.5 = 1.5

如果规则是“当 s>0s > 0 时预测为类别 1”,那么这个输入会被分类为类别 1。

这里重要的不是具体数字,而是结构:

  1. 取输入
  2. 形成加权和
  3. 应用非线性激活
  4. 重复
  5. 读取最终得分

这就是神经网络在进行一次前向传播。

神经网络如何学习

使用一个网络是一回事,训练它又是另一回事。

在标准的监督学习中,网络首先做出预测。然后,损失函数衡量这个预测与目标之间相差多远。基于梯度的训练会计算损失相对于每个权重和偏置的变化方式,再更新它们以减小损失。

在现代实践中,这通常意味着反向传播加上梯度下降,或者使用相关的优化器。这种设置依赖于模型和损失函数是可微的,或者至少是分段可微的,从而使梯度方法能够发挥作用。

简短地说,就是:

predictionlossgradientsparameter update\text{prediction} \to \text{loss} \to \text{gradients} \to \text{parameter update}

经过大量样本后,权重会逐渐朝着有助于完成任务的模式移动。

常见错误

认为层数更多就一定效果更好

并不是这样。更多的层会增加模型容量,但也会让优化、数据需求以及过拟合控制变得更困难。

忘记非线性为什么重要

如果每一层都只是线性的,那么整个网络最终仍然只是一个线性映射。激活函数才是让深层网络能够表示更复杂关系的关键。

把输出当成绝对确定的结论

网络输出的价值取决于背后的模型、数据和训练设置。高分并不等于证明。

忽视输入表示方式

网络不是从原始意义中学习,而是从它接收到的数值表示中学习。如果输入质量差、不一致,或者缺少重要结构,网络的表现通常就会受到影响。

神经网络在什么时候使用

当输入与输出之间的关系足够复杂,以至于手写规则容易失效或不完整时,神经网络就很有用。常见场景包括图像识别、语音处理、语言建模、推荐系统以及某些预测任务。

但它们并不一定是每个问题的最佳选择。对于小型、结构化的数据集,更简单的模型可能更容易训练、更容易解释,而且有时同样有效。

一个好的思维模型

可以把神经网络看成一个分层函数,里面有许多可调的旋钮。前向传播把一个输入变成一个输出,而训练则会调整这些旋钮,让未来的输出对任务更有用。

这是同时把两个核心想法放在脑中的最简洁方式:神经网络通过函数复合来计算,也通过调整参数来减少误差并完成学习。

试着自己做一遍

保持这个小网络不变,但把输入从 (2,1)(2, 1) 改成 (0,3)(0, 3)。重新计算 z1z_1z2z_2h1h_1h2h_2 和最终得分 ss。然后再改动一个权重,看看输出的哪一部分会发生变化。这个小练习会比单纯背定义更具体地帮助你理解前向传播。

需要解题帮助?

上传你的问题,几秒钟内获得经过验证的分步解答。

打开 GPAI Solver →