系列文章目录
第一章 人工智能发展大事件第二章 PyTorch基础第三章 深度学习基础
文章目录
- 系列文章目录
- 一、人工神经网络(ANN)
- 二、深度学习基础
- 三、计算机视觉
- 四、卷积神经网络
- 五、循环神经网络(ing)
一、人工神经网络(ANN)
人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界也常直接简称为神经网络或类神经网络。
神经网络是一种运算模型,由大量的节点(或称神经元neuron)之间相互联接构成。
每个节点代表一种特定的输出函数,称为激励函数(activation function)。
每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重(weight),这相当于人工神经网络的记 忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
如图所示
- 单层感知器(人工神经网络)
- 输入层
- 隐藏层
- 输出层
- 多隐藏层的多层感知器(深度学习)
二、深度学习基础
- 基础概念:
- 前向传播
- 反向传播
- 梯度问题
- 损失函数
- 设置一个损失函数用来比较模型的输出与目标值,通过最小化损失来驱动网络结构的训练
- 网络损失通过前向传播计算,网络结构的参数相对于损失函数的梯度通过反向传播计算
- 分类问题损失函数
- nn.BCEloss;nn.CrossEntropyLoss
- 回归问题损失
- nn.L1Loss;nn.MSELoss等等
- 激活函数:增加网络的非线性,提高网络的表达能力
- ReLU
- Leakly ReLU
- ELU
# inplace : inplace操作,见第二章
torch.nn.ReLU(inplace = True)
- 模型拟合
- 正则化
- 学习率
- 监督学习及深度学习中重要的超参,决定目标函数能否收敛到局部最小值及何时收敛到最小值
- 合适的学习率能够使目标函数在合适的时间内收敛到局部最小值
torch.optim.lr_scheduler.ExponentialLR
torch.optim.lr_scheduler.LambdaLR()
torch.optim.lr_scheduler.MultiStepLR()
torch.optim.lr_scheduler.StepLR()
...
- 优化器
- GD、 BGD、SGD、MBGD
- 引入随机性和噪声
- Momentum、NAG
- 加入动量原则,具有加速梯度下降的作用
- AdaGrad、RMSProp、Adam、AdaDelta
- 自适应学习率
#params: 用于优化或定义参数组的参数表
torch.optim.Adam(params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,
weight_decay=0, amsgrad=False)
- 经典模型
- 波士顿放假预测
- 手写字识别
三、计算机视觉
- 颜色空间(色彩模型)
- RGB色彩模式
- HSV色彩模式
- 灰度图
- 图像处理
- 亮度/对比度/饱和度
- 直方图均衡化
- 图像滤波
> 滤波是一个邻域操作算子,利用给定像素周围的像素的值决定此像素的最终的输出值
- 平滑降噪
- 归一化块滤波器
- 高斯滤波器
- 中值滤波器
- 双边滤波
- 锐化增强
- 微分法
- 高通滤波法
- 边缘检测
- 检测角点
- 模版匹配
- 图像边缘提取 (抓取图像纹理信息 高频or 低频)
- 形态学运算
- Opencv 库
- 计算机视觉的特征工程
- 分类
- 检测
- 分割
- 匹配
- 跟踪
四、卷积神经网络
- 卷积层
- 卷积层(Convolutional layer),卷积神经网络中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法最佳化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网路能从低级特征中迭代提取更复杂的特征。
- 对图像和滤波矩阵做内积(逐个元素相乘,再求和)的操作
# Conv2d参数详解
# in_channels:输入维度
# out_channels:输出维度
# kernel_size:卷积内核的大小(如(3,2),3与(3,3)等同)
# stride:卷积步长,就是卷积操作时每次移动的格子数
# padding:卷积方式 只有两个取值,'SAME'和'VALID',第一个是填充边界,第二个是当不足以移动时直接舍弃(目标检测)
# dilation:空洞卷积的空洞指数,一般默认为1即可(填充卷积核)(分割网络)
# groups:分组卷积的组数,一般默认设置为1(分组卷积,降低模型计算量 深度可分离卷积)
# bias:卷积偏置,默认为True,增加模型的泛化能力
# padding_mode: 设置边缘填充值为0,或别的数,一般都默认设置为0
# 下采样的过程
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1,
padding=0, dilation=1, groups=1,
bias=True, padding_mode='zeros'))
# 反卷积(转置卷积)
# 上采样的过程
torch.nn.ConvTranspose2d()
- 感受野
- 感受野(Receptive Field),神经网络中的神经元“看到的”输入区域,在卷积神经网络中,feature map上某个元素的计算受输入图像上的某个区域的影响,这个区域即感受野。
- 卷积神经网络中,越深层的神经元看到的输入区域越大,如下图所示,kernel size 均为3×3,stride均为1,绿色标记的是Layer2 每个神经元看到的区域,黄色标记的是Layer3 看到的区域,具体地,Layer2每个神经元可看到Layer1 上 3×3 大小的区域,Layer3 每个神经元看到Layer2 上 3×3 大小的区域,该区域可以又看到Layer1 上 5×5 大小的区域。
- 感受野的存在,设计卷积神经网络使用小卷积核,加深网络,能够通过relu层激活函数增加网络的非线性表达能力,同时降低参数量和计算量
- 卷积层的参数量 (参与计算的参数的个数,占用内存空间)
Cin *((K * K)+1)*Cout
输入维度 * (卷积核 +偏置) * 输出维度 - FLOPS: 每秒浮点运算次数(计算速度,衡量硬件性能的指标)
- FLOPs:浮点运算数(计算量,衡量算法的复杂度)
(Cin * 2 * K * K )* Wout * Hout * Cout
Cin * 2 * K * K :一个卷积运算的计算量
Wout * Hout :输出特征图大小
Cout:特征图channel的大小 - MAC:乘加次数,衡量计算量
Cin * K * K * Wout * Hout * Cout - 压缩卷积层
- 多个 3 * 3 的卷积核替代大卷积核
- 采用深度可分离卷积
- 通道Shuffle
- Pooling层
- Stride = 2
- 常见的卷积层组合结构
- 堆叠 eg. VGG
- 跳连 eg. resNet
- 并连 eg. inception
- 池化层
- 对输入的特征图进行压缩
- 特征值变小,简化网络计算复杂度
- 特征压缩,提取主要特征
- 最大池化(Max Pooling)、平均池化(Average Pooling)等
# return_indices:默认False 如果为True,将返回最大索引以及输出 (上采样使用)
# ceil_mode:计算输出特征图大小 False:向下取整 True:向上取整
torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1,
ceil_mode=False, return_indices=False)
- 上采样层
- Resize ,如双线性差值直接缩放,类似于图像缩放
- Deconvolution (Transposed Convolution)
- 实现函数
# Resize
# scale_factor:空间大小的乘数。如果是元组,则必须匹配输入大小。与size只存在一个
nn.functional.interpolate(input, size, scale_factor, mode, align_corners)
# Deconvolution
nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1,
padding=0, output_padding=0, groups=1, bias=True,
dilation=1, padding_mode='zeros')
- 激活层
- BatchNorm层
- 通过规范化手段,把每层神经网络任意神经元的输入值的分布强行拉回到均值为0方差为1的标准正态分布
- 归一化方法的一种 ,减小图像之间的绝对差异,突出相对差异,加快训练速度
- 不适用问题:image-to-image 以及 噪声敏感的任务
nn.BatchNorm2d(num_features, eps=1e-5, momentum=0.1, affine=True,
track_running_stats=True)
- 全连接层
- 连接所有的特征,将输出送给分类器(eg.softmax分类器)
- 对前层的特征进行一个加权和 ,(卷积层是将数据输入映射到隐藏特征空间)将特征空间通过线性变换映射到样本标记空间(输出层 lable)
- 可以通过1 * 1 卷积 + global average pooling代替
- 可以通过全连接层参数冗余
- 全连接层参数与尺寸相关
nn.Linear(in_features,out_features,bias)
- Dropout层
- 在不同的训练过程中随机扔掉一部分神经元
- 测试过程中不适用
- 为了防止或减轻过拟合而使用的函数,一般用在全连接层
nn.dropout
- 经典卷积神经网络结构
- 简单神经网络
- LeNet
- AlexNet
- VGGNet (网络最大深度19层):
为了研究网络深度对模型准确性的影响,采用小卷积堆叠的方式,搭建网络结构
- 复杂神经网络
- ResNet(深度50-101):
通过引入跳连的结构防止梯度消失的问题,从而进一步增强了网络深度 - InceptionNet V1-V4(并行结构)(主要思想:用密集成分来近似最优的局部稀疏结)
设计网络结构的时候,不仅强调网络的深度,同时也考虑网络的宽度,并将这种结构定义为Inception结构(一中网中网(Network In Network)的结构),即原来的节点也是一个网络 - DenseNet
- 轻量型神经网络
- MobileNet v1-v3
- ShuffleNet
- squeezeNet
- 多分支网络结构
- SiameseNet
- TripletNet
- QuadripletNet
- 多任务网络
- Attention机制
- 对于全局信息,注意力机制会重点关注一些特殊的目标区域,即注意力聚焦,进而利用有限的主义理论资源对信息进行筛选,提高信息处理的准确性和效率
- one-hot分布或者soft的软分布
- Soft-Attention或者 Hard-Attention
- 作用范围
- 特征图上
- 尺度空间上
- channel尺度
- 不同时刻历史特征
- 网络模型
- ResNet + Attention
- SENet/Channel + Attention
五、循环神经网络(ing)