10-认识深度学习

发布于 2025-04-07  69 次阅读


“理解一切或许不重要,重要的是与世界有效交互。”

——深度学习

基本概念📚

1. 深度学习是什么🧠

深度学习是机器学习的一个子领域,其核心在于使用深层神经网络(通常包含多个隐藏层)来模拟人脑的复杂数据处理机制。通过多层次的非线性变换,深度学习能够从数据中自动提取高阶特征,无需依赖人工设计的特征。

深度学习人类历史上重要的一步,也是人工智能的核心技术、“第四次工业革命”的关键支柱。

  • 🔥第一次工业革命(18世纪末):蒸汽机、机械化生产。
  • 💡第二次工业革命(19世纪末):电力、流水线生产。
  • 💻第三次工业革命(20世纪中后期):计算机、信息技术、自动化。
  • 🤖第四次工业革命(21世纪初):人工智能、物联网、大数据、深度学习、机器人技术。

2. 深度学习有什么用❓

到今天(2025年春),深度学习领域的应用广泛。许多领域通过运用深度学习,得到了革命性的技术突破,如:图像识别、自然语言处理、语音识别、自动驾驶、推荐系统、医疗等。

3. 深度学习vs机器学习⚖️

尽管属于机器学习的一个子集,但深度学习与其他传统机器学习算法有着显著的差异:

维度机器学习深度学习
数据需求小规模数据即可有效训练。依赖大规模数据,性能随数据量提升。
特征工程需人工设计特征(如纹理、统计量)。自动学习特征,减少人为干预。
计算资源通常无需高性能硬件。需要GPU/TPU加速训练。
模型复杂度参数少,结构简单(如线性回归)。参数多,结构复杂(如百层ResNet)。
可解释性模型透明,易于解释(如决策树规则)。黑箱模型,解释性差。
应用场景结构化数据(表格、数据库)。非结构化数据(图像、文本、语音)。

核心组件⚙️

  • 网络层:模型的基本骨架。不同神经网络层的层层叠加,是直接体现“深层神经网络”中“深层”的核心组件。不同网络层发挥不同的作用,如输入层、稠密层,CNN的卷积层,RNN的循环层,Transformer的自注意力层等等。
  • 损失函数:模型的训练目标。量化评估模型预测效果与真实情况(训练数据集)的差异,如适用于分类任务的损失函数回归损失函数
  • 优化器:模型的训练方式。(主要)以梯度下降为框架的算法,用于反向传播,让模型的预测效果不断逼近损失函数定义的目标。
  • 激活函数:模型的训练师。直接掌管训练模型的细节,如引入非线性、判定神经元是否激活、控制各神经元(组成神经网络层的元素)的输出,如数量、范围等等。

发展历程📜

1. 神经网络🧬

“神经网络的灵感来自生物神经元“

所谓深度学习技术,核心在于使用“深层神经网络”构建学习模型。而在“深层神经网络”出现之前,其核心技术是机器学习中“神经网络”。

  • 1943年,神经生理学家Warren McCulloch和数学家Walter Pitts在《A Logical Calculus of Ideas Immanent in Nervous Activity》中提出首个神经元数学模型,将生物神经元的兴奋性抑制性抽象为数学运算
  • 1958年,心理学家Frank Rosenblatt在Cornell航空实验室发明Mark I Perceptron(感知机),首次实现权重自适应机制

神经网络发展的重要节点:

时间模型名称核心贡献局限性
1943McCulloch-Pitts神经元首次数学建模生物神经元无学习能力,仅逻辑运算
1958感知机(Perceptron)首次实现权重可调的学习机制无法解决非线性问题(如XOR)
1960Adaline/Madaline引入梯度下降和均方误差仍是单层线性模型

感知机——首个可学习的神经网络

感知机示例(Python):

class Perceptron:
    def __init__(self, learning_rate=0.01, n_iters=100):
        self.lr = learning_rate
        self.n_iters = n_iters
        self.weights = None
        self.bias = None
        self.errors = []

    def activation(self, x):
        return np.where(x >= 0, 1, 0)  # 阶跃函数

    def fit(self, X, y):
        n_samples, n_features = X.shape
        self.weights = np.zeros(n_features)
        self.bias = 0

        for _ in range(self.n_iters):
            total_error = 0
            for idx, x_i in enumerate(X):
                linear_output = np.dot(x_i, self.weights) + self.bias
                y_pred = self.activation(linear_output)
                error = y[idx] - y_pred
                total_error += abs(error)

                # 权重更新规则
                self.weights += self.lr * error * x_i
                self.bias += self.lr * error

            self.errors.append(total_error)
            if total_error == 0:  # 提前终止
                break

    def predict(self, X):
        linear_output = np.dot(X, self.weights) + self.bias
        return self.activation(linear_output

感知机作为首个可学习的神经网络模型(首个神经网络模型是M-P神经网络模型,但不可学习),成为“机器学习”领域中的首个神经网络。

然而感知机只能解决严格的线性可分问题,无法处理非线性问题(如最简单的异或问题)

已上述感知机为例(Python):

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score


# 生成线性可分数据
def generate_linear_data():
    X, y = make_classification(
        n_samples=100,
        n_features=2,
        n_classes=2,
        n_clusters_per_class=1,
        n_redundant=0,
        class_sep=1.5,
        random_state=42
    )
    return X, y


# 生成异或数据(非线性可分)
def generate_xor_data():
    X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]] * 25)
    y = np.array([0, 1, 1, 0] * 25)
    return X, y


# 感知机实现
class Perceptron:
    def __init__(self, learning_rate=0.01, n_iters=100):
        self.lr = learning_rate
        self.n_iters = n_iters
        self.weights = None
        self.bias = None
        self.errors = []

    def activation(self, x):
        return np.where(x >= 0, 1, 0)  # 阶跃函数

    def fit(self, X, y):
        n_samples, n_features = X.shape
        self.weights = np.zeros(n_features)
        self.bias = 0

        for _ in range(self.n_iters):
            total_error = 0
            for idx, x_i in enumerate(X):
                linear_output = np.dot(x_i, self.weights) + self.bias
                y_pred = self.activation(linear_output)
                error = y[idx] - y_pred
                total_error += abs(error)

                # 权重更新规则
                self.weights += self.lr * error * x_i
                self.bias += self.lr * error

            self.errors.append(total_error)
            if total_error == 0:  # 提前终止
                break

    def predict(self, X):
        linear_output = np.dot(X, self.weights) + self.bias
        return self.activation(linear_output)


# 可视化决策边界
def plot_decision_boundary(X, y, model, title):
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),
                         np.arange(y_min, y_max, 0.01))

    Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)

    plt.contourf(xx, yy, Z, alpha=0.4)
    plt.scatter(X[:, 0], X[:, 1], c=y, s=20, edgecolor='k')
    plt.xlabel("Feature 1")
    plt.ylabel("Feature 2")
    plt.title(title)


# 实验1:线性可分数据
X_linear, y_linear = generate_linear_data()
X_train, X_test, y_train, y_test = train_test_split(X_linear, y_linear, test_size=0.2)

perceptron = Perceptron(learning_rate=0.1, n_iters=100)
perceptron.fit(X_train, y_train)
predictions = perceptron.predict(X_test)

plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plot_decision_boundary(X_linear, y_linear, perceptron,
                       f"Linear Data (Acc: {accuracy_score(y_test, predictions):.2f})")

# 实验2:异或数据
X_xor, y_xor = generate_xor_data()
X_train, X_test, y_train, y_test = train_test_split(X_xor, y_xor, test_size=0.2)

perceptron_xor = Perceptron(learning_rate=0.1, n_iters=1000)
perceptron_xor.fit(X_train, y_train)
predictions_xor = perceptron_xor.predict(X_test)

plt.subplot(1, 2, 2)
plot_decision_boundary(X_xor, y_xor, perceptron_xor,
                       f"XOR Data (Acc: {accuracy_score(y_test, predictions_xor):.2f})")

plt.tight_layout()
plt.show()

(其中一次)运行结果:

在1969年,Marvin Minsky和Seymour Papert在《Perceptrons》一书中数学证明了单层感知机无法解决异或(XOR)问题,神经网络在AI领域迎来了第一次寒冬

3. 神经网络的寒冬❄️

神经网络乃至后来的深度学习曾度过艰难的寒冬时期:

  1. 第一次寒冬(1969-1985):神经网络模型(感知机)无法处理线性可分数据(xor问题)。复苏动力:激活函数引入的非线性。
  2. 第二次寒冬(1990-2006):反向传播算法在实际应用中暴露梯度消失(Sigmoid在深层激活函数)、过拟合(数据量不足)、计算瓶颈(训练LeNet-5需要1周)等问题。复苏动力:GPU算力推动、世界进入大数据时代、Hinton等人在2006年对深度信念网络的突破。

4. 今天的深度学习

自2012年,AlexNet在ImageNet竞赛中以压倒性的优势领先其他传统机器学习算法模型以来,深度学习高速发展,深度学习领域的论文、算法模型、应用均爆发式增长。

截止2025年春,现代深度学习模型在工业界的应用中,大多数常用模型按核心架构可分为:

  • 卷积神经网络(CNN):通过卷积核提取空间局部特征,池化降维,层级抽象化。发展成熟且广泛应用。
  • 循环神经网络(RNN):循环结构处理序列数据,隐藏状态传递时序信息。逐渐被Transformer替代,但在部分场景仍保持优势。
  • Transformer:自注意力机制全局建模依赖关系,位置编码保留序列信息,并行计算。在不少领域逐渐取代CNN和RNN。

在复杂的任务中,也常使用混合模型(如CNN+Transformer)。