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

从本篇开始,我们正式踏入神经网络与深度学习 的大门,首站就是所有神经网络的入门基石 ------感知器(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,然后吃点零食,晚上只吃一顿。

相关推荐
九.九12 小时前
ops-transformer:AI 处理器上的高性能 Transformer 算子库
人工智能·深度学习·transformer
春日见12 小时前
拉取与合并:如何让个人分支既包含你昨天的修改,也包含 develop 最新更新
大数据·人工智能·深度学习·elasticsearch·搜索引擎
恋猫de小郭12 小时前
AI 在提高你工作效率的同时,也一直在增加你的疲惫和焦虑
前端·人工智能·ai编程
deephub12 小时前
Agent Lightning:微软开源的框架无关 Agent 训练方案,LangChain/AutoGen 都能用
人工智能·microsoft·langchain·大语言模型·agent·强化学习
偷吃的耗子12 小时前
【CNN算法理解】:三、AlexNet 训练模块(附代码)
深度学习·算法·cnn
大模型RAG和Agent技术实践12 小时前
从零构建本地AI合同审查系统:架构设计与流式交互实战(完整源代码)
人工智能·交互·智能合同审核
老邋遢12 小时前
第三章-AI知识扫盲看这一篇就够了
人工智能
互联网江湖12 小时前
Seedance2.0炸场:长短视频们“修坝”十年,不如AI放水一天?
人工智能
PythonPioneer13 小时前
在AI技术迅猛发展的今天,传统职业该如何“踏浪前行”?
人工智能
冬奇Lab13 小时前
一天一个开源项目(第20篇):NanoBot - 轻量级AI Agent框架,极简高效的智能体构建工具
人工智能·开源·agent