深度学习|深度学习(CNN和RNN学习笔记)

前言 本文主要记录关于深度学习相关需要的软硬件以及CNN和RNN中的基础知识点当然包括经典的框架结构的简述,若有错误之处还请谅解。
一、DL硬件方面

目前的深度学习方面应该也就NVIDIA英伟达一家独大,深度学习的发展很大程度上离不开显卡的飞速发展,没有显卡的超强计算能力,恐怕没法实现更强大的网络结构;再说说显卡即GPU事实上它的出色之处就是在于其优秀的矩阵计算能力,深度学习很大程度上是通过矩阵来进行计算(因此学好线性代数很重要),所以GPU也就成为深度学习的强有力的实现工具,关于CPU方面,CPU的性能固然强大,但是CPU更多做的是串行计算,它的计算能力远超GPU但在并行计算上没办法和GPU比,再通俗地讲可以将CPU理解成一个博学多识的教授而GPU可以理解为一群只会基本计算的小学生,在深度学习的矩阵运算方面不需要复杂的推理计算仅仅只需要繁琐的矩阵相乘或相加减等其他运算,所以GPU的效率就会比CPU高很多。目前还用来做深度学习的还有TPU,TPU是用来做DL的特殊硬件比如NVIDIA的Jetson系列,其板子上搭载Arm架构,并配有CPU和GPU但性能一定不比电脑强,TPU的目的主要是为了实现移动端的功能实现,由云服务器进行训练数据建好模型后再剪枝放入TPU进行硬件加速比如TensorRT,这也是目前很热门的边缘AI的主要思路。
二、DL软件方面
【深度学习|深度学习(CNN和RNN学习笔记)】深度学习软件方面主要指的是深度学习框架,这是实现深度神经网络架构的软件基础,目前的深度学习框架大多由大厂开发,如下图是多个深度学习框架及其相对应的公司,目前用的比较多的应该是Tensorflow和Pytorch,当然个人觉得Pytorch最好用
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

三、激活函数
激活函数在上一个blog中已详细介绍过,这里不再细述,这里仅强调目前用的最为广泛的就是ReLU函数以及ReLU的变种函数,当然ReLU的变种更多的是为了解决原始ReLu在负数域上神经死亡的问题。
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

四、归一化
对于归一化这个操作在深度学习中是十分常见的,归一化的最主要目的是为了加速网络让模型能更好的收敛 ,而归一化的范围基本也都是在[0,1]或者[-1,1]等区间,至于什么时候要归一化到(0,1)还是(-1,1),个人认为目前大多的网络更多的是偏好零对称
特征归一化可分为以下几类,但较为常用的应该就是BN批归一化,批归一化的主要作用是确保网络中各层,即使参数发生了变化其输入和输出数据的分布也不能产生较大变换从而避免内部协变量偏移现象。
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

权重初始化:Xavier initialization是 Glorot 等人为了解决随机初始化的问题提出来的另一种初始化方法,他们的思想倒也简单,就是尽可能的让输入和输出服从相同的分布,这样就能够避免后面层的激活函数的输出值趋向于0。
五、迁移学习
迁移学习 顾名思义就是就是把已学训练好的模型参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习。总的来说,迁移学习就是为了解决数据量大繁琐等问题,比如在CNN解决分类任务时,就可以使用预先在ImageNet上训练好的Inception-v3 网络作为网络中的一个特征分类器,这样就使得整体需要训练的效率大大提高,而不需要重新训练一个完整的网络。
六、优化器
SGD:随机梯度下降法是最基本的优化方法,所有的优化都是基于SGD改进实现,这里不再细说SGD原理,但SGD的缺点也很明显,优化速度缓慢,容易掉入局部最小值。
SGD + Momentum:基于SGD加入了速度并且当前权值会受到上一个权值的影响,就像小球下滑的时候受到惯性影响一样;
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

Nesterov momantum:包含了当前速度和先前速度的误差校正
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

AdaGrad:采用历史梯度平方和的方法来衡量不同参数的梯度的稀疏性,取值越小表明越稀疏
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

Adam:Adam本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

深度学习|深度学习(CNN和RNN学习笔记)
文章图片

深度学习|深度学习(CNN和RNN学习笔记)
文章图片

七、正则化
Dropout:dropout是在深层神经网络的学习过程中,通过随机丢弃一部分神经元(同时丢弃其对应的连接边)来避免过拟合的做法。dropout一般是在神经网络的隐含层中使用,实现dropout的方式可以是设置一个固定的概率p,对于每一个神经元都以一个概率p来判断要不要保留。同时,dropout在训练阶段和测试阶段的做法不一样。对于一个神经网络层y=f(Wx+b),引入一个丢弃函数d(?),使得y=f(Wd(x)+b)。丢弃函数定义为:
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

深度学习|深度学习(CNN和RNN学习笔记)
文章图片

八、经典CNN网络
AlexNet:2012年的AlexNet应该是深度学习的一次重要的节点,AlexNet网络大幅超过传统的分类方法,采用了ReLu,局部响应归一化,Dropout,分组卷积等
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

VGGNet:首次出现在2014年ILSVRC上,主要相对于AlexNet的改变在于卷积核的改变,改为3x3小卷积,并且采用2x2池化代替3x3池化,去掉了局部响应归一化,整体来说VGG的网络更加简洁,并不断堆叠最终的深度达到20层
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

GoogleLeNet:LeNet在基于VGG上,将网络中的大通道卷积层替换为多个小通道卷积层组成的分支结构,其内在的数学依据是:使用多个小的稠密矩阵来近似一个大型稀疏矩阵。
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

ResNet:ResNet最主要的贡献在于其跳层连接从而解决了梯度消失的问题,并且极大的加快了训练速度
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

九、循环神经网络
循环神经网络是一类用于处理序列数据结构的网络结构,输入通常是连续长度不固定的序列数据,循环神经网络主要处理序列信息,并且捕获样本之间的关联信息,循环神经网络往往在NLP自然语言处理领域有着较为大的发挥,当然还有语音识别,文字预测等,下图是普通的RNN的一个网络结构图
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

1、LSTM长短时记忆模型
LSTM最主要的是不仅能够记忆短时信息,而且还能对有用的信息进行长期记忆过滤无用信息,提升了网络的学习能力
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

2、GRU门控网络
GRU是对LSTM循环神经网络的一个变型,主要是解决了LSTM的梯度消失和爆炸问题
深度学习|深度学习(CNN和RNN学习笔记)
文章图片

    推荐阅读