设计机器学习应用系统设计机器学习应用系统
首页
讨论区
首页
讨论区
  • 目录
  • 前言

    • 关于作者
    • 关于本文档
  • 机器学习数学基础

    • 线性代数

      • 引言:机器学习的语言
      • 向量基础
      • 矩阵基础
      • 数据处理实践
    • 微积分

      • 引言:变化与累积
      • 极限、导数与微分
      • 多元函数与复合函数求导
      • 微积分计算实践
    • 统计与概率

      • 引言:概率性思维
      • 概率基础
      • 统计推断
      • 概率统计实践
  • 经典统计学习方法

    • 线性模型

      • 线性回归
      • 逻辑回归
      • 正则化与广义线性模型
    • 贝叶斯方法

      • 朴素贝叶斯
      • 贝叶斯网络
      • EM 算法
    • 支持向量机

      • 支持向量机
      • 核技巧
    • 决策树与集成

      • 决策树
      • 随机森林
      • 提升方法
    • 无监督学习

      • 聚类
      • 降维
  • 神经网络与深度学习

    • 神经网络结构

      • 神经网络基础原理
      • 线性感知机
      • 多层感知机
      • 前向传播
      • 反向传播
      • 激活函数与损失函数
    • 优化神经网络

      • 梯度下降
      • 自适应优化器
    • 深层网络稳定性

      • 权重初始化
      • Dropout 正则化
      • 批归一化
    • 卷积神经网络

      • CNN 基础原理
      • AlexNet 与 CNN 复兴
      • VGG 与 GoogLeNet
      • ResNet 残差网络
      • 工程实训:AlexNet 图像分类实验
    • 生成式模型

      • 变分自编码器
      • 生成式对抗网络
      • 工程实训:DCGAN 图像生成实验
    • 序列模型

      • 词嵌入与表示学习
      • RNN 基础原理
      • LSTM 与 GRU 门控机制
      • Seq2Seq 序列映射
      • 工程实训:LSTM 古诗词生成实验
  • 语言模型的奇点

    • Transformer 架构

      • Transformer 基础原理
      • Transformer 演进与变体
      • 语言模型与分词
      • 工程实训:Transformer 模型训练实验
    • 预训练与微调

      • 预训练数据工程
      • 缩放定律
    • 对齐训练

    • 推理能力

    • 前沿与融合

  • AI Infra & 应用(名字待定)

  • 机器学习经典论文

  • 附录

    • 构建沙箱环境
    • 临时格式测试页面

线性感知机

在上一章我们提到,1969 年出版的《Perceptrons》一书对感知机提出了尖锐批评,指出其无法解决异或(XOR)问题。这一批评导致神经网络研究陷入长达十年的低谷。然而,批评本身恰恰揭示了感知机的本质特性 —— 线性可分性(Linear Separability)。理解这一特性,不仅有助于掌握感知机的工作原理,更能帮助读者深刻认识神经网络从单层到多层演进的内在逻辑。

感知机(Perceptron)由心理学家弗兰克·罗森布拉特(Frank Rosenblatt)于 1957 年提出,是世界上第一个能够从数据中学习的神经网络模型。它在 M-P 模型的基础上引入了学习算法,能够自动调整权重,从而实现模式识别和分类任务。感知机的提出标志着神经网络从理论研究进入实践应用阶段,引发了第一次神经网络研究热潮。本章将详细介绍感知机的模型结构、几何解释、学习算法与收敛定理,并通过实验验证其学习能力与局限性。

感知机模型

感知机是一个单层神经网络,由输入层和输出层组成,没有隐藏层。整个感知机结构包括输入向量 x=(x1,x2,…,xn)T\mathbf{x} = (x_1, x_2, \ldots, x_n)^Tx=(x1​,x2​,…,xn​)T 和权重向量 w=(w1,w2,…,wn)T\mathbf{w} = (w_1, w_2, \ldots, w_n)^Tw=(w1​,w2​,…,wn​)T,以及偏置(Bias)bbb。最终输出为二值结果 {+1,−1}\{+1, -1\}{+1,−1}。感知机结构如下图所示,其输出计算过程分为两步:

  • 第一步 线性组合:计算输入的加权总和加上偏置 z=wTx+b=∑i=1nwixi+bz = \mathbf{w}^T \mathbf{x} + b = \sum_{i=1}^{n} w_i x_i + bz=wTx+b=∑i=1n​wi​xi​+b
  • 第二步 激活函数:通过阈值函数(简单的正负符号函数)将线性输出转换为二值输出 y={1if z≥0−1if z<0y = \begin{cases} 1 & \text{if } z \geq 0 \\ -1 & \text{if } z < 0 \end{cases}y={1−1​if z≥0if z<0​

感知机结构

图:感知机的结构

感知机使用符号函数 sign(z)\text{sign}(z)sign(z) 作为激活函数(Activation Function),输出值为 {1,−1}\{1, -1\}{1,−1}。在这个场景中,激活函数的作用是将连续的线性输出转化为离散的类别标签,实现分类决策。偏置 bbb 可以理解为阈值 θ\thetaθ 的负值。在上一章的 M-P 模型中,阈值条件是 ∑wixi≥θ\sum w_i x_i \geq \theta∑wi​xi​≥θ。若将阈值移项到左侧,变为 ∑wixi−θ≥0\sum w_i x_i - \theta \geq 0∑wi​xi​−θ≥0,即可得到 b=−θb = -\thetab=−θ。这种形式在数学处理上更为方便,因为决策边界可以统一写成 wTx+b=0\mathbf{w}^T \mathbf{x} + b = 0wTx+b=0。

为了便于推导,习惯上会将偏置 bbb 合并入权重向量。定义增广输入向量 x~=(x1,x2,…,xn,1)T\tilde{\mathbf{x}} = (x_1, x_2, \ldots, x_n, 1)^Tx~=(x1​,x2​,…,xn​,1)T 和增广权重向量 w~=(w1,w2,…,wn,b)T\tilde{\mathbf{w}} = (w_1, w_2, \ldots, w_n, b)^Tw~=(w1​,w2​,…,wn​,b)T,则感知机的输出可简洁表示为 y=sign(w~Tx~)y = \text{sign}(\tilde{\mathbf{w}}^T \tilde{\mathbf{x}})y=sign(w~Tx~)。这种表示方式将偏置视为常数输入 1 对应的权重,简化了数学表示。后续讨论中,若无特殊说明,我们都使用增广向量形式,并省略增广标记,直接记为 w\mathbf{w}w 和 x\mathbf{x}x。

感知机的决策边界是超平面方程 wTx=0\mathbf{w}^T \mathbf{x} = 0wTx=0。在二维空间中,决策边界是一条直线;在三维或更高维空间中则是一个超平面。该超平面将输入空间划分为两个区域:wTx>0\mathbf{w}^T \mathbf{x} > 0wTx>0 时输出 y=1y = 1y=1(正类),wTx<0\mathbf{w}^T \mathbf{x} < 0wTx<0 时输出 y=−1y = -1y=−1(负类)。决策边界的位置和方向由权重向量 w\mathbf{w}w 决定。权重向量的方向垂直于决策边界,因为 w\mathbf{w}w 是超平面的法向量。权重向量的长度则决定了边界的"陡峭程度",如下图所示。

感知机超平面方程示意图

图:感知机的决策边界(超平面),法向量 w\mathbf{w}w 垂直于决策边界,将空间分为正类区域和负类区域

在前面讲解线性模型时,已经大量使用过线性可分(Linearly Separable)的概念,它是指存在一个超平面能够完全分离两类数据点,使得所有正类样本位于超平面一侧,所有负类样本位于另一侧。设训练数据集为 D={(xi,yi)}i=1ND = \{(\mathbf{x}_i, y_i)\}_{i=1}^{N}D={(xi​,yi​)}i=1N​,其中 xi∈Rn\mathbf{x}_i \in \mathbb{R}^nxi​∈Rn,yi∈{1,−1}y_i \in \{1, -1\}yi​∈{1,−1}。数据集 DDD 线性可分的定义是存在权重向量 w\mathbf{w}w,使得对所有样本都有 yi⋅(wTxi)>0y_i \cdot (\mathbf{w}^T \mathbf{x}_i) > 0yi​⋅(wTxi​)>0。

一个典型的线性可分例子是 AND 逻辑运算。AND 运算的真值表有四种情况:(0,0)→0(0, 0) \rightarrow 0(0,0)→0(负类)、(0,1)→0(0, 1) \rightarrow 0(0,1)→0(负类)、(1,0)→0(1, 0) \rightarrow 0(1,0)→0(负类)、(1,1)→1(1, 1) \rightarrow 1(1,1)→1(正类)。在二维平面上,三个负类点 (0,0)(0,0)(0,0)、(0,1)(0,1)(0,1)、(1,0)(1,0)(1,0) 和一个正类点 (1,1)(1,1)(1,1) 可以被一条直线分开。决策边界 x1+x2=1.5x_1 + x_2 = 1.5x1​+x2​=1.5(或 x1+x2−1.5=0x_1 + x_2 - 1.5 = 0x1​+x2​−1.5=0)将正类点与其他点分离。

而典型的线性不可分例子是 XOR 逻辑运算。XOR 运算的真值表为:(0,0)→0(0, 0) \rightarrow 0(0,0)→0(负类)、(0,1)→1(0, 1) \rightarrow 1(0,1)→1(正类)、(1,0)→1(1, 0) \rightarrow 1(1,0)→1(正类)、(1,1)→0(1, 1) \rightarrow 0(1,1)→0(负类)。在二维平面上,四个点呈"对角分布":正类点位于对角线 (0,1)−(1,0)(0,1) - (1,0)(0,1)−(1,0) 上,负类点位于另一条对角线 (0,0)−(1,1)(0,0) - (1,1)(0,0)−(1,1) 上。任何直线要么穿过正类点之间,要么穿过负类点之间,无法将它们正负分开,如下图所示。

线性可分与 XOR 问题

图:线性可分(AND)与线性不可分(XOR)的对比

感知机学习算法

感知机直接继承于 M-P 模型的设计思想:加权求和、阈值决策、二值输出。两者的关键区别在于感知机拥有学习能力。M-P 模型的权重和阈值需要人工设定,而感知机引入了学习算法,能够根据训练数据自动调整权重和偏置。这一能力源于 Hebb 学习规则,该规则指出权重可以根据神经元的活动进行调整。感知机将 Hebb 规则的相关性学习发展为错误驱动学习:只有当预测错误时才调整权重,且更新的方向使得下一次预测更接近正确结果。算法具体步骤十分直白,有如下三步:

  • 第一步 初始化:权重向量 w\mathbf{w}w 初始化为零向量或随机小值。
  • 第二步 迭代训练:遍历训练数据,对每个样本 (xi,yi)(\mathbf{x}_i, y_i)(xi​,yi​) 计算预测值 y^i=sign(wTxi)\hat{y}_i = \text{sign}(\mathbf{w}^T \mathbf{x}_i)y^​i​=sign(wTxi​)。如果预测错误(y^i≠yi\hat{y}_i \neq y_iy^​i​=yi​),则更新权重 w←w+η⋅yi⋅xi\mathbf{w} \leftarrow \mathbf{w} + \eta \cdot y_i \cdot \mathbf{x}_iw←w+η⋅yi​⋅xi​,其中 η>0\eta > 0η>0 是学习率,控制更新幅度。权重更新时:
    • 如果真实标签 yi=1y_i = 1yi​=1 但预测为 −1-1−1 时(wTxi<0\mathbf{w}^T \mathbf{x}_i < 0wTxi​<0),说明样本 xi\mathbf{x}_ixi​ 落在了决策边界的错误一侧,更新规则 w←w+η⋅xi\mathbf{w} \leftarrow \mathbf{w} + \eta \cdot \mathbf{x}_iw←w+η⋅xi​ 将权重向量向样本方向移动,使得 wTxi\mathbf{w}^T \mathbf{x}_iwTxi​ 增大,更可能变为正值。
    • 同理,如果真实标签 yi=−1y_i = -1yi​=−1 但预测为 111 时(wTxi>0\mathbf{w}^T \mathbf{x}_i > 0wTxi​>0),更新规则 w←w−η⋅xi\mathbf{w} \leftarrow \mathbf{w} - \eta \cdot \mathbf{x}_iw←w−η⋅xi​ 将权重向量远离样本方向,使得 wTxi\mathbf{w}^T \mathbf{x}_iwTxi​ 减小,更可能变为负值。
  • 第三步 终止条件:当所有样本都正确分类,或达到最大迭代次数时停止。

罗森布拉特证明了一个重要结论:如果训练数据集是线性可分的,感知机学习算法必能在有限步内收敛,使所有样本都被正确分类。同时,该证明也表明如果数据非线性可分,算法可能无法收敛,权重会不断更新,永远存在错误分类的样本。这个结论揭示了多层网络的必要性:因为感知机直接对原始输入进行线性处理,并没有特征组合的能力。以 XOR 问题为例,其实质是判断"是否恰有一个输入为 1"。这需要分类器能同时检测两个输入的组合特征,而非单独处理每个输入。解决方法是增加一层隐藏层:先提取组合特征,再基于提取的特征做决策,这样就能解决 XOR 问题。罗森布拉特本人应该已经意识到这一点,但困于无法对多层网络进行训练,这一问题直到 1980 年代反向传播算法提出后才被解决。

以下代码完整实现感知机学习算法,并验证其在线性可分(AND 问题)和非线性可分(XOR 问题)两类数据上的学习能力。

import numpy as np
import matplotlib.pyplot as plt

class Perceptron:
    """
    感知机实现
    
    使用错误驱动的权重更新规则:
    w = w + eta * y * x (当预测错误时)
    """
    def __init__(self, learning_rate=1.0, max_iterations=1000):
        self.lr = learning_rate
        self.max_iter = max_iterations
        self.w = None  # 权重向量(包含偏置)
        self.errors_history = []  # 每轮迭代错误数
    
    def fit(self, X, y):
        """
        训练感知机
        
        Parameters:
        X : ndarray, shape (n_samples, n_features)
            输入特征矩阵
        y : ndarray, shape (n_samples,)
            标签向量,取值为 {1, -1}
        """
        n_samples, n_features = X.shape
        
        # 增广向量形式:添加常数1列(对应偏置)
        X_aug = np.column_stack([X, np.ones(n_samples)])
        
        # 初始化权重为零向量
        self.w = np.zeros(n_features + 1)
        
        # 训练循环
        for iteration in range(self.max_iter):
            errors = 0
            for i in range(n_samples):
                # 计算预测值
                prediction = np.sign(self.w @ X_aug[i])
                if prediction == 0:
                    prediction = -1  # 符号函数边界情况
                
                # 若预测错误,更新权重
                if prediction != y[i]:
                    self.w += self.lr * y[i] * X_aug[i]
                    errors += 1
            
            self.errors_history.append(errors)
            
            # 若所有样本正确分类,提前终止
            if errors == 0:
                print(f"在第 {iteration + 1} 轮迭代后收敛")
                break
        
        return self
    
    def predict(self, X):
        """
        预测
        
        Parameters:
        X : ndarray, shape (n_samples, n_features)
        
        Returns:
        predictions : ndarray, shape (n_samples,)
            预测标签 {1, -1}
        """
        n_samples = X.shape[0]
        X_aug = np.column_stack([X, np.ones(n_samples)])
        predictions = np.sign(X_aug @ self.w)
        predictions[predictions == 0] = -1
        return predictions
    
    def score(self, X, y):
        """计算准确率"""
        predictions = self.predict(X)
        return np.mean(predictions == y)


# 实验1:线性可分数据
print("=" * 50)
print("实验1:线性可分数据(AND逻辑)")
print("=" * 50)

# AND数据:三个负类,一个正类
X_and = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y_and = np.array([-1, -1, -1, 1])  # 用 -1 表示类别0

model_and = Perceptron(learning_rate=1.0, max_iterations=100)
model_and.fit(X_and, y_and)

print(f"学习到的权重: w1={model_and.w[0]:.2f}, w2={model_and.w[1]:.2f}, b={model_and.w[2]:.2f}")
print(f"决策边界: {model_and.w[0]:.2f}*x1 + {model_and.w[1]:.2f}*x2 + {model_and.w[2]:.2f} = 0")
print(f"训练准确率: {model_and.score(X_and, y_and):.2%}")

# 实验2:线性不可分数据(XOR逻辑)
print("\n" + "=" * 50)
print("实验2:线性不可分数据(XOR逻辑)")
print("=" * 50)

# XOR数据
X_xor = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y_xor = np.array([-1, 1, 1, -1])  # XOR: 两个为1或两个为0输出0,其他输出1

model_xor = Perceptron(learning_rate=1.0, max_iterations=100)
model_xor.fit(X_xor, y_xor)

print(f"训练准确率: {model_xor.score(X_xor, y_xor):.2%}")
print(f"说明: XOR问题非线性可分,感知机无法收敛到正确解")

# 可视化
fig, axes = plt.subplots(1, 3, figsize=(15, 5))

# 图1:AND问题的决策边界
def plot_decision_boundary(ax, X, y, model, title):
    # 绘制数据点
    colors = ['blue' if label == 1 else 'red' for label in y]
    ax.scatter(X[:, 0], X[:, 1], c=colors, s=100, edgecolors='k', linewidth=2)
    
    # 绘制决策边界
    w1, w2, b = model.w
    if w2 != 0:
        x_line = np.linspace(-0.5, 1.5, 100)
        y_line = -(w1 * x_line + b) / w2
        ax.plot(x_line, y_line, 'g-', linewidth=2, label='决策边界')
    
    ax.set_xlim(-0.5, 1.5)
    ax.set_ylim(-0.5, 1.5)
    ax.set_xlabel('x1')
    ax.set_ylabel('x2')
    ax.set_title(title)
    # ax.legend()
    ax.grid(True, alpha=0.3)

plot_decision_boundary(axes[0], X_and, y_and, model_and, 'AND问题(线性可分)')
plot_decision_boundary(axes[1], X_xor, y_xor, model_xor, 'XOR问题(非线性可分)')

# 图3:收敛过程对比
axes[2].plot(model_and.errors_history, 'b-', linewidth=2, label='AND(收敛)')
axes[2].plot(model_xor.errors_history, 'r-', linewidth=2, label='XOR(不收敛)')
axes[2].set_xlabel('迭代轮数')
axes[2].set_ylabel('错误样本数')
axes[2].set_title('收敛过程对比')
axes[2].legend()
axes[2].grid(True, alpha=0.3)

plt.tight_layout()
plt.show()
plt.close()
点击 Run 按钮执行代码

本章小结

本章详细介绍了罗森布拉特的感知机模型,包括其结构、几何解释、学习算法与收敛定理。1958年,罗森布拉特在康奈尔航空实验室的 Mark I 感知机上实现了第一个可学习的神经网络。其核心贡献是错误驱动的学习机制,当分类出错时,模型会自动调整权重,直到找到正确的决策边界。感知机的决策边界是线性超平面,这决定了其表达能力只能解决线性可分的分类问题,也暗示了非线性可分数据上的必然失败。1969年,《Perceptrons》一书中严格证明了单层感知机的局限性,这一结论曾让神经网络研究陷入近十年的寒冬。但困境也指明了方向,增加隐藏层,构建多层网络,让模型先提取组合特征再做决策。问题的关键在于如何训练多层网络,这将在下一章多层感知机中展开讨论,并在后续章节"反向传播算法"中得到解决。

练习题

  1. 证明感知机权重更新规则 w←w+η⋅yi⋅xi\mathbf{w} \leftarrow \mathbf{w} + \eta \cdot y_i \cdot \mathbf{x}_iw←w+η⋅yi​⋅xi​ 能够使错误分类样本的预测值朝正确方向移动。即证明更新后,yi⋅(wnewTxi)>yi⋅(woldTxi)y_i \cdot (\mathbf{w}_{new}^T \mathbf{x}_i) > y_i \cdot (\mathbf{w}_{old}^T \mathbf{x}_i)yi​⋅(wnewT​xi​)>yi​⋅(woldT​xi​)。

    参考答案

    设更新前权重为 w\mathbf{w}w,样本 (xi,yi)(\mathbf{x}_i, y_i)(xi​,yi​) 被错误分类,即 yi⋅(wTxi)<0y_i \cdot (\mathbf{w}^T \mathbf{x}_i) < 0yi​⋅(wTxi​)<0。

    更新后权重 wnew=w+η⋅yi⋅xi\mathbf{w}_{new} = \mathbf{w} + \eta \cdot y_i \cdot \mathbf{x}_iwnew​=w+η⋅yi​⋅xi​。

    计算更新后的预测值:

    wnewTxi=(w+η⋅yi⋅xi)Txi=wTxi+η⋅yi⋅xiTxi\mathbf{w}_{new}^T \mathbf{x}_i = (\mathbf{w} + \eta \cdot y_i \cdot \mathbf{x}_i)^T \mathbf{x}_i = \mathbf{w}^T \mathbf{x}_i + \eta \cdot y_i \cdot \mathbf{x}_i^T \mathbf{x}_iwnewT​xi​=(w+η⋅yi​⋅xi​)Txi​=wTxi​+η⋅yi​⋅xiT​xi​

    注意 xiTxi=∥xi∥2>0\mathbf{x}_i^T \mathbf{x}_i = \|\mathbf{x}_i\|^2 > 0xiT​xi​=∥xi​∥2>0(假设样本不为零向量),η>0\eta > 0η>0。

    因此:

    yi⋅(wnewTxi)=yi⋅(wTxi)+η⋅yi2⋅∥xi∥2y_i \cdot (\mathbf{w}_{new}^T \mathbf{x}_i) = y_i \cdot (\mathbf{w}^T \mathbf{x}_i) + \eta \cdot y_i^2 \cdot \|\mathbf{x}_i\|^2yi​⋅(wnewT​xi​)=yi​⋅(wTxi​)+η⋅yi2​⋅∥xi​∥2

    由于 yi2=1y_i^2 = 1yi2​=1(标签为 ±1\pm 1±1),∥xi∥2>0\|\mathbf{x}_i\|^2 > 0∥xi​∥2>0,η>0\eta > 0η>0,所以:

    yi⋅(wnewTxi)=yi⋅(wTxi)+η⋅∥xi∥2>yi⋅(wTxi)y_i \cdot (\mathbf{w}_{new}^T \mathbf{x}_i) = y_i \cdot (\mathbf{w}^T \mathbf{x}_i) + \eta \cdot \|\mathbf{x}_i\|^2 > y_i \cdot (\mathbf{w}^T \mathbf{x}_i)yi​⋅(wnewT​xi​)=yi​⋅(wTxi​)+η⋅∥xi​∥2>yi​⋅(wTxi​)

    这证明了更新后,yi⋅(wnewTxi)y_i \cdot (\mathbf{w}_{new}^T \mathbf{x}_i)yi​⋅(wnewT​xi​) 比更新前增大了 η⋅∥xi∥2\eta \cdot \|\mathbf{x}_i\|^2η⋅∥xi​∥2。如果更新足够多次,yi⋅(wTxi)y_i \cdot (\mathbf{w}^T \mathbf{x}_i)yi​⋅(wTxi​) 最终会变为正值,样本将被正确分类。

    关键洞察:每次更新都将预测值朝正确方向移动一个固定步长 η⋅∥xi∥2\eta \cdot \|\mathbf{x}_i\|^2η⋅∥xi​∥2。这就是"错误驱动学习"的本质:只纠正错误,不优化正确。

  2. 设计一个两层感知机解决 OR 逻辑运算,写出各层神经元的权重和阈值设置,并验证其正确性。OR 运算定义:(0,0)→0(0,0)\rightarrow 0(0,0)→0,(0,1)→1(0,1)\rightarrow 1(0,1)→1,(1,0)→1(1,0)\rightarrow 1(1,0)→1,(1,1)→1(1,1)\rightarrow 1(1,1)→1。

    参考答案 设感知机模型 y=sign(w1x1+w2x2+b)y = \text{sign}(w_1 x_1 + w_2 x_2 + b)y=sign(w1​x1​+w2​x2​+b)。选择权重 w1=1,w2=1,b=−0.5w_1 = 1, w_2 = 1, b = -0.5w1​=1,w2​=1,b=−0.5。

    验证:

    • (0,0)(0,0)(0,0):0+0−0.5=−0.5<00 + 0 - 0.5 = -0.5 < 00+0−0.5=−0.5<0,输出 −1-1−1(类别 0) ✓
    • (0,1)(0,1)(0,1):0+1−0.5=0.5>00 + 1 - 0.5 = 0.5 > 00+1−0.5=0.5>0,输出 111 ✓
    • (1,0)(1,0)(1,0):1+0−0.5=0.5>01 + 0 - 0.5 = 0.5 > 01+0−0.5=0.5>0,输出 111 ✓
    • (1,1)(1,1)(1,1):1+1−0.5=1.5>01 + 1 - 0.5 = 1.5 > 01+1−0.5=1.5>0,输出 111 ✓

    决策边界 x1+x2=0.5x_1 + x_2 = 0.5x1​+x2​=0.5 是一条直线,将原点(类别 0)与其他三点(类别 1)分开。OR 数据线性可分,单层感知机足以解决。

文章字数:4,036
更新于 2026-05-15
Star
Last Updated:
Contributors: icyfenix, Claude Opus 4.7
Prev
神经网络基础原理
Next
多层感知机