深度学习入门:从感知机到多层感知机(MLP)的实战指南

深度学习入门:从感知机到多层感知机(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 从感知机到神经元:激活函数的引入

原始的感知机使用阶跃函数,其导数在非零点为零,无法支持基于梯度的学习。现代神经网络用更平滑的SigmoidTanhReLU等函数替代。这不仅仅是技术升级,更是思想的转变:从“硬判决”到“软判决”,让模型能够表达置信度,并支持误差的梯度回传。

激活函数 公式 输出范围 特点与问题
Sigmoid σ(x) = 1 / (1 + e⁻ˣ) (0, 1) 将输入压缩到(0,1),适合表示概率。但两端饱和区梯度接近零,易导致梯度消失。
Tanh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值