深度学习入门:从感知机到多层感知机(MLP)的实战指南
如果你刚开始接触深度学习,可能会被那些听起来高深莫测的术语吓到:神经网络、反向传播、激活函数……别担心,这其实和你小时候学骑自行车有点像。一开始你可能会摔跤,但一旦掌握了平衡,就能自由驰骋。今天,我们就从最基础的“自行车”——感知机开始,一步步组装成能处理复杂任务的“摩托车”——多层感知机(MLP)。这篇文章不是枯燥的理论堆砌,而是一份手把手的实战指南。我会带你用代码亲手搭建模型,理解每一步背后的“为什么”,让你在解决实际问题时,能清晰地知道模型内部发生了什么,而不仅仅是调包。无论你是想转行的程序员、在校学生,还是对AI好奇的业务人员,只要你有基本的编程和数学基础,就能跟上。
1. 感知机:神经网络的“原子”
在构建摩天大楼之前,我们先要了解砖块。感知机就是深度学习世界里的那块砖。它由弗兰克·罗森布拉特在1958年提出,结构简单得惊人:接收多个输入,进行加权求和,然后通过一个“开关”决定输出。
1.1 感知机的数学表达与工作原理
一个标准的感知机可以形式化表示为:
输出 = 激活函数(权重1 * 输入1 + 权重2 * 输入2 + ... + 偏置)
用向量形式写更简洁:y = f(w·x + b)。这里的 f 就是激活函数,最初感知机使用的是阶跃函数:如果加权和大于某个阈值(比如0),就输出1(表示“是”或“正类”),否则输出0。
注意:这个简单的“开关”机制,使得单个感知机天生就是一个线性二分类器。它只能解决那些可以用一条直线(或一个超平面)将数据点完美分开的问题,比如逻辑“与”(AND)和“或”(OR)。
为了直观感受,我们用Python模拟一个实现“与”门(AND Gate)的感知机。你需要的数据只有四个点:(0,0), (0,1), (1,0), (1,1),对应的标签分别是0, 0, 0, 1。
import numpy as np
class Perceptron:
def __init__(self, input_size, lr=0.1):
self.weights = np.random.randn(input_size)
self.bias = np.random.randn()
self.lr = lr # 学习率
def step_function(self, x):
"""阶跃激活函数"""
return 1 if x >= 0 else 0
def forward(self, x):
"""前向传播:计算预测值"""
linear_output = np.dot(self.weights, x) + self.bias
return self.step_function(linear_output)
def train(self, X, y, epochs=10):
"""训练:感知机学习规则"""
for epoch in range(epochs):
total_error = 0
for xi, target in zip(X, y):
prediction = self.forward(xi)
error = target - prediction
total_error += abs(error)
# 权重更新规则:Δw = η * (target - prediction) * x
self.weights += self.lr * error * xi
self.bias += self.lr * error
print(f"Epoch {epoch+1}, Total Error: {total_error}")
if total_error == 0:
break
# 准备AND门的数据
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 0, 0, 1])
# 创建并训练感知机
p = Perceptron(input_size=2, lr=0.1)
p.train(X, y, epochs=10)
# 测试
print("\n测试结果:")
for xi in X:
print(f"输入{xi} -> 预测输出: {p.forward(xi)}")
运行这段代码,你会看到感知机很快就能学会正确的权重(例如 weights ≈ [1, 1], bias ≈ -1.5),成功实现AND逻辑。但如果你尝试用同样的感知机去学习“异或”门(XOR),你会发现无论训练多久,总误差都无法降到0。这就是线性不可分问题的经典例子,也是单层感知机的致命局限。
1.2 从感知机到神经元:激活函数的引入
原始的感知机使用阶跃函数,其导数在非零点为零,无法支持基于梯度的学习。现代神经网络用更平滑的Sigmoid、Tanh或ReLU等函数替代。这不仅仅是技术升级,更是思想的转变:从“硬判决”到“软判决”,让模型能够表达置信度,并支持误差的梯度回传。
| 激活函数 | 公式 | 输出范围 | 特点与问题 |
|---|---|---|---|
| Sigmoid | σ(x) = 1 / (1 + e⁻ˣ) | (0, 1) | 将输入压缩到(0,1),适合表示概率。但两端饱和区梯度接近零,易导致梯度消失。 |
| Tanh |

的实战指南&spm=1001.2101.3001.5002&articleId=152551319&d=1&t=3&u=6ddffc1fd881482dbcc4b09de1664c88)
2723

被折叠的 条评论
为什么被折叠?



