深度学习笔记总结(待更新)
Posted GoAl的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习笔记总结(待更新)相关的知识,希望对你有一定的参考价值。
机器学习基础学习可参考:
机器学习知识点总结(待更新)_GoAl的博客-CSDN博客_机器学习知识点总结
常见的分类算法
SVM、神经网络、随机森林、逻辑回归、KNN、贝叶斯
常见的监督学习算法
感知机、SVM、人工神经网络、决策树、逻辑回归
一、深度学习概念
1.深度学习定义
深度学习定义:一般是指通过训练多层网络结构对未知数据进行分类或回归
深度学习分类:有监督学习方法——深度前馈网络、卷积神经网络、循环神经网络等;
无监督学习方法——深度信念网、深度玻尔兹曼机,深度自编码器等。
深度学习的思想:
深度神经网络的基本思想是通过构建多层网络,对目标进行多层表示,以期通过多层的高层次特征来表示数据的抽象语义信息,获得更好的特征鲁棒性。
2.深度学习应用
图像处理领域主要应用
- 图像分类(物体识别):整幅图像的分类或识别
- 物体检测:检测图像中物体的位置进而识别物体
- 图像分割:对图像中的特定物体按边缘进行分割
- 图像回归:预测图像中物体组成部分的坐标
语音识别领域主要应用
- 语音识别:将语音识别为文字
- 声纹识别:识别是哪个人的声音
- 语音合成:根据文字合成特定人的语音
自然语言处理领域主要应用
- 语言模型:根据之前词预测下一个单词。
- 情感分析:分析文本体现的情感(正负向、正负中或多态度类型)。
- 神经机器翻译:基于统计语言模型的多语种互译。
- 神经自动摘要:根据文本自动生成摘要。
- 机器阅读理解:通过阅读文本回答问题、完成选择题或完型填空。
- 自然语言推理:根据一句话(前提)推理出另一句话(结论)。
综合应用
- 图像描述:根据图像给出图像的描述句子
- 可视问答:根据图像或视频回答问题
- 图像生成:根据文本描述生成图像
- 视频生成:根据故事自动生成视频
3.深度学习主要术语
参考这篇文章:
机器学习与深度学习基础概念详解_GoAl的博客-CSDN博客
二、神经网络基础
1. 神经网络组成
人工神经网络(Artificial Neural Networks,简写为ANNs)是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的,并具有自学习和自适应的能力。神经网络类型众多,其中最为重要的是多层感知机。为了详细地描述神经网络,我们先从最简单的神经网络说起。
感知机
感知机是1957年,由Rosenblatt提出会,是神经网络和支持向量机的基础。
感知机是有生物学上的一个启发,他的参照对象和理论依据可以参照下图:(我们的大脑可以认为是一个神经网络,是一个生物的神经网络,在这个生物的神经网络里边呢,他的最小单元我们可以认为是一个神经元,一个neuron,这些很多个神经元连接起来形成一个错综复杂的网络,我们把它称之为神经网络。当然我们现在所说的,在深度学习包括机器学习指的神经网络Neural Networks实际上指的是人工神经网络Artificial Neural Networks,简写为ANNs。我们只是简化了。我们人的神经网络是由这样一些神经元来构成的,那么这个神经元他的一些工作机制呢就是通过这样一个下面图的结构,首先接收到一些信号,这些信号通过这些树突(dendrite)组织,树突组织接收到这些信号送到细胞里边的细胞核(nucleus),这些细胞核对接收到的这些信号,这些信号是以什么形式存在的呢?这些信号比如说眼睛接收到的光学啊,或者耳朵接收到的声音信号,到树突的时候会产生一些微弱的生物电,那么就形成这样的一些刺激,那么在细胞核里边对这些收集到的接收到的刺激进行综合的处理,当他的信号达到了一定的阈值之后,那么他就会被激活,就会产生一个刺激的输出,那么就会形成一个我们大脑接收到的进一步的信号,那么他是通过轴突这样的输出计算的,这就是我们人脑的一个神经元进行感知的时候大致的一个工作原理。)
简单的感知机如下图所示:
设置合适的x和b,一个简单的感知机单元的与非门表示如下:
当输入为0,1 时,感知机输出为0 × ( − 2 ) + 1 × ( − 2 ) + 3 = 1 。
复杂一些的感知机由简单的感知机单元组合而成:
多层感知机
多层感知机由感知机推广而来,最主要的特点是有多个神经元层,因此也叫深度神经网络。相比于单独的感知机,多层感知机的第i ii层的每个神经元和第i − 1 i-1i−1层的每个神经元都有连接。
输出层可以不止有11个神经元。隐藏层可以只有11层,也可以有多层。输出层为多个神经元的神经网络例如下图所示:
2.神经网络有哪些常用模型结构?
人工神经网络由神经元模型构成,这种由许多神经元组成的信息处理网络具有并行分布结构。
其中圆形节点表示一个神经元,方形节点表示一组神经元。
下图包含了大部分常用的模型:
3.前向传播和反向传播介绍
神经网络的计算主要有两种:前向传播(foward propagation, FP)作用于每一层的输入,通过逐层计算得到输出结果;反向传播(backward propagation, BP)作用于网络的输出,通过计算梯度由深到浅更新网络参数。
前向传播
假设上一层结点i , j , k , . . . i,j,k,...i,j,k,...等一些结点与本层的结点w ww有连接,那么结点w ww的值怎么算呢?就是通过上一层的i , j , k , . . . i,j,k,...i,j,k,...等结点以及对应的连接权值进行加权和运算,最终结果再加上一个偏置项(图中为了简单省略了),最后在通过一个非线性函数(即激活函数),如R e L u ReLuReLu,s i g m o i d sigmoidsigmoid等函数,最后得到的结果就是本层结点w ww的输出。
最终不断的通过这种方法一层层的运算,得到输出层结果。
反向传播
由于我们前向传播最终得到的结果,以分类为例,最终总是有误差的,那么怎么减少误差呢,当前应用广泛的一个算法就是梯度下降算法,但是求梯度就要求偏导数,下面以图中字母为例讲解一下:
此部分待更新!
三、超参数
1 什么是超参数?
超参数 : 在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。
超参数通常存在于:
1. 定义关于模型的更高层次的概念,如复杂性或学习能力。
2. 不能直接从标准模型培训过程中的数据中学习,需要预先定义。
3. 可以通过设置不同的值,训练不同的模型和选择更好的测试值来决定
超参数具体来讲比如算法中的学习率(learning rate)、梯度下降法迭代的数量(iterations)、隐藏层数目(hidden layers)、隐藏层单元数目、激活函数( activation function)都需要根据实际情况来设置,这些数字实际上控制了最后的参数和的值,所以它们被称作超参数。
2.如何寻找超参数的最优值?
在使用机器学习算法时,总有一些难调的超参数。例如权重衰减大小,高斯核宽度等等。这些参数需要人为设置,设置的值对结果产生较大影响。常见设置超参数的方法有:
-
猜测和检查:根据经验或直觉,选择参数,一直迭代。
-
网格搜索:让计算机尝试在一定范围内均匀分布的一组值。
-
随机搜索:让计算机随机挑选一组值。
-
贝叶斯优化:使用贝叶斯优化超参数,会遇到贝叶斯优化算法本身就需要很多的参数的困难。
-
MITIE方法,好初始猜测的前提下进行局部优化。它使用BOBYQA算法,并有一个精心选择的起始点。由于BOBYQA只寻找最近的局部最优解,所以这个方法是否成功很大程度上取决于是否有一个好的起点。在MITIE的情况下,我们知道一个好的起点,但这不是一个普遍的解决方案,因为通常你不会知道好的起点在哪里。从好的方面来说,这种方法非常适合寻找局部最优解。稍后我会再讨论这一点。
-
最新提出的LIPO的全局优化方法。这个方法没有参数,而且经验证比随机搜索方法好。
3.超参数搜索一般过程?
超参数搜索一般过程:
- 将数据集划分成训练集、验证集及测试集。
- 在训练集上根据模型的性能指标对模型参数进行优化。
- 在验证集上根据模型的性能指标对模型的超参数进行搜索。
- 步骤 2 和步骤 3 交替迭代,最终确定模型的参数和超参数,在测试集中验证评价模型的优劣。
其中,搜索过程需要搜索算法,一般有:网格搜索、随机搜过、启发式智能搜索、贝叶斯搜索。
四、激活函数
1.什么是激活函数
激活函数(Activation functions)对于人工神经网络 模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。它们将非线性特性引入到我们的网络中。如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。
2.为什么要使用激活函数?
- 激活函数对模型学习、理解非常复杂和非线性的函数具有重要作用。
- 激活函数可以引入非线性因素。如果不使用激活函数,则输出信号仅是一个简单的线性函数。线性函数一个一级多项式,线性方程的复杂度有限,从数据中学习复杂函数映射的能力很小。没有激活函数,神经网络将无法学习和模拟其他复杂类型的数据,例如图像、视频、音频、语音等。
- 激活函数可以把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。
3.为什么激活函数需要非线性函数?
- 假若网络中全部是线性部件,那么线性的组合还是线性,与单独一个线性分类器无异。这样就做不到用非线性来逼近任意函数。
- 使用非线性激活函数 ,以便使网络更加强大,增加它的能力,使它可以学习复杂的事物,复杂的表单数据,以及表示输入输出之间非线性的复杂的任意函数映射。使用非线性激活函数,能够从输入输出之间生成非线性映射。
4.常见激活函数
具体激活函数学习参考以下资料:
一些选择激活函数的经验法则:
如果输出是0、1值(二分类问题),则输出层选择 sigmoid 函数,然后其它的所有单元都选择 Relu 函数。这是很多激活函数的默认选择,如果在隐藏层上不确定使用哪个激活函数,那么通常会使用 Relu 激活函数。有时,也会使用 tanh 激活函数。
五、优化方法总结
一、基本的梯度下降方法
深度学习网络训练过程可以分成两大部分:前向计算过程与反向传播过程。前向计算过程,是指通过我们预先设定好的卷积层、池化层等等,按照规定的网络结构一层层前向计算,得到预测的结果。反向传播过程,是为了将设定的网络中的众多参数一步步调整,使得预测结果能更加贴近真实值。
那么,在反向传播过程中,很重要的一点就是:参数如何更新?或者问的更具体点:参数应该朝着什么方向更新?
显然,参数应该是朝着目标损失函数下降最快的方向更新,更确切的说,要朝着梯度方向更新! 假设网络参数是 θ \\thetaθ,学习率是 η \\etaη,网络表示的函数是 J ( θ ) J(\\theta)J(θ),函数此时对θ \\thetaθ的梯度为:▽ θ J ( θ ) \\bigtriangledown_\\theta J(\\theta)▽θJ(θ),于是参数 θ \\thetaθ 的更新公式可表示为:
在深度学习中,有三种最基本的梯度下降算法:SGD、BGD、MBGD,他们各有优劣。
(1)随机梯度下降法 SGD
随机梯度下降法 (Stochastic Gradient Descent,SGD),每次迭代(更新参数)只使用单个训练样本( x ( i ) , y ( i ) ) (x^(i), y^(i))(x(i),y(i)),其中x是输入数据,y是标签。因此,参数更新表达式如下:
优点: SGD 一次迭代只需对一个样本进行计算,因此运行速度很快,还可用于在线学习。
缺点:(1)由于单个样本的随机性,实际过程中,目标损失函数值会剧烈波动,一方面,SGD 的波动使它能够跳到新的可能更好的局部最小值。另一方面,使得训练永远不会收敛,而是会一直在最小值附近波动。(2)一次迭代只计算一张图片,没有发挥GPU并行运算的优势,使得整体计算的效率不高。
(2)批量梯度下降法 BGD
批量梯度下降法 (Batch Gradient Descent,BGD),每次迭代更新中使用所有的训练样本,参数更新表达式如下:
优缺点分析:BGD能保证收敛到凸误差表面的全局最小值和非凸表面的局部最小值。但每迭代一次,需要用到训练集中的所有数据,如果数据量很大,那么迭代速度就会非常慢。
(3)小批量梯度下降法 MBGD
小批量梯度下降法 (Mini-Batch Gradient Descent,MBGD),折中了 BGD 和 SGD 的方法,每次迭代使用 batch_size 个训练样本进行计算,参数更新表达式如下:
优缺点分析:因为每次迭代使用多个样本,所以 MBGD 比 SGD 收敛更稳定,也能避免 BGD 在数据集过大时迭代速度慢的问题。因此,MBGD是深度学习网络训练中经常使用的梯度下降方法。
深度学习中,一般的mini-batch大小为64~256,考虑到电脑存储设置和使用的方式,如果mini-batch是2的次方,代码会运行地更快一些。
上图是BGD和MBGD训练时,损失代价函数的变化图。可见BGD能使代价函数逐渐减小,最终保证收敛到凸误差表面的全局最小值;MBGD的损失代价函数值比较振荡,但最终也能优化到损失最小值。
二、Momentum 动量梯度下降
Momentum 主要引入了基于梯度的移动指数加权平均的思想,即当前的参数更新方向不仅与当前的梯度有关,也受历史的加权平均梯度影响。对于梯度指向相同方向的维度,动量会积累并增加,而对于梯度改变方向的维度,动量会减少更新。这也就使得收敛速度加快,同时又不至于摆动幅度太大。如下图红色线所示:
动量梯度下降(Momentum)的参数更新表达式如下所示:
其中,λ \\lambdaλ 表示动量参数momentum;当λ = 0 \\lambda=0λ=0时,即是普通的SGD梯度下降。0 < λ < 1 0<\\lambda<10<λ<1 ,表示带了动量的SGD梯度下降参数更新方式,λ \\lambdaλ通常取0.9。
普通SGD的缺点:SGD很难在沟壑(即曲面在一个维度上比在另一个维度上弯曲得更陡的区域)中迭代,这在局部最优解中很常见。在这些场景中,SGD在沟壑的斜坡上振荡,同时沿着底部向局部最优方向缓慢前进。为了缓解这一问题,引入了动量momentum。
本质上,当使用动量时,如同我们将球推下山坡。球在滚下坡时积累动量,在途中变得越来越快。同样的事情发生在参数更新上:对于梯度指向相同方向的维度,动量会积累并增加,而对于梯度改变方向的维度,动量会减少更新。结果,我们获得了更快的收敛和减少的振荡。
三、Adam 优化器
Adam 是另一种参数自适应学习率的方法,相当于 RMSprop + Momentum,利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。公式如下:
一阶矩和二阶矩 m t 、 v t m_t、v_tmt、vt 类似于动量,将其初始化为:m 0 = 0 , v 0 = 0 m_0=0, v_0=0m0=0,v0=0
m t 、 v t m_t、v_tmt、vt分别是梯度的一阶矩(均值)和二阶矩(非中心方差)的估计值:
由于移动指数平均在迭代开始的初期会导致和开始的值有较大的差异,所以我们需要对上面求得的几个值做偏差修正。通过计算偏差校正的一阶和二阶矩估计来抵消这些偏差:
然后使用这些来更新参数,就像在 RMSprop 中看到的那样, Adam 的参数更新公式:
在Adam算法中,参数 β1 所对应的就是Momentum算法中的 β 值,一般取0.9,参数 β2 所对应的就是RMSProp算法中的 β 值,一般我们取0.999,而 ϵ 是一个平滑项,我们一般取值为 1 0 − 8 10^−810−8,而学习率则需要我们在训练的时候进行微调。
四、RMSprop 优化器
RMSProp算法的全称叫 Root Mean Square Prop(均方根传递),是 Hinton 在 Coursera 课程中提出的一种优化算法,在上面的 Momentum 优化算法中,虽然初步解决了优化中摆动幅度大的问题。
为了进一步优化损失函数在更新中存在摆动幅度过大的问题,并且进一步加快函数的收敛速度,RMSProp算法对权重 W 和偏置 b 的梯度使用了微分平方加权平均数。优化后的效果如下:蓝色的为Momentum优化算法所走的路线,绿色的为RMSProp优化算法所走的路线。
假设在第 t 轮迭代过程中,各个公式如下所示:
在上面的公式中 s d w s_dwsdw 和 s d b s_dbsdb 分别是损失函数在前 t−1轮迭代过程中累积的梯度平方动量, β 是梯度累积的一个指数。所不同的是,RMSProp 算法对梯度计算了微分平方加权平均数。这种做法有利于消除了摆动幅度大的方向,用来修正摆动幅度,使得各个维度的摆动幅度都较小。另一方面也使得网络函数收敛更快。
六、CNN卷积神经网络
卷积神经网络 – CNN 最擅长的就是图片的处理。它受到人类视觉神经系统的启发。
CNN 2大特点:
- 能够有效的将大数据量的图片降维成小数据量。
- 能够有效的保留图片特征,符合图片处理的原则。
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。目前 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)卷积核的个数和卷积核的通道数是不同的概念。每层卷积核的个数在设计网络时会给出,但是卷积核的通道数不一定会给出。默认情况下,卷积核的通道数=输入的通道数,因为这是进行卷积操作的必要条件。
(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. 池化层
在卷积层中,可以通过调节步长参数 s 实现特征图的高宽成倍缩小,从而降低了网络的参数量。实际上,除了通过设置步长,还有一种专门的网络层可以实现尺寸缩减功能,它就是我们要介绍的池化层(Pooling layer)。
池化层同样基于局部相关性的思想,通过从局部相关的一组元素中进行采样或信息聚合,从而得到新的元素值。通常我们用到两种池化进行下采样:
(1)最大池化(Max Pooling),从局部相关元素集中选取最大的一个元素值。
(2)平均池化(Average Pooling),从局部相关元素集中计算平均值并返回。
3. 激活函数
激活函数也是神经网络不可缺少的部分,激活函数是用来加入非线性因素,提高网络表达能力,卷积神经网络中最常用的是ReLU,Sigmoid使用较少。
具体如何选择合适的激活函数。可参考这篇博文:神经网络搭建:激活函数总结 或者上文介绍。
4.全连接层
全连接层FC,之所以叫全连接,是因为每个神经元与前后相邻层的每一个神经元都有连接关系。如下图所示,是一个简单的两层全连接网络,输入时特征,输出是预测的结果。
全连接层的参数量是可以直接计算的,计算公式如下:
按照上图搭建的两层全连接网络,要训练分辨率仅仅是 28x28=784 的黑白图像,就有近 40 万个待优化的参数。现实生活中高分辨率的彩色图像,像素点更多,且为红绿蓝三通道信息。待优化的参数过多, 容易导致模型过拟合。为避免这种现象,实际应用中一般不会将原始图片直接喂入全连接网络。
在实际应用中,会先对原始图像进行卷积特征提取,把提取到的特征喂给全连接网络,再让全连接网络计算出分类评估值。
5. 网络参数量与计算量
1 卷积层
比如:输入是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
2 全连接层
比如第一层节点数是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),继续迭代;如果满足就进入下一步;
-
训练结束,将权值和阈值保存在文件中。这时可以认为各个权值已经达到稳定,分类器已经形成。再一次进行训练,直接从文件导出权值和阈值进行训练,不需要进行初始化。
经典网络介绍:
CNN总结
本文学习参考资料:
水很深的深度学习-Task04卷积神经网络CNN_GoAl的博客-CSDN博客
CNN 的价值:
- 能够将大数据量的图片有效的降维成小数据量(并不影响结果)
- 能够保留图片的特征,类似人类的视觉原理
CNN 的基本原理:
- 卷积层 – 主要作用是保留图片的特征
- 池化层 – 主要作用是把数据降维,可以有效的避免过拟合
- 全连接层 – 根据不同任务输出我们想要的结果
CNN 的实际应用:
- 图片分类、检索
- 目标定位检测
- 目标分割
- 人脸识别
- 骨骼识别
七、RNN循环神经网络
RNN 的基本原理
传统神经网络的结构比较简单:输入层 – 隐藏层 – 输出层。如下图所示:
RNN 跟传统神经网络最大的区别在于每次都会将前一次的输出结果,带到下一次的隐藏层中,一起训练。如下图所示:
以上未完待更新!!!!!!!
本文参考资料及相关深度学习资料推荐
以上仅供个人学习,侵权联系删除!
以上是关于深度学习笔记总结(待更新)的主要内容,如果未能解决你的问题,请参考以下文章