机器学习 & 深度学习发展简史

1.	1943:McCulloch & Pitts 提出人工神经元模型 —— 神经网络的雏形。

2.	1957:Rosenblatt 提出感知机(Perceptron) —— 最早的可训练神经网络。

3.	1970s:Vapnik 提出统计学习理论(VC维、泛化误差界) —— 机器学习的数学基础。

4.	1986:Rumelhart, Hinton & Williams 提出反向传播算法(Backpropagation) —— 神经网络真正可训练。

5.	1990s:支持向量机(SVM)、集成学习(Boosting、Random Forest)兴起。

6.	1997:Hochreiter & Schmidhuber 提出 LSTM —— 序列建模突破。

7.	2006:Hinton 提出深度置信网络(DBN) —— 深度学习复兴。

8.	2012:AlexNet 在 ImageNet 夺冠 —— 深度学习进入主流。

9.	2017–至今:Transformer、BERT、GPT 等推动 AI 爆炸式发展。

经过上述的理论和技术的发展,深度学习逐步的发展,AI已经可以在我们的生活和工作中担任越来越多的角色,承担更多的责任,那么为什么计算机可以做到这些呢,我接下来将通过自己的理解和查阅的资料和记录自己学习的过程。
我将从计算机视觉着手通过平面的函数概念和线性代数的基本概念来展示我的理解。
1:为什么计算机可以对图片和文字进行分类
从计算机存储图片的数据来看,图片在计算机内部的存储是一个拥有颜色通过和长宽的一个张量,每个元素展示的值在0到255之内,代表了图片在该点的RGB数值,再简化一下概念,如果换成黑白色基调的图片,每个元素展示的值就是一个亮暗程度,我们通过5 * 5的元素点字母A和字母B来简化自己的理解。

# 定义数组
A = np.array([
    0,1,1,1,0,
    1,0,0,0,1,
    1,1,1,1,1,
    1,0,0,0,1,
    1,0,0,0,1
], dtype=np.float32)

B = np.array([
    1,1,1,1,0,
    1,0,0,0,1,
    1,1,1,1,0,
    1,0,0,0,1,
    1,1,1,1,0
], dtype=np.float32) 

我们假设1代表黑色 0 代表白色 那么画在EXCEL里面进行直观的展示
1
根据这张图片的展示可以看到A和B的影子,那么在对后续的张量进行预测时候,在对应的位置展示为1的我们就可以判断他是否是A或者是B

使用pytorch画图代码

import numpy as np
import matplotlib.pyplot as plt

# 定义数组
A = np.array([
    0,1,1,1,0,
    1,0,0,0,1,
    1,1,1,1,1,
    1,0,0,0,1,
    1,0,0,0,1
], dtype=np.float32)

B = np.array([
    1,1,1,1,0,
    1,0,0,0,1,
    1,1,1,1,0,
    1,0,0,0,1,
    1,1,1,1,0
], dtype=np.float32)

# 重塑为5x5的矩阵
A = A.reshape(5, 5)
B = B.reshape(5, 5)

# 创建图形
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))

# 显示A
ax1.imshow(A, cmap='binary', interpolation='nearest')
ax1.set_title('Letter A', fontsize=16, fontweight='bold')
ax1.axis('off')  # 隐藏坐标轴

# 显示B
ax2.imshow(B, cmap='binary', interpolation='nearest')
ax2.set_title('Letter B', fontsize=16, fontweight='bold')
ax2.axis('off')

plt.tight_layout()
plt.show()

通过这种概念可以进行类比,我们通过像素点对物体进行外观的描述,相同或者类似的物体的外观有近似地方,如果能够使得一个函数进行判断,对应的像素点是否符合匹配的模型,那么就可以进行物体的识别。
接下来问题就编程如何找到这个函数!

我们继续对A和B进行图形进行延伸,如果通过通过线行函数对A和B的的像素点进行圈定。
问题建模
• 每个像素点就是一个坐标 (x,y),它的取值是 1(有颜色)或 0(空白)。
• “A 的像素”就是一组点的集合 S_A, “B 的像素”就是另一组集合 S_B。
• 你的问题其实就是:能不能找到一个判别函数 f(x,y),使得所有 A 的点落在一边,B 的点落在另一边?

在二维 (x,y) 空间里,A 和 B 的点云几乎重叠(比如上下横线、竖直笔画都有很多像素位置是相似的)。
所以用一条直线/平面去区分,很难做到干净分割。

像素向量化
• 把整个 m \times n 的像素矩阵拉直成一个向量(例如 5×5 → 25 维向量)。
• 那么 “A” 是某个 25 维向量,“B” 是另一个 25 维向量。
• 在这个高维空间里,就可以找到一个超平面把两类样本(A vs B)分开。
经典方法:感知机 / SVM
• 如果我们把 A 的所有像素样本标注为 1,B 的标注为 -1,
• 然后训练一个 线性分类器(如感知机、SVM),它本质上就是在找一个超平面来切分。

在二维像素平面里,A 和 B 的像素点大量重叠,信息不足,直线无法分开;而升维后,相当于给每个样本增加更多判别特征,把整幅图像作为一个高维向量来表示,A 与 B 在像素模式上的差异被放大,从几何上表现为在新的坐标轴上拉开了距离,因此在高维空间里复杂的非线性问题往往转化为简单的线性超平面切分。
现在问题变成了,如何切分,如何找到这个多少的维度和函数,如何构建这个函数?

“线性的变化”就是一个 仿射变换:
f(x) = W x + b
• x:输入向量
• W:权重向量或矩阵。
• b:偏置项。

对于分类问题,我们通常只需要一个权重向量 w,然后计算:
y = w^T x + b
• 如果 y > 0,判为 A;
• 如果 y < 0,判为 B。

这就是一个超平面:
w^T x + b = 0
问题来到了如何计算权重的张量w和偏置张量b。 核心答案:万物皆可函数化,低层次维度去分布出来,那就把维度升高,来增数据的的表现力。
数学基础:万能近似定理
Universal Approximation Theorem

定理(Cybenko, 1989; Hornik, 1991):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
一个具有单隐藏层的前馈神经网络,
只要:

  1. 隐藏层神经元足够多
  2. 使用非线性激活函数(如sigmoid、ReLU)

直观理解:用积木搭建任何形状

posted @ 2025-10-02 15:25  方子敬  阅读(27)  评论(0)    收藏  举报