【视频课件资料见置顶评论】深度学习入门必学丨神经网络基础丨卷积神经网络丨循环神经

深度学习入门
学习推荐

吴恩达深度学习课程
https://www.deeplearning.ai/
李宏毅深度学习课程2021
https://www.bilibili.com/video/BV1Wv411h7kN?from=search&seid=1027746521760509878&spm_id_from=333.337.0.0
《deep learning》(花书)
《机器学习》(西瓜书)
目录
第一章 神经网络与多层感知机
1、人工神经元
2、多层感知机
3、激活函数
4、反向传播
5、损失函数
6、权值初始化
7、正则化
8、小结
第二章 卷积神经网络
0、第一章回顾
1、卷积神经网络发展史
2、卷积操作
3、池化操作
4、Lenet-5及CNN结构进化史
卷积网络进化史
5、小结
第三章 循环神经网络
0、第二章回顾
1、序列数据
2、语言模型
3、RNN-循环神经网络
4、GRU-门控循环单元
5、LSTM-长短期记忆网络
6、小结
第四章 总结
第一章 神经网络与多层感知机
1、人工神经元
人类神经元中抽象出来的数学模型

人类神经元的结构:
树突(输入):接受别的神经元传递的信息
细胞核(处理):处理所接收的信息
轴突、轴突末梢(输出):将细胞核处理好的信息传递给别的神经元
M-P模型的结构:
input:接受输入数据
weights:权重,与所接收的数据相乘(对应人工神经元中的连接强度)
sigma:求和操作
threadhold:激活函数(阈值函数,当大于一定的阈值时,该函数会被激活,对应人工神经元中激活和抑制的两种状态)
output:输出

人工神经元与M-P模型的对应关系

人工神经网络
大量神经元以某种连接方式构成的机器学习模型

感知机(perceptron)

<w,x>表示向量乘法
b表示偏置项(bias)
感知机的缺点:

0(O):假
1(▲):真
上图中图“或”画错了:左下角应该为O,右上角为▲
对perceptron不能解决异或问题的理解
perceptron在二维平面上就是一条直线,而在二维平面中异或得出的相同结果处于对角线的位置,因此无法将两种结果分隔开
通过化简(忽略掉激活函数)得出一条直线的表达式(O不是0,是一个变量,表示输出)

最终化简为:y = kx + b ,结果是一条直线
一条直线无法解决异或问题:无法保证直线的两侧分别是同一类,说明perceptron无法解决异或问题,导致了人工神经网络的第一次衰落
2、多层感知机
单层神经网络的基础上引入一个或多个隐藏层,使神经元有多个网络层

输入层
隐藏层
输出层
简单的多层感知机(上图左)中:
- 也称为两层神经网络,因为只有两层(隐藏层和输出层)具有权重参数,神经网络中只会计算有权重参数的层
- 隐藏层权重参数通常写成W(4*5):输入(输入层)有四个神经元(对应每一个神经元所连接的输入层神经元的个数),输出(隐藏层)有五个神经元

三个隐藏层的多层感知机(上图右):
- 权重表示与上类似

多层感知机的前向传播

上述表达式中:
- X、W、H都是向量
- 忽略掉了偏置
- 不能省略激活函数,如果省略掉激活函数,多层感知机就会退化为单层网络
多层感知机的激活函数

当没有激活函数时,两层的多层感知机的输出表达式最终可以化简为O = XW + b,即退化成了单层感知机了
因此,在隐藏层中加入激活函数,可以避免网络退化
3、激活函数
激活函数的作用:
- 让多层感知机成为真正的多层,避免网络退化等价于一层
- 引入非线性,使网络可以逼近任意非线性函数(万能逼近定理,universal approximator:只需要一层感知机加上激活函数,就能逼近任意的非线性函数)
激活函数需要具备的性质:

第三点影响反向传播中权重的更新
常见的激活函数:

sigmoid(S型):
- 早期的神经网络中使用较多,现在主要在RNN神经网络中使用较多
- 函数值处于0 - 1之间,符合概率值的区间,因此经常用于二分类问题中输出的激活函数,将实数变换到0到1之间符合概率分布的形式
- 在RNN中也作为各种门控单元的激活函数,用来控制信息的流动(保留 or 遗忘)
- 饱和区域(左一黄色曲线(导函数)的两个矩形框)

- 弊端:如果神经元大量落入饱和区,其梯度几乎是0,因此无法继续向前传播梯度,更新权重,使网络模型的训练变得相对困难
- 导函数计算比较方便
- 线性区

Tanh(双曲正切):
- 值域在 -1 到 1 之间,对称(0均值)
- 饱和区

- 弊端:如果神经元大量落入饱和区,其梯度几乎是0,因此无法继续向前传播梯度,更新权重,使网络模型的训练变得相对困难
- 线性区

ReLU(修正线性单元):
- 不存在饱和区,因此现在广泛应用于神经网络中,特别是在CNN中,隐藏层几乎不使用sigmoid和tanh作为激活函数
- 运算简单

- 导函数:在 x = 0 处没有定义(激活函数连续并可到,但允许在少数点上不可导),可以认为 x = 0 处的导数是0或者1

- ReLU函数的一系列改进函数主要是在负半轴上进行改进
激活函数的两个大类:
- 饱和激活函数:sigmoid、tanh
- 非饱和激活函数:ReLU
4、反向传播

前向传播传播的是数据,而反向传播传播的是梯度信息
y^表示模型的输出,y表示样本的标签
网络计算图

图例:
- 矩形框:节点,数据
- 圆圈:操作
- z 和 l 在神经网络中没有,但是因为需要将神经网络的操作进行进一步细分,因此引入了这两个中间变量
- l 表示的是损失函数
- 前向传播

反向传播
计算符定义:prod(x,y),表示 x 与 y 根据形状做必要的变换,然后相乘(简化了矩阵运算的难度,规避了左乘与右乘的差异)

在反向传播的推导中,排在下面的式子的因子中都包含了该式之前的偏导式,因此可以根据链式法则先进行化简,然后再计算未知的偏导数

在计算图中如何求变量的梯度?
从Loss出发,找连接到该变量的通路,有多少条通路,就等于多少项进行相加,
梯度下降法

梯度在二维空间中很好理解,就是导数,但在三维空间中,函数在一个点上面的导数往往有很多个,但是根据定义,只选择导数最大的作为梯度
同时还应该注意,由于是梯度下降法,因此权值是沿着梯度的负方向更新的,使函数值减小

学习率
控制更新的步长

上述例子中学习率太大导致最终结果飙升
加上不同学习率之后:

- 学习率通常是小于1的,通常是0.1、0.01、0.001
5、损失函数

- 整个训练的目标就是让输出更接近真实的标签
- 损失函数起到了一个桥梁的作用,连接了模型输出与标签
- y^表示模型输出,y表示标签
损失函数、代价函数、目标函数三者的关系
- 损失函数描述的是单个样本的模型输出与标签之间的差异值
- 损失函数描述的是总体样本(数据集)的模型输出与标签之间的差异值的平均值,用于观察总体的差异值,强调总体
- 目标函数由两项构成:Cost(损失函数:模型输出与标签之间的差异)、Regularization Term(正则项:模型的复杂度)
- 目标函数强调整个训练过程的整体目标,既要让模型的输出与标签更接近,同时不要让模型太过于复杂,太复杂容易产生过拟合现象
常见的损失函数:

MSE(Mean Squared Error,均方误差):
- label:标签
- pred:predict,预测,表示输出值
- 在回归任务中广泛使用
CE(Cross Entropy,交叉熵)
- p:样本的真实分布
- q:模型输出的概率分布
- 使用模型分布去逼近真实的分布,没有对称关系(p、q的位置不能交换)

- 信息量:某一可能取值的自信息
- pi:可能取值
- 信息熵用于描述信息的不确定度,信息熵越大,信息越不确定,信息熵越小,信息越确定

相对熵、交叉熵、信息熵之间的关系
- 相对熵:衡量两个分布之间的差异(P、Q同交叉熵)
- 交叉熵:
- 信息熵:描述信息的不确定度
- 交叉熵 = 相对熵 + 信息熵
- 结论:优化交叉熵等价于优化相对熵,因为信息熵是一个常数
- 举例:predict是一个概率分布的形式,但是模型输出没办法保证是一个概率分布的形式,矩阵的乘法有可能得到一个负数,也可能大于1

- 概率的性质:概率值是非负的;概率之和等于一
- 交叉熵的好伙伴: Softmax 函数(将数据变换到符合概率分布的形式)

- Softmax 函数举例:

总结:

6、权值初始化

所有权值全初始化为0可能会导致的问题:
- 会导致模型的退化,让每个网络层等价于一个神经元(不管怎么训练,所有的权重的值永远都是一样的,即等价于一个神经元)
随机初始化法

- 高斯分布:N ~ (均值,标准差)
- 高斯分布的均值通常取0,以保证权重的对称性,正负值各一半
- 高斯分布的标准差用来控制权重的大小,不能太大(如果太大会导致值落入饱和区,即梯度接近于0,梯度消失不利于模型的训练),也不能太小(如果太小会使得所有的权重都为0),大小适中
- 3σ原则:99.73%数据的数据都落在(μ-3σ,μ+3σ)中间,其中μ为均值,σ为标准差

自适应标准差
Xavier初始化

- mean:均值
- std:标准差
- 此时标准差会根据网络层结构的不同而改变
Kaiming初始化

- 也能根据输入神经元和输出神经元的个数来控制标准差
- 代码实现上也将其称为MSRA初始化方法
7、正则化
减小方差的策略,通俗理解为减轻过拟合的策略


- 蓝色曲线:训练集准确率曲线
- 橙色曲线:验证集准确率曲线
- 噪声:期望泛化误差下界(任何算法所能达到的最大精度)
- 偏差:刻画的是学习算法本身的拟合能力(训练集与期望泛化误差下界之间的差距)
- 方差:刻画的是数据扰动带来的影响(验证集与训练集之间精度的差异)
- 过拟合现象:方差过大(在训练集上表现良好,在测试集上表现糟糕),正则化就是为了解决训练集与测试集之间的精度差距

回顾目标函数的构成:

常见的正则项

- L1:对所有权重的绝对值进行求和,然后作为目标函数的一项
- L2:对所有权重的平方进行求和,然后作为目标函数的一项
- 理论证明:详细证明见《深度学习》(花书)第七章
- 图中彩色圆圈是Loss值的等高线:在同一等高线上,不管权重的值是多少,最终的Loss始终相等

- 上图中,左边的黑色菱形框是L1正则项的等高线,右图中的黑色圆圈是L2正则项的等高线
权重的最优解就是正则项的等高线与Loss值的等高线相切的地方:
- 对于L1正则项来说,通常来讲L1正则项的等高线与Loss值的等高线相切的地方是在坐标轴上,也就是说必定有一个权重为0(对于本例中的二维平面坐标系来说W1等于0,W1就消失了),即保证了权重的稀疏性

- 对于L2正则项来说,L2的最大作用是权值衰减(weight decay),即会收缩权重,不会让权值过大
- 对于权值衰减的推导

- λ 是一个系数,用来权衡Loss值与正则项的比例关系(更关注Loss值,还是更关注正则项),通常λ是一个大于0小于1的数。λ / 2中的分母2是为了抵消Wi^2求导后2*Wi的系数2
- 有正则项与无正则项的比较:第二项Loss值的偏导项是相等的,不一样的是第一项,当无正则项时Wi的系数是1,有正则项Wi的系数是(1 - λ ),λ是一个大于0小于1的数,所以(1 - λ )是一个大于0小于1的数,所以(1 - λ ) * Wi 是小于 Wi 的,即有正则项时Wi减小了,体现了权重缩小、权值衰减的功能

- 红色曲线表示没有加入正则项
- 蓝色曲线表示加入了L2正则项
- 可以发现蓝色曲线较红色曲线过拟合现象减轻了

- 正则化方法的作用:减小方差,减轻过拟合现象
另一种正则化方法:
随机失活

- 随机:以一定的概率选中神经元
- 失活:失去活性,即权重变为0(不与其他神经元产生连接)
- 随机失活的好处:避免网络过度地依赖某一个神经元从而实现减轻过拟合现象
- 训练和测试两个阶段数据尺度的变化:在训练的时候,神经元有一定的概率被选择,从而失去活性,而在正常测试阶段失去活性的神经元会恢复活性变成正常的神经元,所有的神经元都会被使用
- 数据尺度的变化是由于神经元失活而丢失造成的,这样会导致模型精度的下降,所以在测试阶段,神经元的输出值要乘上神经元失活的概率P,从而使其与测试阶段的数据尺度等价
其他正则化方法

Batch Normalization(BN)
- 现在神经网络中的标配
- 以下三种都是基于BN这种正则化方法在不同场景下的改进
Layer Normalization(LN)
Instance Normalization(IN)
Group Normalization(GN)
8、小结
看完前面的笔记可以听一听对前面学习内容的总结,然后进行回顾,加深记忆
第二章 卷积神经网络
0、第一章回顾

1、卷积神经网络发展史
- 下图是一个简单的卷积神经网络示意图:Lenet-5(第一个大规模使用的卷积神经网络)

- 最早的卷积网络结构是受到了视觉系统的启发:视觉系统中的层级结构,其中的两种重要的细胞对应到了现在卷积神经网络中的卷积操作和池化操作

猫的视觉系统实验

感受野

- 感受野对应现在卷积神经网络中感受野的概念:神经元所能看到前一层输入神经元的值,即神经元与前一层哪些神经元相连接
- A、B、C、D、E、F、G表示不同种类的视觉细胞

- 椭圆圈出的区域表示该细胞的感受区域,即感受野
细胞对角度的选择性

- 该细胞对光条处于90度时的响应是最强的
细胞对光条运动方向的选择性

……
猫视觉实验对CNN的启发

- 神经元的局部连接:神经元不需要与前一层所有的神经元连接,只需要与前一层的某一区域相连接就可以了
第一个卷积神经网络雏形
新认知机(Neocognitron)

- 堆叠使用 S 细胞和 C 细胞(卷积层和池化层)

- 最大的缺点是没有反向传播算法更新权值,模型性能有限
- 图片中卷积神将网络下面列举的是福岛邦彦所发表的论文
- 左下角是福岛邦彦的个人主页(如今仍然在研究新认知机)
第一个大规模商用的卷积神经网络
Lenet-5

- Lenet-5的提出和设计有很大一部分是借鉴了新认知机

- 上图中列出的最后一篇论文是Lenet-5应用在了手写邮政编码(0 - 9)的识别中,仅仅是使用在了灰度图像之中,并没有应用在自然图像中(对于自然图像没有足够的标签数据供模型训练,当时的计算机性能也不足以支撑起大规模的运算,因此限制了Lenet-5的大规模使用)
第一个技惊四座的卷积神经网络
AlexNet

- 算料:数据,大规模带标签的数据
- 图片规格:224*224彩色三通道

- AlexNet结构分类

- 竖线以前是卷积池化部分,后面是全连接层
- Conv:卷积
- pooling:池化
- FC:全连接层,多层感知机的概念,在AlexNet中经过三个全连接层输出1000个类别分类的概率
- 方块:特征图
- 大量的卷积池化操作得到高级特征之后,输入到全连接层进行分类
2、卷积操作
图像识别的特点:
- 特征具有局部性

- 特征可能出现在任何位置

- 下采样图像不会改变图像目标(使分辨率下降)

详细说明:
特征具有局部性

- 上图左边表示全连接(共有10^12个参数),右边表示局部连接(连接了10*10的区域,共有10^8个参数),参数的个数减少了一万倍
特征可能出现在任何位置


- 卷积核在输入图像上滑动(从左到右,从上到下),连接神经元

- 上图中下层是输入(Input),上层是输出(Output),下层中阴影部分是卷积核(Kernel)的大小
- 对应区域相乘再相加
- 卷积层的核心在于Kernel

- Kernel卷积核中的权重是可以学习的参数,这些参数代表了某种特征
- 卷积操作相当于是对于图像特征的提取,因此卷积操作得到的输出又被称为特征图
- 三种人工设计的卷积核,完成不同的图像操作第二节:卷积神经网络02 P7 - 11:25
- 边缘检测:以中间的像素减去周围的像素的操作来观察中间像素和周围像素的差异大小(中间等于8,周围等于-1是因为如果九个像素的值相等,那么中间像素值的八倍就等于周围像素值的和,那么通过卷积操作,最终的结果就为0)
- 锐化:中间的像素的五倍减去四个周围像素,提高图像中某一部分的清晰度或者聚焦程度,在图像处理中用来补偿图像的轮廓,增强图像的边缘以及灰度跳变的部分,使图像变得更加清晰
- 高斯模糊:常用于去噪。模糊边缘及细节,去除噪声。权重由中心向外扩散减少(中心>上下左右>四角),最后取平均
- 卷积的核心在于卷积核中的权重参数,它代表了某一种特征,卷积的过程就是拿着这个特征去图像中寻找对应的特征,如果找到了该特征就输出比较强的特征值(神经元输出值)
卷积核可视化的示意图

- 图中上面48个卷积核对边缘敏感,下面48个卷积核对色彩敏感
卷积层中的两个重要概念
填充(padding)

- 图像分辨率不变:方便计算特征图(在卷积神经网络中,特征图通常是以倍数关系缩小,如果不加padding,像素缩小之后,不利于计算特征图的尺寸)
- 弥补边界信息丢失:边界信息被卷积的次数相对图像中间的像素较少(举例,未加padding时图像四个角上的像素只会被卷积一次,而加padding后,四个角上的像素能够和中间像素一样被卷积四次)
步幅/步长(stride)

- s 表示步幅的长度

- 如上右图所示,右边还有一个像素,但是卷积核不会向右继续卷积,而是跳到下一行(stride=2)进行卷积操作(卷积核如果到达边界的时候,如果下一次卷积不满足卷积核的大小的时候,则会抛弃掉下一次卷积操作,这在计算输出特征图大小的时候体现为向下取整),下边界不满足的情况下同理
输出特征尺寸的计算

- Fo:输出特征图的长度
- Fin:输入特征图的长度
- k:Kerbel size,即卷积核的大小
- p:padding,即填充像素,注意是两倍(例如图3中上下左右都填充了一个像素,因此对于某一行或者是某一列来说,是填充了两个像素)
- s:stride,即步幅,步幅对图像分辨率的改变起决定性作用
- +1:一开始的时候有一个像素,所以要加1
多通道卷积

- 3:自然图像是一个三通道的数据(R:红、G:绿B:蓝),彩色图像
- 卷积核的改变:在处理自然图像的时候,卷积核改变成为3-D张量的形式(但是执行的时候仍然是2-D卷积,卷积核只在两个维度即行和列上进行滑动,在对视频进行卷积的时候才会使用到3-D的卷积操作,还有一个时间维度),卷积核的维度与输入的通道数有关
- X:Input
- W:Kernel
- Y:Output
- ci:输入通道数
- co:输出通道数
- 对应卷积核通道与对应输入通道卷积,然后在输出特征图的对应像素上相加

- 一个Kernel对应一个输出特征图

3、池化操作
下采样图像,不会改变图像目标

池化:主要是用来降低图像的分辨率

一块区域被一个像素代替的两种方法
- MaxPooling:最大池化,取最大值
- Average Pooling:平均池化,取平均值
- 池化:可以理解为一个像素吸引周围的像素最终形成一个像素池的过程
- 池化输出尺寸和卷积操作类似
- 池化层中没有可以学习的参数
- 池化的作用:

- 池化可以理解为一种特殊的卷积

- 缓解卷积层对位置的过度敏感

- 右图中红色圆圈圈出的是对原始图像的扰动
- 第一行表示原始输入
- 第二行表示卷积后的输出特征图
- 第三行表示在卷积的基础上进行池化后输出的特征图
- 对比左右两图中卷积输出的特征图和池化输出的特征图,可以看出,右图中卷积输出的特征图对原始图像中的扰动比较敏感(较左图中的卷积输出特征图有明显改变,红圈已经圈出),而左右两图中池化操作后的特征图一模一样,由此可以得出结论:池化操作能够缓解卷积层对位置的过度敏感
4、Lenet-5及CNN结构进化史
LeNet-5的网络结构

- C层:卷积层
- S层:sampling,当时叫下采样层,后来用P表示,pooling池化层
- FC层:全连接层
- C1(6(六个卷积核),1(输入通道是单通道),5(卷积核大小),5(卷积核大小)),他是一个4-D的张量
- 通过卷积层和池化层的叠加,来逐层提取特征

- 竖线以左用于提取特征(features),竖线以右用于分类,又称分类器(classfier,类似于多层感知机的概念)
- 在代码实现过程中,定义一系列moudle构成的特征提取器为self.features,定义一系列moudle(全连接层)构成的classfier
卷积神经网络的进化史

5、小结
看完前面的笔记可以听一听对前面学习内容的总结,然后进行回顾,加深记忆

第三章 循环神经网络
(由于我是图像方面的,这部分内容主要是了解为主,所以记的比较粗糙,小伙伴可以从下面的时间标签跳到对应的章节观看详细内容)
0、第二章回顾

1、序列数据

- 句子中的第三个元素严重依赖于第一个元素
序列数据有哪些:
- 语音识别
- 音乐生成
- 文本分类
- DNA序列预测
- 机器翻译
- 视频行为识别
- 命名实体识别(人名)
2、语言模型

- 时间步的概念可以理解为序列出现的顺序

- 例中的句子总共的时间步为8

- 计算出八个标签为这种排列的联合概率是多少

- 比较两个句子出现的概率就能够得到正确的输出了
- 语言模型会综合考虑序列数据的前后联系
- 联合概率

- 语料库:搜集文章、文本信息,汇集成语料库,然后进行统计
- 缺点:计算量会随着时间的增长呈指数增长
3、RNN-循环神经网络

- 可以反复使用权重矩阵,从而避免了时间步的增加
- 引入隐藏状态用于记录历史信息,有效地处理数据的前后关联性

- 竖线以左是重叠方式的RNN示意图,竖线以右是展开方式的RNN示意图
- X:输入
- O:输出
- h:隐藏状态,不仅接收当前时间步的输入数据X,同时还会考虑上一个时间步传回来的h。在重叠方式的RNN示意图中是看不到上一个时间步(t - 1)的概念的
- U:权重矩阵,是循环使用的
- W:权重矩阵,是循环使用的
- V:权重矩阵,是循环使用的
- t:第 t 个时间步
- t - 1:第 t 个时间步的上一个时间步
- t + 1:第 t 个时间步的下一个时间步
- 循环神经网络的工作流程第三节:循环神经网络02 P10 - 03:37
隐藏状态
回顾多层感知机的工作流程


- Tanh是 0 均值的,值域是(-1 , 1)开区间
- 具体的文本生成的例子第三节:循环神经网络02 P10 - 12:14
- 通常第一个时间步输入全零

RNN的通过(穿越)时间反向传播

- 找通路,有几条通路,偏导数就有几项


- T = 3

- 注意h2有两条通路

- 注意h1有三条通路(红、绿、蓝)


4、GRU-门控循环单元

- R:重置门
- Z:更新门
- 注意激活函数使用的是sigmoid
候选隐藏状态






5、LSTM-长短期记忆网络

候选记忆细胞

记忆细胞与隐藏状态

- C:记忆细胞

6、小结
看完前面的笔记可以听一听对前面学习内容的总结,然后进行回顾,加深记忆

第四章 总结
千里之行,始于足下
知识点回顾
神经网络与多层感知机
基础知识
激活函数
反向传播
损失函数
权值初始化
正则化
卷积神经网络
统治图像领域的神经网络结构
发展历史
卷积操作
池化操作
循环神经网络
统治序列数据的神经网络结构
RNN
GRU
LSTM
----end----