【学习笔记】深度学习网络-深度前馈网络(MLP)

news2025/1/27 5:17:00

作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程,深度学习领域研究生必读教材),开始深度学习领域学习,深入全面的理解深度学习的理论知识。

在之前的文章中介绍了深度学习中用到的数学基础和强化学习的概念,本文将开始介绍现代深度学习中用于解决实际应用的实践。

【一文读懂】深度学习技术谱系:探索生成式AI的核心模型(一) 基础技术图谱

【生成式AI】理解深度学习和机器学习的数学基础:线性代数

【万字长文】理解深度学习和机器学习的数学基础:概率论和信息论

【学习笔记】理解深度学习和机器学习的数学基础:数值计算

【学习笔记】理解深度学习和机器学习的关系

深度前馈网络(Deep Feedforward Networks):简介与核心概念

深度前馈网络(Deep Feedforward Networks),也称为前馈神经网络(Feedforward Neural Networks)或多层感知机(Multilayer Perceptrons, MLPs),是深度学习中最基础且最重要的模型之一。它们被广泛应用于图像识别、自然语言处理、语音识别等领域。本文将基于《深度学习》(Deep Learning)一书中的相关内容,介绍深度前馈网络的基本概念、结构和工作原理。


1. 什么是深度前馈网络?

深度前馈网络是一种人工神经网络,其核心特点是信息单向流动:从输入层经过若干隐藏层,最终到达输出层。与循环神经网络(RNN)不同,前馈网络没有反馈回路,数据不会在网络中循环流动。它的“深度”体现在网络包含多个隐藏层,这些隐藏层使得网络能够学习到数据中的多层次抽象特征。

  • 前馈(Feedforward):信息从输入层流向输出层,没有反馈或循环。

  • 深度(Deep):网络包含多个隐藏层,能够学习复杂的非线性映射。


2. 深度前馈网络的结构

深度前馈网络通常由以下几部分组成:

(1)输入层(Input Layer)

输入层接收原始数据(如图像像素、文本向量等),并将其传递给第一个隐藏层。输入层的神经元数量通常由数据的维度决定。

(2)隐藏层(Hidden Layers)

隐藏层是网络的核心部分,负责从输入数据中提取特征。每个隐藏层包含若干神经元,神经元之间通过权重连接。隐藏层的数量和每层的神经元数量是超参数,需要根据任务和数据的特点进行调整。

  • 深度:隐藏层的数量决定了网络的深度。深度网络可以学习到更复杂的特征,但也更难训练。

  • 宽度:每层神经元的数量决定了网络的宽度。宽度网络可以捕捉更多的特征,但计算复杂度较高。

(3)输出层(Output Layer)

输出层生成最终的预测结果。输出层的神经元数量通常由任务的类型决定:

  • 二分类问题:1个神经元(使用Sigmoid激活函数)。

  • 多分类问题:多个神经元(使用Softmax激活函数)。

  • 回归问题:1个或多个神经元(通常不使用激活函数)。


3. 深度前馈网络的工作原理

深度前馈网络的工作原理可以分为以下几个步骤:

(1)前向传播(Forward Propagation)

输入数据通过网络逐层传递,直到输出层生成预测结果。每一层的计算包括线性变换和激活函数:

z=Wx+b

a=f(z)

其中,W是权重矩阵,x 是输入向量,b是偏置向量,z 是线性变换的结果,f是激活函数,a是激活后的输出。

(2)损失计算(Loss Calculation)

使用损失函数衡量预测结果与真实标签之间的差距。常见的损失函数包括:

  • 均方误差(MSE):用于回归任务。

  • 交叉熵(Cross-Entropy):用于分类任务。

(3)反向传播(Backpropagation)

反向传播算法通过链式法则计算损失函数对每个权重的梯度,并利用梯度下降法更新权重,逐步减少预测误差。

(4)参数更新(Parameter Update)

使用优化算法(如梯度下降、Adam)更新网络参数:

W\leftarrow W-\eta \frac{\partial L}{\partial W}

b\leftarrow b-\eta \frac{\partial L}{\partial b}

其中,\eta 是学习率,\frac{\partial L}{\partial W} 和 \frac{\partial L}{\partial b}分别是损失函数对权重和偏置的梯度。

实例:使用深度前馈网络学习XOR函数

XOR(异或)问题是一个经典的例子,用于展示单层感知机(Perceptron)的局限性以及多层感知机(MLP)的强大能力。XOR问题简单但具有代表性,能够很好地说明为什么我们需要深度前馈网络。


1. 什么是XOR问题?

XOR(异或)是一个逻辑运算,其真值表如下:

输入 A输入 B输出 A XOR B
000
011
101
110

XOR问题的目标是训练一个模型,使其能够根据输入A和B正确预测A XOR B的结果。


2. 单层感知机的局限性

单层感知机(没有隐藏层)只能解决线性可分的问题。然而,XOR问题是非线性可分的,这意味着无法用一条直线将输出为0和1的样本分开。

  • 尝试用单层感知机解决XOR
    单层感知机的形式为:

y=f(w_{1}x_{1}+w_{2}x_{2}+b)

其中,f是激活函数(如阶跃函数),w_{1},w_{2}​ 是权重,b是偏置。

无论怎么调整权重和偏置,单层感知机都无法正确分类XOR问题。这是因为XOR问题的输出在二维平面上形成了一个非线性分布(四个点分布在正方形的对角线上)。


3. 使用多层感知机(MLP)解决XOR问题

通过引入一个隐藏层,多层感知机可以解决XOR问题。以下是一个简单的MLP结构:

  • 输入层:2个神经元(对应输入A和B)。

  • 隐藏层:2个神经元(使用非线性激活函数,如ReLU或Sigmoid)。

  • 输出层:1个神经元(使用Sigmoid激活函数,输出0或1)。


4. 具体实现步骤

以下是一个简单的Python实现,使用NumPy库构建一个两层的MLP来解决XOR问题:

import numpy as np

# 定义激活函数(Sigmoid)
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# 定义激活函数的导数
def sigmoid_derivative(x):
    return x * (1 - x)

# 输入数据(XOR问题的输入和输出)
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])

# 初始化权重和偏置
np.random.seed(1)
weights0 = 2 * np.random.random((2, 2)) - 1  # 输入层到隐藏层的权重
weights1 = 2 * np.random.random((2, 1)) - 1  # 隐藏层到输出层的权重
bias0 = np.zeros((1, 2))  # 隐藏层的偏置
bias1 = np.zeros((1, 1))  # 输出层的偏置

# 训练参数
learning_rate = 0.1
epochs = 10000

# 训练过程
for epoch in range(epochs):
    # 前向传播
    hidden_input = np.dot(X, weights0) + bias0
    hidden_output = sigmoid(hidden_input)
    output_input = np.dot(hidden_output, weights1) + bias1
    output = sigmoid(output_input)

    # 计算误差
    error = y - output

    # 反向传播
    d_output = error * sigmoid_derivative(output)
    error_hidden = d_output.dot(weights1.T)
    d_hidden = error_hidden * sigmoid_derivative(hidden_output)

    # 更新权重和偏置
    weights1 += hidden_output.T.dot(d_output) * learning_rate
    weights0 += X.T.dot(d_hidden) * learning_rate
    bias1 += np.sum(d_output, axis=0, keepdims=True) * learning_rate
    bias0 += np.sum(d_hidden, axis=0, keepdims=True) * learning_rate

# 测试模型
hidden_input = np.dot(X, weights0) + bias0
hidden_output = sigmoid(hidden_input)
output_input = np.dot(hidden_output, weights1) + bias1
output = sigmoid(output_input)

print("Predicted Output:")
print(output)
5. 代码解释
  • 前向传播
    输入数据通过隐藏层和输出层,生成预测结果。每一层的计算包括线性变换和激活函数。

  • 误差计算
    使用均方误差衡量预测结果与真实标签之间的差距。

  • 反向传播
    通过链式法则计算损失函数对每个权重的梯度,并使用梯度下降法更新权重和偏置。

  • 训练结果
    经过训练后,模型能够正确预测XOR问题的输出。


6. 运行结果

运行上述代码后,输出结果应该接近XOR问题的真实值:

Predicted Output:
[[0.01]
 [0.99]
 [0.99]
 [0.01]]

这表明模型已经学会了XOR问题的规律。

通过XOR问题,我们可以看到单层感知机的局限性以及多层感知机的强大能力。深度前馈网络通过引入隐藏层和非线性激活函数,能够解决复杂的非线性问题。XOR问题虽然简单,但它很好地展示了深度学习的基本原理和训练过程。

基于梯度的学习:深度学习的核心优化方法

基于梯度的学习是深度学习的核心优化方法,它通过计算损失函数对模型参数的梯度,并利用梯度下降法逐步更新参数,从而使模型能够从数据中学习。


1. 什么是基于梯度的学习?

基于梯度的学习是一种优化方法,其目标是通过最小化损失函数来调整模型参数。损失函数衡量模型预测值与真实值之间的差距,而梯度则指示了损失函数在参数空间中的变化方向。

  • 损失函数(Loss Function)
    损失函数用于量化模型的预测误差。常见的损失函数包括:

    • 均方误差(MSE):用于回归任务。

    • 交叉熵(Cross-Entropy):用于分类任务。

  • 梯度(Gradient)
    梯度是损失函数对模型参数的偏导数向量。它指示了损失函数在参数空间中的变化方向,即损失函数增加最快的方向。

  • 梯度下降法(Gradient Descent)
    梯度下降法通过沿着梯度的反方向更新参数,逐步减少损失函数的值。更新公式为:

    \theta \leftarrow \theta -\eta \nabla_{\theta }L(\theta )

    其中,\theta是模型参数,\eta 是学习率,\nabla_{\theta }L(\theta ) 是损失函数对参数的梯度。


2. 梯度下降法的变体

梯度下降法有多种变体,适用于不同的场景和需求。以下是几种常见的变体:

  • 批量梯度下降(Batch Gradient Descent)
    使用整个训练集计算梯度,更新参数。优点是梯度计算准确,缺点是计算量大,不适合大规模数据集。

  • 随机梯度下降(Stochastic Gradient Descent, SGD)
    每次随机选择一个样本计算梯度,更新参数。优点是计算速度快,缺点是梯度波动大,收敛不稳定。

  • 小批量梯度下降(Mini-batch Gradient Descent)
    每次使用一个小批量样本计算梯度,更新参数。这是深度学习中常用的方法,兼顾了计算效率和梯度稳定性。


3. 梯度下降法的优化技巧

为了提高梯度下降法的性能,研究者提出了许多优化技巧:

  • 动量(Momentum)
    动量方法通过引入动量项加速梯度下降,减少震荡。更新公式为:

    \mu \leftarrow \gamma \theta +\eta \nabla_{\theta }L(\theta )

\theta \leftarrow \theta -\mu

其中,\gamma 是动量系数,\mu是动量项。

  • 自适应学习率方法
    自适应学习率方法根据参数的梯度动态调整学习率。常见的方法包括:

    • AdaGrad:根据历史梯度调整学习率。

    • RMSProp:使用指数加权平均调整学习率。

    • Adam:结合动量和自适应学习率,是目前最常用的优化方法。


4. 基于梯度的学习在深度学习中的应用

基于梯度的学习是深度学习的核心优化方法,广泛应用于各种任务和模型。以下是一些典型应用:

  • 图像分类
    使用卷积神经网络(CNN)和交叉熵损失函数,通过梯度下降法训练模型,实现图像分类。

  • 自然语言处理
    使用循环神经网络(RNN)或Transformer模型,通过梯度下降法训练模型,实现机器翻译、文本生成等任务。

  • 强化学习
    使用策略梯度方法,通过梯度下降法优化策略网络,实现智能体在环境中的学习。


5. 基于梯度的学习的挑战

尽管基于梯度的学习在深度学习中取得了巨大成功,但仍面临一些挑战:

  • 局部最优
    损失函数可能存在多个局部最优,梯度下降法可能陷入局部最优而无法找到全局最优。

  • 梯度消失和梯度爆炸
    在深层网络中,梯度可能在反向传播过程中逐渐消失或爆炸,导致训练困难。

  • 超参数调优
    学习率、动量系数等超参数的选择对模型性能有重要影响,但调优过程耗时且复杂。

深度前馈网络中的隐藏单元:关键设计与选择

在深度前馈网络(Multilayer Perceptrons, MLPs)中,隐藏单元(Hidden Units)是网络的核心组成部分。隐藏单元的设计和选择直接影响模型的表达能力、训练效率和最终性能。


1. 隐藏单元的作用

隐藏单元是隐藏层中的神经元,负责接收输入数据并生成输出。它们通过非线性激活函数引入非线性变换,使得网络能够学习复杂的函数映射。隐藏单元的设计决定了网络的表达能力、训练难度和泛化性能。


2. 常见的隐藏单元类型

以下是几种常见的隐藏单元类型及其特点:

(1)ReLU(Rectified Linear Unit)

ReLU是目前最常用的隐藏单元类型,其定义为:

f(z)=max(0,z)

  • 优点

    • 计算简单,梯度计算高效。

    • 在正区间梯度恒定,缓解了梯度消失问题。

    • 在实践中表现良好,广泛应用于各种任务。

  • 缺点

    • 在负区间梯度为零,可能导致“神经元死亡”问题。

(2)Sigmoid

Sigmoid函数将输入映射到0到1之间,其定义为:

f(x)=\frac{1}{1+e^{-z}}

  • 优点

    • 输出范围有限,适合作为概率输出。

  • 缺点

    • 梯度在两端接近于零,容易导致梯度消失问题。

    • 计算复杂度较高。

(3)Tanh

Tanh函数将输入映射到-1到1之间,其定义为:

f(z)=tanh(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}}

  • 优点

    • 输出以零为中心,有助于加速训练。

  • 缺点

    • 梯度在两端接近于零,容易导致梯度消失问题。

(4)Leaky ReLU

Leaky ReLU是对ReLU的改进,定义为:

f(z)=max(\alpha z,z)

其中,\alpha 是一个小的正数(如0.01)。

  • 优点

    • 在负区间也有梯度,缓解了“神经元死亡”问题。

  • 缺点

    • 需要手动设置\alpha 的值。

(5)ELU(Exponential Linear Unit)

ELU是对ReLU的另一种改进,定义为:

f(z)=\left\{\begin{matrix} z & &if(z>0)\\ \alpha (e^{z}-1)& &if(z\leq 0) \end{matrix}\right.

  • 优点

    • 在负区间有非零梯度,且输出接近零均值,有助于加速训练。

  • 缺点

    • 计算复杂度较高。

(6)Softplus

Softplus函数是ReLU的平滑版本,定义为:

f(z)=log(1+e^{z})

  • 优点

    • 处处可导,适合理论研究。

  • 缺点

    • 计算复杂度较高,实践中较少使用。


3. 隐藏单元的选择

隐藏单元的选择取决于任务的特点和数据的分布。以下是一些选择隐藏单元的指导原则:

  • ReLU:大多数情况下,ReLU是默认选择,因其计算高效且表现良好。

  • Leaky ReLU/ELU:如果担心“神经元死亡”问题,可以尝试Leaky ReLU或ELU。

  • Sigmoid/Tanh:在需要输出范围有限的情况下(如概率输出),可以考虑Sigmoid或Tanh,但需注意梯度消失问题。

  • Softplus:适合理论研究,但在实践中较少使用。


4. 隐藏单元的设计技巧

为了提高隐藏单元的性能,研究者提出了许多设计技巧:

  • 批量归一化(Batch Normalization)
    通过对每一层的输入进行归一化,加速训练过程并提高模型的稳定性。

  • Dropout
    在训练过程中随机丢弃一部分神经元,防止网络过度依赖某些神经元,提高泛化能力。

  • 权重初始化
    合适的权重初始化方法(如Xavier初始化、He初始化)可以加速训练并提高模型性能。

深度前馈网络的架构设计:关键原则与实践

在深度前馈网络(Multilayer Perceptrons, MLPs)中,架构设计是决定模型性能的重要因素。合理的架构设计可以提高模型的表达能力、训练效率和泛化能力。


1. 架构设计的基本原则

深度前馈网络的架构设计需要考虑以下几个基本原则:

  • 表达能力
    网络的深度和宽度决定了其表达能力。深度网络可以学习到更复杂的函数映射,而宽度网络可以捕捉更多的特征。

  • 计算效率
    网络的层数和每层的神经元数量直接影响计算复杂度。需要在表达能力和计算效率之间找到平衡。

  • 泛化能力
    网络的复杂度应与任务的复杂度相匹配。过于复杂的网络可能导致过拟合,而过于简单的网络可能导致欠拟合。

  • 训练稳定性
    网络的架构设计应有利于梯度传播,避免梯度消失或梯度爆炸问题。


2. 常见的架构设计

以下是几种常见的深度前馈网络架构设计:

(1)全连接网络(Fully Connected Network)

全连接网络是最基本的深度前馈网络架构,每一层的神经元与下一层的所有神经元相连。

  • 优点

    • 结构简单,易于实现。

    • 适合处理结构化数据(如表格数据)。

  • 缺点

    • 参数量大,计算复杂度高。

    • 对高维数据(如图像、文本)处理效率低。

(2)卷积神经网络(Convolutional Neural Network, CNN)

卷积神经网络通过卷积层和池化层提取局部特征,适合处理图像数据。

  • 优点

    • 参数共享,计算效率高。

    • 能够捕捉局部特征,适合处理高维数据。

  • 缺点

    • 对非图像数据的处理效果有限。

(3)循环神经网络(Recurrent Neural Network, RNN)

循环神经网络通过时间步展开处理序列数据,适合处理文本、语音等序列数据。

  • 优点

    • 能够捕捉时间依赖关系。

    • 适合处理变长序列数据。

  • 缺点

    • 训练过程中容易出现梯度消失或梯度爆炸问题。

(4)Transformer

Transformer通过自注意力机制处理序列数据,适合处理长序列数据。

  • 优点

    • 能够捕捉长距离依赖关系。

    • 并行计算效率高。

  • 缺点

    • 参数量大,计算复杂度高。


3. 架构设计的实践技巧

为了提高深度前馈网络的性能,研究者提出了许多实践技巧:

  • 深度与宽度的平衡
    深度网络可以学习到更复杂的函数映射,但训练难度较大;宽度网络可以捕捉更多的特征,但计算复杂度较高。需要在深度与宽度之间找到平衡。

  • 残差连接(Residual Connection)
    残差连接通过跨层连接缓解梯度消失问题,加速训练过程。其定义为:

    y=f(x)+x

    其中,f(x)是网络层的输出,x 是输入。

  • 批量归一化(Batch Normalization)
    批量归一化通过对每一层的输入进行归一化,加速训练过程并提高模型的稳定性。

  • Dropout
    Dropout在训练过程中随机丢弃一部分神经元,防止网络过度依赖某些神经元,提高泛化能力。

  • 权重初始化
    合适的权重初始化方法(如Xavier初始化、He初始化)可以加速训练并提高模型性能。


反向传播算法:深度学习的核心优化方法

反向传播(Backpropagation)是深度学习中最重要的算法之一,用于训练深度前馈网络(Multilayer Perceptrons, MLPs)。它通过计算损失函数对模型参数的梯度,并利用梯度下降法逐步更新参数,从而使模型能够从数据中学习。


1. 反向传播的基本原理

反向传播的核心思想是利用链式法则(Chain Rule)计算损失函数对模型参数的梯度。具体来说,反向传播包括以下两个阶段:

  • 前向传播(Forward Propagation)
    输入数据通过网络逐层传递,直到输出层生成预测结果。每一层的计算包括线性变换和激活函数。

  • 反向传播(Backward Propagation)
    从输出层开始,逐层计算损失函数对每一层参数的梯度,并利用梯度下降法更新参数。


2. 反向传播的详细步骤

以下是反向传播的详细步骤:

(1)前向传播

在前向传播阶段,输入数据通过网络逐层传递,生成预测结果。具体步骤如下:

  1. 输入数据通过输入层传递到第一个隐藏层。

  2. 每一层的输出通过线性变换和激活函数生成下一层的输入。

  3. 最终输出层的输出即为模型的预测结果。

(2)损失计算

使用损失函数衡量预测结果与真实标签之间的差距。常见的损失函数包括:

  • 均方误差(MSE):用于回归任务。

  • 交叉熵(Cross-Entropy):用于分类任务。

(3)反向传播

在反向传播阶段,从输出层开始,逐层计算损失函数对每一层参数的梯度。具体步骤如下:

  1. 计算输出层的误差:

    \delta ^{(L)}=\frac{\partial L}{\partial a^{(L)}}\bigodot f^{'}(z^{(L)})

    其中,\delta ^{(L)} 是输出层的误差,L 是损失函数,a^{(L)} 是输出层的激活值,z^{(L)} 是输出层的线性变换结果,f^{'}是激活函数的导数,\bigodot 表示逐元素相乘。

  2. 逐层反向传播误差:

    \delta ^{(l)}=((W^{(l+1)})^{T}\delta ^{(l+1)})\bigodot f^{'}(z^{(l)})

    其中,\delta ^{(l)}是第l层的误差,W^{(l+1)}是第l+1层的权重矩阵,z^{(l)}是第l层的线性变换结果。

  3. 计算每一层参数的梯度:

    \frac{\partial L}{\partial W^{(l)}}=\delta ^{(l)}(a^{(l-1)})^{T}

          \frac{\partial L}{\partial b^{(l)}}=\delta ^{(l)}

其中,W^{(l)} 和 b^{(l)} 分别是第l层的权重矩阵和偏置向量,a^{(l-1)} 是第l-1层的激活值。

(4)参数更新

使用梯度下降法更新每一层的参数:

W^{(l)}\leftarrow W^{(l)}-\eta \frac{\partial L}{\partial W^{(l)}}

b^{(l)}\leftarrow b^{(l)}-\eta \frac{\partial L}{\partial b^{(l)}}

其中,\eta 是学习率。


深度前馈网络的发展历史

深度前馈网络(Multilayer Perceptrons, MLPs)是深度学习的核心组成部分,其发展历史与神经网络和人工智能的演进密不可分。从早期的理论探索到现代深度学习的繁荣,深度前馈网络经历了多次起伏和突破。以下是深度前馈网络发展历史的关键节点和重要里程碑。


1. 早期探索:神经网络的萌芽(1940s-1960s)

深度前馈网络的起源可以追溯到20世纪40年代,当时的研究者开始尝试用数学模型模拟生物神经元的行为。

  • 1943年:McCulloch-Pitts神经元模型
    Warren McCulloch和Walter Pitts提出了第一个神经元的数学模型,称为McCulloch-Pitts神经元。这一模型展示了如何用简单的计算单元模拟逻辑运算,为神经网络的理论奠定了基础。

  • 1958年:感知机的提出
    Frank Rosenblatt提出了感知机(Perceptron),这是第一个可以学习的神经网络模型。感知机通过调整权重来分类输入数据,但其只能解决线性可分的问题。感知机的提出引发了神经网络研究的第一次热潮。


2. 低谷期:感知机的局限性(1970s-1980s)

尽管感知机在早期取得了一些成功,但其局限性很快显现出来。1969年,Marvin Minsky和Seymour Papert在《Perceptrons》一书中指出,感知机无法解决非线性问题(如XOR问题)。这一批评导致神经网络研究进入了低谷期。

  • 1974年:反向传播的初步提出
    Paul Werbos在他的博士论文中首次提出了反向传播算法(Backpropagation),但当时这一方法并未引起广泛关注。

  • 1980年代:Hopfield网络和Boltzmann机
    John Hopfield提出了Hopfield网络,这是一种基于能量的模型,能够存储和检索信息。此外,Geoffrey Hinton和Terry Sejnowski提出了Boltzmann机,这是一种基于概率的神经网络模型。这些工作为神经网络的复兴奠定了基础。


3. 复兴期:反向传播的普及(1980s-1990s)

1980年代,反向传播算法被重新发现并广泛应用于神经网络的训练,推动了神经网络研究的复兴。

  • 1986年:反向传播的普及
    David Rumelhart、Geoffrey Hinton和Ronald Williams在《Parallel Distributed Processing》一书中详细描述了反向传播算法,并将其应用于多层感知机的训练。这一工作使得反向传播成为神经网络训练的标准方法。

  • 1989年:万能近似定理
    George Cybenko和Kurt Hornik等人证明了万能近似定理(Universal Approximation Theorem),指出具有单隐藏层的神经网络可以近似任何连续函数。这一理论为神经网络的表达能力提供了数学基础。


4. 深度学习的崛起:深层网络的突破(2000s-2010s)

尽管神经网络在1980年代和1990年代取得了一些进展,但由于计算资源的限制和数据集的不足,其应用仍然有限。直到2000年代,随着计算能力的提升和大规模数据集的出现,深度学习开始崛起。

  • 2006年:深度信念网络的提出
    Geoffrey Hinton提出了深度信念网络(Deep Belief Networks, DBNs),通过无监督预训练和有监督微调的方法,成功训练了深层神经网络。这一工作被认为是深度学习复兴的标志。

  • 2012年:AlexNet的突破
    Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton提出了AlexNet,在ImageNet图像分类竞赛中取得了显著优势。AlexNet的成功标志着深度学习在计算机视觉领域的突破,并引发了深度学习的热潮。


5. 繁荣期:深度学习的广泛应用(2010s至今)

自2012年以来,深度学习在学术界和工业界取得了巨大成功,广泛应用于图像识别、自然语言处理、语音识别等领域。

  • 2014年:生成对抗网络(GANs)
    Ian Goodfellow提出了生成对抗网络(Generative Adversarial Networks, GANs),这是一种能够生成高质量数据的神经网络模型。

  • 2017年:Transformer模型
    Vaswani等人提出了Transformer模型,通过自注意力机制处理序列数据,成为自然语言处理领域的主流模型。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uni-app 程序打包 Android apk、安卓夜神模拟器调试运行

1、打包思路 云端打包方案(每天免费次数限制5,最简单,可以先打包尝试一下你的程序打包后是否能用): HBuilderX 发行App-Android云打包 选择Android、使用云端证书、快速安心打包本地打包: HBuilderX …

全面评测 DOCA 开发环境下的 DPU:性能表现、机器学习与金融高频交易下的计算能力分析

本文介绍了我在 DOCA 开发环境下对 DPU 进行测评和计算能力测试的一些真实体验和记录。在测评过程中,我主要关注了 DPU 在高并发数据传输和深度学习场景下的表现,以及基本的系统性能指标,包括 CPU 计算、内存带宽、多线程/多进程能力和 I/O 性…

速通 AI+Web3 开发技能: 免费课程+前沿洞察

AI 正以前所未有的速度重塑各行各业,从生成式模型到大规模数据处理,AI 逐渐成为核心驱动力。与此同时,Web3 去中心化技术也在重新定义信任、交易和协作方式。当这两大前沿技术相遇,AI Web3 的融合已不再是理论,而是未…

使用LPT wiggler jtag自制三星单片机(sam88 core)编程器-S3F9454

写在前面 新年好,各位,今天来分享制作一个三星单片机的编程器 嘿嘿,x鱼垃圾佬元件库有些三星单片机s3f9454,编程器不想买,基本拿来拆件玩的。但,前些时候csdn下载到它的编程时序,自己来做个编程…

【Unity3D】《跳舞的线》游戏的方块单方向拉伸实现案例

通过网盘分享的文件:CubeMoveMusic.unitypackage 链接: https://pan.baidu.com/s/1Rq-HH4H9qzVNtpQ84WXyUA?pwda7xn 提取码: a7xn 运行游戏点击空格动态创建拉伸的方块,由Speed控制速度,新方向是随机上下左右生成。 using System.Collect…

Chameleon(变色龙) 跨平台编译C文件,并一次性生成多个平台的可执行文件

地址:https://github.com/MartinxMax/Chameleon Chameleon 跨平台编译C文件,并一次性生成多个平台的可执行文件。可以通过编译Chameleon自带的.C文件反向Shell生成不同平台攻击载荷。 登录 & 代理设置 按照以下步骤设置 Docker 的代理: 创建配置目…

解读2025年生物医药创新技术:展览会与论坛的重要性

2025生物医药创新技术与应用发展展览会暨论坛,由天津市生物医药行业协会、BIO CHINA生物发酵展组委会携手主办,山东信世会展服务有限公司承办,定于2025年3月3日至5日在济南黄河国际会展中心盛大开幕。展会规模60000平方米、800参展商、35场会…

WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel

WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel 一、前言二、Grid 布局:万能的布局王者2.1 Grid 布局基础:构建网格世界2.2 子元素定位与跨行列:布局的精细操控2.3 自适应布局:灵活应变的秘诀 三、StackPanel…

git常用命令学习

目录 文章目录 目录第一章 git简介1.Git 与SVN2.Git 工作区、暂存区和版本库 第二章 git常用命令学习1.ssh设置2.设置用户信息3.常用命令设置1.初始化本地仓库init2.克隆clone3.查看状态 git status4.添加add命令5.添加评论6.分支操作1.创建分支2.查看分支3.切换分支4.删除分支…

Linux的基本指令(上)

1.ls指令 语法:ls [选项] [目录或文件] 功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。 常用选项: -a 列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。 -d 将…

【单链表算法实战】解锁数据结构核心谜题——相交链表

题目如下: 解题过程如下: 相交链表只可以在中间任意位置/头/尾结点相交,如下图: 一个next指针只能指向一块地址,所以不会出现这种情况: 在返回相交链表的起始结点之前先要判断两个链表是否相交&#xff0…

HTTP 配置与应用(不同网段)

想做一个自己学习的有关的csdn账号,努力奋斗......会更新我计算机网络实验课程的所有内容,还有其他的学习知识^_^,为自己巩固一下所学知识,下次更新校园网设计。 我是一个萌新小白,有误地方请大家指正,谢谢…

深度学习 Pytorch 单层神经网络

神经网络是模仿人类大脑结构所构建的算法,在人脑里,我们有轴突连接神经元,在算法中,我们用圆表示神经元,用线表示神经元之间的连接,数据从神经网络的左侧输入,让神经元处理之后,从右…

政安晨的AI大模型训练实践三:熟悉一下LF训练模型的WebUI

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 目录 启动WebUI 微调模型 LLaMA-Factory 支持通过 WebUI 零代码微调大语言模型。 启动Web…

Flink Gauss CDC:深度剖析存量与增量同步的创新设计

目录 设计思路 1.为什么不直接用FlinkCDC要重写Flink Gauss CDC 2.存量同步的逻辑是什么 2.1、单主键的切片策略是什么 2.2、​​​​​复合主键作切片,怎么保证扫描到所有的数据 3、增量同步的逻辑是什么 4、存量同步结束之后如何无缝衔接增量同步 5、下游数据如何落…

【深入理解SpringCloud微服务】Sentinel规则持久化实战

Sentinel规则持久化实战 Sentinel规则推送模式原始模式pull(拉模式)push(推模式) 实现拉模式实现推模式 Sentinel规则推送模式 原始模式 原始模式由Sentinel控制台直接推送规则到Sentinel客户端,Sentinel客户端将规则…

PCIE模式配置

对于VU系列FPGA,当DMA/Bridge Subsystem for PCI Express IP配置为Bridge模式时,等同于K7系列中的AXI Memory Mapped To PCI Express IP。

【由浅入深认识Maven】第2部分 maven依赖管理与仓库机制

文章目录 第二篇:Maven依赖管理与仓库机制一、前言二、依赖管理基础1.依赖声明2. 依赖范围(Scope)3. 依赖冲突与排除 三、Maven的仓库机制1. 本地仓库2. 中央仓库3. 远程仓库 四、 版本管理策略1. 固定版本2. 版本范围 五、 总结 第二篇&…

备赛蓝桥杯之第十五届职业院校组省赛第一题:智能停车系统

提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

力扣 Hot 100 题解 (js版)更新ing

🚩哈希表 ✅ 1. 两数之和 Code: 暴力法 复杂度分析: 时间复杂度: ∗ O ( N 2 ) ∗ *O(N^2)* ∗O(N2)∗,其中 N 是数组中的元素数量。最坏情况下数组中任意两个数都要被匹配一次。空间复杂度:O(1)。 /…