当前位置: 首页 > 科技观察

浅谈CNN和RNN

时间:2023-03-17 11:54:27 科技观察

【.com原稿】1简介上一篇主要讲解了深度学习的基础,并对神经网络和BP算法做了额外的延伸和扩展。但作为当下最热门的人工智能技术,掌握这些内容是远远不够的。由于深度学习实际面临的问题往往不是线性可分的,有时甚至超过分类问题,因此需要对深度学习模型进行改进,优化训练模型网络,使用于预测结果的数据网络更富有,更聪明。实现真正的智能,就是训练模型通过输入数据真实地预测结果,并在每次预测时加强和优化自己的网络模型,就像一个“不断学习和提高的人”。随着时间和训练次数的推进,训练出来的模型自身的能力会越来越强。这样的网络模型才是我们真正需要的。当然,要实现这一步,光靠以前的线性网络模型和浅层和深层神经网络是远远不够的。因此,在一篇稿件中,我们会对神经网络进行扩展和补充,是对神经网络模型的一种优化,让实际可以使用的场景更加广泛和丰富。2卷积神经网络(CNN)2.1卷积神经网络VS传统神经网络CNN全称为卷积神经网络,那么卷积神经网络和之前的神经网络有什么区别呢?卷积神经网络(ConvolutionalNeuralNetwork)可以有效的大大减少传统神经网络对输入数据的预处理环节,降低过程的复杂度。但是这种方法会导致网络结构整体复杂度的增加,因为它是通过对输入层或者隐藏层进行傅里叶卷积运算来进行输出,增加了一个网络卷积层。这将使网络更难优化并容易过度拟合。因此,这种神经网络主要用于图像分类和物体识别等场景,因为图像的预处理比较复杂。卷积神经网络虽然复杂,但是减少了图像预处理环节,直接使用输入图像作为输入数据就足够了,通过卷积神经网络的非线性可以得到目标函数的近似结构,从而获得更好的特征表达。2.2卷积神经网络结构层次卷积神经网络主要分为数据输入层(InputLayer)、卷积计算层(CONVLayer)、ReLU激励层(ReLULayer)、池化层(PoolingLayer)、全连接层(FCLayer))五个层级,这五个层级依次相连,每一层都接受上一层的输出特征数据提供给下一层。数据输入层是对输入数据进行特征提取;卷积计算层就是对这些特征进行卷积映射;激励层是利用非线性激活函数刺激满足条件的神经元,将特征信息传递给下一个神经元。;池化层用于压缩数据量和参数量,从而减少过拟合;全连接层是将所有输出层的特征信息连接起来,对信息进行归纳整理,完成输出。这些级别的详细信息如下所述。2.3输入层(InputLayer)2.3.1预处理的道理和神经网络/机器学习一样,都需要对输入数据进行预处理。进行预处理的主要原因有:1.输入数据单元可能不同,因此神经网络收敛速度可能较慢,导致训练时间过长;2.数据范围大的输入在模式分类中的作用会太大,数据范围小的输入的作用可能有偏差。小的;3.由于神经网络中激活函数的取值范围有限,因此需要将网络训练的目标数据映射到激活函数的取值范围内;4.Sigmod激活函数(0,1)区间外的区域非常平缓,导致判别度太小,影响最终输出效果。2.3.2预处理方式输入层对数据进行预处理的方式主要有3种。三种数据预处理方法各不相同,即:1.去意义:是将输入数据的各个维度中心化为0;2.归一化:将输入数据的各个维度的量级归一化到相同的范围内。具体操作在之前的推荐系统文稿中有介绍。3、PCA/白化:即用PCA降维或白化,即对数据各特征轴的幅值进行归一化处理,也是最常用的数据预处理方法。2.3.3预处理效果三种预处理方式的效果图如下:例如,带白化的预处理会使输入数据或特征的相关性降低,使所有特征具有相同的方差。2.4卷积层(CONVLayer)2.4.1卷积神经网络在讲卷积层之前,先对卷积神经网络有个大概的了解。卷积神经网络是一种层次化的网络结构,不同的层级有不同的形式或操作和功能。卷积神经网络主要适用于图像信息处理场景,卷积层是识别图像中最关键的步骤或层级。类似于人脑在识别图片的过程中,不同的皮质层会处理来自不同方面的数据,比如颜色、形状等,然后将不同皮质层的处理结果进行合并映射,得到最终的结果。也就是说,第一部分本质上是局部观察结果,第二部分是整体结果的组合。因此,卷积神经网络是基于人脑的图像识别过程。每个神经元不需要感知全局图像,只需要感知局部图像,最后在更高层次上执行局部信息。合成操作产生全局信息。2.4.2卷积层参数卷积层也称为卷积计算层。类似于人脑识别图像的过程。它主要有以下几个概念:1.局部相关性:每个神经元都被看作一个过滤器,其作用是识别局部数据;2.滑动窗口(感受野),即在本地数据上计算filter,滑动会预先设置好步长,移动位置得到下一个窗口;3、对于窗口内的滑动过程,有depth、stride、zero-padding等几个重要的参数。depth是转换次数(结果生成的深度);步骤是设置每一步移动多少;padding值是在矩阵周围添加一些扩展值(目的是为了解决不规则的图像输入)。计算模型如下图所示:2.4.3卷积计算卷积计算过程中一个重要的机制就是参数共享机制。假设每个神经元连接到数据窗口的权重是固定的,即每个神经元的连接权重是固定的,因此神经元可以看成是一个模块;即每个神经元只关注一个特征,这样需要计算的权重数量就会大大增加。减少。卷积计算就是将一组固定权重与不同窗口的数据做内积,称为卷积。2.5激励层(ReLULayer)2.5.1非线性激励函数激励层顾名思义就是加入一个激励函数来刺激或激发其神经元,即利用映射函数完成非线性映射.在卷积神经网络中,激活函数是非线性的。激励层是连接在卷积层后面的一层网络,负责对卷积层的输出进行非线性映射,即激励。在卷积神经网络中,经常使用的非线性映射函数包括S函数(Sigmoid)、双曲正切函数(Tanh)、ReLU、LeakyReLu、ELU和Maxout。部分激励函数的函数图像如下:2.5.2激励层的选择由于非线性激励函数很多,但各不相同,因此在选择激励层的非线性激励函数时有不同的建议:1.VolumeIn乘积神经网络(CNN),首先尽量不要使用S函数(sigmoid)。如果要使用,建议只在全连接层使用;2、推荐优先使用RELU,因为RELU函数的迭代速度快,但可能会导致效果不佳。好的;3、如果选择RELU激活函数后无法达到预期效果(激活函数失效),则考虑使用LeakyReLu或Maxout;4.双曲正切函数(tanh)在某些情况下会有更好的结果,但可以应用的场景较少。所以总结一下:全连接层用双曲正切函数和S函数,卷积计算层用ReLu,常用ELU,Maxout用最大值定值。2.6池化层(PoolingLayer)池化层存在于连续卷积层的中间。它的主要作用是通过逐渐减小表示的空间大小来减少网络中的参数量和计算复杂度;而poolinglayer都是在每个featuremap上独立操作的。因此,使用池化层的一个明显优势就是可以压缩数据量和参数量来解决过拟合问题。在池化层中,一般采用两种策略进行压缩以减少特征数量,即MaxPooling和AveragePooling。例如,给定一个向量表示图像,如下图:将上面的向量表示图像池化成四个小表示的格子,那么采用最大池化策略就是每四个正方形格子取最大值,分别得到6,8,3,4,同理,平均池化就是计算每四个正方形格子的平均值,分别得到3,5,2,2,得到上图所示的格子。2.7全连接层(FCLayer)类似于传统神经网络中的结构。卷积神经网络中池化层(poolinglayer,FC)的神经元连接到上一层的所有激活输出,也就是说,两层之间的所有神经元都有权重连接;作为最终的连接整理输出,对每一层的输出结果进行汇总计算,全连接层只会出现在卷积神经网络的末端。3CNN训练算法及CNN优缺点3.1CNN训练算法CNN训练算法与一般的机器学习算法相同。首先需要定义一个损失函数(LossFunction)来计算损失值,从而衡量预测值与实际值之间的误差。这里一般使用误差平方和公式。对于W和b的取值寻找网络中的最小损失函数,卷积神经网络常用的是随机梯度下降算法(SGD),在之前的推荐算法论文中有介绍。简而言之,卷积神经网络的训练算法实际上是机器学习中的反向传播(BP)算法。SGD需要计算W和b的偏导数,根据偏导数迭代更新W和b。3.2CNN的优缺点对于卷积神经网络,有几个优点:1.卷积核(共享参数)可以共享,使得卷积神经网络对高维数据处理没有压力;2.无需选择特征属性,只需要对每个权重进行训练即可得到特征值;3、在深度神经网络中,对图像信息的提取更加丰富,最终的表达效果更好;但是卷积神经网络也有一些缺点,比如卷积神经网络中需要调整参数,这会导致需要大量的样本,使得训练迭代次数更多,最好使用GPU为了训练;另外,对于卷积神经网络的每一层输出的物理意义并不明确,即很难从每一层的输出中看出意义,即可解释性差。4Regularization和Dropout扩展神经网络的学习能力受神经元数量和神经网络层次的影响。一般来说,神经元数量越多,神经网络的层次越高,神经网络的学习能力越强,但可能存在过拟合问题。解决过拟合的主要方法是正则化(Regularization)和Dropout。这两种方法在之前的神经网络手稿中都有描述。这里做进一步的解释:1.正则化是为了降低模型的复杂度,通过在代价函数中加入一个正则项来减少过拟合;Dropout通过随机删除神经网络中的部分神经元来解决过拟合问题,使得每次迭代只使用部分神经元来训练模型。得到W和d的值,让CNN没有太多的泛化能力,通过合并多次迭代的结果可以提高模型的准确率。2.一般来说,对于同一组训练数据,使用不同的神经网络后,计算其输出的平均值可以减少过拟合。所以Dropout就是利用这个原理每次丢弃大约一半的隐藏层神经元,相当于在不同的神经网络上训练,减少了神经元之间的依赖,即每个神经元不能依赖其他几个神经元(这里指到想要在层与层之间连接的神经元),使得神经网络更加健壮,并且可以更好地提高准确性。对于一些典型的卷积神经网络模型的介绍,网上有资料。读者有兴趣可以自行搜索浏览,这里不再赘述。5递归神经网络(RNN)5.1应用场景递归神经网络被用在很多场景中。在目前的互联网或信息技术公司中,RNNs最常见的用途是自然语言处理(NLP)、机器翻译、语音识别、图像描述生成,自然语言处理还包括语言模型和文本生成,主要分为语音/互联网行业语义识别部门。推送方向的识别和描述与卷积神经网络(CNN)的区别在于,CNN是识别一张图片,比如图片中是什么,而RNN也可以识别图片中是什么,但是使用RNN更多描述图片上的事物,提供图片上的内容信息。那么有人会问了,既然有了BP神经网络和CNN,为什么还需要RNN呢?这与RNN的循环有关。之前的BP神经网络和CNN的每个神经元的输入输出都是相互独立的。没有干扰和连接,但在实际应用场景中呢?有些场景的输出内容与之前的内容相关,这是一个“记忆”的概念。因此,RNN引入了这个概念,循环是指每个Neuron都执行相同的任务,但输出不仅取决于输入,还取决于神经元自身之前的“记忆”。5.2RNN结构因为“记忆”的概念与时间序列有关,所以RNN的结构可以按照下图所示的时间序列展开神经元序列得到:上图结构中,是输入在时间t,并且是在时间t的输出的“记忆”,是在时间t的输出。另一种循环神经网络是双向RNN(BidirectionalRNN),即在前面的结构中,当前t的输出不仅与前面的序列有关,还与后面的序列有关。例如:要预测句子中的缺失词,那么就需要根据上下文进行预测。BidirectionalRNN其实是一个比较简单的RNN结构,由两个RNN上下堆叠而成。输出是这两个RNN的隐藏层的状态决策。5.3训练算法5.3.1BPTT算法循环神经网络(RNN)的训练其实和CNN训练是一样的,也可以使用BP反向传播误差算法。唯一不同的是RNN中的参数W是共享的,而在随机梯度下降算法中,每一步的输出不仅依赖于当前步的网络,还需要前几步的状态网络,也就是之前的BP短发改版了。这种修改后的BP算法称为BPTT(BackpropagationThroughTime)。BPTT算法与BP算法相同。多层训练时,可能会出现梯度消失和爆炸的问题。BPTT算法的思路和BP算法一样,都是求偏导,但是需要同时考虑时间对步长的影响。5.3.2LSTM在BPTT算法中可能会出现梯度消失和梯度爆炸的问题,这是BPTT计算中长期依赖“记忆”问题造成的,而LSTM特别适合解决这类长期依赖问题。LSTM是RNN的一种,结构大致相同。不同的是,修改了LSTM的“记忆神经元”,记录的信息会一致地传递下去,不该记录的信息会被截断。下图所示的LSTM结构图在LSTM中,一个关键点就是“细胞状态”,也就是记忆神经元的状态。细胞状态类似于一条传送带,直接运行在整条链条上,只有少量的线性交互过程,这样更容易保持其上流动的信息不变。那么如何控制“细胞状态”呢?控制“细胞状态”的过程有以下几个步骤:1.LSTM可以通过“门”的结构去除或增加“细胞状态”的信息;2.包含一个sigmoid神经??网络层和一个pointwist乘法运算;3、Sigmoid层输出一个0到1之间的概率值,描述每个部分能通过多少,0表示“不允许任务变量通过”,1表示“运行所有变量通过”;4.LSTM中主要有3个“门”结构来控制“细胞状态”。5.3.3三个“门”?下面是LSTM的三个“门”的扩展:1、第一个“门”也叫“遗忘门”,决定从“细胞状态”中丢弃什么信息;例如,在语言模型中,细胞状态可能包含性别信息。当我们看到新名词时,可以考虑忘记旧的数据信息;2.第二个门也叫“信息增加门”,决定什么新信息放入“cellstate”,这里Sigmoid层决定什么值需要更新;Tanh层创建一个新的候选向量,主要是为状态更新做准备。3.第三个“门”是根据“细胞状态”得到输出。通过第一个“门”和第二个“门”后,可以直接传递信息的删除和添加,进行“小区状态”。》更新,第三个“门”先运行一个sigmoid层,判断哪部分细胞状态输出,然后用tanh对细胞状态进行处理,得到-1到1之间的值,再与输出的比较sigmoid门相乘,输出过程决定了输出的部分,三个“门”的部分示意图如下:5.3.4LSTM结构修改对于上述的LSTM结构,部分部分也进行了修改,比如在第二个“gate”Connections”层之前添加“quotaphone”,这样“gate”层也接受cellstate的输入;并且通过耦合遗忘门和更新输入门,而不是考虑遗忘什么信息和添加什么信息,而是一起考虑。在LSTM结构的设计改造中,比较突出的结构是2014年提出的一种结构,如下图,主要区别在于以下几点:1.该结构将遗忘门和输入门结合成单一更新门,即遗忘信息和输入信息一起考虑;2.数据单元状态和隐藏状态合并;3.它的结构比LSTM简单。6小结与补充6.1小结目前深度学习神经网络的主要应用场景有图像识别、文字识别、游戏、语言识别等,其中一些主要的算法上面也已经介绍过了。此外,还有一些辅助算法,如max-min算法。对于这块内容我会在下面提到。因此,在学习神经网络时,一定要分类理解,因势利导,结合实际应用场景功能,完成神经网络模型的选择和训练,以达到最佳的输出效果。关于CNN和RNN的一些扩展,包括FastR-CNN(快速卷积)和R-FCN(基于区域的全卷积)的内容和结构,有兴趣的读者可以自行学习,实际应用场景并不多。6.2补充对于使用神经网络知识的深度学习领域,还有一些额外的知识内容需要了解,比如迁移学习和maximin算法。这里我将对这些做一个补充,作为引子,以激发读者更多讨论的兴趣。6.2.1迁移学习迁移学习是一种算法思想,是一种算法训练方法。一般的深度学习算法在我们的训练数据集中都会需要大量的数据标注数据,但是在实际应用中,有很多场景数据标注相对较少。的。因此,用较少的数据进行训练是很难达到和以前一样好的效果的。迁移学习就是解决这类问题的一种算法思想。它是指基于很少标记的数据集的高质量模型训练。在目前的应用场景中,迁移学习主要用于图像检测或标注。6.2.2极小极大算法极小极大算法(MiniMax)是一种在失败的最大可能性中寻找最小值的算法,即尽量减少对手的最大利润。该算法通常以递归形式实现,常用于国际象棋或竞技类游戏程序中。这个算法也是一个零和博弈,即双方的输赢之和为0,即一方必须在可选条件下选择一种使自己优势最大化的方法,而另一方也需要选择一种使对手的优势最小化的方法。一种转化方法。总之,在游戏中有人赢钱,就一定有人输钱,输的钱数等于赢的钱数。但是,在这个算法的过程中,由于使用了递归操作,所以算法的层次深度会很深。学过数据结构的都知道,递归算法虽然容易写代码,但是时间复杂度高,甚至有可能陷入,所以可以在使用最大最小值算法来优化神经网络尽可能降低神经网络训练的时间复杂度。【原创稿件,合作网站转载请注明原作者和出处为.com】