【人工智能】— 深度神经网络、卷积神经网络(CNN)、多卷积核、全连接、池化
【人工智能】—深度神经网络、卷积神经网络(CNN)、多卷积核、全连接、池化深度神经网络训练训练深度神经网络参数共享卷积神经网络(CNN)卷积多卷积核卷积全连接最大池化卷积+池化拉平向量激活函数优化小结深度神经网络训练Pre-training+Fine-tuning
Pre-training(预训练):监督逐层训练是多隐层网络训练的有效手段,每次训练一层隐层结点,训练时将上一层隐层结点的输出作为输入,而本层隐结点的输出作为下一层隐结点的输入,这称为”预训练”.Fine-tuning(微调):在预训练全部完成后,再对整个网络进行微调训练.微调一般使用BP算法.Comments:预训练+微调的做法可以视为将大量参数分组,对每组先找到局部看起来比较好的设置,然后再基于这些局部较优的结果联合起来进行全局寻优.训练深度神经网络参数共享参数共享是深度神经网络中的一种技术,它使多个神经元在网络中使用相同的参数集。这种技术有助于减少训练网络所需的参数数量,从而提高其计算效率。
卷积神经网络(CNN)CNN是一种层次特征提取器,用于提取越来越高层次的特征。由于特征的感受域越来越大,特征从局部变为全局。
卷积卷积是指对两个函数进行加权求和的操作。在卷积神经网络中,卷积操作是指将输入数据与一个卷积核(也称为滤波器或权重)进行卷积计算,得到一个特征映射的过程。
具体来说,卷积操作包括以下三个要素:
输入数据:需要进行卷积计算的数据。卷积核:用于对输入数据进行卷积的权重参数。特征映射:经过卷积操作得到的输出结果。多卷积核在卷积神经网络中,通常会在每一层使用多个卷积核(也称为过滤器或滤波器)来提取不同的特征。这是因为只使用一个卷积核无法充分提取输入数据的全部信息,而使用多个卷积核可以提取更多的特征信息。
如果只使用一个卷积核来提取特征,则可能会忽略输入数据中的其他特征信息,从而导致信息丢失。而使用多个卷积核可以提取更多的特征信息,并且可以通过堆叠这些特征来形成更高级别的特征表示。高级别的特征通常是由低级别的特征组合而成的,这也是为什么需要使用多个卷积核的原因。
卷积全连接最大池化卷积+池化拉平向量激活函数优化当计算从输出到输入的参数梯度时,这就是为什么它被称为反向传播。由于卷积本质上是加权和,CNN的BP类似于全连接网络的BP。小结CNN是分层特征提取器,高层特征是下层特征的组合。卷积是所有输入通道的加权和CNN最常用的激活是ReLUCNN最常用的池化策略是最大池化训练策略是BP在验证集中找到导致最大响应的补丁是可视化特征的一种非常简单的方法。LeNet-5、AlexNet、GoogleNet、VGG-Net、ResNet、BNBP神经网络怎么画图 bp神经网络视频
学习来源:闵帆
文章目录BP神经网络一、前言二、神经元模型三、BP神经网络机制1.前向forward预测2.后向backpropagation调整权重3.固定网络结构四、具体实现1.代码2.运行截图总结BP神经网络一、前言神经网络顾名思义是利用类似生物神经元的结构来完成数据处理的任务,进而实现分类或者识别的功能.
生物神经网络处理的是电信号,处理的基本单元就叫做神经元,如下图1所示.
图1.生物神经元
一个神经元的突触与其他一个或者多个神经元的树突相连接,以此来传递电信号.数以亿计的神经元相互连接就构成了神经网络,也被叫做生物神经网络.
按照这样的思想,通过代码构建出类似的结构,这就叫做人工神经网络.BP神经网络不过是人工神经网络的一种,是因为其中采用了BP算法.
更加详细的解释和内容可以观看视频https://www.bilibili.com/video/BV1bx411M7Zx
二、神经元模型在周志华的机器学习一书中提到了一种简单但是非常经典的模型,就是“M-P神经元模型”,如下图2所示.
图2.M-P神经元模型
在这个模型中,神经元接收到来自
激活函数和其他的函数并无差别.作为函数,我们通过上面的图就已经了解到了函数的输入.此时函数的输出就只有一个值,这个值根据不同的激活函数有不同的表示.
最简单的激活函数跃迁函数,其表达式如下:
这就好像一种非黑即白的思想,当然对于函数图像来说自然也就是不平滑和不连续.所以在神经网络中常用的是另一个激活函数,其表达式如下.
该函数输出值的范围在之间,函数图像平滑且连续.并且这个函数的导数为:
三、BP神经网络机制BP神经网络是一种多层前馈神经网络,主要特点是信号前向传递,误差反向传播.
在前向传递中,输入信号从输入层经隐含层逐层处理,直至输出层.每一层的神经元状态只影响下一层神经元状态.
如果输出层得不到期望输出,则转入反向传播,根据预测误差调整网络权值和阈值,从而使BP神经网络预测输出不断逼近期望输出.
单隐藏层BP神经网络的拓扑结构如下图3所示:
图3.单隐藏层BP神经网络拓扑结构
1.前向forward预测以上图为例,输入层有个节点,隐藏层有各节点,输出层有个节点.输入层和隐藏层间的权重为,隐藏层与输出层的权重为,输入变量为
则隐藏层的输出为:
输出层的输出为:
输出层有几个节点就代表有几个类别,哪个节点的输出值大就判断为哪类.
2.后向backpropagation调整权重虽然在输出层说过谁的输出值大就归到哪一类,但是输出结果往往不尽人意.
例如有三个类别ABC,有个物品是A类,用三元组表示输出就应该是[1,0,0].可实际结果却是[0.3,0.5,0.6],错误就是[0.7,-0.5,-0.6].
为了缓解这种问题的出现,所以就需要对与输出层相连的隐藏层进行一个问责机制,因为是隐藏层的输入导致了最后的输出.由此问题转换为了调节权重进而降低错误偏差.这是一个函数,很自然的就联想到之前矩阵分解中的梯度下降方法.
整体来看,这是一个迭代的过程,反向地对节点间权重都进行了修改.
误差函数:假设有个输入样本,则每个输入样本的误差函数为:
3.固定网络结构隐藏层的节点个数是人为设置的,各个节点之间的权值也是随机生成的.
对于不同的问题,存在着不同的节点和权值.
四、具体实现1.代码将读取数据和一些工具类函数例如
packageann;importjava.io.FileReader;importjava.util.Arrays;importjava.util.Random;importweka.core.Instances;/***GeneralANN.Twomethodsareabstract:forwardandbackPropagation.**@authorShi-HuaiWenEmail:shihuaiwen@outlook.com.*/publicabstractclassGeneralAnn{/***Thewholedataset.*/Instancesdataset;/***Numberoflayers.Itiscountedaccordingtonodesinsteadofedges.*/intnumLayers;/***Thenumberofnodesforeachlayer,e.g.,[3,4,6,2]meansthatthere*are3inputnodes(conditionalattributes),2hiddenlayerswith4and6*nodes,respectively,and2classvalues(binaryclassification).*/int[]layerNumNodes;/***Momentumcoefficient.*/publicdoublemobp;/***Learningrate.*/publicdoublelearningRate;/***Forrandomnumbergeneration.*/Randomrandom=newRandom();/***********************Thefirstconstructor.**@paramparaFilenameThearfffilename.*@paramparaLayerNumNodesThenumberofnodesforeachlayer(maybedifferent).*@paramparaLearningRateLearningrate.*@paramparaMobpMomentumcoefficient.*********************/publicGeneralAnn(StringparaFilename,int[]paraLayerNumNodes,doubleparaLearningRate,doubleparaMobp){//Step1.Readdata.try{FileReadertempReader=newFileReader(paraFilename);dataset=newInstances(tempReader);//Thelastattributeisthedecisionclass.dataset.setClassIndex(dataset.numAttributes()-1);tempReader.close();}catch(Exceptionee){System.out.println("Erroroccurredwhiletryingtoread+paraFilename+inGeneralAnnconstructor. "+ee);System.exit(0);}//Oftry//Step2.Acceptparameters.layerNumNodes=paraLayerNumNodes;numLayers=layerNumNodes.length;//Adjustifnecessary.layerNumNodes[0]=dataset.numAttributes()-1;layerNumNodes[numLayers-1]=dataset.numClasses();learningRate=paraLearningRate;mobp=paraMobp;}//Ofthefirstconstructor/***********************Forwardprediction.**@paramparaInputTheinputdataofoneinstance.*@returnThedataattheoutputend.*********************/publicabstractdouble[]forward(double[]paraInput);/***********************Backpropagation.**@paramparaTargetFor3-classdata,itis[0,0,1],[0,1,0]or[1,0,0].*********************/publicabstractvoidbackPropagation(double[]paraTarget);/***********************Trainusingthedataset.*********************/publicvoidtrain(){double[]tempInput=newdouble[dataset.numAttributes()-1];double[]tempTarget=newdouble[dataset.numClasses()];for(inti=0;i