ML 学习站
跳到正文

从感知机到神经网络

神经元数学模型、多层感知机结构。

25 分钟1 / 41,594
加载中...

从感知机到神经网络

深度学习的"砖块"——神经元——其实非常简单。一个神经元干的事,跟逻辑回归几乎一样

生物神经元 vs 人工神经元

生物神经元                       人工神经元
                                  输入 x1 ──w1─┐
  树突 ──→ 细胞体 ──→ 轴突         输入 x2 ──w2─┼─→ Σ + b → f() → 输出
  (接收)   (处理)   (输出)        输入 x3 ──w3─┘

数学形式:

  • 给每个输入 x_i 一个权重 w_i
  • 求加权和 z = w1*x1 + w2*x2 + ... + wn*xn + b
  • 经过一个激活函数 f(z) 得到输出
y = f( sum(w_i * x_i) + b )

感知机:第一个能学习的神经元

1958 年,Frank Rosenblatt 提出了感知机(Perceptron)。激活函数是阶跃函数:

f(z) = 1,  if z >= 0
f(z) = 0,  if z < 0

它能学会线性可分的数据(类似逻辑回归),但学不会异或——这个发现直接导致了第一个 AI 寒冬。

多层感知机(MLP):突破线性

把多个神经元堆叠成多层,就突破了感知的局限:

输入层        隐藏层          输出层
              ┌─→ ● ─┐
x1 ────────────┤      ├──→ ● ──→ y
              └─→ ● ─┘
x2 ────────────┤      │
              └─→ ● ─┘
x3 ────────────┘

万能近似定理(Universal Approximation Theorem):只要隐藏层有足够多的神经元,MLP 能以任意精度逼近任何连续函数

这个定理很猛,但有代价——我们需要找到合适的权重。1960 年代没人知道怎么训练多层网络,直到 1986 年反向传播算法被重新发现。

激活函数:让网络"非线性"

如果激活函数还是线性的(比如 f(z) = z),那多层堆叠等价于单层——线性变换的组合还是线性的。要让多层有意义,激活函数必须非线性

常用的:

激活函数公式范围特点
Sigmoid1 / (1 + e^(-z))(0, 1)老的,但梯度消失严重
Tanhtanh(z)(-1, 1)0 中心,稍好
ReLUmax(0, z)[0, ∞)现代默认,简单高效
Leaky ReLUmax(0.01*z, z)(-∞, ∞)解决神经元死亡
Softmaxe^(z_i) / sum(e^(z_j))(0, 1) 和为1多分类输出

用 PyTorch 实现一个 MLP

import torch
import torch.nn as nn

class MLP(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(input_dim, hidden_dim),  # 全连接
            nn.ReLU(),                          # 激活
            nn.Linear(hidden_dim, hidden_dim), # 第二层
            nn.ReLU(),
            nn.Linear(hidden_dim, output_dim)  # 输出
        )

    def forward(self, x):
        return self.net(x)

# 用法
model = MLP(input_dim=784, hidden_dim=128, output_dim=10)  # MNIST 分类
x = torch.randn(32, 784)  # batch=32, 28*28 像素
y_pred = model(x)
print(y_pred.shape)  # torch.Size([32, 10])

关键概念:网络的"容量"

网络的"学习能力"由这些因素决定:

  • 层数(深度):更深 → 更抽象的特征
  • 每层神经元数(宽度):更宽 → 更多的特征组合
  • 激活函数:影响非线性能力
  • 参数量:总参数量 ≈ 表达能力上限

不是越大越好——会过拟合。下一章的反向传播和训练技巧会讲怎么"训好"而不是"训坏"。

小结

  • 神经元 = 加权和 + 激活函数,和逻辑回归本质一样
  • 多层堆叠 = 多层感知机(MLP),理论上能逼近任何函数
  • 激活函数必须非线性,否则多层没意义
  • ReLU 是现代默认;Softmax 用于多分类输出
  • 下一章讲怎么训练这些网络:反向传播 + 梯度下降

练习思考

  1. 为什么单层感知机学不会异或(XOR)?画一下四个点的位置想想。
  2. 用 PyTorch 跑一个 3 层 MLP,在 MNIST 上达到 95% 以上准确率。
  3. 试着把激活函数从 ReLU 换成 Sigmoid,观察训练速度和最终精度的变化。

章末小测验

检验你对《从感知机到神经网络》的掌握程度。

1

为什么单层感知机学不会异或(XOR)?

2

激活函数为什么必须是非线性的?

讨论区(0)

加载评论中...