人工智能——深度学习:入门篇

从本篇开始,我们正式踏入神经网络与深度学习 的大门,首站就是所有神经网络的入门基石 ------感知器(Perceptron) 算法。

感知器作为最早的人工神经网络模型,是深度学习中多层感知器、CNN、Transformer 等复杂模型的基础,理解它的核心原理,就能打通神经网络从 0 到 1 的任督二脉。

一、什么是感知器?

感知器(Perceptron)是由美国科学家罗森布拉特在 1957 年提出的,是最简单的人工神经网络模型 ,本质是一个线性二分类模型 ,也是我们上一篇提到的 KNN 算法之后,第一个带参数训练过程的经典算法。

从生物学角度,感知器是对生物神经元的极简模拟:生物神经元通过接收多个突触的信号,整合后达到阈值就会产生神经冲动;而人工感知器通过接收多个特征输入,经过加权求和 + 激活判断后,输出分类结果(0 或 1)。

用一句话总结感知器的核心逻辑:对输入特征进行加权求和,再通过激活函数做二分类判断,通过训练不断调整权重参数,让模型能精准划分两类数据

感知器也是后续多层感知器(MLP) 的基础,多层感知器就是将多个感知器堆叠,加入隐藏层,从而实现非线性分类,这也是深度学习的核心思路。

二、感知器的核心原理

感知器的原理围绕数学公式结构模型 展开,没有复杂的推导,核心就 3 步:输入加权求和→加入偏置→激活判断

2.1 感知器的基本结构

感知器的结构是神经网络的基础,包含三个核心部分,对应生物神经元的输入、整合、输出:

  1. 输入层 :接收外界的特征输入,记为x1, x2, ..., xn(n 为特征维度),每个输入对应一个权重(w),权重代表该特征对分类结果的重要性;
  2. 整合层 :对输入特征进行加权求和 ,再加上偏置(b)(偏置的作用是调整模型的分类阈值,让模型更灵活);
  3. 输出层 :将整合后的结果传入激活函数,得到最终的二分类输出(0 或 1)。

2.2 感知器的核心公式

感知器的计算过程可以用两个核心公式概括

步骤1:线性计算

  • :特征的线性得分(无边界)
  • :多个输入特征(如血糖、BMI)
  • :特征对应的权重参数
  • :偏置参数

步骤 2:二分类输出

感知器的激活函数是符号函数 ,作用是将线性加权和z映射为0 或 1的二分类结果,公式为:

如果线性加权和大于等于 0,感知器输出 1(属于正类);否则输出 0(属于负类)。

2.3 感知器的核心本质

感知器的本质是:在 n 维特征空间中,找到一个线性超平面,将两类数据进行线性划分

  • 二维特征空间中,这个超平面是一条直线
  • 三维特征空间中,这个超平面是一个平面
  • n 维特征空间中,这个超平面是n-1 维的线性界面

这也是感知器的核心局限性:只能处理线性可分的数据,如果数据是非线性可分的,感知器无法找到合适的划分平面,这也是后续多层感知器出现的原因。

三、感知器的训练过程

和 KNN 算法不同,感知器是有训练过程的模型,核心是通过误差调整权重和偏置,让模型的预测结果越来越接近真实标签。感知器的训练遵循错误驱动的原则,只有当预测结果出错时,才会调整参数,这也是后续反向传播算法的雏形。

3.1 训练的核心目标

找到一组最优的权重参数 W偏置 b ,使得感知器能对所有训练样本做出正确的二分类判断,即:对于任意训练样本(Xi, yi)(yi∈{0,1}),感知器的输出f(W·Xi + b) = yi

3.2 感知器的训练步骤

感知器的训练过程非常简单,总共 5 步,全程只有参数初始化前向预测误差计算参数更新循环迭代几个核心步骤。

步骤 1:参数初始化

给权重w1, w2, ..., wn随机小值 (或初始化为 0),偏置b初始化为 0(也可以是随机小值)。

步骤 2:前向预测

取一个训练样本(X, y),其中X=(x1,x2,...,xn)是特征,y是真实标签(0 或 1),代入感知器公式计算预测输出:

  • 计算线性加权和:z = w1x1 + w2x2 + ... + wnxn + b
  • 激活判断得到预测值:y_hat = f(z)(f 为阶跃函数)

步骤 3:误差计算

计算预测值与真实值的误差:e = y - y_hat

  • 如果e=0:预测正确,不调整参数;
  • 如果e≠0:预测错误,需要根据误差调整权重和偏置。

步骤 4:参数更新

这是感知器训练的核心,根据感知器学习规则更新权重和偏置,公式为:

其中:

  • η学习率(0<η≤1),控制参数更新的步长,和后续梯度下降的学习率作用一致;
  • e:预测误差y - y_hat
  • x_i:第 i 个特征值。

学习率的选择技巧

  • η 太小:参数更新太慢,训练耗时久,容易陷入局部最优;
  • η 太大:参数更新幅度过大,容易在最优值附近震荡,无法收敛;
  • 一般先取 0.1、0.01 尝试,再根据训练结果调整。

步骤 5:循环迭代

重复步骤 2-4,遍历所有训练样本,直到所有样本预测正确 ,或者迭代次数达到预设值,训练结束。

3.3 感知器训练的核心思想

感知器的参数更新规则是梯度下降的极简形式 ,也是后续 BP 神经网络(反向传播)的基础。简单说:预测错了,就根据误差的方向,往能修正错误的方向调整参数,直到模型能正确划分所有线性可分的数据。

四、感知器的优缺点

4.1 优点

  1. 结构简单:是最简单的人工神经网络,原理易懂,数学推导简单,适合神经网络入门;
  2. 训练高效:参数更新规则简单,计算量小,对于线性可分的小数据集,训练速度极快;
  3. 易实现:核心代码只有几十行,无需复杂的库,纯 Python 就能实现;
  4. 奠定基础:感知器的加权求和、激活函数、参数训练思想,是所有神经网络的核心基石,后续的 MLP、CNN 都基于此。

4.2 缺点

  1. 只能处理线性可分数据 :这是感知器最大的局限性,也是著名的感知器收敛定理:只有当训练数据线性可分时,感知器才能收敛,否则永远无法训练成功(比如异或 XOR 问题,感知器无法解决);
  2. 仅支持二分类:原生感知器只能做 0/1 的二分类,无法直接处理多分类问题(需要改进为多类感知器,比如一对多、一对一);
  3. 对异常值敏感:感知器的参数更新受错误样本驱动,异常值会导致参数向错误方向调整,影响模型效果;
  4. 无泛化能力优化:原生感知器没有正则化等机制,容易在训练集上过拟合,对测试集的泛化能力较差。

五、实战案例 ------ 感知器实现鸢尾花二分类

复制代码
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score

class Perceptron:
    def __init__(self, eta0=0.1, max_iter=100):
        self.eta0 = eta0
        self.max_iter = max_iter
        self.w = None
        self.b = 0

    def activation(self, z):
        return np.where(z >= 0, 1, 0)

    def fit(self, X, y):
        self.w = np.zeros(X.shape[1])
        for _ in range(self.max_iter):
            error_count = 0
            for xi, yi in zip(X, y):
                z = np.dot(xi, self.w) + self.b
                y_hat = self.activation(z)
                e = yi - y_hat
                if e != 0:
                    self.w += self.eta0 * e * xi
                    self.b += self.eta0 * e
                    error_count += 1
            if error_count == 0:
                print(f"提前收敛,迭代次数:{_+1}")
                break

    def predict(self, X):
        z = np.dot(X, self.w) + self.b
        return self.activation(z)

iris = load_iris()
X = iris.data[:100, :]
y = iris.target[:100]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

ppn = Perceptron(eta0=0.1, max_iter=100)
ppn.fit(X_train, y_train)

y_train_pred = ppn.predict(X_train)
y_test_pred = ppn.predict(X_test)
print(f"感知器训练集准确率:{accuracy_score(y_train, y_train_pred):.4f}")
print(f"感知器测试集准确率:{accuracy_score(y_test, y_test_pred):.4f}")
print(f"感知器权重:{ppn.w}")
print(f"感知器偏置:{ppn.b}")

日记

2月8日,星期日

休息的一天

今天单休一天,终于知道之前别人说的放假只吃一顿是什么样的,睡觉睡到下午14:00,然后吃点零食,晚上只吃一顿。

相关推荐
KaneLogger32 分钟前
【Agent】openclaw + opencode 打造助手 安装篇
人工智能·google·程序员
知识浅谈2 小时前
一步步带你把 OpenClaw 玩宕机(附云服务器避坑部署教程)
人工智能
冬奇Lab2 小时前
OpenClaw 深度解析(四):插件 SDK 与扩展开发机制
人工智能·开源·源码阅读
IT_陈寒3 小时前
SpringBoot实战:5个让你的API性能翻倍的隐藏技巧
前端·人工智能·后端
机器之心3 小时前
让AI自我进化?斯坦福华人博士答辩视频火了,庞若鸣参与评审
人工智能·openai
iceiceiceice4 小时前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
AI攻城狮4 小时前
RAG Chunking 为什么这么难?5 大挑战 + 最佳实践指南
人工智能·云原生·aigc
yiyu07165 小时前
3分钟搞懂深度学习AI:梯度下降:迷雾中的下山路
人工智能·深度学习
掘金安东尼5 小时前
玩转龙虾🦞,openclaw 核心命令行收藏(持续更新)v2026.3.2
人工智能