神经网络启蒙:从感知机到多层感知机的演进之路

张开发
2026/4/9 19:53:11 15 分钟阅读

分享文章

神经网络启蒙:从感知机到多层感知机的演进之路
昨天调一个二分类模型,数据明明线性可分,单层感知机死活收敛不了。折腾半天发现学习率设成了2.0——权重更新像打摆子一样在最优解两边跳。这让我想起刚入门时,总觉得感知机是个“玩具模型”,真正踩过坑才明白,没吃透这个基础,后面全连接网络、CNN的坑一个都躲不过。## 感知机:那个被低估的起点1958年Frank Rosenblatt提出的感知机,现在看简单得让人怀疑它的价值。输入向量x,权重w,偏置b,一个阶跃函数做激活:```pythondef perceptron(x, w, b): # 加权求和 z = np.dot(w, x) + b # 阶跃激活 return 1 if z 0 else 0```但这里第一个坑就来了:很多人以为感知机只能做线性分类,却忽略了它的训练过程才是精髓。权重更新规则 `w = w + η * (y_true - y_pred) * x` 里藏着梯度下降的雏形。我早期实现时曾偷懒用 `if z = 0`,导致决策边界上的点永远触发更新,模型在收敛边缘反复横跳。更隐蔽的问题是特征尺度。早期有次训练时间异常长,最后发现某个特征值范围是[0, 10000],另一个是[0, 1],权重更新时大尺度特征完全主导了方向。现在回想,那时连数据归一化的重要性都没意识到。## 从“异或问题”到多层感知机1969年Minsky那本《Perceptrons》指出单层感知机连异或都学不会,这盆冷水差点让神经网络研究停滞十年。但问题其实不在感知机本身,而在“单层”这个限制上。异或的真值表:```(0,0) - 0(0,1) - 1(1,0) - 1(1,1) - 0```你在二维平面上画这四个点,会发现没有任何一条直线能把两类分开。但加一层神经元,相当于允许网络画两条直线,组合起来就能围出个区域把(1,1)隔开

更多文章