关于深度学习的个人见解

前言

在了解深度学习之前,需要先认识一些前置词语:

CONV:卷积、卷积层

ReLU激活函数:称为线性修正单元,通常紧跟在一次卷积之后,使得整体呈现非线性性质

Pool:池化层,通常选取MaxPool(最大池化,即选取区域内的最大值作为池化后的新值),用于减少特征图空间维度、提取关键特征的操作或Global Max Pool(全局平均池化,选取区域内的平均值进行计算),可用于降低模型对特定位置的敏感性

FC:全连接层,通过一组权重参数把输出层与隐藏层连接在一起,表示向量通常为[所有向量数目,C]

Batch:批次、批处理大小

Channel:通常简写为C,表示通道数量,也可以理解为输入图像的层数(比如RGB三层)

Hight:通常简写为H,表示图像垂直维度的像素数

Weight:通常简写为W,表示图像水平维度的像素数

Depth:通常简写为D,表示图像垂直于H&W平面的像素数

Bias:偏置参数,通常简写为B,Bias的数目与特征数数目相同

Filter:卷积核或权重参数矩阵w,filter维数的前两个数(H、W)代表要在原始数据中按照多大的区域进行特征提取。特别注意,filter的维数的第三个数必须等于输入的通道数Channel。需要注意,不同Channel对应的filter不相同,对应区域与filter做内积即可。注:有几个filter决定一次卷积后的图像有几个Channel,卷积核的个数决定卷积后得到特征图的个数。卷积核越小,得到的特征值越细腻,一般选取3*3。

Pad:边缘填充(通常填充为0),主要考虑到在卷积的过程中边缘位置与中心位置参与的次数不同,进行边缘填充后可以适当地小该部分的影响

Stride:滑动窗口步长,即选定区域的单次移动像素数,一般来说,步长越小得到的特征值越丰富细腻,对于图像任务通常选取为1,文本任务视情况而定。

感受野:该数据能够与最初图像的多大区域进行相关,一般来说,感受也越大越好

传统的神经网络

传统的神经网络(NN),其主要构成可以如下表示:

输入层(Input L)+隐藏层(Hidden L)+输出层(Output L)

其对输入的要求是一个列向量,最终输出也是一个列向量

我们对此时的隐藏层进一步展开来说,除去在第一次输入之后与隐藏层是全连接(FC)的、最后一个隐藏层同时加权进行输出的,其余的每一个隐藏层都可以看成是一个感知机(P),即对前一层的所有数据按照一定的权重参数w进行相乘求和,再通过一个非线性函数进行输出(通常选取ReLU),此时的输出作为下一层的输入,如此反复构成了隐藏层(除去首尾两个),此时也称作多层感知机(MLP)。

NN的流程图如果在纸上画出的话,可以看作是一个平面。

对于卷积神经网络(CNN),其主要构成与NN有所不同,我们以输入图像为例可以简单的进行区分:

NN中对于输入要求为像素点,但是在CNN中要求直接输入一张三维(H*W*C)的原始图像

卷积神经网络

CNN简单来说可以由以下几个部分构成:

Input+CONV+Pool+FC+Output

我们首先来介绍一下CONV

对于一个图像来说,各个部分必然是不相同的,卷积要做的就是将一张图像进行分割提取得到特征值,简单来说就是将一个区域内的像素数据与一个权重参数矩阵(卷积核)相乘(此步骤可以类似在NN中一组数据的特征提取是通过权重参数w,但是由于输入变为了矩阵,于是权重参数也就变为了权重矩阵),得到一个新的矩阵,一般来说此时新的矩阵的H、W会小于原矩阵。

由于上述计算中是在一层中进行计算的,我们在最后处理结果时只需要将所有Channel的结果线性相加即可得到卷积过的图像

注:在实际应用中我们需要调节的就是上述权重参数矩阵

在每一次与filter相乘之后,需要加上对应层的偏置参数bias即可以得到该区域的特征值。

在了解了特征值的计算方式后我们可以看出,如果选用不同的、多尺度的filter对同一张图像进行提取,显然可以得到更多的特征值从而让提取更加的丰富完善(Channel数增加)。

为了想让得到的结果更加的精确,此时我们需要在原有图像上进一步进行卷积,即得到更加细致的特征,类似于在NN中不断的加入隐藏层。

在CONV层中,通常涉及到以下参数:Stride、Pad、H、W、C4filter,请查阅前言部分。

卷积结果计算公式:

H_2 = \frac{^{\frac{}{}}H_1 - F_H+2P}{S}+1; W_2 = \frac{^{\frac{}{}}W_1 - F_W+2P}{S}+1

其中,H_1、W_1表示输入的宽度、长度,H_2、W_2表示输出的宽度、长度;F表示filter的长和宽的大小;S表示滑动窗口的步长,P表示边缘填充(加几圈0)。

注:卷积参数在具体计算中时是共享的,即在同一Channel中选取计算的filter是不变的。

紧接着我们来看一下Pool

在对于一个输入来说,可能会出现输入过大的情况,需要对输入进行下采样(downsample),此时距需要进行池化,在具体池化过程中,通常选取最大池化MaxPool,即对选定区域按照与filter类似的参数形式,选取该区域的最大值代替原有区域。(选取最大的值是考虑到数值越大对整体的影响越大)。

注:Pool中没有涉及到任何计算,没有任何参数

整体来看,CNN的搭配可以大致由以下表示:
[CONV+ReLU+CONV+ReLU+Pool]^n+FC,ReLU层与卷积层紧密结合,同时每两次卷积进行一次池化操作。CNN的层数只计算含有参数的层,即CONV和FC。

观察以上搭配结构可以发现,在最后需要借助FC完成输出,考虑到在前面几次卷积之后得到的依然是一个立体的图像(同时含有H、W、C),因此需要先将最后一次卷积后的结果拉成向量,即可以得到FC层(二维)第一数应当为H*W*C,第二个数为所需分类数,进而得到预测的概率值。

经典网络分析

AlexNet(2012):filter尺寸太大,同时不加Pad,一共8层

VGG(2014):filter都是3*3,一共16层,VGG在每一次MaxPool后使得特征图翻倍从而弥补了由于MaxPool所带来的损失。

ResNet(2015):观察到error在最后会趋于稳定甚至提高增多,考虑到可能是由于学习中存在比较差的部分,该网络将比较差的部分权重参数设置为0,同时保存原有数据。层数通常为50多或100多。

注:深度学习的层数并不是越多越好,这是由于每一次学习是在前一次结果的基础上进行学习的,在学习过程中无法保证前一次学习一定是正确的,深度过高可能会导致预测失败。

环境配置

考虑到以上机器学习环境大都是基于python而实现,因此我们需要配置一个完善的python环境。同时,由于需要考虑不同编程语言在软件实现过程中的版本不同,需要对这些不同的版本进行封闭分装,需要使用Anaconda对环境进行配置分类(对于Anaconda的具体配置请自行查阅)。对于IDE建议使用专用于python的pycharm。同时请安装对应版本的pytorch库(具体安装过程请自行搜索)。

前置词语

在使用pytorch库之前,我们仍然需要像之前一样介绍一些前置词语:

ToTensor:考虑到在pytorch中,我们主要处理的是张量形式的数据,因此我们需要将原有数据转化为张量(H*W*C)形式,即主要步骤的主要前置步骤

Normalize:与ToTensor相似,但是在获取张量后使用平均值和标准差进行归一化

CenterCrop:对给定张量图像从中心进行裁切(如果给定尺寸比原图大,那么会在边缘填充0)

RandomHorizontalFlip:对给定图像进行水平旋转,通常用于数据预处理,其参数为旋转概率(默认0.5)

RandomRotation:对给定图像进行指定角度的旋转,参数为degree

Resize:对数据进行缩放,主要缩放为224*224

Compose:主要讲几个操作组合在一个以实现同时进行

Batch Normalize:标准化,简写为BN。伴随着神经网络深度的增加,每层的特征值会逐渐向ReLu两端饱和部分转移,容易导致梯度消失,从而需要使用BN将特征值拉回正态分布,避免梯度消失并加快收敛

epoch:表示模型完整遍历数据集一次的过程,通常为样本总数/batchsize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值