NNDL学期知识点总结 [HBU]

目录

零碎考点

第4章 全连接神经网络/前馈神经网络

4.1 神经元

4.1.1 Sigmoid型函数

4.1.2 ReLu函数

4.3 前馈神经网络

4.4 反向传播算法

卷积神经网络

5.3 参数学习

5.4 几种典型的卷积神经网络

5.4.1 LeNet-5 

5.4.2 AlexNet

5.4.4 ResNet 

5.5 其他卷积方式

循环神经网络

BPTT随时间反向传播

长程依赖问题

LSTM

3、期末考试复习总结-链接

视频链接:


HBU期末复习周,总结的比较仓促匆忙,目录也挺乱的,一部分内容没有总结的太细致,只是给了个大概。主要还是看书--邱锡鹏《深度学习与神经网络》。文章最后挂上了很多链接,用来应对期末考试。

后续有时间我会继续补充,祝大家期末顺利。


复习总中心放在全连接神经网络FNN、卷积神经网络CNN、循环神经网络RNN。

深度学习重点复习框架图:

NNDL学期知识点总结 [HBU]_第1张图片


零碎考点

>(p11)深度学习:通过学习算法来让模型自动学习出好的特征表示。所谓“深度”是指原始数据进行非线性特征转换的次数。

>(p12)深度学习与“浅层学习”不同:深度学习需要解决的关键问题是贡献度分配问题。

>深度学习的主要目的(p4):   从数据中自动学习,  解决表示学习问题,解决通用人工智能问题(比如 推理、决策)。

>深度学习相较于机器学习的优势:可自动学习特征。

>对于图像分类,可提高分类准确率的方法:(1)数据增强 (2)预训练网络 (3)调整超参数

>具有权重共享性质的网络: CNN卷积神经网络, RNN循环神经网络。

>解决过拟合的几种方法: (1)丢弃法 (2)正则化 (3)早期停止  (4)批量归一化 (2020届考了,21届不一定考)。

>(p160)优化算法大体可以分为两类:(1)调整学习率,使得优化更稳定。  (2)梯度估计修正,优化训练速度。

>自适应学习率方法(第七章 p162):AdaGrad ,  RMSprop  ,  AdaDelta。

AdaGrad算法:借鉴L2正则化思想,每次迭代时自适应的调整每个参数的学习率。缺点是 再经过一定次数的迭代依然没有找到最优点时,由于这时的学习率已经非常小,很难再继续找到最优点。

RMSprop算法:可以在有些情况下避免AdaGrad算法中学习率不断单调下降以至于过早衰减的情况。RMSprop与AdaGrad的区别在于  G_{t}的计算由累计方式变成了指数衰减移动平均,在迭代过程中,学习率并不是呈衰减趋势,既可以变小也可以变大。

AdaDelta算法:是AdaGrad的改进,和RMSprop类似,通过梯度平方的指数衰减移动平均来调整学习率。AdaDelta算法在一定程度上抑制了学习率的波动

>(p167)其他重要的优化算法:

>动量法Momentum:动量发使用之前积累动量来替代真正的梯度。在迭代初期,动量法可以更快地达到最优点;在迭代后期,在收敛值附近振荡减速,增加稳定性。

>Adam算法是RMSprop和动量法的结合。不仅使用动量作为参数更新方向,而且可以自适应调整学习率。

NNDL学期知识点总结 [HBU]_第2张图片

>梯度截断的两种方式: 按值截断  按模截断。

>(p162)在梯度下降中,学习率过大会导致网络无法收敛,过小则会导致收敛速度太慢

>批量梯度下降、随机梯度下降、小批量梯度下降(p 32):

1.批量梯度下降BGD:在梯度下降中,目标函数是整个训练集上的风险函数。缺点是空间复杂度高,计算开销大。

2.随机梯度下降SGD:在每次迭代时只采集一个样本,计算这个样本损失函数的梯度并更新参数。实现简单、收敛速度快。缺点是无法充分利用计算机的并行计算能力。

>批量梯度下降与随机梯度下降之间的区别在于:每次迭代的优化目标是对所有样本的平均损失函数还是对单个样本的损失函数。 随机梯度下降更容易逃离局部最优点。

3.小批量梯度下降Mini-BGD:是批量梯度下降和随机梯度下降的折中。每次迭代时,随机选取一小部分训练样本来计算,即可以兼顾随机梯度下降法的优点,也可以提高训练效率。

>导致网络训练失败的几种情况:梯度消失,梯度爆炸 ,激活单元死亡,鞍点。

>遇到不平衡的分类问题,采取什么方法衡量:使用精确率和召回率。准确度不适合衡量此问题。

>在神经网络隐藏层中使用了激活函数,对于神经元x,给定任意输入,都会得到输出为-0.0001。试问,采取了什么激活函数?  答: 双曲正切函数(因为它可以取负值)

>(p109)全连接神经网络的缺点:(1)参数太多 (2)很难提取局部不变性特征

>(p116)卷积层可以提取局部区域的特征,不同的卷积核相当于不同的特征提取器。

>(p134)增加网络短期记忆能力的三种方法: (1)延时神经网络 (2)有外部输入的非线性自回归模型 (3)循环神经网络 。

>(p187 )正则化是一类通过限制模型复杂度,从而避免过拟合,提高泛化能力的方法。

>参数初始化通常有三种:(1)预训练初始化 (2)随机初始化 (3)固定值初始化

>常用的神经网络结构(1)前馈网络 (2)记忆网络  (3)图网络

>影响小批量梯度下降的主要因素:(1)批量大小 (2)学习率\alpha  (3)梯度估计

简答题 去年的考试的大概重点:

1.为何要引用非线性激活函数?

2.什么是超参数?如何优化?

3.线性回归通常使用平方损失函数,能否使用交叉熵损失函数?

4.平方损失函数为何不适用于解决分类问题?(和第3题一块复习)

5.什么是长程依赖问题,如何解决?

6.什么是对称权重现象,有哪些解决方案?

7.什么是损失函数?常见的损失函数有哪些?

8.解释步长、零填充、感受野

9.解释死亡ReLu问题,如何解决?

计算题 大题

>(p114)证明宽卷积具有交换性  习题5-2

>习题5-4    2-12   5-7  5-8   6-3  6-4   7-1(其实把这学期做过的课后作业都看了就行)

>LeNet-5有多少层,解释每一层的功能。使用pytorch对模型进行定义。 

>ResNet残差神经网络的工作过程,使用pytorch对模型进行定义。  

以上这些问题的答案,在文章后续总结里都会出现。


第4章 全连接神经网络/前馈神经网络

引用到的博客链接:神经网络知识点汇总——FNN-CSDN博客

【神经网络】FNN——前馈神经网络、前向传播、反向传播详解_前向神经网络和前馈神经网络一样吗-CSDN博客

4.1 神经元

4.1.1 Sigmoid型函数

机器学习中的数学——激活函数(一):Sigmoid函数-CSDN博客

Sigmoid型函数是指一类S型双曲线函数,为两端饱和函数。常用的Sigmoid型函数Logistic和Tanh函数。

关于“饱和”:对于函数f(x),若x\rightarrow -\infty,其导数趋近于0,则为左饱和;

x\rightarrow +\infty,其导数趋近于零,则为右饱和;

同时满足左、右饱和时,就称为两端饱和。

Logistic函数

>公式定义为\sigma (x) = \frac{1}{1+e^{-x}}

>值域挤压在(0,1)范围内。输入越小,越接近于0;输入越大,越接近于1。和感知器使用的阶跃激活函数相比,Logistic函数是连续可导的,数学性质好。

>Logistic函数的两点性质:(1)其输出可以直接看作概率分布 (2)可以看作一个软性门(Soft Gate),用来控制其他神经元输出信息的数量。

>函数图像长这样:

NNDL学期知识点总结 [HBU]_第3张图片

Tanh函数

>公式定义为tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}

>Tanh可以看作放大平移的Logistic函数,值域为(-1,1)。Tanh函数的输出是零中心化的。

>tanh函数的图像及其导数图像长这样(从网页找的图 ):

NNDL学期知识点总结 [HBU]_第4张图片

4.1.2 ReLu函数

Relu-修正线性单元,是目前神经网络中经常使用的激活函数。Relu实际上是一个斜坡(ramp)函数,定义为:

ReLu(x)=\left\{\begin{matrix}x,x\geq 0 & & \\0,x<0 & & =max(0,x) \end{matrix}\right.

>图像:

NNDL学期知识点总结 [HBU]_第5张图片

>优点:计算高效。ReLu在一定程度上缓解了神经网络的梯度消失问题,加速梯度下降的收敛速度。

>缺点: ReLu神经元在训练时容易“死亡”。如果参数在一次不恰当的更新后,第一个隐藏层中(也可能是其他隐藏层)的某个ReLu神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度值永远都是0,在以后的训练过程中永远不能被激活,即死亡ReLu问题。

带泄露的ReLu:

为了避免出现死亡ReLu问题,引出了带泄露的ReLu(Leaky ReLu),Leaky ReLu在输入x<0时保持一个很小的梯度\gamma,这样当神经元非激活时也能有一个非零的梯度可以更新参数,避免永远不能被激活。其中\gamma是一个很小的单元,如0.01。

>表达式:

LeakyReLu(x)=\left\{\begin{matrix}x,x> 0 & & \\\gamma x,x\leq 0 & & =max(0,x)+\gamma min(0,x) \end{matrix}\right.

>图像为:

NNDL学期知识点总结 [HBU]_第6张图片


4.3 前馈神经网络

多层前馈神经网络结构(图从网上找的,侵立删):

NNDL学期知识点总结 [HBU]_第7张图片

参数:

NNDL学期知识点总结 [HBU]_第8张图片

前向传播算法手推,动手推。

4.4 反向传播算法

看我的这篇博客:[23-24 秋学期] NNDL 作业4 前馈神经网络 HBU-CSDN博客


卷积神经网络

卷积神经网络具有局部链接、权重共享、汇聚 的特点。由于卷积层的参数只有一个K维的权重w^{l}和1维的偏置b^{l},参数个数和神经元的数量无关。

卷积神经网络是由卷积层、汇聚层(池化层)和全连接层交叉堆叠而成的前馈神经网络。

>具有权重共享性质的两个网络:卷积神经网络CNN  循环神经网络RNN。

>全连接前馈神经网络具有的两个问题(1)参数太多 (2)很难提取局部不变性特征,需要进行数据增强来提高性能。        而卷积神经网络的网络参数更少,且具有一定的平移、缩放和旋转不变性。

>w_{1},w_{2}被称为滤波器或卷积核。不同的滤波器来提取 信号序列/特征图 的不同特征。一幅图像在经过卷积操作后得到结果被称为特征映射

>卷积运算:对应位置相乘再相加。卷积的主要功能是在一个图像上(特征)上滑动一个卷积核(滤波器)。  且卷积核是参数学习出来的,不是人为设定的

>在图像处理中,常用均值滤波:当前位置的像素设置为滤波器窗口中所有像素的平均值。

>互相关:互相关和卷积的区别仅仅在于卷积核是否进行翻转,因此互相关也可以称为不翻转卷积。使用卷积是为了进行特征提取,卷积核是否进行翻转与其特征抽取能力无关。

>窄卷积:越卷越窄。宽卷积:越卷越宽。等宽卷积:输入输出长度(形状)一致。(卷积一般默认为等宽卷积)。

其余的名词解释(感受野、步长、填充、特征图等)可看我的这篇博客:[23-24 秋学期]NNDL 作业6 卷积 [HBU]-CSDN博客

>卷积的交换性(容易考大题):具体看我这篇文章

NNDL作业8 卷积-导数-反向传播[邱锡鹏DL课后题]_设输入x为3*3,单通道,卷积核k为2*2,输出y为2*2,xconvk=y,即-CSDN博客

>卷积层:作用是提取一个局部区域的特征,不同的卷积核相当于不同的特征提取器。特征映射为一幅图像在经过卷积提取到的特征。

>汇聚层:也叫池化层、子采样层,其作用是进行特征选择、降低特征数量,从而减少参数数量。降低特征维数,避免过拟合。        常用的池化函数:最大池化、平均池化。

目前,卷积神经网络趋于使用更小的卷积核和更深的结构。

5.3 参数学习

看书或者文章最后的博客,手推公式

5.4 几种典型的卷积神经网络

5.4.1 LeNet-5 

LeNel是一个 7 的神经网络,包含 3 个卷积层,2 个池化层,1 个全连接层(邱锡鹏书上这么写的,可能有不一样的模型版本)。接收输入图像大小32*32 = 1024,输出对应10个类别的得分。

其中所有卷积层的所有卷积核都为 5x5,步长 stride=1,池化方法都为全局 pooling,激活函数为 Sigmoid/ReLu。

C1:卷积层。使用6个5*5的卷积核,得到6组大小为28*28的特征映射。

S2:池化层。采样窗口为2*2,使用平均池化,并使用非线性函数。

C3:卷积层

S4:汇聚层

C5:卷积层

F6:全连接层。此时有84个神经元。

7:输出层

NNDL学期知识点总结 [HBU]_第9张图片

每一层具体的功能如下,我拍了一张书上的内容:

NNDL学期知识点总结 [HBU]_第10张图片

期末考试的时候如果需要手搓代码(要求使用pytorch库),就写这些:
简易版:

import torch 
import torch.nn as nn
class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.conv = nn.Sequential(
            nn.Conv2d(1, 6, 5), # in_channels, out_channels, kernel_size
            nn.Sigmoid(),
            nn.MaxPool2d(2, 2), # kernel_size, stride
            nn.Conv2d(6, 16, 5),
            nn.Sigmoid(),
            nn.MaxPool2d(2, 2)
        )
        self.fc = nn.Sequential(
            nn.Linear(16*4*4, 120),
            nn.Sigmoid(),
            nn.Linear(120, 84),
            nn.Sigmoid(),
            nn.Linear(84, 10)
        )

    def forward(self, img):
        feature = self.conv(img)
        output = self.fc(feature.view(img.shape[0], -1))
        return output

博主版:卷积神经网络LeNet-5的pytorch代码实现_lenet5的pytorch实现-CSDN博客

我觉得博主版的写的挺好的,可以背过。链接挂在上一行了。

Paddle版本,这个比较规范:

NNDL学期知识点总结 [HBU]_第11张图片

5.4.2 AlexNet

看书,感觉不是考试重点。

5.4.4 ResNet 

>残差网络通过给非线性的卷积层增加直连边(也称残差链接)的方式来提高信息传播效率。

h(x) = x + (h(x)-x)

x为恒等函数,(h(x)-x)为残差函数。

残差单元由多个级联的(等宽)卷积层和一个跨层的直连边组成,再经过ReLu激活后得到输出。

>网络结构:

NNDL学期知识点总结 [HBU]_第12张图片

具体介绍看我这篇博客:

基于残差网络实现手写体数字识别实验 [HBU]-CSDN博客

如果考试考手搓代码,就背过:

import torch
import torch.nn as nn
import torch.nn.functional as F
 
#创建残差块类,继承nn.Module类
class ResBlock(nn.Module):
    def __init__(self,in_channels,out_channels,stride=1,use_residual=True):
        '''
        残差单元
        :param in_channels: 输入通道数
        :param out_channels: 输出通道数
        :param stride: 残差单元的步长,通过调整残差单元中第一个卷积层的步长来控制
        :param use_residual:是一个布尔值,用于控制是否使用残差链接
        '''
        super(ResBlock,self).__init__() #继承
        self.stride = stride
        self.use_residual = use_residual
 
        #第一个卷积层,卷积核大小为3*3,设置不同输出通道数以及步长
        self.conv1 = nn.Conv2d(in_channels,out_channels,3,padding=1
                               ,stride=self.stride,bias=False)
 
        #第二个卷积层,卷积核大小3*3,不改变输入特征图的形状,步长为1
        self.conv2 = nn.Conv2d(out_channels,out_channels,3,padding=1,bias=False)
 
        #若conv2的输出和此残差快的输入数据形状不一致,则use_1X1conv=True
        #当use_1X1conv=True,添加1个1X1的卷积作用在输入数据上,是其形状变成跟conv2一致
        if in_channels != out_channels or stride != 1:
            self.use_1x1conv = True
        else:
            self.use_1x1conv = False
 
        #当残差单元包裹的非线性层输入和输出通道数不一致时,则用1x1卷积调整通道数后在进行相加运算
        if self.use_1x1conv:
            self.shortcut = nn.Conv2d(in_channels,out_channels,1,
                                      stride=self.stride,bias=False)
 
        #每个卷积层后接一个批量规范化层
        self.bn1 = nn.BatchNorm2d(out_channels)
        self.bn2 = nn.BatchNorm2d(out_channels)
        if self.use_1x1conv:
            self.bn3 = nn.BatchNorm2d(out_channels)
 
    def forward(self,inputs):
        y = F.relu(self.bn1(self.conv1(inputs)))
        y = self.bn2(self.conv2(y))
 
        #决定是否在残差连接中使用残差块
        if self.use_residual:
            #如果为真,对inputs进行1x1卷积,将形状调整成跟conv2的输出y一致
            if self.use_1x1conv:
                shortcut = self.shortcut(inputs)
                shortcut = self.bn3(shortcut)
            else: #否则直接将inputs和conv2的输出y相加
                shortcut = inputs
 
            #将调整后的输入数据和第二个卷积层的输出数据相加
            y = torch.add(shortcut,y)
 
        out = F.relu(y)
        return out

5.5 其他卷积方式

>转置卷积: 低维-->高维 ,一般的卷积操作都是实现高维-->低维,而转置卷积不是。这里有一道课后作业题,很重要:将卷积操作写为仿射变换形式。见以下链接。

>空洞卷积:下面那个链接里有空洞卷积的介绍与例题(关于膨胀率的计算)。

博客:

NNDL作业8 卷积-导数-反向传播[邱锡鹏DL课后题]_设输入x为3*3,单通道,卷积核k为2*2,输出y为2*2,xconvk=y,即-CSDN博客


循环神经网络

概要:循环神经网络是一类具有短期记忆能力的神经网络。神经网络的参数学习可以通过随时间反向传播算法BPTT来学习。BPTT算法即按照时间的逆序将错误信息一步步的往前传递,当输入序列较长时,会存在梯度爆炸和梯度消失问题,也称为长程依赖问题。为了解决这个问题,引进了门控机制(LSTM、GRU模型)。

本章内容总结成一个思维导图即为:

NNDL学期知识点总结 [HBU]_第13张图片

>给网络增加短期记忆能力的三种方法(p134): (1)延时神经网络(2)有外部输入的非线性自回归模型(3)循环神经网络。

>简单循环网络(SRN):只有一个隐藏层的神经网络,增加了从隐藏层到隐藏层的反馈链接。

BPTT随时间反向传播

>参数学习--随时间反向传播BPTT:在展开的前馈网络中,所有层的参数是共享的,因此参数的真实梯度是所有“展开层”的参数梯度之和。公式推导部分可以看以下这篇博客:

NNDL 作业10 BPTT [HBU]-CSDN博客

长程依赖问题

>循环神经网络在学习过程中主要的问题是由于梯度消失和梯度爆炸导致的,很难建立长时间间隔的状态之间的依赖关系--- 即为长程依赖问题。

>长程依赖问题改进:

* 梯度爆炸:较容易解决,一般通过权重衰减或梯度截断避免。

* 梯度消失:不易解决。具体方案看书中p145 或者以下博客:

NNDL 作业10 BPTT [HBU]-CSDN博客

(p170 中有一个小考点:梯度截断有两种方式-- 按值截断  按模截断)

LSTM

>长短期记忆网络LSTM,可以有效地解决简单循环神经网络的梯度爆炸或消失问题

LSTM网络引入门控机制来控制信息传递的路径,分别为输入门、遗忘门和输出门。

具体公式推导,LSTM网络的介绍,工作原理以及如何解决梯度消失 梯度爆炸问题具体见以下博客:

NNDL 作业11 LSTM [HBU ]-CSDN博客

>LSTM改进(p148):门控循环单元-GRU网络。(这个看看书 大概知道是什么就够了)


3、期末考试复习总结-链接

本学期老师留过的作业(按章节顺序排NNDL1-NNDL12,都是我写的博客,点击直接跳转):

人工智能-机器学习-深度学习 概念整理-CSDN博客

[23-24 秋学期] NNDL-作业2 HBU-CSDN博客

NNDL作业-Softmax回归风险函数与正则化 HBU-CSDN博客

[23-24 秋学期] NNDL 作业4 前馈神经网络 HBU-CSDN博客

[23-24秋学期]NNDL作业5 第四章课后习题 HBU_如果限制一个全连接神经网络的总神经元数量(不考虑输入层) 为n+1.输入层大小-CSDN博客

[23-24 秋学期]NNDL 作业6 卷积 [HBU]-CSDN博客

[23-24 ]NNDL作业7-基于CNN的XO识别-CSDN博客

NNDL作业8 卷积-导数-反向传播[邱锡鹏DL课后题]_设输入x为3*3,单通道,卷积核k为2*2,输出y为2*2,xconvk=y,即-CSDN博客

NNDL 作业9 RNN-SRN简单循环神经网络 [HBU]-CSDN博客

NNDL 作业10 BPTT [HBU]-CSDN博客

NNDL 作业11 LSTM [HBU ]-CSDN博客

NNDL 作业12-优化算法2D可视化 [HBU]-CSDN博客

网上找的复习题:

深度学习常见网络结构和设计思路总结(期末复习)_深度学习 网络结构跟什么有关-CSDN博客

国科大. 深度学习:期末试题与简要思路分析_深度学习期末考试-CSDN博客

深度学习经典试题29道_深度学习 考试题 填空题-CSDN博客

深度学习面试问题与答案(2023)_深度学习面试题-CSDN博客

深度学习 100 题(转) - 大汤姆 - 博客园 (cnblogs.com)

考察深度学习基础知识的45道题目(附答案)_深度学习 选择题-CSDN博客

视频链接:

RNN:期末复习之大三学姐带你20分钟搞定RNN循环神经网络_哔哩哔哩_bilibili

你可能感兴趣的:(深度学习,深度学习,人工智能,rnn,lstm)