
GoAI
2023/03/25阅读:12主题:全栈蓝
深度学习知识点全面总结(二)

编辑
编辑
❝👨💻「作者简介:」大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享,「公众号:」GoAI的学习小屋,免费分享书籍、简历、导图等资料,更有交流群分享AI和大数据,加群方式公众号回复“加群”。
🎉「专栏推荐」:目前在写一个CV方向专栏,后期会更新不限于深度学习、OCR、目标检测、图像分类、图像分割等方向,目前活动仅19.9,虽然付费但会长期更新且价格便宜,感兴趣的小伙伴可以关注下,有擅长CV的大佬可以联系我合作一起写。➡️专栏地址
🎉「学习者福利:」强烈推荐一个优秀AI学习网站,包括机器学习、深度学习等理论与实战教程,非常适合AI学习者。➡️网站链接。
🎉「技术控福利:」程序员兼职社区招募!技术范围广,CV、NLP方向均可,要求有一定基础,最好是研究生及以上或有工作经验,欢迎大佬加入!群内Python、c++、Matlab等各类编程语言单应有尽有, 资源靠谱、费用自谈,有意向直接➡️访问。
❞
编辑
神经网络与深度学习结构(图片选自《神经网络与深度学习》一邱锡鹏)
编辑
「目录」
[2 回归损失函数](#2 回归损失函数)
[(1) 均方误差损失函数](#(1) 均方误差损失函数)
[3 分类损失函数](#3 分类损失函数)
[(1) Logistic损失函数](#(1) Logistic损失函数)
[(1) ReLU + MSE](#(1) ReLU + MSE)
[(2) Sigmoid + Logistic](#(2) Sigmoid + Logistic)
[(3) Softmax + Logisitc](#(3) Softmax + Logisitc)
[小白推荐文章:如何通俗易懂地解释卷积? - 知乎](#小白推荐文章:如何通俗易懂地解释卷积? - 知乎)
[CNN 特点:](#CNN 特点:)
[ 2.参数共享:](# 2.参数共享:)
[ 1. 卷积层](# 1. 卷积层)
[1.1 单通道输入,单卷积核](#1.1 单通道输入,单卷积核)
[1.2 多通道输入,单卷积核](#1.2 多通道输入,单卷积核)
[1.3 多通道输入,多卷积核](#1.3 多通道输入,多卷积核)
[1.4 填充padding](#1.4 填充padding)
[2. 池化层](#2. 池化层)
[3. 激活函数](#3. 激活函数)
[5. 网络参数量与计算量](#5. 网络参数量与计算量)
卷积神经网络超详细介绍_呆呆的猫的博客-CSDN博客_卷积神经网络
六、损失函数
入门学习视频:
1.损失函数定义
在机器学习任务中,大部分监督学习算法都会有一个目标函数 (Objective Function),算法对该目标函数进行优化,称为优化算法的过程。 例如在分类或者回归任务中,使用损失函数( Loss Function )作为其目标函数对算法模型进行优化 。 在BP神经网络中,一般推导中,使用均方误差作为损失函数,而在实际中,常用交叉熵作为损失函数。如下图所示,我们可以清晰地观察到不同的损失函数在梯度下降过程中的收敛速度和性能都是不同的。
-
均方误差作为损失函数收敛速度慢,可能会陷入局部最优解; -
而交叉熵作为损失函数的收敛速度比均方误差快,且较为容易找到函数最优解.
因此了解损失函数的类型并掌握损失函数的使用技巧,有助于加深对深度学习的认知.
编辑
编辑
对于分类和回归模型使用的损失函数不同,下面将分别进行介绍。
「2 回归损失函数」
(1) 均方误差损失函数
均方误差(Mean Squared Error Loss, MSE)损失函数定义如下:
编辑
「代码示例」
def mean_squared_error(y_true, y_pred):
return np.mean(np.square(y_pred - y_true), axis=-1)
「(2) 平均绝对误差损失函数」
平均绝对误差(Mean Absolute Error Loss, MAE)损失函数定义如下:
编辑
「代码示例」
def mean_absolute_error(y_true, y_pred):
return np.mean(np.abs(y_pred - y_true), axis=-1)
「(3) 均方误差对数损失函数」
均方误差对数(Mean Squared Log Error Loss, MSLE)损失函数定义如下:
编辑
「代码示例」
def mean_squared_logarithmic_error(y_true, y_pred):
first_log = np.log(np.clip(y_pred, 10e-6, None) + 1.)
second_log = np.log(np.clip(y_true, 10e-6, None) + 1.)
return np.mean(np.square(first_log - second_log), axis=-1)
「(4) 平均绝对百分比误差损失函数」
平均绝对百分比(Mean Absolute Percentage Error Loss, MAPE)误差损失函数定义如下:
编辑
「代码示例」
def mean_absolute_percentage_error(y_true, y_pred):
diff = np.abs((y_pred - y_true) / np.clip(np.abs(y_true), 10e-6, None))
return 100 * np.mean(diff, axis=-1)
「(5) 小结」
均方误差损失函数是使用最广泛的,并且在大部分情况下,均方误差有着不错的性能,因此被用作损失函数的基本衡量指标。MAE 则会比较有效地惩罚异常值,如果数据异常值较多,需要考虑使用平均绝对误差损失作为损失函数。一般情况下,为了不让数据出现太多异常值,可以对数据进行预处理操作。 均方误差对数损失与均方误差的计算过程类似,多了对每个输出数据进行对数计算,目的是缩小函数输出的范围值。平均绝对百分比误差损失则计算预测值与真实值的相对误差。均方误差对数损失与平均绝对百分 比误差损失实际上是用来处理大范围数据( [ − 10 5 , 10 5 ]的,但是在神经网络中,我们常把输入数据归一化到一个合理范围 ( [ − 1 , 1 ]),然后再使用均方误差或者平均绝对误差损失来计算损失。
「3 分类损失函数」
(1) Logistic损失函数
Logistic损失函数定义如下:
编辑
「(2) 负对数似然损失函数」
负对数似然损失函数(Negative Log Likelihood Loss)定义如下:
编辑
「(3) 交叉熵损失函数」
Logistic损失函数和负对数似然损失函数只能处理二分类问题,对于两个分类扩展到M个分类,使用交叉熵损失函数(Cross Entropy Loss),其定义如下:
编辑
「代码示例」
def cross_entropy(y_true, y_pred):
return -np.mean(y_true * np.log(y_pred + 10e-6))
「(4) Hinge损失函数」
运用 Hinge 损失的典型分类器是 SVM 算法,因为 Hinge 损失可以用来解决间隔最大化问题。当分类模型需要硬分类结果的,例如分类结果是 0 或 1 、 -1或 1 的二分类数据, Hinge 损失是最方便的选择 。Hinge 损失函数定义如下:
编辑
「代码示例」
def hinge(y_true, y_pred):
return np.mean(np.maximum(1. - y_true * y_pred, 0.), axis=-1)
「(5) 指数损失函数」
使用指数(Exponential)损失函数的典型分类器是 AdaBoost 算法,指数损失函数的定义如下:
编辑
「代码示例」
def exponential(y_true, y_pred):
return np.sum(np.exp(-y_true * y_pred))
4.神经网络中常用的损失函数
神经网络中的损失函数可以自定义,前提是需要考虑数据本身和用于求解的优化方案。换句话说,自定义损失函数需要考虑输入的数据形式和对损失函数求导的算法。自定义损失函数其实是有些难度的,在实际工程项目上,结合激活函数来选择损失函数是常见的做法,常用组合有以下 3 种 。
(1) ReLU + MSE
均方误差损失函数无法处理梯度消失问题,而使用 Leak ReLU 激活函数能够减少计算时梯度消失的问题,因此在神经网络中如果需要使用均方误差损失函数,一般采用 Leak ReLU 等可以减少梯度消失的激活函数。另外,由于均方误差具有普遍性,一般作为衡量损失值的标准,因此使用均方误差作为损失函数表现既不会太好也不至于太差。
(2) Sigmoid + Logistic
Sigmoid 函数会引起梯度消失问题:根据链式求导法,Sigmoid 函数求导后由多个[0, 1]范围的数进行连乘,如其导数形式为 ,当其中一个数很小时,连成后会无限趋近于零直至最后消失。而类 Logistic 损失函数求导时,加上对数后连乘操作转化为求和操作,在一定程度上避免了梯度消失,所以我们经常可以看到 「Sigmoid 激活函数+交叉摘损失函数」 的组合。
(3) Softmax + Logisitc
在数学上,Softmax 激活函数会返回输出类的互斥概率分布,也就是能把离散的输出转换为一个同分布互斥的概率,如(0.2, 0.8)。另外,Logisitc 损失函数是基于概率的最大似然估计函数而来的,因此输出概率化能够更加方便优化算法进行求导和计算,所以我们经常可以看到输出层使xu用 「Softmax 激活函数+交叉熵损失函数」 的组合。
「损失函数学习参考:」
深度学习-常用损失函数详细介绍_算法之美-CSDN博客_深度学习的损失函数
5.激活函数、损失函数、优化函数的区别
「1.激活函数:」将神经网络上一层的输入,经过神经网络层的非线性变换转换后,通过激活函数,得到输出。常见的激活函数包括:sigmoid, tanh, relu等。
「2.损失函数:」度量神经网络的输出的预测值,与实际值之间的差距的一种方式。常见的损失函数包括:最小二乘损失函数、交叉熵损失函数、回归中使用的smooth L1损失函数等。
「3.优化函数:」也就是如何把损失值从神经网络的最外层传递到最前面。如最基础的梯度下降算法,随机梯度下降算法,批量梯度下降算法,带动量的梯度下降算法,Adagrad,Adadelta,Adam等。
[深度学习]梯度下降算法、优化方法(SGD,Adagrad,Adam...)_北望花村-CSDN博客
七、CNN卷积神经网络
「小白推荐文章:*如何通俗易懂地解释卷积? - 知乎*」
❝卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。目前 CNN 已经得到了广泛的应用,比如:人脸识别、自动驾驶、美图秀秀、安防等很多领域。
❞
「卷积神经网络 – CNN 最擅长的就是图片的处理。它受到人类视觉神经系统的启发。」
CNN 特点:
-
能够有效的将大数据量的图片降维成小数据量。 -
能够有效的保留图片特征,符合图片处理的原则。
CNN两大核心:
「卷积层最主要的两个特征就是局部连接和权值共享,有些地方又叫做稀疏连接和参数共享。」
-
通过卷积操作实现局部连接,这个局部区域的大小就是滤波器filter,避免了全连接中参数过多造成无法计算的情况, -
再通过参数共享来缩减实际参数的数量,为实现多层网络提供了可能。
编辑
「1.局部连接:」
-
一般认为图像的空间联系是局部的像素联系比较密切,而距离较远的像素相关性较弱,因此,每个神经元没必要对全局图像进行感知,只要对局部进行感知,然后在更高层将局部的信息综合起来得到全局信息。利用卷积层实现:(特征映射,每个特征映射是一个神经元阵列):从上一层通过局部卷积滤波器提取局部特征。卷积层紧跟着一个用来求局部平均与二次提取的计算层,这种二次特征提取结构减少了特征分辨率。 -
即网络部分连通,每个神经元只与上一层的部分神经元相连,只感知局部,而不是整幅图像。(滑窗实现)
「2.参数共享:」
-
在局部连接中,每个神经元的参数都是一样的,即:「同一个卷积核在图像中都是共享的」。(理解:卷积操作实际是在提取一个个局部信息,而局部信息的一些统计特性和其他部分是一样的,也就意味着这部分学到的特征也可以用到另一部分上。所以对图像上的所有位置,都能使用同样的学习特征。)卷积核共享有个问题:提取特征不充分,可以通过增加多个卷积核来弥补,可以学习多种特征。 -
对于一个100x100像素的图像,如果我们用一个神经元来对图像进行操作,这个神经元大小就是100x100=10000,单如果我们使用10x10的卷积核,我们虽然需要计算多次,但我们需要的参数只有10x10=100个,加上一个偏向b,一共只需要101个参数。我们取得图像大小还是100x100。 -
如果我们取得图像比较大,它的参数将会更加多。我们通过10*10的卷积核对图像进行特征提取,这样我们就得到一个Feature Map。 -
一个卷积核只能提取一个特征,所以我们需要多几个卷积核,假设我们有6个卷积核,我们就会得到6个Feature Map,将这6个Feature Map组成一起就是一个神经元。这6个Feature Map我们需要101*6=606个参数。这个值和10000比还是比较小的。
CNN网络介绍
❝以下主要介绍:卷积层、池化层、激活函数、全连接层概念及原理
❞
编辑
编辑
1. 卷积层
卷积是一种有效提取图片特征的方法 。 一般用一个正方形卷积核,遍历图片上的每一个像素点。图片与卷积核重合区域内相对应的每一个像素值,乘卷积核内相对应点的权重,然后求和, 再加上偏置后,最后得到输出图片中的一个像素值。 图片分灰度图和彩色图,卷积核可以是单个也可以是多个,因此卷积操作分以下三种情况:
1.1 单通道输入,单卷积核
这里单通道指的是输入为灰度图,单卷积核值卷积核个数是1个。
编辑
上面是 5x5x1 的灰度图片,1 表示单通道,5x5 表示分辨率,共有 5 行5列个灰度值。若用一个 3x3x1 的卷积核对此 5x5x1 的灰度图片进行卷积,偏置项b=1,则求卷积的计算是:(-1)x1+0x0+1x2+(-1)x5+0x4+1x2+(-1)x3+0x4+1x5+1=1(注意不要忘记加偏置 1)。
1.2 多通道输入,单卷积核
多数情况下,输入的图片是 RGB 三个颜色组成的彩色图,输入的图片包含了红、绿、蓝三层数据,「卷积核的深度(通道数)应该等于输入图片的通道数」,所以使用 3x3x3的卷积核,最后一个 3 表示匹配输入图像的 3 个通道,这样这个卷积核有三通道,「每个通道都会随机生成 9 个待优化的参数」,一共有 27 个待优化参数 w 和一个偏置 b。
编辑
注:这里还是单个卷积核的情况,但是一个卷积核可以有多个通道。默认情况下,「卷积核的通道数等于输入图片的通道数。」
1.3 多通道输入,多卷积核
多通道输入、多卷积核是深度神经网络中间最常见的形式。指的是多通道输入,且用多个卷积核的情况。那么卷积过程其实也很简单,「以3通道输入,2个卷积核为例」:
(1)先取出一个卷积核与3通道的输入进行卷积,这个过程就和「多通道输入,单卷积核」一样,得到一个1通道的输出output1。同样再取出第二个卷积核进行同样的操作,得到第二个输出output2 (2)将相同size的output1与output2进行堆叠,就得到2通道的输出output。
为了更直观地理解,下面给出图示:
编辑 图中输入X:[1,h,w,3]指的是:输入1张高h宽w的3通道图片。 卷积核W:[k,k,3,2]指的是:卷积核尺寸为3*3,通道数为3,个数为2。
「总结:」 (1)卷积操作后,「输出的通道数=卷积核的个数」 (2)卷积核的个数和卷积核的通道数是不同的概念。每层卷积核的个数在设计网络时会给出,但是卷积核的通道数不一定会给出。默认情况下,「卷积核的通道数=输入的通道数」,因为这是进行卷积操作的「必要条件」。
-
卷积与同道解释参考:CNN卷积核与通道讲解
(3)「偏置数=卷积核数」
1.4 填充padding
为了使卷积操作后能得到满意的输出图片尺寸,经常会使用padding对输入进行填充操作。默认在图片周围填充0。
「(1)全零填充padding='same’」 使用same时,会自动对原图进行全0填充,当步长为1时,可以保证输出的图片与输入的图片尺寸一致。 输出尺寸计算公式:「输入长/步长 (向上取整)」 TensorFlow中实现如下:(这里以卷积核个数:48,卷积核尺寸:3,步长:1,全填充为例)
layers.Conv2D(48, kernel_size=3, strides=1, padding='same')
「(2)不填充padding='valid’」 使用valid时,不进行任何填充,直接进行卷积,这是layers.Conv2D()默认的方式。 输出尺寸计算公式:(「输入长-核长)/步长+1 (向下取整)」 TensorFlow中实现如下:
layers.Conv2D(48, kernel_size=3, strides=1, padding='valid')
「(3)自定义填充」 一般是从上下左右四个方向进行填充,且左、右填充的列数p w p_wpw一般相同,上、下填充的行数p h p_hph也应该相同。如下图所示: 编辑 输出尺寸计算公式:
编辑
编辑
其中,h,w为原图的高和宽,k是卷积核的尺寸,s是步长。
在TensorFlow2.0中,自定义填充过程中,padding参数的设置格式为: 「padding=[ [0,0],[上,下],[左,右],[0,0] ]」
# 例如要在上下左右各填充一个单位,实现如下:
layers.Conv2D(48, kernel_size=3, strides=1, padding=[[0,0], [1,1], [1,1], [0,0]])
2. 池化层
❝池化作用如下“
1.使卷积神经网络抽取特征是保证特征局部不变性。
2.池化操作能降低维度,减少参数数量。
3..池化操作优化比较简单。
❞
在卷积层中,可以通过调节步长参数 s 实现特征图的高宽成倍缩小,从而降低了网络的参数量。实际上,除了通过设置步长,还有一种专门的网络层可以实现尺寸缩减功能,它就是我们要介绍的池化层(Pooling layer)。
池化层同样基于局部相关性的思想,通过从局部相关的一组元素中进行采样或信息聚合,从而得到新的元素值。通常我们用到两种池化进行下采样: **(1)最大池化(Max Pooling)**,从局部相关元素集中选取最大的一个元素值。 **(2)平均池化(Average Pooling)**,从局部相关元素集中计算平均值并返回。
3. 激活函数
激活函数也是神经网络不可缺少的部分,激活函数是用来加入非线性因素,提高网络表达能力,卷积神经网络中最常用的是ReLU,Sigmoid使用较少。
编辑具体如何选择合适的激活函数。可参考这篇博文:神经网络搭建:激活函数总结 或者上文介绍。
4.全连接层
全连接层FC,之所以叫全连接,是因为每个神经元与前后相邻层的每一个神经元都有连接关系。如下图所示,是一个简单的两层全连接网络,输入时特征,输出是预测的结果。
编辑 全连接层的参数量是可以直接计算的,计算公式如下:
编辑 按照上图搭建的两层全连接网络,要训练分辨率仅仅是 28x28=784 的黑白图像,就有近 40 万个待优化的参数。现实生活中高分辨率的彩色图像,像素点更多,且为红绿蓝三通道信息。待优化的参数过多, 容易导致模型过拟合。为避免这种现象,实际应用中一般不会将原始图片直接喂入全连接网络。 在实际应用中,会先对原始图像进行卷积特征提取,把提取到的特征喂给全连接网络,再让全连接网络计算出分类评估值。
5. 网络参数量与计算量
❝卷积层参数/卷积计算量
卷积参数 = 卷积核长度x卷积核宽度x输入通道数x输出通道数+输出通道数(偏置) 卷积计算量 = 输出数据大小x卷积核的尺度x输入通道数
例:输入:224x224x3,输出:224x244x64,卷积核:3x3
❞
参数量 = 3x3x3x64+64 计算量 = 224x224x64x3x3x3
「卷积层:」
比如:输入是32x32x3的的彩色图片,经过卷积层:
layers.Conv2D(100, kernel_size=3, strides=1, padding='same')
「(1)网络参数量」 主要是「卷积核的参数和偏置」的参数: 3x3x3x100+100=2800
「(2)计算量FLOPS」 深度学习框架FLOPs的概念:Floating point operations,即浮点运算数量。 {32x32x[3x3+(3x3-1)]x3+32x32x(3-1)}x100
「全连接层:」
比如第一层节点数是5,第二层节点数是10,求网络参数量和计算量FLOPS
「(1)网络参数量」 网络参数量主要来源「神经元连接权重和偏置」:5x10+10=60
「(2)计算量FLOPS」 5x10+10=60 2015 年,Google 研究人员Sergey 等基于参数标准化设计了「BN层」。BN层提出后,广泛地应用在各种深度网络模型上,使得网络的超参数的设定更加自由,同时网络的收敛速度更快,性能也更好。 详细了解请看:神经网络搭建:BN层
6.卷积神经网络训练:
「训练基本流程:」
Step 1:用随机数初始化所有的卷积核和参数/权重
Step 2:将训练图片作为输入,执行前向步骤(卷积, ReLU,池化以及全连接层的「前向传播」)并计算每个类别的对应输出概率。
Step 3:计算输出层的总误差
Step 4:「反向传播算法」计算误差相对于所有权重的梯度,并用梯度下降法「更新所有的卷积核和参数/权重的值」,以使输出误差最小化
注:卷积核个数、卷积核尺寸、网络架构这些参数,是在 Step 1 之前就已经固定的,且不会在训练过程中改变——「只有卷积核矩阵和神经元权重会更新」。
编辑
和多层神经网络一样,卷积神经网络中的参数训练也是使用「误差反向传播算法」,关于池化层的训练,需要再提一下,是将池化层改为多层神经网络的形式
编辑
编辑
将卷积层也改为多层神经网络的形式
编辑
CNN详细求解:
❝CNN在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。
❞
卷积网络执行的是监督训练,所以其样本集是由形如:(输入向量,理想输出向量)的向量对构成的。所有这些向量对,都应该是来源于网络即将模拟系统的实际“运行”结构,它们可以是从实际运行系统中采集来。
「1)参数初始化:」
在开始训练前,所有的权都应该用一些不同的随机数进行初始化。“小随机数”用来保证网络不会因权值过大而进入饱和状态,从而导致训练失败;“不同”用来保证网络可以正常地学习。实际上,如果用相同的数去初始化权矩阵,则网络无学习能力。
「2)训练过程包括四步」
「① 第一阶段:前向传播阶段」
-
从样本集中取一个样本,输入网络 -
计算相应的实际输出;在此阶段信息从输入层经过逐级的变换,传送到输出层,这个过程也是网络在完成训练之后正常执行时执行的过程
「② 第二阶段:后向传播阶段」
-
计算实际输出与相应的理想输出的差
-
按照极小化误差的方法「调整权值矩阵」
「网络的训练过程如下:」
-
选定训练组,从样本集中分别随机地寻求N个样本作为训练组; -
将各权值、阈值,置成小的接近于0的随机值,并初始化精度控制参数和学习率; -
从训练组中取一个输入模式加到网络,并给出它的目标输出向量; -
计算出中间层输出向量,计算出网络的实际输出向量; -
将输出向量中的元素与目标向量中的元素进行比较,计算出输出误差;对于中间层的隐单元也需要计算出误差; -
依次计算出各权值的调整量和阈值的调整量; -
调整权值和调整阈值; -
当经历M后,判断指标是否满足精度要求,如果不满足,则返回(3),继续迭代;如果满足就进入下一步; -
训练结束,将权值和阈值保存在文件中。这时可以认为各个权值已经达到稳定,分类器已经形成。再一次进行训练,直接从文件导出权值和阈值进行训练,不需要进行初始化。
八、经典网络介绍:

编辑
-
LeNet-5
编辑
编辑
编辑
❝神经元个数=卷积核数量X输出特征图宽度X输出特征图高度 卷积层可训练参数数量=卷积核数量X(卷积核宽度X卷积核高度+1)(1表示偏置) 汇聚层可训练参数数量=卷积核数量X(1+1)(两个1分别表示相加后的系数和偏置,有的汇聚层无参数) 连接数=卷积核数量X(卷积核宽度X卷积核高度+1)X输出特征图宽度X输出特征图高度(1表示偏置) 全连接层连接数=卷积核数量X(输入特征图数量X卷积核宽度X卷积核高度+1)(输出特征图尺寸为1X1)
❞
-
「AlexNet」
编辑
编辑
编辑
-
「Inception网络」
编辑
编辑
编辑
-
「残差网络」 -
编辑
「详细网络介绍可参考这篇:」
卷积神经网络超详细介绍_呆呆的猫的博客-CSDN博客_卷积神经网络
CNN总结
本文学习参考资料:
水很深的深度学习-Task04卷积神经网络CNN_GoAl的博客-CSDN博客
「CNN 的价值:」
-
能够将大数据量的图片有效的降维成小数据量(并不影响结果) -
能够保留图片的特征,类似人类的视觉原理
「CNN 的基本原理:」
-
卷积层 – 主要作用是保留图片的特征 -
池化层 – 主要作用是把数据降维,可以有效的避免过拟合 -
全连接层 – 根据不同任务输出我们想要的结果
「CNN 的实际应用:」
-
图片分类、检索 -
目标定位检测 -
目标分割 -
人脸识别 -
骨骼识别
九、RNN循环神经网络
编辑
编辑
编辑
编辑
RNN 的基本原理
传统神经网络的结构比较简单:输入层 – 隐藏层 – 输出层。如下图所示:
编辑
RNN 跟传统神经网络最大的区别在于每次都会将前一次的输出结果,带到下一次的隐藏层中,一起训练。如下图所示:
编辑
RNN学习资料参考:
十、LSTM长短期记忆神经网络
1 LSTM的产生原因
RNN在处理长期依赖(时间序列上距离较远的节点)时会遇到巨大的困难,因为计算距离较远的节点之间的联系时会涉及雅可比矩阵的多次相乘,会造成梯度消失或者梯度膨胀的现象。其中最成功应用最广泛的就是门限RNN(Gated RNN),而LSTM就是门限RNN中最著名的一种。有漏单元通过设计连接间的权重系数,从而允许RNN累积距离较远节点间的长期联系;而门限RNN则泛化了这样的思想,允许在不同时刻改变该系数,且允许网络忘记当前已经累积的信息。
2 RNN和LSTM的区别
所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层,如下图所示:

编辑
LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。

编辑
注:上图图标具体含义如下所示:

编辑
上图中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。
3 LSTM核心
LSTM 有通称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。示意图如下:

编辑
LSTM 拥有三个门,分别是遗忘门,输入层门和输出层门,来保护和控制细胞状态。
「忘记层门」
作用对象:细胞状态 。
作用:将细胞状态中的信息选择性的遗忘。
操作步骤:该门会读取ht−1和xt,输出一个在 0 到 1 之间的数值给每个在细胞状态Ct−1中的数字。1 表示“完全保留”,0 表示“完全舍弃”。示意图如下:
编辑
「输入层门」
作用对象:细胞状态
作用:将新的信息选择性的记录到细胞状态中。
操作步骤:
步骤一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。
步骤二,tanh 层创建一个新的候选值向量C~t加入到状态中。其示意图如下:
编辑
步骤三:将ct−1更新为ct。将旧状态与ft相乘,丢弃掉我们确定需要丢弃的信息。接着加上it∗C~t得到新的候选值,根据我们决定更新每个状态的程度进行变化。其示意图如下:
编辑
「输出层门」
作用对象:隐层ht
作用:确定输出什么值。
操作步骤:
步骤一:通过sigmoid 层来确定细胞状态的哪个部分将输出。
步骤二:把细胞状态通过 tanh 进行处理,并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
其示意图如下所示:
编辑

编辑
LSTM和GRU学习参考我的这篇文章:https://blog.csdn.net/qq_36816848/article/details/121616301
编辑
面试总结:
算法岗面试相关
\0. 算法岗工作总结 https://zhuanlan.zhihu.com/p/95922161 \1. 人工智能实战面试学习路线图 https://github.com/tangyudi/Ai-Learn \2. 百面机器学习之模型评估 https://zhuanlan.zhihu.com/p/78603645 \3. 面向机器学习的特征工程https://github.com/HadXu/feature-engineering-for-ml-zh \4. 深度学习500问 https://github.com/scutan90/DeepLearning-500-questions \5. 深度学习无限问 https://github.com/yoyoyo-yo/DeepLearningMugenKnock \6. 计算机视觉知识点总结 https://zhuanlan.zhihu.com/p/58776542 \7. 深度学习CV领域最瞩目的成果 https://zhuanlan.zhihu.com/p/315605746 \8. 算法工程师技术路线图 https://zhuanlan.zhihu.com/p/192633890?utm_source=wechatTimeline_article_bottom&from=timeline
「反向面试:」https://github.com/yifeikong/reverse-interview-zh 技术面试最后反问面试官的话
「相关资料推荐:」
\0. 算法岗工作总结 https://zhuanlan.zhihu.com/p/95922161 \1. 人工智能实战面试学习路线图 https://github.com/tangyudi/Ai-Learn \2. 百面机器学习之模型评估 https://zhuanlan.zhihu.com/p/78603645 \3. 面向机器学习的特征工程https://github.com/HadXu/feature-engineering-for-ml-zh \4. 深度学习500问 https://github.com/scutan90/DeepLearning-500-questions \5. 深度学习无限问 https://github.com/yoyoyo-yo/DeepLearningMugenKnock \6. 计算机视觉知识点总结 https://zhuanlan.zhihu.com/p/58776542 \7. 深度学习CV领域最瞩目的成果 https://zhuanlan.zhihu.com/p/315605746 \8. 算法工程师技术路线图 https://zhuanlan.zhihu.com/p/192633890?utm_source=wechatTimeline_article_bottom&from=timeline
❝「本文参考资料:」
以上未完待更新,仅供个人学习,侵权联系删除!
❞
作者介绍
