使用 TensorFlow/Keras 比较 DNN、CNN 和 LSTM

2025年2月28日 | 阅读 16 分钟

引言

在机器学习和深度学习领域,有各种类型的神经网络架构常用于解决不同类型的问题。其中,DNN、CNN 和 LSTM 非常引人注目,因为它们是针对特定可能性和目的设计的。幸运的是,TensorFlow / Keras,一个成功的深度学习框架,提供了相当有效的工具来实现这些架构。

1. 深度神经网络 (DNN)

架构

深度神经网络 (DNN) 是一种人工神经网络模型,包含输入层和输出层之间的一个或多个隐藏层,因此被称为潜在空间层。 它由一组神经元组成,一层中的每个神经元都连接到下一层中的每个神经元,从而创建一个非常稠密的网络。DNN 的主要组成部分包括:

  • 输入层: 输入原始数据集作为要处理的样本。
  • 隐藏层: 多层,其中每个神经元都对加权输入的总和使用非线性激活函数。
  • 输出层: 负责生产线上最终的输出。

DNN 一起使用的激活函数的示例包括 ReLU、Sigmoid 和 Tanh。 这些函数使模型非线性,从而有效地使模型能够捕捉非线性模式。

优势

  1. 通用性: 通用人工神经网络称为 DNN,可用于各种任务,包括分类和回归。
  2. 深度表示: 如果足够深入,DNN 能够将复杂的数据表示建模为分层结构。
  3. 端到端学习: DNN 的一个优点是它们可以从头开始学习,这意味着只需要很少的预处理或特征提取。

劣势

  1. 过拟合: 他们还注意到,增加更多的层或神经元会导致 DNN 过度拟合训练数据,而无法很好地泛化到新数据。
  2. 计算成本高: 这是因为训练深度网络需要一定程度的计算强度和时间消耗。
  3. 梯度消失/爆炸: 在某些情况下,深度网络可能产生非常小的梯度,或者梯度非常大,这会影响学习。

用例

  • 图像分类: DNN 可以接收图像并将其归入提供的类别之一。
  • 自然语言处理: 应用于文本分类和意见挖掘。
  • 回归任务: 基于某些输入函数产生连续数据输出。

2. 卷积神经网络 (CNN)

架构

卷积神经网络 (CNN) 是一种专门用于处理网格数据(如图像)的神经网络。CNN 包含卷积层,这些层通过卷积来识别数据中的局部特征和模式。CNN 的关键组成部分包括:

  • 卷积层: 卷积层处理输入数据的变体,并识别相关的特征,如边缘、纹理和其他形状。
  • 激活函数: 通常使用 ReLU 来引入模型的非线性,从而提高网络学习复杂数据表示的能力。
  • 池化层: 可以对特征图进行下采样,在保持重要特征大小的同时减小空间范围。一些常用的池化方法是最大池化和平均池化。
  • 全连接层: 提取的高级特征随后传递到全连接层,以帮助进行分类或回归。

优势

  • 特征提取: CNN 可以从图像中学习并共同提取分层特征,因此无需手动构建特征。
  • 空间层次结构: 它们擅长对图像中的空间层次结构和局部关系进行建模。
  • 参数共享: 在卷积层中,滤波器在图像空间中进行卷积,因此在不同区域共享相同的权重。因此,参数比全连接层少,后者计算成本高。

劣势

  • 数据饥渴: 不幸的是,大多数 CNN 仍然需要大量的标记数据进行训练。
  • 计算资源: 如前所述,训练 CNN 可能计算成本高昂,尤其是在具有深度架构的情况下。
  • 有限的时间动态: 因此,CNN 的设计并非旨在专门处理许多实际应用中常见的序列或时间数据。

用例

  • 图像和视频处理: 对象检测、面部识别和图像分割。
  • 医学图像分析: 解释 X 射线、MRI 和其他成像结果。
  • 视觉场景理解: 场景分类和对象检测。

3. 长短期记忆网络 (LSTM)

架构

循环神经网络 (RNN) 是一种专门用于对数据序列进行建模的网络,称为长短期记忆 (LSTM) 网络。 LSTM 的记忆单元使它们能够长时间存储信息;这消除了传统 RNN 中与消失梯度相关的问题。LSTM 的关键组成部分包括:

  • 记忆单元: 允许长期保存记录。
  • 门: 调节进入的信号和要发送到记忆单元的信号。这些包括:
  • 遗忘门: 控制应该从记忆单元中删除哪些信息。
  • 输入门: 要写入,操作会用新信息修改记忆单元。
  • 输出门: 根据该记忆单元的内容,决定输出。
  • 隐藏状态: 代表 LSTM 在时间步长 t 的向量。

优势

  1. 长期依赖: LSTM 可以对底层序列数据的长期依赖关系以及长期依赖关系进行建模。
  2. 内存管理: 门控机制有助于指导和调节输入和输出,并消除了诸如梯度消失之类的问题。
  3. 通用性: 适用于使用多个输入和输出的基于序列的学习任务,并且仍然可以受益于现成的模型,这些模型有助于简化工作流程。

劣势

  1. 复杂性: LSTM 通常比基本 RNN 更复杂,这使得它们的训练和调优有些困难。
  2. 计算成本: 它们比同类产品更具计算密集性,部分原因是其结构设计和计算。
  3. 训练时间: 训练 LSTM 是一个缓慢的过程,尤其是在处理长序列时。

用例

  • 自然语言处理: 此类应用的示例包括机器翻译、文本生成和语音识别。
  • 时间序列预测: 根据过去的值预测未来值。
  • 序列数据分析: 在多种情况下预测和综合模式。

DNN、CNN 和 LSTM 的应用

所有这些神经网络架构,DNN、CNN 和 LSTM,都因其优势而被广泛应用于不同领域。以下将解释每种网络类型的具体用途:

DNN 的应用

1. 医疗保健

  • 疾病预测: DNN 用于基于患者信息的糖尿病、癌症和心脏病等疾病的风险评估。
  • 药物发现: 在药物发现中,该架构用于通过分析化合物的结构来确定其有效性。

2. 金融

  • 信用评分: 目前,金融机构使用 DNN 来评估个人的信用历史和财务状况。
  • 算法交易: DNN 用于预测过去市场数据的趋势,然后可用于交易活动。

3. 自然语言处理 (NLP)

  • 文本分类: 由于其在复杂数据集上的非线性学习性质,DNN 已应用于多个问题,包括但不限于垃圾邮件检测、情感分析和主题分类。
  • 语言建模: 在语言建模中,DNN 估计序列中下一个计算机化单词的概率,这是自动完成或文本生成等许多应用程序的基本结构。

4. 制造业

  • 质量控制: DNN 用于分析来自传感器和图像的数据,以在制造过程中识别产品缺陷。预测性维护:使用 DNN 可以分析提供的机械数据以预测潜在故障的可能性,从而提前建议维护工作。

5. 电子商务

  • 推荐系统: DNN 服务于推荐应用程序,帮助公司根据客户过去的购买偏好向其推荐产品。
  • 客户细分: DNN 分析客户数据,为营销流程和策略进行客户细分。

卷积神经网络的应用

1. 计算机视觉

  • 图像分类: CNN 是图像分类任务中不可或缺的元素,例如在图像中检测对象。
  • 对象检测: CNN 用于图像中的对象检测和分割,这在自动驾驶汽车、安全系统等领域至关重要。
  • 图像分割: CNN 用于对象检测,预测图像中对象的。在图像分割中,CNN 对图像的每个像素进行分类,支持医疗成像和场景理解等现实应用。

2. 医疗保健

  • 医学成像: CNN 已广泛应用于通过医学图像(包括 X 射线、MRI 和 CT 扫描)检测肿瘤、骨折等疾病。
  • 皮肤病学: CNN 通过对皮肤病变和痣的图像进行分类,为皮肤病诊断做出贡献。

3. 自动驾驶汽车

  • 车道检测: CNN 的另一个用途是识别道路上的车道标记,这对于 L5 级自动驾驶至关重要。
  • 对象识别: CNN 用于帮助自动驾驶汽车识别行人、交通标志和其他车辆等对象。

4. 增强现实和虚拟现实

  • 场景理解: 它们应用于 AR 和 VR 应用,以实现对 3D 场景的解释和理解,使与虚拟环境的交互成为可能。
  • 手势识别: 在 AR/VR 系统中,CNN 可以检测手部和身体的手势,从而能够识别控制方法。

5. 机器人学

  • 视觉感知: CNN 通过使用视觉传感器进行映射、操作和与人交互来帮助机器人开发视觉能力。
  • 质量检查: CNN 在机器人制造行业中用于识别制造产品的缺陷。

6. 艺术与设计

  • 风格迁移: CNN 是将一幅图像的风格应用于另一幅图像,尤其是应用于艺术品、印象派和其他照片和视频中的艺术特征。
  • 图像增强: 它们用于超分辨率等应用,其中将低分辨率图像重建为高分辨率。

长短期记忆网络 (LSTM) 的应用

1. 自然语言处理 (NLP)

  • 机器翻译: LSTM 用于驱动机器翻译,这是一个处理实时文本和语音翻译的大型类别。
  • 文本生成: 它们甚至可以编写看起来与输入数据相似的文本,用于创建聊天机器人、内容甚至故事。
  • 语音识别: LSTM 网络在语音转文本应用中很有用,它们可以在其中分析和转录口语。

2. 时间序列预测

  • 股票价格预测: 这些用于根据过去的交易计划预测未来的股票价格。
  • 天气预报: 这是因为 LSTM 能够通过识别历史天气数据中的模式来准确预测天气。
  • 能源负荷预测: LSTM 还有助于公用事业公司预测其消费者的未来能源需求,从而帮助他们为未来做计划。

3. 医疗保健

  • 预测分析: LSTM 用于预测患者的病情,输出为患者未来的健康状况,如再入院率、疾病率和其他相关方面。
  • 可穿戴设备数据分析: LSTM 用于分析来自可穿戴设备(包括心率或步数)的连续数据,以识别异常并提出健康改进建议。

4. 金融

  • 交易中的异常检测: LSTM 用于检测欺诈,因为它们会分析一系列交易并识别最有可能存在欺诈的路径。
  • 客户行为分析: LSTM 为金融行业提供了一个工具,用于随着时间的推移了解客户需求并定制金融产品和服务。

5. 语音处理

  • 语音合成: LSTM 通过学习用于现代语音控制设备和 TTS 系统的声学模式来合成类似人类的语音。
  • 语音生物识别: LSTM 提供与语音相关的设备和应用程序的某些安全属性,可以识别个人。

6. 机器人学

  • 控制系统: LSTM 应用于机器人系统控制,尤其是在涉及顺序决策和从经验中学习的活动中。
  • 运动预测: LSTM 还有助于预测机器人或人员的未来动作,以改善共享操作空间中的交互。

实施

示例:时间序列预测

说明

  • 它加载 TensorBoard 扩展以直接在 Jupyter notebook 中可视化训练。
  • 它将 TensorFlow 的核心模块导入到项目中,TensorFlow 是一个旨在促进深度学习的库,Keras 是一个高级神经网络 API。
  • 使用 TensorBoard 记录训练报告和指标。
  • 导入 'random' 模块以生成随机数。
  • 导入 NumPy 以执行大量数组和矩阵的数值计算。
  • 它使用 Matplotlib,这是一个用于绘图和数据可视化的 'pyplot' 库。
  • datetime 模块用于创建时间戳,这些时间戳用于日期和时间。
  • 设置确立了在 TensorFlow/Keras 中使用 TensorBoard 的日志功能构建和训练模型的条件。

输出

Comparison of DNN, CNN, and LSTM Using TensorFlow/Keras

说明

  • 定义 'num_train_data' 和 'num_test_data' 分别为 4000 和 1000。
  • 调用的第二个参数是设置时间步长为 '0.1'。
  • 通过 'np.arange 从 0 到 (num_train_data + num_test_data) * timestep' 创建时间向量 tm,步长为 timestep。
  • 通过将三个正弦波相加创建复合正弦信号 y:即 np.sin(tm)、np.sin(tm*np.pi/2) 和 np.sin(tm*(-3*np.pi/2))。
  • 分步说明包括:“将传感器置于感兴趣的区域,并确保信噪比 (SNR) 为 10 dB。”
  • 使用 np.random.normal 通过高斯噪声给信号 y 添加噪声,得到 ypn,其中噪声水平定义为 '10**(-SNR/20)'。
  • 在这种情况下,必须使用高层函数 'plt.plot' 将带噪声的信号 ypn 绘制成散点图。
  • 使用星号 ('*') 作为标记进行绘制。
  • 使用 'plt.show()' 执行绘图。

使用 DNN 进行预测

输出

模型:“sequential”

层 (类型)输出形状参数数量
conv1d (Conv1D)(None, 13, 3)15
average_pooling1d(AveragePooling1D)(None, 3, 3)0
Flatten (Flatten)(None, 9)0
dense (Dense)(None, 16)160
dense_1 (Dense)(None, 1)17

总参数: 192 (768.00 B)

可训练参数: 192 (768.00 B)

不可训练参数: 0 (0.00 B)

CNN 训练完成。已用时间:33.45632 秒

说明

  • 参数设置如下:设置 'cnn_numinputs 为 16',这决定了 CNN 输入样本的数量。
  • 主要集合:设置 'num_cnn_features 为 1,关于每个输入样本的特征数量。
  • 从空列表 'train_data' 开始,以存储训练数据。
  • 开始计数用于训练批次的数量, 'cnn_train_batch' 最初为 0。
  • 要创建训练数据,范围应从 '0 到 num_train_data-cnn_numinputs - 1'。
  • 对于每次迭代,我们将 'ypn(从索引 k 到 k + cnn_numinputs)的片段追加到 train_data。
  • 每次迭代都需要将 'cnn_train_batch' 的值加 1。
  • 最后,将 train_data 重塑为 'cnn_train_batch, cnn_numinputs, num_cnn_features' 的维度。
  • 从 'cnn_numinputs' 到 'cnn_train_batch + cnn_numinputs' 的相应 y 值创建新序列 'train_labels'。
  • 了解 CNN 模型的基本要素后,我们使用顺序 Keras 模型对其进行设置。
  • 现在,添加另一个层——一维卷积层;它有 3 个滤波器;核大小为 4;激活函数为 tanh。输入形状设置为 train_data 的第二维和第三维,即 train_data.shape[1:]。
  • 包括一个池化大小为 4 的平均池化层。
  • 将池化层的输出重塑为二维数组。
  • 接着是一个具有 16 个单元且激活函数为 relu 的密集层。
  • 最后的密集层应只有一个神经元。
  • 使用 Adam 优化器和 mse 损失函数完成模型。
  • 打印模型摘要。
  • 设置 'EPOCHS 为 100' 进行训练。
  • 您可以调用 'cnn_keras_model()' 函数来启动模型。
  • 将按下开始按钮的当前时间保存为 'strt_time'。
  • 将模型拟合到 'train_data' 和 'train_labels',并在给定 epoch 数量下进行 20% 的数据交叉验证。
  • 将结束时间存储为 'curr_time',然后将总 CNN 训练时间(以秒为单位)累加,即 'cnn_train_time'。

LSTM 的优点

  • 捕捉时间依赖: LSTM 模型特别适合处理序列数据。它们的架构通常使它们能够随着时间的推移捕捉时间依赖关系。这在时间序列分析、自然语言处理以及所有序列重要的用例中尤其相关。
  • 避免梯度消失问题: 标准 RNN 的主要缺点是梯度消失,这限制了模型在序列数据上的可训练性。LSTM 通过使用特定的门控机制(即输入门、输出门和遗忘门)来解决梯度消失问题。
  • 处理长序列: 由于其架构,LSTM 比常规 RNN 能够更好地学习和预测长数据序列。这在语音识别、语言翻译和视频分析等操作中尤其重要。
  • 内存效率: LSTM 的遗忘和记忆机制适用于处理输入带来的海量时间数据流,因为它们会根据需要抑制或增强特定部分。
  • 模型设计的灵活性: LTSM 在与卷积神经网络 (CNN) 等其他神经网络框架集成时非常灵活,可以形成结合时间和空间特征学习的高级神经网络架构。这种优势在视频分类等任务中尤为明显,其中时间和空间特征都很重要。
  • 对噪声的鲁棒性: 实验结果表明,与简单模型相比,噪声对 LSTM 网络的影响不大,因为环境的变化是相当被动的,它会寻找重要的时间模式来忽略噪声。
  • DNN 的优点

    • 通用性: DNN 非常灵活,在图像识别、语音识别、时间序列分析等各种问题领域都取得了优异的成果,甚至包括游戏 AI。这使它们能够对大量非线性数据中的依赖关系进行建模。
    • 特征提取: DNN 可以从原始数据中学习特征,因此比传统的深度学习模型需要更少的特征工程。这些能力使其适用于数据特征有序的任务,例如在图像中识别对象,在不同抽象级别可以识别出完全不同的特征。
    • 高精度: 如后续章节所示,DNN 在大型数据集上经过良好训练后,可以在不同任务上达到令人印象深刻的性能。它们的深度使其能够识别数据模式中的相互关系,从而在预测中产生高精度。
    • 可扩展性: DNN 可以处理大数据和复杂问题,因此可以进行扩展。当有足够的计算能力和海量数据来喂养网络时,可以通过增加层数或神经元数量来扩展 ANN 和 NN,这使得它们能够解决更宏大的问题。
    • 迁移学习: DNN 可以使用迁移学习,即使用在大型数据库上训练的模型,并对其进行微调以在小型数据库上使用。这在标记数据有限的情况下特别有用,因为它可以帮助模型以很少的数据和时间获得良好的性能。
    • 并行性和效率: 现代 DNN 架构可以在 GPU 上并行训练,从而可以处理大型数据集。硬件加速器和优化库的使用也加快了深度网络的训练速度。
    • 可定制性: DNN 的优势在于其架构完全可由从业者配置,例如层数、层类型或激活函数。这使得为特定用途开发非常具体的模型成为可能。

    CNN 的应用

    • 自动特征提取: 本研究确定卷积神经网络 (CNN) 是因为它们能够自主地从原始输入数据(尤其是在图像中)学习和提取相关特征。这消除了单独进行特征提取的需要,因为网络能够自动识别数据中固有的边缘、纹理、形状、折痕和其他复杂特征。
    • 空间层次结构: CNN 通过卷积和池化层能够捕捉数据中的空间层次结构。早期层通常负责检测图像的简单元素,包括边缘,而后期层则识别更高级别的对象,例如形状和对象。本工作中提出的分层特征学习在图像和视频分析等任务中很重要。
    • 参数共享: 实际上,在 CNN 中,相同的权重(滤波器)对输入的各个区域重复使用三次。这种参数共享使得 CNN 的参数比全连接网络少得多;它还最大限度地减少了过拟合的可能性。
    • 平移不变性: CNN 特别具有固有的平移不变性,因此它可以在图像中识别一个对象,而不管其方向如何。此属性通过卷积层实现,卷积层将滤波器应用于输入,然后移动它们以扫描图像中存在的任何模式。
    • 高效计算: CNN 具有局部连接和共享权重,这使得计算量比具有相似大小的全连接网络所需的计算量要少。这使得 CNN 足够灵活,可以扩展到大型图像和数据集,因此可以用于实时应用。
    • 适用于各种数据类型: 尽管 CNN 为图像数据提供了最佳解决方案,但只要可以将数据表示为一维、二维或三维网格,它们也可以应用于其他类型的数据,例如音频、时间序列或文本数据。这种灵活性使得 CNN 能够应用于计算机视觉之外的领域,如下所述。

    结论

    例如,DNN、CNN 和 LSTM 都是神经网络,它们具有不同的结构,使其更适用于特定类型的数据和任务。DNN 被广泛使用并适用于大多数现实生活中的应用。CNN 设计用于处理图像和特征提取,而 LSTM 由于能够捕获长期依赖性,因此最适合处理序列数据。

    TensorFlow/Keras 提供了实现这些架构的功能,使研究人员和从业者能够更轻松地开发、计算和部署模型。因此,了解不同类型网络的属性和适用性非常重要,以便能够为手头的任务确定最合适的网络。