====== DNN ====== DNN(Deep Neural Network,深度神经网络)是由多个神经网络层堆叠形成的人工神经网络。DNN 并不是由某一位研究者在某一篇论文中单独提出的概念,而是在 [[人工神经网络]]、[[反向传播]] 和 [[深度学习]] 的发展过程中逐渐形成的。现代 DNN 的重要理论基础来自 Rumelhart、Hinton 和 Williams 于 1986 年发表的《Learning representations by back-propagating errors》,该工作系统展示了 [[反向传播]] 如何训练多层神经网络;2010 年代 [[深度学习]] 的突破则使 DNN 成为现代 [[机器学习]] 的核心模型之一。 ===== 基本结构 ===== DNN 通常由输入层、多个隐藏层和输出层组成: 输入层 → 隐藏层 → 隐藏层 → …… → 输出层 其中隐藏层数量较多,因此称为“Deep”。 一个简单的神经网络可以表示为: x → Linear → Activation → Linear → Activation → Output 每一层通常执行: z = Wx + b 然后经过激活函数: a = f(z) 其中 W 是权重,b 是偏置,f 是 [[激活函数]]。 多层网络不断进行这种变换: x → f(W₁x + b₁) → f(W₂x + b₂) → …… → y ===== 为什么叫 Deep ===== 这里的“Deep”主要指网络具有较多的计算层,而不是指模型参数一定非常多。 例如: 输入 → 输出 只有很少的计算层,可以认为是浅层模型。 而: 输入 → Layer 1 → Layer 2 → Layer 3 → Layer 4 → 输出 具有更多层,因此属于深层神经网络。 深度使模型能够逐层学习更加复杂的表示。 例如在 [[计算机视觉]] 中: 像素 → 边缘 → 纹理 → 局部结构 → 物体部件 → 完整物体。 这就是 [[表示学习]] 的典型思想。 ===== 神经元 ===== DNN 的基本计算单元可以理解为人工神经元。 一个神经元首先对输入进行加权求和: z = w₁x₁ + w₂x₂ + …… + wₙxₙ + b 然后通过 [[激活函数]]: a = f(z) 常见激活函数包括: * [[Sigmoid]] * [[Tanh]] * [[ReLU]] * [[GELU]] 激活函数引入非线性,使多个神经网络层能够表示复杂的非线性函数。 ===== 全连接层 ===== 最经典的 DNN 使用 [[全连接层]](Fully Connected Layer)。 假设输入有 n 个特征,下一层有 m 个神经元,那么这一层可以表示为: y = Wx + b 其中 W 的大小为 m × n。 每一个输出神经元都与上一层的所有神经元连接,因此称为“全连接”。 ===== 前向传播 ===== DNN 计算预测结果的过程称为 [[前向传播]](Forward Propagation)。 例如: 输入 x → 第一层 → 第二层 → 第三层 → 输出 ŷ 每一层接收上一层的输出,并产生自己的输出。 最终得到模型预测值: ŷ = fₗ(...f₂(f₁(x))) 训练时,模型需要不断调整各层的参数,使预测值接近真实标签。 ===== 损失函数 ===== DNN 通常通过 [[损失函数]] 衡量预测结果与真实结果之间的差异。 例如回归任务可以使用均方误差: Loss = (1 / n) Σᵢ(yᵢ - ŷᵢ)² 分类任务常使用 [[交叉熵损失]]。 训练目标就是: 最小化 Loss。 ===== 反向传播 ===== DNN 的训练通常依赖 [[反向传播]](Backpropagation)。 基本过程是: 前向传播 → 计算 Loss → 反向传播 → 计算梯度 → 更新参数。 反向传播利用 [[链式法则]] 计算损失函数对于网络中各个参数的梯度。 例如: ∂Loss / ∂W 得到梯度后,可以使用 [[梯度下降]] 或 [[Adam]] 等优化算法更新参数。 最基本的参数更新方式是: W ← W - η∇W Loss 其中 η 是学习率。 ===== DNN 与深度学习 ===== DNN 是 [[深度学习]] 的重要组成部分,但两者并不完全等价。 深度学习是一个更大的研究领域,而 DNN 是其中的一类模型。 例如: * [[MLP]]:典型的 DNN。 * [[CNN]]:主要用于图像等具有空间结构的数据。 * [[RNN]]:用于序列数据。 * [[Transformer]]:现代 [[大语言模型]] 的主要基础架构。 * [[扩散模型]]:常用于图像、视频和其他生成任务。 因此,“深度学习”不是某一种具体网络,而是一类利用深层神经网络进行表示学习和函数逼近的方法体系。 ===== DNN 的表达能力 ===== DNN 的重要优势之一是具有很强的函数逼近能力。 增加网络深度后,模型可以通过多个非线性变换构造复杂函数。 例如: 输入特征 → 低级表示 → 中级表示 → 高级表示 → 预测结果。 这使 DNN 能够直接从原始数据中学习有用特征,而不必完全依赖人工设计的特征工程。 这也是 [[表示学习]] 能够改变传统机器学习流程的重要原因。 ===== DNN 的训练过程 ===== 一个典型的 DNN 训练过程是: 数据 → 前向传播 → 计算 Loss → 反向传播 → 梯度计算 → 参数更新 → 下一批数据 → …… → 收敛。 训练通常采用 [[Mini-Batch]],即每次只使用一部分训练数据计算梯度。 完整遍历一次训练数据称为一个 [[Epoch]]。 ===== DNN 的泛化 ===== DNN 不仅需要在训练数据上表现良好,还需要能够处理没有见过的数据,这称为 [[泛化]](Generalization)。 如果模型过于复杂而训练数据不足,就可能出现 [[过拟合]]。 常见方法包括: * [[正则化]] * [[Dropout]] * [[数据增强]] * [[Early Stopping]] * 增加训练数据 ===== DNN 的优点 ===== * 能够学习复杂的非线性关系。 * 可以自动学习特征表示。 * 可以通过增加深度和宽度提升模型容量。 * 能够处理图像、文本、语音、时间序列等多种数据。 * 可以通过 [[GPU]] 和 [[分布式训练]] 进行大规模训练。 ===== DNN 的局限 ===== DNN 也存在一些重要问题: **计算成本** 网络越大,训练和推理通常需要更多计算资源。 **数据需求** 大型 DNN 通常需要大量高质量训练数据。 **可解释性** 模型内部的参数和表示通常难以直接解释。 **过拟合** 在数据不足或者模型容量过大时容易过拟合。 **训练稳定性** 深层网络可能出现梯度消失、梯度爆炸等问题,因此需要合适的初始化、激活函数、归一化和优化方法。 ===== DNN 与 Transformer ===== [[Transformer]] 本质上也可以看作一种深度神经网络,但现代 Transformer 与传统 DNN 存在明显区别。 传统 DNN 通常主要依赖全连接层: x → Linear → Activation → Linear → Activation。 Transformer 则使用 [[Self-Attention]] 和 [[Feed Forward Network]] 等结构: x → Attention → FFN → Attention → FFN → …… 因此,Transformer 可以被视为 DNN 架构发展的一个重要阶段。 现代 [[大语言模型]],例如 GPT 系列,本质上都是大规模的深度神经网络。 ===== DNN 的发展意义 ===== DNN 的核心意义并不只是“增加网络层数”,而是让神经网络能够通过多层非线性变换自动学习层次化表示。 传统机器学习往往需要: 原始数据 → 人工特征工程 → 模型 → 预测。 DNN 则更加倾向于: 原始数据 → 神经网络自动学习表示 → 预测。 这一思想最终推动了 [[深度学习]] 在计算机视觉、语音识别、自然语言处理和生成式 AI 等领域的大规模应用。 从今天的角度看,[[CNN]]、[[RNN]]、[[Transformer]]、[[大语言模型]] 等现代模型都可以放在 DNN 这一更大的框架中理解。 ===== 相关条目 ===== * [[人工神经网络]] * [[深度学习]] * [[MLP]] * [[反向传播]] * [[激活函数]] * [[Transformer]] * [[表示学习]] * [[梯度下降]] ===== 参考资料 ===== * Rumelhart, Hinton, Williams, 1986, 《Learning representations by back-propagating errors》 * LeCun, Bengio, Hinton, 2015, 《Deep learning》, Nature * Goodfellow, Bengio, Courville, 2016, 《Deep Learning》 * Krizhevsky, Sutskever, Hinton, 2012, 《ImageNet Classification with Deep Convolutional Neural Ne*