什么是神经网络?
当我们谈到“神经网络”时,很多人脑海里会浮现一种“仿生”的感觉——好像机器在模仿人脑思考。没错,人工神经网络 正是受生物神经系统启发的一类机器学习模型。它由无数个简单的计算单元(我们称之为“神经元”)层层连接组成,最终形成一个能够学习复杂规律的系统。
在神经网络中,数据从输入层进入,逐层传递,经由一个或多个隐含层加工,最后抵达输出层,得到预测结果。这条路径被称为 前向传播。可以把它想象成流水线:输入信号在每一层都要先“加权求和”,再经过一个 激活函数 的非线性转化,才能流向下一层。激活函数的存在至关重要,它让神经网络不只是做“直线拟合”,而是真正具备处理非线性问题的能力。
得到预测结果后,模型会用 损失函数 来衡量预测与真实值的差异。损失越大,说明模型“想错了”的程度越严重。训练的核心目标,就是让这个损失尽量小。
那模型该怎么修正自己的错误呢?这里就是 反向传播。简单说,就是从结果往前倒推误差,计算每个参数“该为这次错误负责多少”。有了这个责任划分,优化算法(例如梯度下降)就能据此调整参数,让模型一步步更接近正确。
整个过程就是一场循环往复的学习:前向传播 → 计算损失 → 反向传播 → 更新参数。随着迭代次数增加,神经网络会越来越聪明,预测也会越来越准确。
神经网络就是一台庞大但可调的“函数机器”。前向传播算结果,损失函数指出差距,反向传播告诉我们如何修正。通过这种迭代学习,它逐渐掌握输入与输出之间的复杂映射关系,从而具备了预测新数据的能力。
神经网络的结构与工作原理
一个典型的前馈神经网络通常由三部分组成:输入层、隐含层、输出层。每一层里有许多“神经元”,它们通过权重相互连接。
1 | flowchart LR |
单个神经元的计算过程其实很直观:先把来自前一层的输入乘上权重,再加上偏置项,得到一个线性组合 $z$。公式写出来是:
$z = \sum_{i} w_i x_i + b,$
接着,$z$ 会经过一个 非线性激活函数,得到输出 $a = \sigma(z)$。常见的激活函数有 Sigmoid、Tanh 和 ReLU 等。==激活函数的存在,赋予神经网络“弯曲空间”的能力;否则,即使你堆十层八层,整个模型依然只是一个大号的线性函数==。
前向传播,就是不断重复这个动作——“线性变换 + 非线性激活”,逐层把输入转化为输出。
可以想象一个三层全连接网络:输入层有三个特征,隐含层有四个神经元,输出层有两个结果节点。信息像箭头一样单向流动,最终输出 $y_1, y_2$。
激活函数的作用与选择
激活函数决定了网络能不能学会“复杂模式”。
- Sigmoid:把数值压缩到 $(0, 1)$,很适合输出概率。
- Tanh:把数值压缩到 $(-1, 1)$,对称性更强。
- ReLU:负数变 0,正数保持不变,简单高效,几乎成了默认选择。
一般来说,==隐含层常用 ReLU,输出层则要根据任务而定:回归用线性激活,二分类用 Sigmoid,多分类用 Softmax==。
损失函数:误差的标尺
神经网络要学习,就得知道“我离正确答案差多少”。损失函数正是这把尺子。
- 回归任务:常用均方误差(MSE)。
- 分类任务:常用交叉熵(Cross-Entropy)。
损失值越小,模型越接近正确。
神经网络的训练流程
训练过程可以总结为六个步骤:
- 初始化参数;
- 前向传播;
- 计算损失;
- 反向传播;
- 更新参数;
- 判断是否收敛。
1 | flowchart TD |
线性回归任务实例
举一个最简单的没有隐含层的线性回归例子,只是直接用输入的加权和来预测输出。
模型结构:
输入 $\mathbf{x}$ 直接连接输出y:
$\hat{y}^{(i)} = w_1 x_1^{(i)} + w_2 x_2^{(i)} + \cdots + w_d x_d^{(i)} + b,$
没有激活函数,输出可以是任意实数。损失函数(MSE):
$L_{\mathrm{MSE}} = \frac{1}{N} \sum_{i=1}^N \big(\hat{y}^{(i)} - y^{(i)}\big)^2.$
误差越大,惩罚越重。
- 训练方法:
核心就是用 梯度下降 来不断修正参数:
$w_{j-1} \leftarrow w_j - \eta \frac{\partial L}{\partial w_j}, \quad b_{j-1} \leftarrow b_j - \eta \frac{\partial L}{\partial b},$
因为损失函数是凸的,最终能找到全局最优解。
最终得到的参数 $\mathbf{w}^, b^$,就可以用来对新样本做预测。
这个例子看似简单,却已经把神经网络的“套路”展现出来了:前向计算、损失评估、梯度更新。
分类任务实例
回归预测的是连续数值,而分类任务则是要决定“它属于哪一类”。
假设我们要识别手写数字(0–9 共 10 类)。输入是一张 $28 \times 28$ 的灰度图像(展平成 784 维向量),输出是一个 10 维概率分布。
- 输出层与 Softmax:
每个类别对应一个神经元,Softmax 把结果转化为概率:
$$\hat{y}j = \frac{\exp(o_j)}{\sum{k = 1}^{q}\exp(o_k)}, \quad j = 1, 2, \dots, q.$$
Softmax 的结果满足所有$\hat{y}_j \in (0, 1)$且总和为 1,可解释为模型对各类别的置信度。比如在“猫、狗、兔”三分类问题中,若未归一化输出为$[2.0, ,1.0, ,0.1]$,则 Softmax 后得到概率分布$[0.64,0.24,0.12]$。模型最终的预测类别就是概率最大的那一类,即 $\arg\max_j \hat{y}_j$。
损失函数(交叉熵):
分类任务中广泛采用交叉熵损失(Cross - Entropy Loss)。如果真实标签用独热编码表示(正确类别为1,其余为0),则单个样本的交叉熵损失为:
$$L_{CE}(y, \hat{y}) = -\sum_{j = 1}^{q}y_j \log \hat{y}_j.$$如果模型对正确类别的概率很高,损失就很小。
训练过程:
前向传播 → 计算交叉熵 → 反向传播(梯度就是 $\hat{y}_j - y_j$)→ 参数更新。评价指标
最直观的是准确率:预测对的样本数 / 总样本数。
小结
从最简单的线性回归,到分类任务中的 Softmax 与交叉熵,我们逐渐揭开了神经网络的学习机制。它并不是一开始就聪明,而是靠着一遍遍的前向试错与反向修正,慢慢学会数据中的规律。所以为什么叫做学习,这种学习和人类的学习本质上是一样的。
理解了神经元、激活函数、损失函数、前向与反向传播这些基本概念,未来无论是卷积神经网络,还是循环神经网络,都不过是在这个框架上叠加了新的结构与思想。