神经网络是一种数学模型,它通过让数字经过多层简单运算,把输入转换成输出。每一层都会接收前一层的数值,做加权求和、加上偏置、应用非线性激活函数,然后把结果继续向前传递。
这个描述听起来有些抽象,但核心思想其实很简单:网络会学习许多可调的权重,让输入中的有用模式在输出端变成有用的预测。
什么是神经网络
对于一个具有输入 的神经元,基本计算是
然后再经过一个激活函数:
这里, 是权重, 是偏置, 是激活函数,例如 ReLU、sigmoid 或 tanh。
一个完整的前馈神经网络会在多层中重复这种模式。用紧凑的形式表示,一层通常写成
其中 是前一层的输出。
通常最容易让人真正理解的直觉
每个神经元都在根据它看到的输入提出一个带权重的问题。较大的正权重会让某些特征更重要。负权重则可能抑制某种模式。偏置会移动阈值,而激活函数则决定这个神经元应该有多强的响应。
把多层堆叠起来后,网络就能分阶段构造特征。前面的层检测简单模式,后面的层再把这些模式组合成对最终任务更有用的内部信号。
这就是为什么神经网络不只是“很多公式同时存在”。它们是简单函数的复合,而真正带来灵活性的正是这种复合结构。
一个完整示例
考虑一个很小的网络:有两个输入、一个隐藏层和一个输出。设输入为
假设隐藏层有两个神经元,并使用 ReLU,其中
取下面这些隐藏层计算:
现在把这些隐藏层数值送到输出神经元:
如果规则是“当 时预测为类别 1”,那么这个输入会被分类为类别 1。
这里重要的不是具体数字,而是结构:
- 取输入
- 形成加权和
- 应用非线性激活
- 重复
- 读取最终得分
这就是神经网络在进行一次前向传播。
神经网络如何学习
使用一个网络是一回事,训练它又是另一回事。
在标准的监督学习中,网络首先做出预测。然后,损失函数衡量这个预测与目标之间相差多远。基于梯度的训练会计算损失相对于每个权重和偏置的变化方式,再更新它们以减小损失。
在现代实践中,这通常意味着反向传播加上梯度下降,或者使用相关的优化器。这种设置依赖于模型和损失函数是可微的,或者至少是分段可微的,从而使梯度方法能够发挥作用。
简短地说,就是:
经过大量样本后,权重会逐渐朝着有助于完成任务的模式移动。
常见错误
认为层数更多就一定效果更好
并不是这样。更多的层会增加模型容量,但也会让优化、数据需求以及过拟合控制变得更困难。
忘记非线性为什么重要
如果每一层都只是线性的,那么整个网络最终仍然只是一个线性映射。激活函数才是让深层网络能够表示更复杂关系的关键。
把输出当成绝对确定的结论
网络输出的价值取决于背后的模型、数据和训练设置。高分并不等于证明。
忽视输入表示方式
网络不是从原始意义中学习,而是从它接收到的数值表示中学习。如果输入质量差、不一致,或者缺少重要结构,网络的表现通常就会受到影响。
神经网络在什么时候使用
当输入与输出之间的关系足够复杂,以至于手写规则容易失效或不完整时,神经网络就很有用。常见场景包括图像识别、语音处理、语言建模、推荐系统以及某些预测任务。
但它们并不一定是每个问题的最佳选择。对于小型、结构化的数据集,更简单的模型可能更容易训练、更容易解释,而且有时同样有效。
一个好的思维模型
可以把神经网络看成一个分层函数,里面有许多可调的旋钮。前向传播把一个输入变成一个输出,而训练则会调整这些旋钮,让未来的输出对任务更有用。
这是同时把两个核心想法放在脑中的最简洁方式:神经网络通过函数复合来计算,也通过调整参数来减少误差并完成学习。
试着自己做一遍
保持这个小网络不变,但把输入从 改成 。重新计算 、、、 和最终得分 。然后再改动一个权重,看看输出的哪一部分会发生变化。这个小练习会比单纯背定义更具体地帮助你理解前向传播。