【通俗理解】AI的两次寒冬:从感知机困局到深度学习前夜

AI的两次寒冬:从感知机困局到深度学习前夜

引用(中英双语)

  • 中文
    “第一次AI寒冬,是因为感知机局限性被揭示,让人们失去了对算法可行性的信心。”
    “第二次AI寒冬,则是因为专家系统的局限性和硬件成本的高企,触发资金与热情的退潮。”
  • 英文
    “The first AI winter was triggered by the limitations of the perceptron, which shattered faith in the feasibility of these algorithms.”
    “The second AI winter was driven by the limits of expert systems and high hardware costs, causing a retreat of funding and enthusiasm.”

关键词:

#AI寒冬
#感知机
#梯度下降
#神经网络
#符号主义
#专家系统
#深度学习
#过拟合
#软硬件瓶颈
#CSDN


具体实例与推演

假设我们需要分析一个简单的感知机模型在不同维度下的表现,并观察它在多层网络中的表现。当我们试图用传统的感知机解决非线性问题时,就会遭遇无法收敛的困境。这种尴尬在20世纪60年代末与70年代初集中爆发,也埋下了第一次AI寒冬的种子

  • 步骤

    1. 建立单层感知机模型并尝试解决异或(XOR)等非线性问题。
    2. 引入多层网络(BP算法),看其在复杂数据集上的表现。
    3. 讨论参数规模、硬件计算能力与算法局限性,探寻AI寒冬的成因。
  • 应用公式

    y = θ ( ∑ i w i x i + b ) y = \theta\Bigl(\sum_{i} w_i x_i + b\Bigr) y=θ(iwixi+b)

    E = 1 2 ∑ ( y pred − y true ) 2 E = \frac{1}{2}\sum (y_{\text{pred}} - y_{\text{true}})^2 E=21(ypredytrue)2

    w i ← w i − η ∂ E ∂ w i w_i \leftarrow w_i - \eta \frac{\partial E}{\partial w_i} wiwiηwiE

    Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\Bigl(\frac{QK^T}{\sqrt{d_k}}\Bigr)V Attention(Q,K,V)=softmax(dk QKT)V


第一节:感知机与第一次AI寒冬

1. 感知机模型的公式解释与案例

1.1 感知机模型
感知机模型公式通俗解释
y = θ ( ∑ i w i x i + b ) y = \theta\Bigl(\sum_{i} w_i x_i + b\Bigr) y=θ(iwixi+b)输出 (y) 类似一个“是否通过考核”的判定,(\theta(\cdot)) 是阶跃函数。
变量释义
( w_i ) : 权重像评委对各项打分的权重,决定各因素影响大小
( x_i ) : 输入参赛选手在各项测试中的成绩
( b ) : 偏置顶层政策或特殊加分项
( \theta(\cdot) ) : 激活函数类似及格线,只要超过这个线就“通过”,否则就是“不通过”
1.2 感知机的应用意义和缺点
  • 应用意义感知机是神经网络历史的开端,提供了一个将输入线性组合后进行分类的基石。
  • 缺点无法解决线性不可分问题,例如XOR异或问题。该问题在1969年Minsky和Papert的著作中被深度剖析,导致了社会对感知机的失望和第一波“AI寒冬”。

打比方

  • 如果把“线性可分”比作普通的“直线划分”,那么感知机就像一条简单直线,只能把二维平面分成两个区域。如果数据呈现“弯曲”的分界线,感知机就无能为力了。

第二节:BP算法与第二次AI寒冬

2.1 BP(反向传播)核心公式

公式作用
E = 1 2 ∑ ( y pred − y true ) 2 E = \frac{1}{2}\sum (y_{\text{pred}} - y_{\text{true}})^2 E=21(ypredytrue)2均方误差 (MSE)度量预测值与真实值之差距
w i ← w i − η ∂ E ∂ w i w_i \leftarrow w_i - \eta \frac{\partial E}{\partial w_i} wiwiηwiE梯度下降更新权重,减少预测误差
变量释义
( E ) : 误差函数像“考核指标”,越小越好
( y_{\text{pred}} ) : 预测输出神经网络对输入数据给出的判断
( y_{\text{true}} ) : 真实值数据集中样本对应的正确标签
( \eta ) : 学习率步伐大小,过大容易振荡,过小收敛慢
2.2 反向传播的应用价值与局限
  • 应用价值:在多层网络中,BP算法让网络能学习非线性映射,大大扩展了感知机的应用范围,为后续深度学习奠定基础。
  • 局限:在硬件计算能力不足、训练数据不足以及网络深度受限时,BP算法会面临梯度消失或振荡等问题。加之80年代后期到90年代初期专家系统热潮退却,资金和人力投入也随之骤降,引发了第二次“AI寒冬”。

打比方

  • BP算法就像在“后厨”中不断试错调味,想让菜肴更接近理想口味。但如果人手不足、食材匮乏(数据少)、炉火(硬件计算能力)不够旺,再好的厨艺(BP算法)也难以做出让人满意的菜。

第三节:公式探索与推演运算

探讨神经网络的核心数学时,我们常会对照其他相关公式。这里列出一些常见公式,并对比其异同。

3.1 常见相似公式对比

公式/定律共同点不同点
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\Bigl(\frac{QK^T}{\sqrt{d_k}}\Bigr)V Attention(Q,K,V)=softmax(dk QKT)V都是神经网络中常见机制,基于加权和。Attention主要用于对序列信息做加权,BP用于端到端的梯度优化。
Cauchy-Schwarz不等式都能对运算范围进行一定限制或提供判断标准。C-S不等式在向量空间中度量相似度,神经网络偏重训练误差或注意力机制。
热力学第二定律都反映“不可逆性”或“单调变化”的概念。热力学描述宏观世界熵增,AI训练则是误差下降,与统计学习理论紧密相关。
专家系统推理规则都关注“条件-结论”的推断,涉及系统的“知识与推断框架”。专家系统基于规则库,神经网络基于数据驱动;二者在某些应用侧面相互补充。

3.2 推导过程(以梯度下降为例)

  1. 定义误差函数
    E = 1 2 ∑ ( y pred − y true ) 2 E = \frac{1}{2}\sum (y_{\text{pred}} - y_{\text{true}})^2 E=21(ypredytrue)2
  2. 计算梯度
    ∂ E ∂ w i = ∑ ( y pred − y true ) ⋅ ∂ y pred ∂ w i \frac{\partial E}{\partial w_i} = \sum (y_{\text{pred}} - y_{\text{true}}) \cdot \frac{\partial y_{\text{pred}}}{\partial w_i} wiE=(ypredytrue)wiypred
  3. 参数更新
    w i ← w i − η ∂ E ∂ w i w_i \leftarrow w_i - \eta \frac{\partial E}{\partial w_i} wiwiηwiE

在AI第二次寒冬时期,网络结构较浅,硬件性能有限,导致实际训练时收敛慢或难以成功;而深层网络更容易出现梯度消失,这也是当时人们对神经网络失望的重要原因之一。


第四节:核心代码与可视化

以下示例代码使用加利福利亚数据集,构建一个简单的多层感知机,演示网络训练过程及可视化。我们将使用多种可视化方式,包括散点图、柱状图、饼图,添加网格与注释,并利用SHAP库解释模型决策过程。

请注意:波士顿住房数据集在新版的 scikit-learn 中已被标注为“可能带有偏见”,仅在此作为教学演示用;实际项目需谨慎处理。

# This code performs the following functions:
# 1. Loads the 加利福利亚 Housing dataset.
# 2. Constructs a simple MLP to predict house prices.
# 3. Trains the network using gradient descent (via scikit-learn MLP).
# 4. Visualizes data and results with Seaborn and Matplotlib in various styles.
# 5. Utilizes SHAP to explain model decisions.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPRegressor
from sklearn.metrics import mean_squared_error# -------------- 1. Load the California Housing dataset --------------
california = fetch_california_housing()
X = california.data
y = california.target
feature_names = california.feature_names# Convert to DataFrame for easier processing
df = pd.DataFrame(X, columns=feature_names)
df['PRICE'] = y# -------------- 2. Split the data into training and testing sets --------------
X_train, X_test, y_train, y_test = train_test_split(df.drop('PRICE', axis=1), df['PRICE'], test_size=0.2, random_state=42)scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# -------------- 3. Construct a simple MLP Regressor and train it --------------
mlp = MLPRegressor(hidden_layer_sizes=(16, 8),activation='relu',solver='adam',learning_rate_init=0.01,max_iter=500,random_state=42)mlp.fit(X_train_scaled, y_train)# Evaluate the model
y_pred = mlp.predict(X_test_scaled)
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error on Test Set:", mse)# -------------- 4. Data Visualization --------------
sns.set_theme(style="whitegrid")# 4.1 Scatter plot of predictions
plt.figure(figsize=(8,6))
plt.scatter(y_test, y_pred, marker='o', color='blue', label='Predictions')
plt.plot([y_test.min(), y_test.max()],[y_test.min(), y_test.max()],color='red', linestyle='--', label='Ideal Line')
plt.xlabel("True House Price")
plt.ylabel("Predicted House Price")
plt.title("Scatter Plot of True vs Predicted")
plt.legend(loc='best')
plt.grid(True)
plt.annotate('Close to Ideal', xy=(25, 25), xytext=(30, 40),arrowprops=dict(facecolor='black', arrowstyle='->'))
plt.show()# 4.2 Bar chart of feature importances (using MLP.coefs_)
# For MLP, there's no direct "feature_importance_", we approximate by sum of absolute weights for the first layer
feature_importance = np.sum(np.abs(mlp.coefs_[0]), axis=1)
plt.figure(figsize=(10,6))
plt.bar(feature_names, feature_importance, color='skyblue', edgecolor='black')
plt.xlabel('Features')
plt.ylabel('Approx Importance')
plt.title('Feature Importances (Sum of Absolute Weights in First Hidden Layer)')
plt.axhspan(0, np.mean(feature_importance), color='yellow', alpha=0.3,label='Below average importance')
plt.legend()
plt.xticks(rotation=45)
plt.grid(True)
plt.show()# 4.3 Pie chart of feature importances
plt.figure(figsize=(6,6))
plt.pie(feature_importance, labels=feature_names, autopct='%1.1f%%', startangle=140)
plt.title('Feature Importance Distribution')
plt.show()# 4.4 Additional scatter plots with different line/markers
plt.figure(figsize=(8,6))
markers = ['o', 's', '^', '*', 'D', 'X', 'P', 'v', '+', '.']
for i, col in enumerate(feature_names[:5]):plt.scatter(X_train[col], y_train, marker=markers[i % len(markers)], label=col)
plt.xlabel('Feature Value')
plt.ylabel('House Price')
plt.title('Scatter Plots of First 5 Features vs. Price')
plt.legend(loc='upper right')
plt.grid(True)
plt.show()# -------------- 5. SHAP analysis --------------
# Install shap if needed: !pip install shap
import shapexplainer = shap.Explainer(mlp, X_train_scaled)
shap_values = explainer(X_test_scaled)# SHAP Summary plot
shap.summary_plot(shap_values, features=X_test_scaled, feature_names=feature_names)# SHAP dependence plot for top 2 features
shap.plots.scatter(shap_values[:, 0], color=shap_values)
shap.plots.scatter(shap_values[:, 1], color=shap_values)# Print intermediate data shapes for debugging
print("X_train_scaled shape:", X_train_scaled.shape)
print("y_train shape:", y_train.shape)
print("MLP hidden layers:", mlp.hidden_layer_sizes)

在这里插入图片描述

代码可视化要点

  1. 不同的线型和标记:在散点图中采用多种标记(如 o, s, ^ 等)区分特征。
  2. 添加网格plt.grid(True) 帮助读者更容易跟踪数据点位置。
  3. 优化标题和标签:标题与坐标轴标签均指明含义。
  4. 使用不同的颜色散点图、柱状图、饼图都选用对比度较高的配色方案。
  5. 添加图例:并通过 loc='best' 选择合适位置。
  6. 高亮关键区域:在柱状图中采用 plt.axhspan() 凸显平均线以下区域。
  7. 添加注释:使用 plt.annotate() 指出与理想线较为接近的区域等。

代码输出说明

输出内容描述
测试集均方误差(MSE)评估网络预测效果,数值越小表示模型对房价预测更准确。
散点图(真实值 vs. 预测值)展示模型表现,理想情况下数据点应靠近对角线。
特征重要性(柱状图+饼图)虽然MLP没有明确的特征重要性,但可以用绝对权重求和近似衡量每个特征的影响力。
多特征散点图可视化不同特征与价格之间的关系,强调线型、标记与网格以提高可读性。
SHAP可视化使用SHAP解释模型决策过程,展示各特征对预测结果的正负影响程度。
中间调试信息包含数据集维度、MLP的网络结构等,方便排查潜在问题。

代码功能实现

  1. 数据加载与清洗:载入加利福利亚住房数据并进行标准化处理。
  2. 网络构建与训练:采用多层感知机并通过误差反向传播来学习参数。
  3. 评估与可视化:使用散点图、柱状图、饼图、SHAP可视化等多方式展现模型表现与特征影响。
  4. 多标注方式的图形输出:使用网格、注释、不同线型与颜色等提升可读性。

第五节:参考信息源

  1. AI历史与寒冬

    • Minsky, M., & Papert, S. (1969). Perceptrons. MIT Press.
    • Russell, S. J., & Norvig, P. (2009). Artificial Intelligence: A Modern Approach. Prentice Hall.
  2. BP算法与神经网络

    • Rumelhart, D. E., Hinton, G. E., & Williams, R. J. (1986). Learning Representations by Back-Propagating Errors. Nature.
    • Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.
  3. SHAP解释模型

    • Lundberg, S. M., & Lee, S. I. (2017). A Unified Approach to Interpreting Model Predictions. Advances in Neural Information Processing Systems.
  4. Scikit-learn与数据集

    • Pedregosa, F., et al. (2011). Scikit-learn: Machine Learning in Python. Journal of Machine Learning Research, 12, 2825-2830.

参考文献链接

  1. Minsky, M., & Papert, S. (1969). Perceptrons. MIT Press.
  2. Russell, S., & Norvig, P. (2009). Artificial Intelligence: A Modern Approach.
  3. Rumelhart, D. E., et al. (1986). Learning representations by back-propagating errors.
  4. Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.
  5. Lundberg, S. M., & Lee, S. I. (2017). A Unified Approach to Interpreting Model Predictions.
  6. Pedregosa, F., et al. (2011). Scikit-learn: Machine Learning in Python.

结语

两次AI寒冬体现了技术发展的曲折性:

  • 第一次感知机的局限性使得线性模型萎靡不振;
  • 第二次专家系统瓶颈**、硬件落后与投资潮水褪去,AI再度进入沉寂。
    然而,这些“寒冬”也为后续的深度学习、硬件革新与数据驱动模式提供了养分。如今,AI在大规模算力与数据的支撑下,开启了
    第三波浪潮**,也正因此,我们更应当记住历史教训,让技术发展更加稳健与长远。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/504929.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css出现边框

前言 正常情况下,开启 contenteditable 属性后会出现 “黑色边框”。 如下图所示,很影响美观: 您可能想去掉它,就像下面这样: 解决方案 通过选择器,将 focus 聚焦时移除 outline 属性即可。 如下代码所示&a…

Flutter:打包apk,安卓版本更新(二)

在Flutter:打包apk,详细图文介绍(一)基础上,实现安卓端的版本更新功能。 1、把自己的demo文件复制到空项目中 2、生成APP图标:dart run icons_launcher:create 3、生成启动图:dart run flutter…

execl条件比较两个sheet每个单元格的值

1.把对比的sheet复制到对比文件中 2.选择首个单元格 3.新建规则 4.选择公式 5.编写公式 A3<>Sheet1!A36.选择差异颜色 7.选择应用范围 $1:$655368.选择应用范围

FPGA的 基本结构(Xilinx 公司Virtex-II 系列FPGA )

以Xilinx 公司Virtex-II 系列FPGA 为例&#xff0c;其基本结构由下图所示。它是主要由两大部分组成&#xff1a;可编程输入/输出&#xff08;Programmable I/Os&#xff09;部分和内部可配置&#xff08;Configurable Logic&#xff09;部分。 可编程输入/输出&#xff08;I/Os…

HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现

HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现 最近在学习鸿蒙开发过程中&#xff0c;阅读了官方文档&#xff0c;在之前做flutter时候&#xff0c;经常使用overlay&#xff0c;使用OverlayEntry加入到overlayState来做添加悬浮按钮、提示弹窗、加载中指示器、加载失败的t…

【蓝桥杯选拔赛真题60】C++寻宝石 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解

目录 C++寻宝石 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 五、运行结果 六、考点分析 七、推荐资料 C++寻宝石 第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 有N(1<N<100)个盒子排成一排,每个盒子都放…

ue5 蒙太奇,即上半身动画和下半身组合在一起,并使用。学习b站库得科技

本文核心 正常跑步动画端枪动画跑起来也端枪 正常跑步动画 端枪动画的上半身 跑起来也端枪 三步走&#xff1a; 第一步制作动画蒙太奇和插槽 第二步动画蓝图选择使用上半身动画还是全身动画&#xff0c;将上半身端枪和下半身走路结合 第三步使用动画蒙太奇 1.开始把&a…

2025年01月09日Github流行趋势

1. 项目名称&#xff1a;khoj 项目地址url&#xff1a;https://github.com/khoj-ai/khoj项目语言&#xff1a;Python历史star数&#xff1a;22750今日star数&#xff1a;1272项目维护者&#xff1a;debanjum, sabaimran, MythicalCow, aam-at, eltociear项目简介&#xff1a;你…

Idea-离线安装SonarLint插件地址

地址&#xff1a; SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace 选择Install Plugin from Disk..&#xff0c;选中下载好的插件&#xff0c;然后重启idea

MT6706BL 同步整流 规格书

MT6706BL 是用于反激式变换器的高性能 65V 同步整流器。MT6706BL兼容各种反激转换器类型。MT6706BL 支持 DCM、CCM 和准谐振模式。MT6706BL 集 成 了 一 个 65V 功 率MOSFET&#xff0c;可以取代肖特基二极管&#xff0c;提高效率。V SW <V TH-ON 时&#xff0c;MT6706BL 内…

linux centos挂载未分配的磁盘空间

使用到的命令 lshw -class disk -short hostnamectl fdisk /dev/sdb partprobe /dev/sdb mount /dev/sdb2 /opt/fastdfs/ mkfs.ext4 /dev/sdb2 mount -t ext4 /dev/sdb2 /opt/fastdfs/

在 macOS 中,设置自动将文件夹排在最前

文章目录 1、第一步访达设置2、第二步排序方式 需要两步设置 1、第一步访达设置 按名称排序的窗口中 2、第二步排序方式 选择名称

【LeetCode Hot100 贪心算法】 买卖股票的最佳时机、跳跃游戏、划分字母区间

贪心算法 买卖股票的最佳时机买卖股票的最佳时机II跳跃游戏跳跃游戏II划分字母区间 买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的…

人工智能-机器学习之多元线性回归(项目实践一)

目标&#xff1a;运用scikit-learn进行多元线性回归方程的构建&#xff0c;通过实际案例的训练集和测试集进行预测&#xff0c;最终通过预测结果和MSE来评估预测的精度。 一、首先安装scikit-learn&#xff1a;pip install scikit-learn C:\Users\CMCC\PycharmProjects\AiPro…

MySql根据经纬度查询距离

一、搭建测试 创建数据表() CREATE TABLE sys_test (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键ID,name varchar(20) DEFAULT NULL COMMENT 名称,longitude decimal(10,6) DEFAULT NULL COMMENT 经度,latitude decimal(10,6) DEFAULT NULL COMMENT 维度,PRIMARY KEY (id…

api开发如何在代码中使用京东商品详情接口的参数?

选择编程语言和相关工具 以 Python 为例&#xff0c;你可以使用requests库来发送 HTTP 请求获取接口数据。如果是 Java&#xff0c;可以使用OkHttp等库。 Python 示例 假设你已经安装了requests库&#xff0c;以下是一个简单的代码示例来获取和使用京东商品详情接口参数&#…

【可实战】Bug的判定标准、分类、优先级、定位方法、提交Bug(包含常见面试题)

一、Bug相关概念 &#xff08;一&#xff09;bug判定标准 &#xff08;二&#xff09;常见 Bug 分类 &#xff08;三&#xff09;bug优先级 1.bug严重程度与优先级的关系 有些很严重的Bug&#xff0c;只在极端的条件下才出现&#xff0c;用户碰到的概率很低&#xff0c;这种情…

SpringBoot之核心配置

学习目标&#xff1a; 1.熟悉Spring Boot全局配置文件的使用 2.掌握Spring Boot配置文件属性值注入 3.熟悉Spring Boot自定义配置 4.掌握Profile多环境配置 5.了解随机值设置以及参数间引用 1.全局配置文件 Spring Boot使用 application.properties 或者application.yaml 的文…

GitLab创建用户,设置访问SSH Key

继上一篇 Linux Red Hat 7.9 Server安装GitLab-CSDN博客 安装好gitlab&#xff0c;启用管理员root账号后&#xff0c;开始创建用户账户 1、创建用户账户 进入管理后台页面 点击 New User 输入用户名、邮箱等必填信息和登录密码 密码最小的8位&#xff0c;不然会不通过 拉到…

1688平台商品关键词搜索的多样性与Python爬虫应用实践

在当今这个信息化、数字化飞速发展的时代&#xff0c;电子商务平台已经成为人们日常生活中不可或缺的一部分。而1688作为国内知名的B2B电商平台&#xff0c;凭借其庞大的商品种类和丰富的供应链资源&#xff0c;为无数商家和消费者提供了便捷的交易渠道。除了广受关注的女装品类…