第三章
卷积神经网络的核心思想包括两点:
局部连接:视觉具有很强的局部性,相邻的数个点很可能构成一个完整的物体,距离越远的两个点之间的联系可能越弱,所以用神经网络做图像处理时一般不需要做全连接应该充分考虑邻域信息。
权重共享:卷积神经网络使用卷积核做卷积处理时,一张图片中不同的位置可以用相同的卷积系数。
基于局部连接和权重共享两种技术,可以大幅度减少处理图像时所需要的权重的数量,从而避免过拟合。
卷积层:卷积层通过卷积可以抽取出图像中一些比较复杂的特征
边界扩充:做卷积运算时如果不做边界扩充卷积之后的输出尺寸会被动的略微变小;边界扩充的主要目的是保证神经网络层的输入特征图和输出特征图的尺寸相同,此外边界扩充可以强化图像的边缘信息
(采用大于1的卷积步长对特征图进行降采样可以利用局部特征获得平移不变性等)
池化层:可以主动减小图片的尺寸从而减少参数的数量和计算量,抑制过拟合
(最大池化,平均池化,l2池化法)
最大池化法:在池化窗口中找最大值作为输出
平均池化法:在池化窗口内对所有的数取平均值
l2池化法:在磁化窗口内对所有的数计算平方并累加后再开平方
卷积层和池化层构成特征提取器,全连接层是分类器
全连接层将特征提取得到的高维特征图映射成一维特征向量该特征向量该特征向量包含所有特征信息可以分类为各个类别的概率
softmax对输出进行归一化,计算可以凸显较大的值并抑制较小的值,从而显著的抑制次要特征,决定分类概率
卷积神经网络为何选择深而不扩的神经网络结构?
1 深度神经网络可以减少权重数量,进而降低过拟合的风险
2 采用深层的神经网络结构,可以很好地完成对图像从局部到整体的理解
基于卷积神经网络的图像分类算法
AlexNet:
主要有四个技术上的创新:
1 Dropout 在训练的过程中,随机舍弃部分隐藏节点,可以避免过拟合
2 LRN(局部响应归一化)可以提升较大响应,抑制较小响应
3 Max Pooling 最大池化可以避免特征被平均池化模糊,提高特征的鲁棒性
4 LelU激活函数 (在此之前常用的激活函数是sigmoid和tanh)该激活函数很简单,并且能有效提高训练时的收敛速度
Dropout过程:
1 以一定概率随机的舍弃部分隐层神经元,即将这些神经元的输出置为零
2 一小批量样本经过正向传播后,在反向传播更新权重时,不更新与被舍弃神经元相连的权重
3 恢复被删除神经元,输入另一小批量训练样本
4 重复步骤一到三,直到处理完所有训练样本
(在训练过程中并不是真正丢弃掉部分隐藏神经元,只是暂时不更新与其相连的权重)
(Dropout可以防止训练数据中复杂的共性适应,即一个特征检测器需要依赖其他几个特征检测器,从而避免过拟合)
AlexNet成功的原因:
1 使用多个卷积层。过去都是浅层的神经网络,通过使用多个卷积层有效地提取了图像的特征,显著的提升了图像识别的精度。
2 使用RelU,提高了训练速度。
3 使用Dropout和数据扩充,缓解过拟合
VGG成功的原因:
1 使用规则的多层小卷积代替大卷积,在相同视野下,有效减少了权重参数的数量,提高了训练速度
2 使用更深的卷积神经网络。在神经网络中使用更多的卷积层和非线性激活函数提高了图像分类的准确率
3 通过预训练,对部分网络层参数进行初始化,提高了训练收敛速度
Inception系列(包含GoogeLeNet神经网络)主要创新:
1 使用BN(批归一化),减少梯度消失或爆炸,加速深度神经网络训练
2 进一步减小卷积核的大小,减少卷积核的参数数量。从AlexNet的11*11到VGG的3*3,到Inception-v3的1*3和3*1
3 加入辅助分类网络,可以提前反向传播调整参数,减少梯度消失,解决了多层神经网络训练的问题
基于卷积神经网络的图像目标检测算法 主要分为两大类:
1 两阶段算法:首先产生边界框把所有物体框出来,然后用基于卷积神经网络的图像分类算法对每个候选区域进行分类。代表算法:R-CNN系列算法
2 一阶段算法:对输入图像直接处理,同时输出物体定位及其类别,即在筐出来物体的同时对物体进行分类,主要包括YOLO系列以及SSD算法
loU:交并比 用于评估目标检测任务中检测框与真实标注框之间的重叠程度
错误率:错误率是指在目标检测中被错误地预测为负样本(背景)的样本比例,错误率越低,说明目标检测算法的准确性越高。
简述错误率与IoU、mAP的关系:
1 2 错误率较低意味着通过匹配阈值和IoU计算,将更多的检测框和真实目标成功匹配
3 较低的错误率和较高的IoU有利于提高mAP值,同时mAP作为一个综合指标,提供了更全面的评估
错误率和IoU:错误率的降低,预测的边界框与真实边界框之间的IoU值通常会增加
IoU和mAP:mAP通过计算不同阈值下的精度-召回率曲线面积的平均值,综合考虑了不同IoU阈值下的性能
mAP和错误率:mAP是通过计算精度和召回率来综合评估模型性能的指标,其中精度可以减少错误率,召回率可以提高检测的完整性;相同的错误率下,不同算法或参数设置的 mAP 可能是不同的。
简述训练过程中收敛、训练精度和测试精度之间的关系:
收敛:在机器学习和深度学习中,收敛是指模型在训练过程中逐渐达到稳定状态的过程
训练精度:训练精度是指在训练集上评估模型的性能
测试精度:测试精度是指在独立于训练集的测试集上评估模型的性能
1 在训练开始时,由于模型参数的随机初始化,训练精度和测试精度通常都较低
2 随着训练的进行,如果模型只在训练集上表现良好而在测试集上表现糟糕,说明模型出现了过拟合现象
3 当训练过程达到一定的收敛状态时,训练精度和测试精度可能开始趋于平稳,两者之间的差距也可能保持相对稳定
mAP:平均精度均值
召回率/查全率(Recall) 精度/查准率(Precision)
为了能够用一个指标来衡量测试集中不同类别的分类误差,同时既体现召回率又体现精度就需要用到平均精度(AP)
精度-召回率曲线的面积作为平均精度AP
召回率/查全率(recall):选的N个样本里选对的k个正样本占总的M个正样本的比例 k/M;精度/查准率(precision):选的N个样本里选对的k个正样本比例k/N;
选择的样本数N越多,召回率越高,查准率越低;
R-CNN主要的四个步骤:
1 候选区域提取:通过选择性搜索从原始图片中提取2000个左右的候选区域
2 特征提取:首先对所有候选区域裁剪缩放为固定大小,在对每个候选区域使用神经网络提取出4096维的图像特征
3 线性分类:使用特定类别的svm支持向量机对每个候选区域做分类
4 边界框回归:用线性回归来修正边界框的位置和大小,其中每个分类单独训练一个边界框回归器
R-CNN的缺点:
1 重复计算:多个候选框中可能存在大量的重叠,使得有很多重复计算
2 svm分类:在标注数据足够多的时候卷积神经网络做图像分类要比svm准确
3 训练测试分为多个步骤,需要反复将数据写到内存中再读出来,效率非常低
4 检测速度慢:重复计算和分为多个步骤导致检测速度非常慢
Fast R-CNN主要改进:
1 直接对整张图像做卷积,不再对每个候选区域分别作卷积,减少了大量的重复计算
2 用ROL pooling对不同候选区域的特征图进行尺寸归一化
3 将边界框回归器和网络一起训练
4 用softmax层代替svm分类器
Fast R-CNN缺点:
(候选区域提取仍使用选择性搜索,目标检测时间大多消耗在这上面)
简述R-CNN、Fast R-CNN 和 Faster R-CNN的区别:
R-CNN是一种基于深度学习的目标检测算法,首次提出了使用候选区域提取和分类的流程。它的主要流程包括候选区域提取、特征提取、物体分类和边界框回归。R-CNN通过使用选择性搜索等方法生成候选区域,然后对每个候选区域提取特征并进行分类。缺点是计算量大、速度慢,并且生成候选区域和特征提取是独立的。
Fast R-CNN是对R-CNN的改进,主要解决了R-CNN中候选区域和特征提取两个步骤分离带来的问题。Fast R-CNN通过引入全卷积网络来共享特征提取的计算,从而避免对每个候选区域重复提取特征并用ROL pooling对不同候选区域的特征图进行尺寸归一化。
Faster R-CNN进一步改进了目标检测的效率,提出了一种端到端的网络架构,将区域提取和物体分类放在一个更大的网络中。Faster R-CNN引入了一个称为候选区域生成网络Region Proposal Network(RPN)的子网络,用于生成候选区域的边界框
YOLO系列优点:
1 检测速度非常快。将目标检测重建为单一回归问题,对输入图像直接处理,同时输出边界框位置和分类概率
2 背景误判少。YOLO在回归之前做了全连接,在训练和测试时每个格子都可以看到全局信息,因此不容易把图像背景预测为目标
3 泛化性好。YOLO能够学习到目标的泛化表示,能够迁移到其他领域
YOLO目标检测速度快,但精度不高主要有几下原因:
1 每个格子只能预测两个边界框和一种目标的分类
2 损失函数的设计过于简单
3 YOLO直接预测边界框的位置,模型不易训练
SSD(单次检测器)主要思想是在不同大小的特征图上都提取默认框做检测,以找到最适合的默认框的位置和尺寸
主要思想:基于YOLO直接回归bbox和分类概率的one-stage检测方法,结合Faster R-CNN中的anchor-box思想产生先验框,并且采用特征金字塔进行多尺度预测,在满足检测速度快的同时,大大提高了检测准确度。
RNN中显著的梯度消失和梯度爆炸现象主要是循环结构引起的
循环神经网络通过使用带自反馈的神经元能够处理任意长度的序列
为了缓解梯度爆炸提出了梯度截断的方法,未能解决梯度消失可以使用长短期记忆模型(LSTM)或门控循环单元(LRU)
LSTM:
遗忘门:控制保留多少对过去的记忆;
输入门:用于控制新的输入信息对记忆细胞状态的影响程度;
输出门:决定了记忆细胞状态的哪些部分需要传递给下一个时间步,并生成当前时间步的隐藏状态
LRU:
重置门:决定使用多少之前的隐藏状态计算当前时间步的输入信息;
更新门:用于决定当前时间步的输入信息对记忆细胞状态的更新程度
希望用少量样本就能训练出准确的神经网络,最重要的方法就是生成对抗网络GAN(无监督学习)
生成对抗网络由生成网络(生成器)和判别网络(判别器)组成
缺点:
1 梯度消失:当判别器以高置信度成功判断生成器生成的样本为假样本时,生成器的梯度会消失。
2 模式崩溃:生成器只生成几种模式的样本,生成样本缺乏多样性
GAN的训练过程可看作是生成器和判别器之间的一个博弈过程,通过不断迭代优化,生成器逐渐学习生成更加逼真的样本,判别器逐渐提高判别真实样本和生成样本的准确性。最理想的情况是,生成器能够生成与真实样本几乎无法区分的高质量样本。
对于指令集设计来说,两种常见的思路是数据级并行和指令级并行。
数据集并行是指一条指令中同时处理多个数据。
指令级并行是通用CPU设计中的常用技术,每条指令只输出一个数,但是CPU可以在运行时动态调度几十条指令在CPU中同时执行。
DLP深度学习处理器指令集P187
DLP的一条指令执行主要经历7个流水线阶段:取指、译码、发射、读寄存器、执行、写回、提交
一个深度学习任务的运行时间:P203
T=累加(该任务中第i类操作的数量*第i类操作所需要的时钟周期数)/ 处理器的主频f
减少深度学习任务的处理时间可以从以下几个方面入手:
1 减少经常出现的操作的执行周期数。
2 利用数据局部性。(数据的局部性包含时间局部性和空间局部性)
时间局部性表示访问过地址a的数据之后,过多久会再来访问该地址;
空间局部性表示访问过地址a之后,还会不会访问地址a+1或者a+2等相邻的地址
3 多级并行。针对深度学习,可以从运算部件级并行,数据级并行,任务级并行进行优化来提高性能
单核深度学习处理器DLP_S在深度学习处理器DLP的基础上具有以下几点优化:
1 在控制模块中设计了多发射队列,使没有依赖关系的指令可以并行发射,从而支持指令级并行
2 在向量运算单元中支持更丰富的运算操作组合,提高性能和灵活性
3 在矩阵运算单元中采用低位宽的运算器,并且支持稀疏数据,减少运算能耗
4 在存储模块中采用快速转换缓存(TLB)和最后一级缓存(LLC)减少缓存的延迟
多卡的DLP服务器可以抽象为五个层次:即服务器级别Server、板卡级Card、芯片级Chip、处理器簇级Cluster及处理器核级Core
DLP -S中的运算模块包括向量运算单元(VFU)和矩阵运算单元(MFU)
DLP-S包括三大模块,分别是控制模块、运算模块和存储模块
DLP -M多核深度学习处理器的主要特征:
1 在DLP -M中设计了多层片上存储结构,用以逐级缓存数据,降低数据访问延迟,提高多核深度学习处理芯片的访存性能(片上存储是离运算器最近的存储单元,也是读写效率最高的)
2 定义了一套完整的多核协同的通信机制和同步机制,使DLP -M能够匹配深度学习算法中的通信需求,同时减少传输数据的开销
一个DLP -M有多个DLP -C互联构成,一个DLP -C又有多个DLP -S构成
由DLP -S发往广播总线的读写请求大致可以分为三种:单播读,单播写和多播
DLP -C通过CDMA(Cluster直接内存读取模块)与其他DLP -C进行通信P220
广播总线用于完成DLP -C内的DLP -S之间的高速通信,广播总线支持的核间通信方式包括广播和多播。
GDMA(全局直接内存访问模块)负责DLP -C的片外访存,其特点:
1 每个DLP -C可能对应多个DRAM控制器,因此GDMA发出的请求地址需要进行路由
2 GDMA发出的请求地址是虚拟地址,需要使用MMU进行虚实地址转换
3 GDMA会利用TLB加速虚拟地址到物理地址的转换
4 GDMA会利用LLC缩短片外访存的平均延时
在层次化的抽象架构中,存储统一分为全局存储和本地存储(经典的全局存储是处理器片外存储 )
片外存储有两个重要发展趋势:
1 是在传统器件基础上向更低延迟、更高带宽方向发展
2 是通过新型存储器件来大幅度提升处理效率
通过对智能算法进行抽象可以得到四类经典操作:控制、数据传输、计算和逻辑操作
第八章 智能编程语言
为什么需要智能编程语言?P228
1 传统编程语言和智能计算系统间存在三方面的鸿沟:一是语义鸿沟,二是硬件鸿沟,三是平台鸿沟。
语义鸿沟:传统编程语言难以高效的描述高层智能计算语义,导致智能应用程序的开发效率较低
硬件鸿沟:传统编程语言难以高效的抽象智能计算硬件特性,导致最终生成的代码执行效率较低
平台鸿沟:智能计算硬件平台种类繁多且在不断增长,针对特定平台优化的程序难以实现跨平台可移植
2 传统编程语言难以同时满足高开发效率,高性能和高可移植性的需求
智能编程语言的标量计算语句有两种形式:运算符号(+、-、*、/)和内建函数(如abs,max)P252
智能编程语言的标量计算语句会由编译器映射到处理器上的标量计算单元
常用的张量计算语句P252 __conv 卷积运算 __mlp 全连接运算 __maxpool 最大池化运算
同步语句主要分为两种:Cluster内同步与全局同步
内存管理主要分为主机端内存管理,设备端内存管理和主机与设备端内存拷贝三种
调试器的使用流程:包括调试前准备,调试器托管,状态查看及错误分析等
张量计算:张量化的基本原理是将大量标量计算合并为张量计算,使用智能编程语言的张量计算语句改写代码,充分利用硬件的张量计算单元,提升程序运行速度。
性能调优的主要工作就是充分利用硬件资源,至少包括四个方面:P293
1 充分利用近端存储(片上缓存)
2 充分利用张量运算器(张量化)
3 充分削减计算量,节约存储空间
4 充分利用多核并行(计算任务拆分)
用户自定义算子主要分为两大类基础算子和融合算子 (基础算子指的是网络中单个层 如卷积、全连接和激活等;融合算子主要指的是基础算子的组合)
自定义算子如何加入tensor flow中?
1 为新的自定义算子进行注册
2 为新的自定义算子编写正向传播接口函数
3 根据新的自定义算子接口编写自定义算子底层实现
4 完善Bazel Build和头文件,并重新编译tensor flow源码
隐层的设计:
1 隐层节点的作用是提取输入特征中的隐藏规律,每个节点都赋予一定权重
2 隐层节点数太少,则网络从样本中获取信息的能力就越差,无法反映数据集的规律;隐层节点数太多,则网络的拟合能力过强,可能拟合数据集中的噪声部分,导致模型泛化能力变差。
1.智能计算是什么?
智能计算是模拟自然界生物行为模式以实现复杂问题求解的计算方法,是研究复杂的、不确定的变化的环境中智能行为的自适应机制。
⒉模式识别是什么?
目的:让机器自动识别事物
方法:让计算机分析结果与标准模板的相似度进行计算。结论:分类结果
3.人工智能的概念
人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学
现有常见的编程框架的执行模式分为静态图模式和动态图模式说明这两种执行模式各有什么优缺点:
1 静态图模式(Static Graph Mode):
优点:静态图模式将计算图的构建与执行分开,在构建阶段创建计算图,然后在执行阶段重复运行这个图。这样可以对图进行优化,包括降低内存占用和提高执行效率。
缺点:静态图模式需要先定义好计算图,然后才能运行。这导致在开发和调试阶段使用静态图模式相对繁琐,要编写更多的代码,并且不够交互式。
2 动态图模式(Eager Execution Mode):
优点:
动态图模式允许用户在编写代码时即时运行和调试,无需构建和运行计算图。这种即时性质使得动态图模式更加直观、易于调试和测试。
缺点:动态图模式在执行过程中不能进行图级别的优化,因为计算图是逐步构建和执行的。这可能导致一些性能上的损失,特别是对于大规模计算任务