参考书籍《TensorFlow
深度学习--深入理解人工智能算法设计》
一.人工智能简介
深度学习<神经网络<机器学习<人工智能
机器学习分为有监督学习,无监督学习和强化学习
graph TD
机器学习[机器学习]
机器学习 --> 有监督学习[有监督学习]
机器学习 --> 无监督学习[无监督学习]
机器学习 --> 强化学习[强化学习]
有监督学习 --> 有监督学习算法[线性回归、逻辑回归、支持向量机、随机森林]
无监督学习 --> 无监督学习算法[自编码器、生成对抗网络]
强化学习 --> 强化学习算法[DQN、PPO]
image.png
1.1 神经网络和深度学习
-
神经网络算法是一类基于神经网络从数据中学习的算法,它仍然属于机器学习的范畴。受限于计算能力和数据量,早期的神经网络层数较浅,一般在1-4层,网络表达能力有限。随着计算能力的提升和大数据时代的到来,高度并行化的
GPU
和海量数据让大规模神经网络的训练成为可能。(Page 3) -
一般将利用深层神经网络实现的算法称作深度学习,本质上神经网络和深度学习可认为是相同的。(Page 3)
1.2 神经网络发展史
- 将神经网络的发展历程大致分为浅层神经网络和深度学习阶段,以2006年为分割点。(Page 4)
- 2006年,Geoffrey Hinton等人发现通过逐层预训练的方式可以较好地训练多层神经网络,并在
MNIST
手写数字图片数据集上取得了优于SVM
的错误率,开启了第三次人工智能的复兴。(Page 6)
gantt
title 时间线图
dateFormat YYYY-MM-DD
section 浅层神经网络发展事件线
1943年 神经元模型 :a1, 1943-01-01, 3y
1950年 图灵测试 :a2, 1950-01-01, 8y
1958年 感知机模型 :a3, 1958-01-01, 11y
1969年 XOR亦或问题 :a4, 1969-01-01, 5y
1974年 BP反向传播 :a5, 1974-01-01, 8y
1982年 Hopfield网络 :a6, 1982-01-01, 3y
1985年 Boltzmann机器 :a7, 1985-01-01, 1y
1986年 受限Boltzmann机器 :a8, 1986-01-01, 4y
1986年 RNN :a9, 1986-01-01, 4y
1986年 MLP :a10, 1986-01-01, 4y
1990年 LeNet :a11, 1990-01-01, 7y
1997年 双向RNN :a12, 1997-01-01, 9y
1997年 LSTM :a13, 1997-01-01, 9y
2006年 DBN深度置信网络 :a14, 2006-01-01, 3y
2009年 ImageNet :a15, 2009-01-01, 3y
2012年 AlexNet提出 :a16, 2012-01-01, 2y
2014年 GAN生成对抗网络 :a17, 2014-01-01, 1y
2014年 VGG GoogLeNet :a18, 2014-01-01, 1y
2015年 ResNet :a19, 2015-01-01, 1y
2015年 TensorFlow发布 :a20, 2015-01-01, 1y
2015年 DQN :a21, 2015-01-01, 1y
2015年 Batch Normalization :a22, 2015-01-01, 1y
2016年 AlphaGO :a23, 2016-01-01, 1y
2017年 AlphaGO Zero :a24, 2017-01-01, 1y
2018年 机器翻译BERT :a25, 2018-01-01, 1y
2019年 德州扑克Pluribus :a26, 2019-01-01, 1y
2019年 OpenAI Five :a27, 2019-01-01, 1y
2019年 TensorFlow2.0发布 :a28, 2019-01-01, 1y
image.png
1.3 深度学习特点
-
为了防止过拟合,需要数据集的规模通常也是巨大的。(Page 8)
在深度学习中,模型通常有大量的参数,这使得它们具有很高的表示能力。这种高度的表示能力意味着模型可以很容易地拟合训练数据,甚至是训练数据中的噪声。这种情况被称为过拟合,当模型过拟合时,它在训练数据上的性能可能会很好,但在未见过的测试数据上的性能可能会很差。
为了防止过拟合,有以下几种常见的方法:
- 增加数据量:当我们有更多的数据时,模型更难以拟合数据中的噪声,因为噪声在大数据集中的影响会被稀释。此外,更多的数据可以提供更多的信息和多样性,帮助模型学习到更一般的模式,而不是特定于训练数据的模式。
- 正则化:正则化是一种添加到损失函数中的惩罚项,它惩罚模型的复杂性。这可以防止模型变得过于复杂,从而降低过拟合的风险。
-
Dropout
:Dropout
是一种在训练过程中随机关闭一部分神经元的技术。这可以防止模型过度依赖于任何单个神经元,从而降低过拟合的风险。 - 早停:当验证集的性能不再提高时,我们可以停止训练,这可以防止模型在训练数据上过度训练。
- 数据增强:通过对训练数据进行小的、随机的修改(如旋转、缩放或裁剪图像),我们可以人为地增加数据的多样性,从而增加模型的泛化能力。
总之,为了防止过拟合,我们需要确保模型在训练过程中接触到足够多样化的数据,这样它可以学习到更一般的模式,而不是仅仅拟合训练数据中的噪声或特定模式。大规模的数据集可以提供这种多样性,从而帮助防止过拟合。(Chat GPT)
- 尽管深度学习对数据集需求较高,收集数据,尤其是收集带标签的数据,往往是代价昂贵的。数据集的形成通常需要手动采集、爬取原始数据,并清洗掉无效样本,再通过人类智能去标注数据样本,因此不可避免地引入主观偏差和随机误差。研究数据量需求较小的算法模型是非常有用的一个方向。(Page 9)
-
随着深度学习的兴起和计算机能力的提升,
AlexNet
(8层)、VGG16
(16层),GoogLeNet
(22层)、ResNet
50(50层)、DenseNet
121(121层)等模型相继被提出,同时输入图片的大小也从28x28
逐渐增大,变成224x224
、299x299
等,这些变化使得网络的总参数量可达到千万级别。(Page 10) -
过去,为了提升某项任务上的算法性能,往往需要利用先验知识手动设计相应的特征,以帮助算法更好地收敛到最优解。这类特征提取方法往往是与具体任务场景相关的,一旦场景发生了变动,这些依靠人工设计的特征和先验设定无法自适应新场景,往往需要重新设计算法模型,模型的通用性不强。(Page 10)
1.4 深度学习应用
graph TD
计算机视觉[计算机视觉]
计算机视觉 --> 图片识别[1.图片识别]
计算机视觉 --> 目标检测[2.目标检测]
计算机视觉 --> 语义分割[3.语义分割]
计算机视觉 --> 视频理解[4.视频理解]
计算机视觉 --> 图片生成[5.图片生成]
graph TD
1.图片识别-ImageClassification --> 图片识别网络模型[网络模型:VGG系列、Inception系列、ResNet系列]
2.目标检测-ObjectDetection --> 目标检测算法[算法:RCNN、Fast RCNN、Faster RCNN、Mask RCNN、SSD、YOLO系列]
graph TD
3.语义分割-SemanticSegmentation --> 语义分割模型[模型:FCN、U-net、SegNet、DeepLab系列]
4.视频理解-VideoUnderstanding --> 视频理解模型[模型:C3D、TSN、DOVF、TS_LSTM]
5.图片生成-ImageGeneration --> 图片生成模型[模型:VAE系列、GAN系列]
image.png
1.5深度学习框架
-
PyTorch
是Facebook
基于原Torch框架推出的采用Python作为主要开发语言的深度学习框架。PyTorch
借鉴了Chainer
的设计风格,采用命令式编程,使得搭建网络和调试网络非常方便。尽管PyTorch
再2017年才发布,但是由于精良紧凑的接口设计,PyTorch在学术界获得了广泛好评。在PyTorch
1.0版本后,原来的PyTorch
与Caff2
进行了合并,弥补了PyTorch
在工业部署方面的不足。总的来说,PyTorch
是一个非常优秀的深度学习框架。(Page 14) -
TensorFlow
是Google
于2015年发布的深度学习框架,最初版本只支持符号式编程。得益于发布时间较早,以及Google
在深度学习领域的影响力,TensorFlow
很快成为最流行的深度学习框架,以及Google
在深度学习领域的影响里,TensorFlow
很快成为最流行的深度学习框架。但是由于TensorFlow
接口设计频繁变动,功能设计重复冗余,符号式编程开发和调试非常困难等问题,TensorFlow 1.x
版本一度被业界诟病。2019年,Google
推出TensorFlow 2
正式版本,将以动态图优先模式运行,从而能够避免TensorFlow1.x
版本的诸多缺陷,已获得业界的广泛认可。(Page 15) -
目前来看,
TensorFlow
和PyTorch
框架是业界使用最为广泛的两个深度学习框架,TensorFlow
在工业界拥有完备的解决方案和用户基础,PyTorch
得益于其精简灵活的接口设计,可以快速搭建和调试网络模型,在学术界获得好评如潮。TensorFlow 2
发布后,弥补了TensorFlow
在上手难度方面的不足,使得用户既能轻松上手TensorFlow
框架,又能无缝部署网络模型至工业系统。本书以TensorFlow 2.0
版本作为主要框架,实现深度学习算法。(Page 15) -
深度学习的三大核心功能
(1)加速运算,利用
GPU
方便地实现并行计算加速功能。(2)自动梯度,
Tensorflow
提供的自动求导功能,可以不需要手动推导。(3)常用神经网络接口
TensorFlow
除了提供底层的矩阵相乘、相加等数学函数,还内建了常用神经网络运算函数、常用网络层、网络训练、模型保存与加载、网络部署等一系列深度学习系统的便捷功能。使用TensorFlow
开发,可以方便地利用这些功能完成常用业务流程,高效稳定。(Page 18)
网友评论