深度神经网络在现代人工智能时代重塑了整个格局。近年来,深度学习和神经网络的诸多研究进展,显著提升了与人工智能相关项目的质量。
这些深度神经网络帮助开发者实现更可持续且高质量的结果,因此,它们甚至正在取代多种传统的机器学习技术。
但深度神经网络究竟是什么?为什么它们能成为广泛任务的最优选择?入门深度神经网络又有哪些库与工具可用?
本文将解释深度神经网络、其所需的库,以及如何从零开始构建一个基本的深度神经网络架构。
什么是深度神经网络?
人工神经网络(ANN)或传统的简单神经网络,旨在以直接的网络结构解决相对基础的任务。人工神经网络受生物神经网络启发,由多个层组成以执行特定任务。每一层由若干节点组成,以协同工作。
这些网络通常包含输入层、一到两个隐藏层以及输出层。它们可以解决简单的数学问题和计算机问题,包括带有真值表的基本逻辑门结构,但在处理复杂的图像处理、计算机视觉和自然语言处理任务时就会显得吃力。
对于这些问题,我们使用深度神经网络 ,它们通常拥有更复杂的隐藏层结构,包含多种不同类型的层,如卷积层、最大池化层、全连接层以及其他特殊层。这些额外的层帮助模型更好地理解问题,并为复杂项目提供更优解。深度神经网络比 ANN 拥有更多的层(更“深”),每一层都为模型增加复杂度,同时使模型能够更精炼地处理输入,从而输出理想的解。
ANN vs DNN - 图片来源
深度神经网络因其在众多深度学习项目中高效达成目标而备受关注。另文探讨机器学习与深度学习的区别 。
为什么使用 DNN?
经过良好训练的深度神经网络,能够以较高的准确率实现预期结果。它们在深度学习的各个方面都很流行,包括计算机视觉、自然语言处理和迁移学习。
深度神经网络的突出实例包括其在目标检测中的应用(如 YOLO ,You Only Look Once),在语言翻译任务中使用的 BERT(Bidirectional Encoder Representations from Transformers)模型,以及用于图像处理项目的迁移学习模型,如 VGG-19、RESNET-50、EfficientNet,以及其他类似网络。
为更直观地理解这些人工智能的深度学习概念,建议查看 DataCamp 的《用 Python 学深度学习》 课程。
深度学习工具与库
从零开始构建神经网络有助于程序员理解概念,并通过操作这些网络来解决基础任务。然而,从头搭建这些网络耗时且费力。为简化深度学习,我们有多种工具和库可用,只需几行代码就能构建能够解决复杂问题的高效深度神经网络模型。
用于构建深度神经网络的最流行深度学习库与工具是 TensorFlow、Keras 和 PyTorch。自 TensorFlow 2.0 起,Keras 与 TensorFlow 紧密集成。这一整合使用户能够在 TensorFlow 框架内使用 Keras 的高级代码结构来开发复杂的神经网络。
PyTorch
PyTorch 是另一款极受欢迎的机器学习框架,能够助力用户开展高水平的研究项目。
尽管它在可视化方面略显不足,但在构建深度神经网络模型时,PyTorch 以其紧凑快速的性能以及相对更快、更简单的 GPU 安装而弥补了这一点。
DataCamp 的《PyTorch 深度学习入门》 课程是进一步了解 PyTorch 的最佳起点。
TensorFlow 与 Keras
TensorFlow 框架为开发者提供了丰富的深度学习可视化选项。TensorBoard 图形化面板是一个出色的选择,可据此可视化、分析并解释项目的数据与结果。
Keras 的集成让项目构建更快、代码结构更简洁,因而成为长期开发项目的热门选择。初学者可以从《Python 中的 TensorFlow 入门》 开始学习 TensorFlow。
如何构建一个基础的深度神经网络
本节将了解一些深度神经网络的基本概念,以及如何从零开始构建这样的网络。
导入所需库
第一步是根据应用选择您偏好的库。我们将使用 TensorFlow 和 Keras 深度学习框架来构建深度神经网络。
import tensorflow as tf
from tensorflow. keras. models import Sequential
from tensorflow. keras. layers import Input, Dense, Conv2D
from tensorflow. keras. layers import Flatten, MaxPooling2D技术支持
创建顺序模型(Sequential)
在完成所需库的导入后,我们将使用 Sequential 类型的建模来构建深度学习模型。顺序模型是一个简单的层堆叠,具有单一的输入与输出。其他可选方案包括 Functional API 或自定义模型构建。然而,Sequential 类提供了构建神经网络架构的直观途径。
DNN_Model = Sequential( )
技术支持
构建深度神经网络架构
我们将添加一个输入形状,通常与您在项目中使用的图像尺寸类型相对应。该尺寸包含图像的宽度、高度和颜色编码。在下面的示例代码中,图像的高和宽为 256,采用 RGB 配色,因而用 3 表示(灰度图像用 1)。随后,我们将利用卷积层和最大池化层,以不同的过滤器大小构建必要的隐藏层。最后,使用展平层将输出拉平成一维,并用全连接层作为最终输出层。
隐藏层增加了神经网络的复杂度。卷积层对可视图像执行卷积操作以提取信息。卷积层中的每种过滤器大小都有助于从输入中提取特定特征。最大池化层通过选取提取特征中的最大值来下采样(减少)特征数量。
展平层将空间维度压缩为一维,以加快计算。全连接层是最简单的层,接收前面各层的输出,通常用作输出层。二维卷积在二维输入上执行逐元素乘积。ReLU(线性整流)激活函数为模型提供非线性,从而获得更好的计算性能。我们将使用 same 填充来保持卷积层输入与输出的形状一致。
DNN_Model. add( Input( shape = ( 256 , 256 , 3 ) ) )
DNN_Model. add( Conv2D( 256 , ( 3 , 3 ) , activation= 'relu' , padding = "same" ) )
DNN_Model. add( MaxPooling2D( 2 , 2 ) )
DNN_Model. add( Conv2D( 128 , ( 3 , 3 ) , activation= 'relu' , padding = "same" ) )
DNN_Model. add( MaxPooling2D( 2 , 2 ) )
DNN_Model. add( Conv2D( 64 , ( 3 , 3 ) , activation= 'relu' , padding = "same" ) )
DNN_Model. add( MaxPooling2D( 2 , 2 ) )
DNN_Model. add( Flatten( ) )
DNN_Model. add( Dense( 64 , activation= 'relu' ) )
DNN_Model. add( Dense( 10 ) ) 技术支持
模型架构
下面给出了所构建深度神经网络的模型结构与示意图。
Model: "sequential_2"
_________________________________________________________________
Layer ( type ) Output Shape Param
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == =
conv2d_5 ( Conv2D) ( None , 256 , 256 , 256 ) 7168
max_pooling2d_5 ( MaxPooling ( None , 128 , 128 , 256 ) 0
2D)
conv2d_6 ( Conv2D) ( None , 128 , 128 , 128 ) 295040
max_pooling2d_6 ( MaxPooling ( None , 64 , 64 , 128 ) 0
2D)
conv2d_7 ( Conv2D) ( None , 64 , 64 , 64 ) 73792
max_pooling2d_7 ( MaxPooling ( None , 32 , 32 , 64 ) 0
2D)
flatten_2 ( Flatten) ( None , 65536 ) 0
dense_4 ( Dense) ( None , 64 ) 4194368
dense_5 ( Dense) ( None , 10 ) 650
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == =
Total params: 4 , 571 , 018
Trainable params: 4 , 571 , 018
Non- trainable params: 0
_________________________________________________________________技术支持
示意图如下:
tf. keras. utils. plot_model( DNN_Model, to_file= 'model_big.png' , show_shapes= True ) 技术支持
补充信息
机器学习工作流 - 图片来源
模型构建完成后,需要进行编译以完成配置。在模型编译阶段,深度学习模型中的重要操作包括前向传播与反向传播。前向传播中,关键信息会经由不同的节点传递直至输出层。在输出层中,对于分类任务,会相应计算预测值与真实值。
在训练或拟合阶段,会进行反向传播。通过不断调整各层的权重,使预测值与真实值逐步接近,从而达到期望结果。若需深入理解,建议查看《反向传播 》指南,该指南来自《用 Python 学深度学习》 课程。
深度学习可探索的细节颇多。强烈建议查看《用 Keras 学深度学习》 课程,以进一步理解如何构建深度神经网络。
理解深度学习模型
完成某一特定的机器学习任务,需要采用相应的深度神经网络来执行必要的操作。两类主要使用的深度学习模型是卷积神经网络(CNN) 和循环神经网络(RNN) 。卷积神经网络在图像处理与计算机视觉项目中有着巨大的应用价值。
在这些深度神经网络中,隐藏层并非执行典型的矩阵运算,而是执行卷积操作。这样使网络具备更具扩展性的途径,从而实现更高的效率与更精准的结果。在图像分类与目标检测任务中,模型需要处理大量数据与图像,卷积神经网络能有效应对这些挑战。
对于自然语言处理与语义类项目,循环神经网络常被用于优化结果。RNN 的一种常见变体——长短期记忆网络(LSTM),通常用于执行各类机器翻译、文本分类、语音识别等类似任务。
这类网络将每个先前单元的关键信息传递到下一个单元,同时保留重要信息,以优化模型表现。可参考《用 Keras 做图像建模》 深入了解 CNN,并参考《用 Python 学深度学习》 以全面理解深度学习。
深度神经网络的挑战与考量
我们已对深度神经网络及其在 TensorFlow 框架下的构建有了初步认识。然而,在为特定项目开发神经网络之前,每位开发者都必须考虑一些挑战。下面来看其中的几个。
数据需求
深度学习的首要需求之一是数据。数据是构建高精度模型的关键要素。在许多情况下,深度神经网络通常需要大量数据,以防止过拟合并取得良好表现。以目标检测任务为例,模型可能需要更多数据,才能高准确率地检测不同目标。
虽然数据增强技术可作为部分问题的权宜之计,但数据需求仍是每个深度学习项目必须考虑的要点。
计算资源
除大量数据之外,还必须考虑计算深度神经网络所带来的高计算成本。例如,生成式预训练变换器 3(GPT-3)拥有 1750 亿个参数。
针对复杂任务的模型编译与训练需要性能强劲的 GPU。相较于 CPU,GPU 或 TPU 往往能更高效地训练模型。对于极其复杂的任务,系统要求会更高,需要为特定任务投入更多资源。
训练问题
训练过程中,模型也可能遇到欠拟合或过拟合等问题。欠拟合通常由于数据不足而发生;过拟合更为常见,表现为训练数据的性能持续提升,而测试数据表现停滞不前。由此导致训练准确率高但验证准确率低,进而造成模型不稳定,难以产出最佳结果。
结语
本文探讨了深度神经网络并理解其核心概念。我们了解了这类神经网络与传统网络的差异,并熟悉了用于计算深度学习项目的不同深度学习框架。随后,我们使用 TensorFlow 与 Keras 展示了一个深度神经网络的构建流程。最后,我们也考量了深度学习的一些关键挑战及其应对方法。
深度神经网络是完成大多数常见人工智能应用与项目的绝佳工具。它们使我们能够以高准确率解决图像处理与自然语言处理任务。
对于所有有经验的开发者而言,紧跟新兴趋势至关重要——当下流行的模型,未来未必仍然最优或最受欢迎。
因此,持续学习与积累知识至关重要。人工智能世界是一次充满激情与新技术发展的冒险。保持更新的最佳方式之一,是查看 DataCamp 的《用 Python 学深度学习》 技能路径,涵盖 TensorFlow 与 Keras 等主题,以及《PyTorch 深度学习入门》 以进一步学习 PyTorch。您也可以查看AI 基础 课程以获得更温和的入门体验。前者有助于释放深度学习项目的巨大潜力,后者则有助于夯实基础。
深度神经网络在现代人工智能时代重塑了整个格局。近年来,深度学习和神经网络的诸多研究进展,显著提升了与人工智能相关项目的质量。
这些深度神经网络帮助开发者实现更可持续且高质量的结果,因此,它们甚至正在取代多种传统的机器学习技术。
但深度神经网络究竟是什么?为什么它们能成为广泛任务的最优选择?入门深度神经网络又有哪些库与工具可用?
本文将解释深度神经网络、其所需的库,以及如何从零开始构建一个基本的深度神经网络架构。
什么是深度神经网络?
人工神经网络(ANN)或传统的简单神经网络,旨在以直接的网络结构解决相对基础的任务。人工神经网络受生物神经网络启发,由多个层组成以执行特定任务。每一层由若干节点组成,以协同工作。
这些网络通常包含输入层、一到两个隐藏层以及输出层。它们可以解决简单的数学问题和计算机问题,包括带有真值表的基本逻辑门结构,但在处理复杂的图像处理、计算机视觉和自然语言处理任务时就会显得吃力。
对于这些问题,我们使用深度神经网络,它们通常拥有更复杂的隐藏层结构,包含多种不同类型的层,如卷积层、最大池化层、全连接层以及其他特殊层。这些额外的层帮助模型更好地理解问题,并为复杂项目提供更优解。深度神经网络比 ANN 拥有更多的层(更“深”),每一层都为模型增加复杂度,同时使模型能够更精炼地处理输入,从而输出理想的解。
ANN vs DNN - 图片来源
深度神经网络因其在众多深度学习项目中高效达成目标而备受关注。另文探讨机器学习与深度学习的区别。
为什么使用 DNN?
经过良好训练的深度神经网络,能够以较高的准确率实现预期结果。它们在深度学习的各个方面都很流行,包括计算机视觉、自然语言处理和迁移学习。
深度神经网络的突出实例包括其在目标检测中的应用(如 YOLO,You Only Look Once),在语言翻译任务中使用的 BERT(Bidirectional Encoder Representations from Transformers)模型,以及用于图像处理项目的迁移学习模型,如 VGG-19、RESNET-50、EfficientNet,以及其他类似网络。
为更直观地理解这些人工智能的深度学习概念,建议查看 DataCamp 的《用 Python 学深度学习》课程。
深度学习工具与库
从零开始构建神经网络有助于程序员理解概念,并通过操作这些网络来解决基础任务。然而,从头搭建这些网络耗时且费力。为简化深度学习,我们有多种工具和库可用,只需几行代码就能构建能够解决复杂问题的高效深度神经网络模型。
用于构建深度神经网络的最流行深度学习库与工具是 TensorFlow、Keras 和 PyTorch。自 TensorFlow 2.0 起,Keras 与 TensorFlow 紧密集成。这一整合使用户能够在 TensorFlow 框架内使用 Keras 的高级代码结构来开发复杂的神经网络。
PyTorch
PyTorch 是另一款极受欢迎的机器学习框架,能够助力用户开展高水平的研究项目。
尽管它在可视化方面略显不足,但在构建深度神经网络模型时,PyTorch 以其紧凑快速的性能以及相对更快、更简单的 GPU 安装而弥补了这一点。
DataCamp 的《PyTorch 深度学习入门》课程是进一步了解 PyTorch 的最佳起点。
TensorFlow 与 Keras
TensorFlow 框架为开发者提供了丰富的深度学习可视化选项。TensorBoard 图形化面板是一个出色的选择,可据此可视化、分析并解释项目的数据与结果。
Keras 的集成让项目构建更快、代码结构更简洁,因而成为长期开发项目的热门选择。初学者可以从《Python 中的 TensorFlow 入门》开始学习 TensorFlow。
如何构建一个基础的深度神经网络
本节将了解一些深度神经网络的基本概念,以及如何从零开始构建这样的网络。
导入所需库
第一步是根据应用选择您偏好的库。我们将使用 TensorFlow 和 Keras 深度学习框架来构建深度神经网络。
创建顺序模型(Sequential)
在完成所需库的导入后,我们将使用 Sequential 类型的建模来构建深度学习模型。顺序模型是一个简单的层堆叠,具有单一的输入与输出。其他可选方案包括 Functional API 或自定义模型构建。然而,Sequential 类提供了构建神经网络架构的直观途径。
构建深度神经网络架构
我们将添加一个输入形状,通常与您在项目中使用的图像尺寸类型相对应。该尺寸包含图像的宽度、高度和颜色编码。在下面的示例代码中,图像的高和宽为 256,采用 RGB 配色,因而用 3 表示(灰度图像用 1)。随后,我们将利用卷积层和最大池化层,以不同的过滤器大小构建必要的隐藏层。最后,使用展平层将输出拉平成一维,并用全连接层作为最终输出层。
隐藏层增加了神经网络的复杂度。卷积层对可视图像执行卷积操作以提取信息。卷积层中的每种过滤器大小都有助于从输入中提取特定特征。最大池化层通过选取提取特征中的最大值来下采样(减少)特征数量。
展平层将空间维度压缩为一维,以加快计算。全连接层是最简单的层,接收前面各层的输出,通常用作输出层。二维卷积在二维输入上执行逐元素乘积。ReLU(线性整流)激活函数为模型提供非线性,从而获得更好的计算性能。我们将使用 same 填充来保持卷积层输入与输出的形状一致。
模型架构
下面给出了所构建深度神经网络的模型结构与示意图。
示意图如下:
补充信息
机器学习工作流 - 图片来源
模型构建完成后,需要进行编译以完成配置。在模型编译阶段,深度学习模型中的重要操作包括前向传播与反向传播。前向传播中,关键信息会经由不同的节点传递直至输出层。在输出层中,对于分类任务,会相应计算预测值与真实值。
在训练或拟合阶段,会进行反向传播。通过不断调整各层的权重,使预测值与真实值逐步接近,从而达到期望结果。若需深入理解,建议查看《反向传播》指南,该指南来自《用 Python 学深度学习》课程。
深度学习可探索的细节颇多。强烈建议查看《用 Keras 学深度学习》课程,以进一步理解如何构建深度神经网络。
理解深度学习模型
完成某一特定的机器学习任务,需要采用相应的深度神经网络来执行必要的操作。两类主要使用的深度学习模型是卷积神经网络(CNN)和循环神经网络(RNN)。卷积神经网络在图像处理与计算机视觉项目中有着巨大的应用价值。
在这些深度神经网络中,隐藏层并非执行典型的矩阵运算,而是执行卷积操作。这样使网络具备更具扩展性的途径,从而实现更高的效率与更精准的结果。在图像分类与目标检测任务中,模型需要处理大量数据与图像,卷积神经网络能有效应对这些挑战。
对于自然语言处理与语义类项目,循环神经网络常被用于优化结果。RNN 的一种常见变体——长短期记忆网络(LSTM),通常用于执行各类机器翻译、文本分类、语音识别等类似任务。
这类网络将每个先前单元的关键信息传递到下一个单元,同时保留重要信息,以优化模型表现。可参考《用 Keras 做图像建模》深入了解 CNN,并参考《用 Python 学深度学习》以全面理解深度学习。
深度神经网络的挑战与考量
我们已对深度神经网络及其在 TensorFlow 框架下的构建有了初步认识。然而,在为特定项目开发神经网络之前,每位开发者都必须考虑一些挑战。下面来看其中的几个。
数据需求
深度学习的首要需求之一是数据。数据是构建高精度模型的关键要素。在许多情况下,深度神经网络通常需要大量数据,以防止过拟合并取得良好表现。以目标检测任务为例,模型可能需要更多数据,才能高准确率地检测不同目标。
虽然数据增强技术可作为部分问题的权宜之计,但数据需求仍是每个深度学习项目必须考虑的要点。
计算资源
除大量数据之外,还必须考虑计算深度神经网络所带来的高计算成本。例如,生成式预训练变换器 3(GPT-3)拥有 1750 亿个参数。
针对复杂任务的模型编译与训练需要性能强劲的 GPU。相较于 CPU,GPU 或 TPU 往往能更高效地训练模型。对于极其复杂的任务,系统要求会更高,需要为特定任务投入更多资源。
训练问题
训练过程中,模型也可能遇到欠拟合或过拟合等问题。欠拟合通常由于数据不足而发生;过拟合更为常见,表现为训练数据的性能持续提升,而测试数据表现停滞不前。由此导致训练准确率高但验证准确率低,进而造成模型不稳定,难以产出最佳结果。
结语
本文探讨了深度神经网络并理解其核心概念。我们了解了这类神经网络与传统网络的差异,并熟悉了用于计算深度学习项目的不同深度学习框架。随后,我们使用 TensorFlow 与 Keras 展示了一个深度神经网络的构建流程。最后,我们也考量了深度学习的一些关键挑战及其应对方法。
深度神经网络是完成大多数常见人工智能应用与项目的绝佳工具。它们使我们能够以高准确率解决图像处理与自然语言处理任务。
对于所有有经验的开发者而言,紧跟新兴趋势至关重要——当下流行的模型,未来未必仍然最优或最受欢迎。
因此,持续学习与积累知识至关重要。人工智能世界是一次充满激情与新技术发展的冒险。保持更新的最佳方式之一,是查看 DataCamp 的《用 Python 学深度学习》技能路径,涵盖 TensorFlow 与 Keras 等主题,以及《PyTorch 深度学习入门》以进一步学习 PyTorch。您也可以查看AI 基础课程以获得更温和的入门体验。前者有助于释放深度学习项目的巨大潜力,后者则有助于夯实基础。