一个权重、一个偏置、一个判断——这就是神经网络最底层的决策逻辑。我从零实现感知机时卡住的三个地方,也许你也正在经历。
一个问题:最小的「智能」长什么样?
在投身深度学习之前,我一直以为神经网络是个遥不可及的黑箱。直到我遇到感知机(Perceptron)——这个 1958 年被发明、今天依然活在每个神经网络最底层的结构。
它简单到什么程度?
一个数字进去,是或否的答案出来。
仅此而已。没有层叠的隐藏层,没有反向传播的链式求导,只有一个权重、一个偏置、一个判断。
但就是这个「微小到不值一提」的结构,却是今天所有神经网络的种子。理解它,你就理解了神经网络最本质的决策逻辑。
场景:John 的工作抉择
在讲代码之前,让我们先看一个人是怎么做决定的。
John 收到了一个工作邀请。他不是在抛硬币,而是在心里默默打分:
John 把每个因素乘以他的在意程度,全部相加。如果总和超过某个心理阈值,他就说「接受」;否则说「拒绝」。
这就是感知机。
方案:把决策写成代码
让我们把问题压缩到最简:这个数是正数吗?
prediction = (weight * value + bias) > 0
用权重乘以输入,加上偏置,检查结果是否大于零。一开始权重和偏置都是随机数,所以机器猜得很差。
接下来是它唯一聪明的地方:从错误中学习。
if prediction != result: error = result - prediction weight += learning_rate * error * value bias += learning_rate * error
当猜测错误时,把权重和偏置向正确的方向推一把。误差告诉我们该往哪推,学习率决定每一步推多大。
一轮完整的数据遍历叫做一个 epoch。反复遍历,准确率就会持续爬升。
反思一:为什么需要偏置?
这是我在学习时卡住的地方。
新问题:给机器考试分数(0-100),问「学生及格了吗?」规则是 50 分及以上及格。
我先把偏置关掉,只用权重训练。结果准确率卡在 50%,死活上不去。
为什么?
没有偏置时,公式变成 weight × score。所有分数都是正数,所以:
边界被钉死在 0,无法移动。一条被迫穿过零点的线,根本分不开「低于 50」和「50 及以上」。
打开偏置再训练,准确率一路爬到 100%,边界稳稳停在 50 附近。
权重决定线的陡峭程度,偏置把线左右移动。
decision_boundary = -bias / weight
记住这一句话:当你的输入远离零点时,你需要偏置把线移到它们那里。
反思二:学习率不是越大越好
训练时有两个旋钮:轮次和学习率。
- 轮次(epoch):对数据的一轮完整遍历。更多轮次 = 更多修正机会。
小步长谨慎但慢,大步长快但可能 overshoot(冲过头)并在周围弹跳。这里用 0.1,温和到足以保持稳定。
反思三:数据归一化,一个隐蔽的陷阱
再看更新公式:
weight += learning_rate * error * value
修正值乘以 value。考试成绩可以到 100,一次猜错就能把权重抛出很远。机器在学习,但剧烈摇摆,无法平稳沉淀。
解决方案:归一化。 训练前把输入收缩到 0-1 范围。100 分变成 1.0,30 分变成 0.3。更新幅度变得可控,学习曲线平滑下来。
写在最后
感知机教会我一件事:复杂系统的智慧,往往来自最朴素的规则反复执行。
一个权重、一个偏置、一个判断、一个修正循环。没有魔法,只有耐心和迭代。
如果你正在学习神经网络,不要急着跳过感知机。花 20 分钟亲手实现它,你会对「学习」这件事有完全不同的理解。
互动问题:你在学习机器学习时,有没有哪个「简单到被忽略」的概念,后来才发现它是关键?欢迎在评论区分享。
引用链接
[1]The Smallest Brain You Can Build: A Perceptron in Python: https://ranpara.net/posts/perceptron-explained-from-scratch/