深度学习简介
AI硬件技术栈
深度学习框架(库):
https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software#See_also
机器学习方法有四个要素:
- 数据
- 模型
- 学习目标
- 优化算法
数据集
https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning_research
- 帕尔默企鹅数据集
- 共享单车需求数据集
- 葡萄酒分类数据集
- 波士顿住房数据集
- 电离层数据集
- Fashion MNIST 数据集
- 猫与狗数据集
- 威斯康星州乳腺癌(诊断)数据集
- Twitter 情绪分析和 Sentiment140 数据集
- BBC 新闻数据集
- 垃圾短信分类器数据集
- CelebA 数据集
- YouTube-8M 数据集
- 亚马逊评论数据集
- 纸币验证数据集
- LabelMe 数据集
- 声纳数据集
- 皮马印第安人糖尿病数据集
- 小麦种子数据集
- Jeopardy!数据集
- 鲍鱼数据集
- 假新闻检测数据集
- ImageNet 数据集
神经网络分类
神经网络分类为以下两种:
1.依学习策略(Algorithm)分类主要有:
- 监督式学习网络(Supervised Learning Network)为主
- 无监督式学习网络(Unsupervised Learning Network)
- 混合式学习网络(Hybrid Learning Network)
- 联想式学习网络(Associate Learning Network)
- 最适化学习网络(Optimization Application Network)
2.依网络架构(Connectionism)分类主要有:
感知器
上个世纪六十年代,提出了最早的"人造神经元"模型,叫做"感知器"(perceptron),直到今天还在用。
上图的圆圈就代表一个感知器。它接受多个输入(x1,x2,x3...),产生一个输出(output),好比神经末梢感受各种外部环境的变化,最后产生电信号。
为了简化模型,我们约定每种输入只有两种可能:1 或 0。如果所有输入都是1,表示各种条件都成立,输出就是1;如果所有输入都是0,表示条件都不成立,输出就是0。
权重和阈值
现实中,各种因素很少具有同等重要性:某些因素是决定性因素,另一些因素是次要因素。因此,可以给这些因素指定权重(weight),代表它们不同的重要性。
天气:权重为8同伴:权重为4价格:权重为4
上面的权重表示,天气是决定性因素,同伴和价格都是次要因素。
如果三个因素都为1,它们乘以权重的总和就是 8 + 4 + 4 = 16。如果天气和价格因素为1,同伴因素为0,总和就变为 8 + 0 + 4 = 12。
这时,还需要指定一个阈值(threshold)。如果总和大于阈值,感知器输出1,否则输出0。
人工神经网络 (ANN)
人工神经网络(ANN,也简称为神经网络 (NN) 或神经网络)是机器学习模型的一个分支,它是使用构成动物大脑的生物神经网络中的联结主义发现的神经元组织原理构建的。
人工神经网络基于称为人工神经元的连接单元或节点的集合,这些单元或节点松散地模拟生物大脑中的神经元。每个连接,就像生物大脑中的突触一样,可以将信号传递给其他神经元。人工神经元接收信号,然后对其进行处理,并可以向与其相连的神经元发出信号。连接处的“信号”是一个实数,每个神经元的输出由其输入总和的某个非线性函数计算得出。这些连接称为边。神经元和边缘通常具有随着学习的进行而调整的权重。权重增加或减少连接处信号的强度。神经元可能有一个阈值,只有当聚合信号超过该阈值时才会发送信号。
通常,神经元被聚集成层。不同的层可以对其输入执行不同的转换。信号从第一层(输入层)传输到最后一层(输出层),可能是在多次遍历这些层之后。
人工神经网络历史
FNN
最简单的前馈神经网络(FNN)是线性网络,它由单层输出节点组成;输入通过一系列砝码直接馈送到输出。在每个节点中计算权重和输入的乘积之和。通过对权重进行调整,这些计算输出与给定目标值之间的均方误差最小化。两个多世纪以来,这种技术一直被称为最小二乘法或线性回归法。勒让德(1805)和高斯(1795)将其用作寻找一组点的良好粗略线性拟合的手段,用于预测行星运动。
RNN
Wilhelm Lenz 和 Ernst Ising 创建并分析了 Ising 模型(1925 年),该模型本质上是一个由类似神经元的阈值元素组成的非学习人工递归神经网络 (RNN)。1972 年,Shun'ichi Amari 使这种架构具有适应性。1982 年,约翰·霍普菲尔德 (John Hopfield) 推广了他的学习 RNN。
MLP
1965 年,Alexey Grigorevich Ivakhnenko 和 Valentin Lapa 发表了第一个深度学习 MLP,作为数据处理的组方法。1967 年,Shun'ichi Amari 发表了第一个通过随机梯度下降训练的深度学习 MLP。在 Amari 的学生 Saito 进行的计算机实验中,具有两个可修改层的五层 MLP 学习了有用的内部表示,以对非线性可分离模式类进行分类。
CNN
具有卷积层和下采样层的卷积神经网络 (CNN) 架构由 Kunihiko Fukushima 于 1980 年推出。他称之为neocognitron。1969年,他还引入了ReLU(整流线性单元)激活函数。整流器已成为CNN和深度神经网络最流行的激活函数。CNN已成为计算机视觉的重要工具。
反向传播
反向传播算法是莱布尼茨链规则(1673)在可微节点网络中的有效应用。由于Seppo Linnainmaa(1970),它也被称为自动分化或反向积累的反向模式。弗兰克·罗森布拉特(Frank Rosenblatt)于1962年引入了“反向传播误差”一词,但他没有实现此过程,尽管亨利·J·凯利(Henry J. Kelley)和布赖森(Bryson)在1960-61年已经在控制理论的背景下进行了基于动态规划的反向传播的连续前兆。1973年,德雷福斯使用反向传播来调整控制器的参数,使其与误差梯度成比例。1982 年,Paul Werbos 以已成为标准的方式将反向传播应用于 MLP。1986 年,Rumelhart、Hinton 和 Williams 表明,反向传播在训练预测序列中的下一个单词时,会学习到单词作为特征向量的有趣内部表示。
TDNN
Alex Waibel (1987) 的时延神经网络 (TDNN) 结合了卷积、权重共享和反向传播。1988 年,Wei Zhang 等人将反向传播应用于 CNN(一种简化的 Neocognitron,图像特征层和最后一个全连接层之间具有卷积互连)进行字母识别。1989 年,Yann LeCun 等人训练了 CNN 来识别邮件上的手写邮政编码。1992 年,Juan Weng 等人引入了 CNN 的最大池化,以帮助实现最小移位不变性和变形容差,以帮助识别 3D 对象。LeNet-5 (1998) 是 Yann LeCun 等人对数字进行分类的 7 级 CNN,被几家银行应用于识别以 32x32 像素图像数字化的支票上的手写数字。
反向传播+FNN、RNN
在 1980 年代,反向传播不适用于深度 FNN 和 RNN。为了克服这个问题,Juergen Schmidhuber(1992)提出了一个通过自我监督学习一次预训练一个级别的RNN层次结构。它使用预测编码来学习多个自组织时间尺度的内部表示。这可以极大地促进下游深度学习。通过将更高级别的分块器网络提炼到较低级别的自动化器网络中,可以将 RNN 层次结构折叠为单个 RNN。1993 年,一个分块器解决了一个深度超过 1000 的深度学习任务。
Transformer
1992 年,Juergen Schmidhuber 还发表了 RNN 的替代方案,现在称为线性 Transformer 或具有线性自注意力的 Transformer(除了归一化算子)。它学习注意力的内部聚光灯:一个缓慢的前馈神经网络通过梯度下降来学习,通过自我生成的激活模式FROM和TO(现在称为自我注意的键和值)的外部产物来控制另一个神经网络的快速权重。这种快速权重注意力映射应用于查询模式。
Ashish Vaswani 等人在 2017 年的论文“Attention Is All You Need”中介绍了现代变形金刚。它将其与 softmax 运算符和投影矩阵相结合。Transformer 已日益成为自然语言处理的首选模型。许多现代大型语言模型,如 ChatGPT、GPT-4 和 BERT,都使用它。变压器也越来越多地用于计算机视觉。
GAN
1991年,Juergen Schmidhuber还发表了对抗性神经网络,这些神经网络以零和博弈的形式相互竞争,其中一个网络的收益是另一个网络的损失。第一个网络是一个生成模型,用于对输出模式的概率分布进行建模。第二个网络通过梯度下降来学习,以预测环境对这些模式的反应。这被称为“人工好奇心”。
2014 年,Ian Goodfellow 等人将这一原理用于生成对抗网络 (GAN)。这里的环境反应是 1 还是 0,具体取决于第一个网络的输出是否在给定集合中。这可用于创建逼真的深度伪造。Nvidia 的 StyleGAN (2018) 基于 Tero Karras、Timo Aila、Samuli Laine 和 Jaakko Lehtinen 的渐进式 GAN 实现了出色的图像质量。在这里,GAN发生器以金字塔形的方式从小规模发展到大规模。
LSTM
Sepp Hochreiter的毕业论文(1991年)被他的导师Juergen Schmidhuber称为“机器学习史上最重要的文件之一”。Hochreiter识别并分析了梯度消失问题,并提出了循环残差连接来解决该问题。这导致了称为长短期记忆(LSTM)的深度学习方法,发表在Neural Computation(1997)上。LSTM递归神经网络可以学习“非常深度学习”的任务,这些任务具有很长的学分分配路径,需要对数千个离散时间步长之前发生的事件的记忆。1999 年,Felix Gers、Schmidhuber 和 Fred Cummins 推出了带有遗忘门的“vanilla LSTM”。LSTM 已成为 20 世纪被引用最多的神经网络。2015 年,Rupesh Kumar Srivastava、Klaus Greff 和 Schmidhuber 使用 LSTM 原理创建了 Highway 网络,这是一个具有数百层的前馈神经网络,比以前的网络更深入。7个月后,何开明,张翔宇;Shaoqing Ren 和 Jian Sun 凭借一种称为残差神经网络的开放式门控或无门高速公路网络变体赢得了 ImageNet 2015 竞赛。这已成为 21 世纪被引用最多的神经网络。
深度学习
Geoffrey Hinton等人(2006)提出使用连续的二元或实值潜在变量层来学习高级表示,并使用受限玻尔兹曼机对每一层进行建模。2012年,吴恩达和迪恩创建了一个网络,该网络仅通过观看未标记的图像来学习识别更高层次的概念,例如猫。无监督预训练以及 GPU 和分布式计算的计算能力增强允许使用更大的网络,特别是在图像和视觉识别问题中,这被称为“深度学习”。
神经元
神经元通常被组织成多个层,特别是在深度学习中。一层的神经元仅连接到紧接前一层和紧接一层的神经元。接收外部数据的层是输入层。产生最终结果的层是输出层。它们之间是零个或多个隐藏层。还使用单层和无层网络。在两层之间,可以有多种连接模式。
它们可以“完全连接”,一层中的每个神经元都连接到下一层的每个神经元。
它们可以是池化的,其中一层中的一组神经元连接到下一层中的单个神经元,从而减少该层中的神经元数量。
只有这种连接的神经元形成有向无环图,被称为前馈网络。或者,允许相同层或前一层的神经元之间连接的网络称为递归网络。
学习范式
机器学习通常分为三种主要的学习范式,监督学习、无监督学习和强化学习。每个都对应一个特定的学习任务
监督学习
监督学习使用一组配对的输入和所需的输出。学习任务是为每个输入生成所需的输出。在这种情况下,成本函数与消除不正确的扣除有关。常用的代价是均方误差,它试图最小化网络输出与所需输出之间的平均平方误差。适合监督学习的任务是模式识别(也称为分类)和回归(也称为函数逼近)。监督学习也适用于顺序数据(例如,用于手写、语音和手势识别)。这可以被认为是与“老师”一起学习,其形式是一种功能,可以对迄今为止获得的解决方案的质量提供持续的反馈。
无监督学习
在无监督学习中,输入数据与成本函数、数据的某些函数和网络的输出一起给出。成本函数取决于任务(模型域)和任何先验假设(模型的隐含属性、其参数和观察到的变量)。属于无监督学习范式的任务通常是估计问题;应用包括聚类、统计分布估计、压缩和过滤。
强化学习
在玩视频游戏等应用中,参与者会执行一系列操作,并在每个操作之后从环境中接收通常不可预测的响应。目标是赢得比赛,即产生最积极(最低成本)的响应。在强化学习中,目的是对网络进行加权(制定策略),以执行最小化长期(预期累积)成本的行动。在每个时间点,代理执行一个操作,环境根据一些(通常是未知的)规则生成一个观察结果和一个瞬时成本。规则和长期成本通常只能估计。在任何时候,代理都会决定是探索新的行动来发现他们的成本,还是利用先前的学习来更快地进行。
人工神经网络在此类应用程序中充当学习组件。动态规划与人工神经网络(提供神经动力学规划)相结合,已被应用于车辆路线规划、视频游戏、自然资源管理和医学等问题,因为人工神经网络能够减轻精度损失,即使在降低离散化网格密度时也能以数值近似控制问题的求解。属于强化学习范式的任务是控制问题、游戏和其他顺序决策任务。
递归神经网络 (RNN)
递归神经网络 (RNN) 是人工神经网络的两大类型之一,其特征在于其层之间的信息流方向。与单向前馈神经网络相比,它是一种双向人工神经网络,这意味着它允许某些节点的输出影响对相同节点的后续输入。它们能够使用内部状态(内存)来处理任意输入序列,因此适用于未分段、连接的手写识别或语音识别等任务。术语“循环神经网络”用于指具有无限脉冲响应的网络类别,而“卷积神经网络”是指有限脉冲响应的类别。两类网络都表现出时间动态行为。有限脉冲循环网络是可以展开并用严格的前馈神经网络代替的有向无环图,而无限脉冲循环网络是无法展开的有向循环图。
额外的存储状态和由网络直接控制的存储可以添加到无限脉冲和有限脉冲网络中。如果包含时间延迟或具有反馈循环,则存储也可以由另一个网络或图形替换。这种受控状态称为门控状态或门控记忆,是长短期记忆网络 (LSTM) 和门控循环单元的一部分。这也称为前馈神经网络 (FNN)。从理论上讲,循环神经网络是图灵完备的,可以运行任意程序来处理任意输入序列。
你应该用 RNN 做什么?
因为RNN有内部记忆,所以可以做出相对精确的预测。更重要的是,它对于解决基于顺序数据的问题很有用。
牢记这一点,RNN 应用程序包括:
循环神经网络的应用包括:
- Machine translation 机器翻译
- Robot control 机器人控制
- Time series prediction 时间序列预测
- Speech recognition 语音识别
- Speech synthesis 语音合成
- Brain–computer interfaces脑机接口
- Time series anomaly detection时序异常检测
- Text-to-Video model 文本转视频模型
- Rhythm learning韵律学习
- Music composition音乐创作
- Grammar learning语法学习
- Handwriting recognition 手写识别
- Human action recognition人体动作识别
- Protein homology detection蛋白质同源性检测
- Predicting subcellular localization of proteins预测蛋白质的亚细胞定位
- Several prediction tasks in the area of business process management业务流程管理领域的多项预测任务
- Prediction in medical care pathways医疗途径的预测
- Predictions of fusion plasma disruptions in reactors (Fusion Recurrent Neural Network (FRNN) code)反应堆中聚变等离子体破坏的预测(聚变循环神经网络 (FRNN) 代码)
RNN 的优势
与其他类型的神经网络相比,循环神经网络具有独特的能力,为用户带来了广泛的可能性——但也带来了一些挑战。以下是主要好处的简要说明:
- 它是唯一具有记忆和双重数据处理的神经网络。
- 它可以映射出几个输入和输出。与其他为一个输入提供一个输出的算法不同,RNN 的好处是它可以映射出多对多、一对多和多对一的输入和输出。
最重要的是,与其他神经网络相比,RNN 对序列及其上下文有深入的了解。
RNN 的挑战
伴随着巨大的好处,自然会带来一些挑战:
- 缓慢而复杂的训练。与其他网络相比,RNN 需要大量的训练时间。除此之外,培训非常复杂且难以实施。
- 探索或消失梯度问题。由于层在 RNN 模型中的排列方式,序列通常会变得相当长。这导致模型训练使用爆炸或空权重,从而导致梯度问题。
- RNN 不能叠加。要使 RNN 模型工作,每个节点都需要前一个节点的输出。这意味着您不能叠加训练或将此模型与另一个模型配对。反过来,这会导致高额的计算开销。
卷积神经网络 (CNN)
卷积神经网络 (CNN) 是一种正则化类型的前馈神经网络,它通过滤波器(或内核)优化自行学习特征工程。在早期神经网络的反向传播过程中看到的梯度消失和梯度爆炸,可以通过在较少的连接上使用正则化权重来防止。例如,对于全连接层中的每个神经元,处理大小为 100 × 100 像素的图像需要 10,000 个权重。然而,应用级联卷积(或互相关)核,只需要 25 个神经元来处理 5x5 大小的图块。与较低层的特征相比,较高层的特征是从更宽的上下文窗口中提取的。
它们在以下方面有应用:
- image and video recognition,图像和视频识别,
- recommender systems,推荐系统,
- image classification,图像分类,
- image segmentation,图像分割,
- medical image analysis,医学影像分析,
- natural language processing,自然语言处理,
- brain–computer interfaces, and脑机接口,以及
- financial time series.金融时间序列。
CNN 也称为移位不变或空间不变人工神经网络 (SIANN),基于卷积核或滤波器的共享权重架构,这些卷积核或滤波器沿输入特征滑动并提供称为特征图的平移等变响应。与直觉相反,大多数卷积神经网络对平移并不是不变的,因为它们对输入应用了下采样操作
前馈神经网络通常是全连接网络,即一层中的每个神经元都连接到下一层的所有神经元。这些网络的“完全连接”使它们容易出现过拟合数据。正则化或防止过度拟合的典型方法包括:在训练期间惩罚参数(例如权重衰减)或修剪连接(跳过连接、丢失等)健壮的数据集还增加了 CNN 学习表征给定数据集的广义原则的可能性,而不是填充不良的数据集的偏差。
卷积网络的灵感来自生物过程,因为神经元之间的连接模式类似于动物视觉皮层的组织。单个皮层神经元仅在视野的有限区域(称为感受野)内对刺激做出反应。不同神经元的感受野部分重叠,因此它们覆盖了整个视野。
与其他图像分类算法相比,CNN 使用的预处理相对较少。这意味着网络通过自动学习来学习优化过滤器(或内核),而在传统算法中,这些过滤器是手工设计的。在特征提取中,这种独立于先验知识和人为干预的独立性是一个主要优势
架构
卷积神经网络由输入层、隐藏层和输出层组成。在卷积神经网络中,隐藏层包括一个或多个执行卷积的层。通常,这包括一个层,该层使用该层的输入矩阵执行卷积核的点积。本品通常为Frobenius内积,其活化功能通常为ReLU。当卷积核沿着该层的输入矩阵滑动时,卷积操作会生成一个特征图,这反过来又有助于下一层的输入。紧随其后的是其他层,例如池化层、全连接层和归一化层。
CNN 基于三个主要层。这些是:
- 卷积层
- 池化层
- 全连接层
每一层,CNN 理解图像的复杂性都会增加。这意味着第一层专注于解释图像中的简单特征,例如边缘和颜色。当图像通过层处理时,网络能够识别复杂的特征,例如物体形状。最后,最深层能够识别目标对象。
Convolutional layers 卷积层
在 CNN 中,输入是一个张量,其形状为:(输入数)×(输入高度)×(输入宽度)×(输入通道)。通过卷积层后,图像被抽象为特征图,也称为激活图,其形状为:(输入数)×(特征图高度)×(特征图宽度)×(特征图通道)。
卷积层对输入进行卷积,并将其结果传递到下一层。这类似于视觉皮层中神经元对特定刺激的反应。每个卷积神经元仅处理其感受野的数据。尽管全连接的前馈神经网络可用于学习特征和对数据进行分类,但这种架构对于较大的输入(例如高分辨率图像)通常是不切实际的,因为每个像素都是一个相关的输入特征,因此需要大量的神经元。大小为 100 × 100 的图像的全连接层对于第二层中的每个神经元具有 10,000 个权重。卷积减少了自由参数的数量,使网络更深入。例如,使用 5 × 5 的平铺区域,每个区域都具有相同的共享权重,只需要 25 个神经元。在较少的参数上使用正则化权重可以避免早期神经网络中反向传播过程中出现的梯度消失和梯度爆炸问题。
为了加快处理速度,标准卷积层可以替换为深度可分离卷积层,这些卷积层基于深度卷积,然后是逐点卷积。深度卷积是独立应用于输入张量的每个通道的空间卷积,而逐点卷积是仅限于使用1×1核的标准卷积。
Pooling layers 池化层
卷积网络可以包括局部和/或全局池化层以及传统的卷积层。池化层通过将一层神经元簇的输出合并到下一层的单个神经元中来减少数据的维度。本地池化结合了小集群,通常使用 2 × 2 等平铺大小。全局池化作用于特征图的所有神经元。在常用的池化中有两种常见类型:最大池化和平均值。最大池化使用特征图中每个局部神经元簇的最大值,而平均池化则采用平均值。
Fully connected layers 全连接层
全连接层将一层中的每个神经元连接到另一层中的每个神经元。它与传统的多层感知器神经网络(MLP)相同。扁平化的矩阵通过一个全连接层来对图像进行分类。
Receptive field 感受野
在神经网络中,每个神经元都接收来自前一层中一定数量位置的输入。在卷积层中,每个神经元仅接收来自前一层的受限区域(称为神经元感受野)的输入。通常,该区域是一个正方形(例如,5 x 5 个神经元)。然而,在全连接层中,感受野是整个前一层。因此,在每个卷积层中,每个神经元从输入中比前几层更大的区域获取输入。这是由于一遍又一遍地应用卷积,其中考虑了像素的值及其周围的像素。当使用扩张层时,感受野中的像素数保持不变,但当组合多个层的效果时,随着其尺寸的增加,感受野的填充更加稀疏。
为了根据需要操纵感受野大小,有一些替代标准卷积层的方法。例如,无穷或扩张卷积通过交错可见光和盲区来扩大感受野大小,而不会增加参数数量。此外,单个膨胀卷积层可以包含具有多个膨胀比的滤波器,因此具有可变的感受野大小。
Weights 权重
神经网络中的每个神经元通过对从上一层感受野接收的输入值应用特定函数来计算输出值。应用于输入值的函数由权重向量和偏差(通常为实数)确定。学习包括迭代调整这些偏差和权重。
权重和偏差的向量称为滤波器,表示输入的特定特征(例如,特定形状)。CNN的一个显着特征是许多神经元可以共享相同的过滤器。这减少了内存占用,因为共享该滤波器的所有感受野都使用单个偏置和单个权重向量,而不是每个感受野都有自己的偏置和向量加权。
Max pooling 最大池化
1990 年,Yamaguchi 等人引入了最大池化的概念,这是一种固定的过滤操作,用于计算和传播给定区域的最大值。他们通过将 TDNN 与最大池化相结合来实现独立于说话人的孤立单词识别系统。在他们的系统中,他们每个单词使用多个TDNN,每个音节一个。使用最大池化将输入信号上每个TDNN的结果组合在一起,然后将池化层的输出传递到执行实际单词分类的网络。
在深度学习中,网络层数增多一般会伴着下面几个问题
- 计算资源的消耗(用GPU集群去怼)
- 模型容易过拟合(扩大数据集、Droupout、批量归一化、正则化、初始化参数调整等等方法)
- 梯度消失/梯度爆炸问题的产生(批量归一化)
参差块
随着网络层数的增多,训练集loss逐渐下降,然后趋于饱和,当你再增加网络深度的话,训练集loss反而会增大。注意这并不是过拟合,因为在过拟合中训练loss是一直减小的。
当网络退化时,浅层网络能够达到比深层网络更好的训练效果,这时如果我们把低层的特征传到高层,那么效果应该至少不比浅层的网络效果差,或者说如果一个VGG-100网络在第98层使用的是和VGG-16第14层一模一样的特征,那么VGG-100的效果应该会和VGG-16的效果相同。所以,我们可以在VGG-100的98层和14层之间添加一条直接映射(Identity Mapping)来达到此效果。
从信息论的角度讲,由于DPI(数据处理不等式)的存在,在前向传输的过程中,随着层数的加深,Feature Map包含的图像信息会逐层减少,而ResNet的直接映射的加入,保证了l + 1 l+1l+1层的网络一定比l ll层包含更多的图像信息。
基于这种使用直接映射来连接网络不同层直接的思想,残差网络应运而生。
你应该使用 CNN 做什么?
从广义上讲,这种类型的神经网络用于计算机视觉。
从本质上讲,计算机视觉是一个人工智能领域,负责从视觉输入、图像和视频中识别有意义的信息。例如,从一堆图像中识别狗。
这种由 CNN 驱动的计算机视觉具有多种应用,包括:
- 推荐可能补充现有产品或衣橱的产品。
- 像社交媒体平台一样,为在照片中标记人物提供建议。
- 识别计算机视觉目前帮助医生更好地识别癌性肿瘤的项目。
- 影像辨识,卷积神经网络通常在影像辨识系统中使用。
- 视讯分析,相比影像辨识问题,视讯分析要难许多。CNN也常被用于这类问题。
- 自然语言处理,卷积神经网络也常被用于自然语言处理。 CNN的模型被证明可以有效的处理各种自然语言处理的问题,如语义分析[8]、搜索结果提取[9]、句子建模[10] 、分类[11]、预测[12]、和其他传统的NLP任务[13] 等。
- 药物发现,卷积神经网路已在药物发现中使用。卷积神经网络被用来预测的分子与蛋白质之间的相互作用,以此来寻找靶向位点,寻找出更可能安全和有效的潜在治疗方法。
- 围棋,卷积神经网络在计算机围棋领域也被使用。2016年3月,AlphaGo对战李世乭的比赛,展示了深度学习在围棋领域的重大突破。
使用 CNN 的优势
CNN 显示出一个主要优势:
- 它会自动检测功能而无需人工监督。这使它比其前辈更具优势。
使用 CNN 的挑战
至于它的缺点,主要有两个:
- 难以处理所呈现数据的差异。CNN 很难处理在一定程度上隐藏的图像中的对象。对于图像分类,网络也很难对有标题或旋转的图像进行分类。简而言之,CNN 不能编码对象的方向和位置,也不能处理空间不变的数据。
- 计算要求高。训练 CNN 需要大量图形处理单元 (GPU)。除此之外,如果你缺乏好的 GPU,训练会变得很慢。
经典模型
值得庆幸的是,像长短期记忆(LSTM)这样的突破没有这个问题! LSTM 是一种特殊的 RNN,能够学习长期依赖关系,这使得 RNN 能够智能地记住过去发生的事情,并随着时间的推移发现模式以使其下一次猜测有意义。 LSTM 打破了改进机器翻译、语言建模和多语言处理的记录
Building blocks
CNN 架构由一堆不同的层组成,这些层通过可微函数将输入量转换为输出量(例如,保存班级分数)。通常使用几种不同类型的图层。下文将进一步讨论这些内容。
Convolutional layer 卷积层
卷积层是 CNN 的核心构建块。该层的参数由一组可学习的滤波器(或内核)组成,这些滤波器具有较小的感受野,但延伸到输入体积的整个深度。在正向传递期间,每个滤波器在输入体积的宽度和高度上进行卷积,计算滤波器条目和输入之间的点积,从而生成该滤波器的二维激活图。因此,网络学习滤波器,当它在输入中的某个空间位置检测到某种特定类型的要素时,这些滤波器就会激活。
沿深度维度堆叠所有滤波器的激活图可形成卷积层的完整输出体积。因此,输出体积中的每个条目也可以解释为神经元的输出,该神经元查看输入中的一个小区域。激活映射中的每个条目都使用定义筛选器的同一组参数。
自监督学习通过使用具有高掩码比和全局响应归一化层的稀疏补丁,适用于卷积层。
Local connectivity 本地连接
在处理图像等高维输入时,将神经元连接到上一卷中的所有神经元是不切实际的,因为这种网络架构没有考虑数据的空间结构。卷积网络通过在相邻层的神经元之间强制执行稀疏的局部连接模式来利用空间局部相关性:每个神经元仅连接到输入体积的一小部分区域。
这种连接的程度是一个称为神经元感受野的超参数。连接在空间上是局部的(沿宽度和高度),但始终沿输入体积的整个深度延伸。这种架构可确保学习(英式英语:learnt)滤波器对空间局部输入模式产生最强的响应。
Spatial arrangement 空间安排
三个超参数控制卷积层输出体积的大小:深度、步幅和填充大小(the depth, stride, and padding size)
输出体积的深度控制层中连接到输入体积相同区域的神经元数量。这些神经元学习激活输入中的不同特征。例如,如果第一个卷积层将原始图像作为输入,那么在存在各种定向边缘或颜色斑点的情况下,沿深度维度的不同神经元可能会被激活。
步幅控制如何分配宽度和高度周围的深度列。如果步幅为 1,则我们一次移动一个像素的过滤器。这导致色谱柱之间的感受野严重重叠,并导致输出量大。对于任何整数>0,步幅 S 表示滤波器每次输出转换 S 个单位。在实践中,≥3是罕见的。步幅越大,感受野重叠越小,输出体积的空间维度越小。
有时,在输入音量的边界上用零(或其他值,例如区域的平均值)填充输入很方便。此填充的大小是第三个超参数。填充提供对输出体积空间大小的控制。特别是,有时希望精确地保留输入体积的空间大小,这通常称为“相同”填充。
输出体积的空间大小是输入体积大小、卷积层神经元的核场大小、步幅和边界上零填充量的函数。那么,在给定体积中“适合”的神经元数量为:
如果这个数字不是整数,则步幅不正确,并且神经元不能以对称的方式平铺以适应输入体积。通常,将零填充设置为步幅
时可确保输入音量和输出音量在空间上具有相同的大小。然而,并不总是完全需要使用前一层的所有神经元。例如,神经网络设计人员可能决定只使用一部分填充。
Parameter sharing 参数共享
在卷积层中使用参数共享方案来控制自由参数的数量。它所依赖的假设是,如果面片要素在某个空间位置进行计算很有用,那么在其他位置进行计算也应该有用。将单个 2 维深度切片表示为深度切片,每个深度切片中的神经元被约束为使用相同的权重和偏差。
由于单个深度切片中的所有神经元共享相同的参数,因此卷积层每个深度切片中的前向传递可以计算为神经元权重与输入体积的卷积。因此,通常将权重集称为过滤器(或内核),它与输入进行卷积。这种卷积的结果是一个激活图,每个不同滤波器的激活图集沿着深度维度堆叠在一起,以产生输出体积。参数共享有助于 CNN 架构的平移不变性。
有时,参数共享假设可能没有意义。当 CNN 的输入图像具有某种特定的居中结构时,情况尤其如此;为此,我们期望在不同的空间位置上学习完全不同的特征。一个实际的例子是,当输入是图像中居中的人脸时:我们可能期望在图像的不同部分学习不同的眼睛特定或头发特定特征。在这种情况下,通常会放宽参数共享方案,而是简单地将该层称为“本地连接层”。
Pooling layer 池化层
CNN的另一个重要概念是池化,这是一种非线性下采样形式。有几个非线性函数可以实现池化,其中最大池化是最常见的。它将输入图像划分为一组矩形,并为每个这样的子区域输出最大值。
直观地说,一个要素的确切位置不如它相对于其他要素的粗略位置重要。这就是在卷积神经网络中使用池化背后的想法。池化层的作用是逐步减小表示的空间大小,减少网络中的参数数量、内存占用和计算量,从而控制过拟合。这称为下采样。在 CNN 架构中,通常会在连续的卷积层(每个卷积层通常后跟一个激活函数,例如 ReLU 层)之间定期插入池化层。 : 460–461 虽然池化层有助于局部翻译不变性,但它们不会在 CNN 中提供全局平移不变性,除非使用某种形式的全局池化。池化层通常对输入的每个深度或切片独立运行,并在空间上调整其大小。一种非常常见的最大池化形式是具有大小为 2×2 的过滤器的层,以 2 的步幅应用,它将输入中的每个深度切片沿宽度和高度按 2 进行子采样,从而丢弃 75% 的激活:
在这种情况下,每个最大操作都超过 4 个数字。深度维度保持不变(对于其他形式的池化也是如此)
除了最大池化之外,池化单元还可以使用其他函数,例如平均池化或 l 2 -norm 池化。平均池化在历史上经常使用,但与最大池化相比,最近已经失宠,后者在实践中通常表现更好。
由于制图表达大小在空间上的快速减小的影响, [which?] 最近出现了使用更小的过滤器或完全放弃池化图层的趋势。
“感兴趣区域”池化(也称为 RoI 池化)是最大池化的一种变体,其中输出大小是固定的,输入矩形是一个参数。
池化是一种下采样方法,是卷积神经网络的重要组成部分,用于基于Fast R-CNN架构的目标检测
Channel Max Pooling 通道最大池化
CMP操作层在连续特征图的相应位置之间沿通道侧进行MP操作,以消除冗余信息。CMP 使重要特征聚集在更少的通道内,这对于需要更多区分特征的细粒度图像分类非常重要。同时,CMP 操作的另一个优点是在特征图连接到第一个全连接 (FC) 层之前,使特征图的通道数更小。与 MP 操作类似,我们将 CMP 层的输入特征图和输出特征图分别表示为 F ∈ R(C×M×N) 和 C ∈ R(c×M×N),其中 C 和 c 是输入和输出特征图的通道号,M 和 N 是特征图的宽度和高度, 分别。请注意,CMP 操作仅更改特征图的通道号。特征图的宽度和高度不会改变,这与 MP 操作不同。
ReLU layer ReLU 层
ReLU是福岛邦彦于1969年推出的整流直线单元的缩写。ReLU 应用非饱和激活函数
。它通过将负值设置为零来有效地从激活映射中删除负值。它为决策函数和整个网络引入了非线性,而不会影响卷积层的感受野。2011 年,Xavier Glorot、Antoine Bordes 和 Yoshua Bengio 发现,与 2011 年之前广泛使用的激活函数相比,ReLU 能够更好地训练更深层次的网络。
ReLU 通常比其他函数更受欢迎,因为它训练神经网络的速度要快几倍,而不会对泛化准确性造成重大影响
Fully connected layer 全连接层
经过几个卷积层和最大池化层之后,最终的分类是通过全连接层完成的。完全连接层中的神经元与前一层中的所有激活都有连接,如常规(非卷积)人工神经网络所示。因此,它们的激活可以计算为仿射变换,矩阵乘法后跟偏置偏移(学习或固定偏置项的向量加法)。
Loss layer 损失层
“损失层”或“损失函数”指定了训练如何惩罚网络预测输出与真实数据标签之间的偏差(在监督学习期间)。根据具体任务,可以使用各种损失函数。
Softmax 损失函数用于预测 K 个互斥类的单个类。Sigmoid 交叉熵损失用于预测 中 K 个独立概率值[0,1]。欧几里得损失用于回归到实值标签(−∞,∞)。
Hyperparameters 超参数
超参数是用于控制学习过程的各种设置。CNN 使用比标准多层感知器 (MLP) 更多的超参数。
Kernel size 内核大小
内核是一起处理的像素数。它通常表示为内核的尺寸,例如 2x2 或 3x3。
Padding 填充
填充是在图像边框上添加(通常)0 值像素。这样做是为了使边界像素不会从输出中被低估(丢失),因为它们通常只参与单个感受野实例。应用的填充通常比相应的内核维度少 1。例如,使用 3x3 内核的卷积层将接收一个 2 像素的填充器,即图像每侧 1 个像素。
Stride 跨
步幅是分析窗口在每次迭代中移动的像素数。步幅为 2 表示每个内核与其前一个内核偏移 2 个像素
Number of filters 过滤器数量
由于特征图大小随深度的增加而减小,因此输入图层附近的图层往往具有较少的过滤器,而较高的图层可能具有更多过滤器。为了均衡每层的计算,特征值 v a 与像素位置的乘积在各层之间保持大致恒定。要保留有关输入的更多信息,需要保持激活总数(特征图数乘以像素位置数)从一个层到下一层不递减。
特征图的数量直接控制容量,并取决于可用示例的数量和任务的复杂性。
Filter size 过滤器尺寸
文献中常见的滤波器大小差异很大,通常根据数据集进行选择。
挑战在于找到正确的粒度级别,以便在给定特定数据集的情况下以适当的规模创建抽象,并且不会过度拟合。
Pooling type and size 池类型和大小
通常使用最大池化,通常具有 2x2 的维度。这意味着输入被大幅下采样,从而降低了处理成本。
较大的输入量可能需要在较低层中进行 4×4 的池化。更大的池化会降低信号的维度,并可能导致不可接受的信息丢失。通常,非重叠池化窗口的性能最佳。
Dilation 扩张
扩展涉及忽略内核中的像素。这样可以减少处理/内存,而不会造成明显的信号损失。在 3x3 内核上扩展 2 会将内核扩展到 5x5,同时仍处理 9(均匀间隔)像素。因此,扩张 4 会将内核扩展到 9x9。
CNN,RNN的区别
CNN是一种前馈神经网络,通常用于图像识别和对象分类。而 RNN 的工作原理是保存层的输出并将其反馈给输入,以预测层的输出。
CNN 只考虑当前输入,而 RNN 考虑当前输入以及之前接收的输入。由于其内部存储器,它可以记住以前的输入。
CNN 有 4 层,即:卷积层、ReLU 层、池化层和全连接层。每一层都有自己的功能,并执行特征提取并找出隐藏的模式。
RNN 有 4 种类型,即:一对一、一对多、多对一和多对多。
RNN 可以处理顺序数据,而 CNN 则不能。
以下是 CNN 的示例:
递归神经网络如下所示:
在 RNN 中,先前的状态作为网络当前状态的输入。RNN 可用于 NLP、时间序列预测、机器翻译等。
其他类型的神经网络以及何时应该考虑使用它们
深度神经网络
深度神经网络(Deep Neural Networks, DNN)是一种判别模型,可以使用反向传播算法进行训练。
深度置信网络
一个包含完全连接可见层和隐层的受限玻尔兹曼机(RBM)。注意到可见层单元和隐层单元内部彼此不相连。
深度置信网络(deep belief networks,DBN)是一种包含多层隐单元的概率生成模型,可被视为多层简单学习模型组合而成的复合模型[50]。
深度置信网络可以作为深度神经网络的预训练部分,并为网络提供初始权重,再使用反向传播或者其它判定算法作为调优的手段。这在训练数据较为缺乏时很有价值,因为不恰当的初始化权重会显著影响最终模型的性能,而预训练获得的权重在权值空间中比随机权重更接近最优的权重。这不仅提升了模型的性能,也加快了调优阶段的收敛速度[51]。
卷积深度置信网络
卷积深度置信网络(convolutional deep belief networks,CDBN)是深度学习领域较新的分支。在结构上,卷积深度置信网络与卷积神经网络在结构上相似。因此,与卷积神经网络类似,卷积深度置信网络也具备利用图像二维结构的能力,与此同时,卷积深度信念网络也拥有深度置信网络的预训练优势。卷积深度置信网络提供了一种能被用于信号和图像处理任务的通用结构,也能够使用类似深度置信网络的训练方法进行训练[53]。
在我们总结之前,这里是其他类型的神经网络的快速概述:
- 感知器。该算法使用数字输入、权重和偏差来进行分类预测。将其用于将数据分类为两组。
- 多层感知器。这是一种具有多层感知器的神经网络。它用于解决随机问题,为您提供复杂问题的近似解决方案,例如编码数据库或定期检查数据库安全一致性。
- 前馈神经网络。任何信息在一个方向上流动的神经网络都是FF神经网络。将其用于天气预报和其他涉及学习自变量之间关系的目的。
- 径向基函数 (RBF) 神经网络。RBF 是一种常见的基于三层的前馈神经网络。然而,由于其更快的学习速度,它与其他模型不同。用途包括分类、时间序列预测、系统控制和函数逼近。
- 模块化神经网络。这是一种以解决复杂的人工智能问题而闻名的人工神经网络。它的结构基于一组神经网络——所有神经网络都是独立的(处理单独的输入并执行子任务)并使用中介进行调节。
- 长短期记忆(LSTM)。这是一种 RNN,之所以这样命名,是因为它使用短期记忆过程来创建长期记忆。它主要用于深度学习,例如在语音识别中进行预测。
- 序列到序列模型(seq2seq)。这是另一种类型的 RNN,其中输入和输出中的一个或一个都是序列。它涉及解决复杂的语言问题。因此,它的用途包括创建聊天机器人、机器翻译和文本摘要。
简而言之,您需要不同的工具来解决不同的问题。如果您刚刚开始机器学习之旅,了解并定义您要解决的问题非常重要。要变得足够精通以自己构建一些东西需要付出很大的努力——并且在这个主题中建立素养将有助于实施过程。
记住:
- ANN(人工神经网络)有助于解决复杂问题
- CNN(卷积神经网络)最适合解决与计算机视觉相关的问题
- RNN(循环神经网络)精通自然语言处理
深度学习库
- Torch(英语:Torch (machine learning))
- TensorFlow
- Theano
- PaddlePaddle[68]
- Deeplearning4j
- Caffe[69]
- roNNie[70]
- Keras
- MXNet[71]
计算机文字识别,俗称光学字符识别,英文全称是Optical Character Recognition(简称OCR),它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。OCR技术是实现文字高速录入的一项关键技术。
预训练的深度神经网络
您可以采用预训练的图像分类网络,它已学会从自然图像中提取功能强大且包含丰富信息的特征,并以此作为学习新任务的起点。大多数预训练网络是基于 ImageNet 数据库 [1] 的子集进行训练的,该数据库用于 ImageNet Large-Scale Visual Recognition Challenge (ILSVRC) [2] 中。这些网络已经对超过一百万个图像进行了训练,可以将图像分为 1000 个对象类别,例如键盘、咖啡杯、铅笔和多种动物。通常来说,使用预训练网络进行迁移学习比从头开始训练网络更快更容易。
您可以将之前训练过的网络用于以下任务:
比较预训练网络
当选择适用于您的问题的网络时,预训练网络具有不同的重要特征。最重要的特征是网络的准确度、速度和规模。选择网络时通常需要在这些特征之间进行权衡。使用下图比较 ImageNet 验证准确度和使用网络进行预测所需的时间。
提示
要开始迁移学习,请尝试选择一个更快的网络,例如 SqueezeNet 或 GoogLeNet。然后,您可以快速迭代并尝试不同设置,如数据预处理步骤和训练选项。一旦您感觉到哪些设置运行良好,请尝试更准确的网络,例如 Inception-v3 或 ResNet,看看这是否能改进您的结果。
注意
上图仅显示不同网络的相对速度。准确的预测和训练迭代时间取决于您使用的硬件和小批量大小。
加载预训练网络
要加载 SqueezeNet 网络,请在命令行中键入 squeezenet。
net = squeezenet;
对于其他网络,请使用 googlenet 等函数来获取链接,以便从附加功能资源管理器下载预训练网络。
基于 ImageNet 训练的可用预训练网络以及这些网络的一些属性。网络深度定义为从输入层到输出层的路径中顺序卷积层或全连接层的最大数量。所有网络的输入均为 RGB 图像。
音频应用的预训练网络
Audio Toolbox™ 提供经过预训练的 VGGish、YAMNet、OpenL3 和 CREPE 网络。使用 MATLAB 中的 vggish (Audio Toolbox)、yamnet (Audio Toolbox)、openl3 (Audio Toolbox) 和 crepe (Audio Toolbox) 函数或使用 Simulink® 中的 VGGish (Audio Toolbox) 和 YAMNet (Audio Toolbox) 模块,直接与预训练网络交互。您还可以使用深度网络设计器导入和可视化音频预训练网络。
下表列出了可用的预训练音频网络及其部分属性。
使用 VGGish 和 YAMNet 执行迁移学习和特征提取。提取 VGGish 或 OpenL3 特征嵌入,以输入到机器学习和深度学习系统。classifySound (Audio Toolbox) 函数和 Sound Classifier (Audio Toolbox) 模块使用 YAMNet 定位声音并将其划分到 521 个类别中的一个。pitchnn (Audio Toolbox) 函数使用 CREPE 执行深度学习音调估计。
学习目标
学习到“好”的模型,“好”即是模型的学习目标。“好”对于模型也就是预测值与实际值之间的误差尽可能的低。具体衡量这种误差的函数称为代价函数 (Cost Function)或者损失函数(Loss Function),我们即通过以极大化降低损失函数为目标去学习模型
优化算法
有了极大化降低损失函数为目标去学习“好”模型,而如何达到这目标?我们第一反应可能是直接求解损失函数最小值的解析解,获得最优的模型参数。遗憾的是,机器学习模型的损失函数通常较复杂,很难直接求最优解。幸运的是,我们可以通过优化算法(如梯度下降算法、牛顿法等)有限次迭代优化模型参数,以尽可能降低损失函数的值,得到较优的参数值(数值解)。