不是zf网络模型问题wwW等别的38zf还都是正常38zfcom的

这几天几乎全中国都在议论38元一只的大虾,还衍生出很多段子。青岛一下子措手不及,_转发(zf)股吧_东方财富网股吧
这几天几乎全中国都在议论38元一只的大虾,还衍生出很多段子。青岛一下子措手不及,
这几天几乎全中国都在议论38元一只的大虾,还衍生出很多段子。青岛一下子措手不及,不少人说,几亿元打造的好客山东被一只大虾给毁了,发现青岛原来这个样子。 其实凭心而论,山东人民确实很好客,青岛城市不错,景色漂亮,旅游氛围在几个海滨城市里面算好的,相信大多数去过青岛的人是有好感的。所以这一次青岛其实有点冤,因为青岛和三亚还不一样。记得前几年还爆过三亚宰客事件,但说实话,三亚宰客是很普遍的。但青岛,其实是个个案。但为什么一个可能是个案的大虾宰客事件能在十一之后红遍中国呢?其实不是因为青岛怎么样。现在互联网的传播不确定性很大。不知道哪里就会成为爆点,这里有一本讲传播的书叫《引爆点》。而青岛这个个案就具备这种引爆点的特征。首先中国人交换信息最多的两个地方。线上是微信群微信朋友圈,线下是饭桌。38元一只大虾天然带有一种笑话式的喜感,21世纪什么传播的最快,不是疟疾病毒,已经被屠呦呦控制住了,而是段子,关于大虾的改编段子很快传播,譬如3元一碗米饭,288元一罐鱼子酱。另外,大虾的事情很适合在中国枯燥的饭桌上讨论,大家笑笑。当然,这都是事后分析,只是青岛市的市长们,估计在家里感叹自己时运不济了。
抱歉!内容已删除。
作者:您目前是匿名发表 &
作者:,欢迎留言
提示:用户在社区发表的所有资料、言论等仅代表个人观点,与本网站立场无关,不对您构成任何投资建议。用户应基于自己的独立判断,自行决定证券投资并承担相应风险。
扫一扫下载APP
东方财富产品
关注东方财富
扫一扫下载APP
关注天天基金未找到信息!
未找到信息!
收录 / 索引信息
未找到信息!
一般不超过80字符
网站关键词
一般不超过100字符
一般不超过200字符
同主机安全
虚假或欺诈网站
挂马或恶意网站
未存在违规内容
alexa排名趋势
服务器信息
服务器类型
源文件大小
压缩后大小
最后修改时间
关闭关闭关闭404 Not Founds404 Not FoundThe requested URL was not found on this server.您要找的内容已被删除晓雷机器学习笔记晓雷机器学习笔记记录自己如何从零基础到掌握机器学习关键算法关注专栏更多最新文章{&debug&:false,&apiRoot&:&&,&paySDK&:&https:\u002F\u002Fpay.zhihu.com\u002Fapi\u002Fjs&,&wechatConfigAPI&:&\u002Fapi\u002Fwechat\u002Fjssdkconfig&,&name&:&production&,&instance&:&column&,&tokens&:{&X-XSRF-TOKEN&:null,&X-UDID&:null,&Authorization&:&oauth c3cef7c66aa9e6a1e3160e20&}}{&database&:{&Post&:{&&:{&title&:&历史|文章笔记-从线性分类器到卷积神经网络&,&author&:&xiao-lei-75-81&,&content&:&本文主要是阅读 \u003Ca href=\&http:\u002F\u002Fzhangliliang.com\u002F\u002F14\u002Ffrom-lr-to-cnn\u002F\& data-editable=\&true\& data-title=\&从线性分类器到卷积神经网络\& class=\&\&\u003E从线性分类器到卷积神经网络\u003C\u002Fa\u003E
的笔记。 \u003Cp\u003E前面已经 按照
指数分布族 的视角,把线性回归(高斯分布)与逻辑回归(Bernoulli分布)统一在 广义线性模型 之下。 它是一种偏向数学的视角。阅读了 这篇 \u003Ca href=\&http:\u002F\u002Fzhangliliang.com\u002F\u002F14\u002Ffrom-lr-to-cnn\u002F\& data-editable=\&true\& data-title=\&从线性分类器到卷积神经网络\& class=\&\&\u003E从线性分类器到卷积神经网络\u003C\u002Fa\u003E 之后,发现还有另一种 神经元 的视角可以把逻辑回归 ,SVM,神经网络(NN) 和 CNN都统一在一起。\u003C\u002Fp\u003E\u003Cp\u003E这篇笔记的目的主要有几个关键点:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E引入 神经元视角统一看待几个传统机器学习算法和神经网络 \u003C\u002Fli\u003E\u003Cli\u003E说明近年来火热的一种神经网络 (深度卷积网络 也叫 深度学习)为什么在沉寂一段时间后又突然热起来。(换句话说:深度学习为什么有效?做了那些改进?)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E不过笔记旨在说明思想,不是专门讲解知识点的教程。看不懂的同学可以把它当作机器学习的一篇发展史概述。\u003C\u002Fp\u003E\u003Cp\u003E回想前面的两篇 \u003Ca href=\&https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F?refer=xiaoleimlnote\& data-editable=\&true\& data-title=\&线性回归 \& class=\&\&\u003E线性回归 \u003C\u002Fa\u003E
\u003Ca href=\&https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F?refer=xiaoleimlnote\& data-editable=\&true\& data-title=\&logistic regression \& class=\&\&\u003Elogistic regression \u003C\u002Fa\u003E 我们都可以按照 极大似然估计的统计学思想
step1: 假设 \u003Cequation\u003Ey|x\u003C\u002Fequation\u003E 的分布 , step2:利用极大似然估计 得到 \u003Cequation\u003Emax \\; l(\\theta )
\\Leftrightarrow min \\; J(\\theta)\u003C\u002Fequation\u003E 而\u003Cequation\u003EJ(\\theta)\u003C\u002Fequation\u003E 就是我们的损失函数。
(当然也可以不按照这个思路也能得出损失函数 例如 \u003Ca href=\&https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F?refer=xiaoleimlnote\& data-editable=\&true\& data-title=\&线性回归 \& class=\&\&\u003E线性回归 \u003C\u002Fa\u003E 中的开篇就是以数学直观含义直接给出了最小二乘法形式的损失函数 然后才按照似然估计赋予其概率意义)\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cb\u003E【逻辑回归(LR) - 神经元模型】\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E线性回归的目标函数与损失函数分别为\u003Cbr\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cequation\u003E\\hat{y}=\\vec{\\omega}\\cdot\\vec{x}+b\u003C\u002Fequation\u003E , \u003Cequation\u003E\\varepsilon
= \\frac{1}{2}{(y-\\hat{y} )}^{2}\u003C\u002Fequation\u003E (此处是对于单个样本的损失函数)\u003C\u002Fp\u003E\u003Cimg src=\&v2-6ea1517e0f.png\& data-rawwidth=\&462\& data-rawheight=\&280\&\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cp\u003E为了求解二分类问题,我们在线性回归上加一个 sigmoid函数 (作映射 \u003Cequation\u003E(-\\infty, \\infty) \\rightarrow
(0, 1)\u003C\u002Fequation\u003E )
就得到了逻辑回归。\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E 逻辑回归的目标函数与损失函数分别为:\u003Cbr\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cbr\u003E\u003Cimg src=\&v2-0ecda0e4bfe.png\& data-rawwidth=\&315\& data-rawheight=\&76\&\u003E\u003Cimg src=\&v2-69e65c2bd6cedbe21550b.png\& data-rawwidth=\&319\& data-rawheight=\&217\&\u003E\u003Cp\u003E(注意:损失函数刚好是凸函数:全局最优就是局部最优)\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E而逻辑回归模型的另外一个名称为神经元模型——即我们认为大脑的神经元有着像上述模型一样的结构:一个神经元会根据与它相连的神经元的输入(x)做出反应,决定自身的激活程度(一般用sigmoid函数衡量激活程度),并将激活后的数值(y)输出到其他神经元。\u003C\u002Fstrong\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cimg src=\&v2-49b15ed28cc190ab34465.png\& data-rawwidth=\&287\& data-rawheight=\&154\&\u003E(上图为单个的神经元模型)\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cb\u003E【神经网络(Neural Network,简称NN)】\u003C\u002Fb\u003E\u003Cp\u003E逻辑回归的决策平面是线性的,它一般只能够解决样本是线性可分的情况。如果样本呈现非线性的时候,我们可以引入多项式回归。(看下图)\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cimg src=\&v2-0c55aa7f9dfdedf483a8dea.png\& data-rawwidth=\&606\& data-rawheight=\&333\&\u003E(备注:多项式回归也可以看成是线性回归或者逻辑回归的一个特例——将线性回归或者逻辑回归的特征x转化为\u003Cequation\u003Ex^{1},{x}^{2}, {x}^{3} \\cdots\u003C\u002Fequation\u003E等非线性的特征组合,然后对其进行线性的拟合)\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E多项式回归虽然解决了非线性可分问题,但需要人工构造非线性的特征(\u003Cequation\u003Ex^{i}\u003C\u002Fequation\u003E)。\u003C\u002Fp\u003E\u003Cp\u003E而神经网络(NN)既(a)\u003Cu\u003E能够应付样本非线性可分的情况\u003C\u002Fu\u003E,又同时(b)\u003Cu\u003E能够自动构造非线性的特征\u003C\u002Fu\u003E。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cimg src=\&v2-4ccad573ca07f1ed883eb2e5.png\& data-rawwidth=\&389\& data-rawheight=\&281\&\u003E神经网络可以看成“线性组合-非线性激活函数-线性组合-非线性激活函数…”这钟较为复杂网络结构,它的决策面是复杂的,于是能够适应样本非线性可分的情况。中间一列的橙色神经元构成的层次我们称为隐层。我们认为隐层的神经元对原始特征进行了组合,并提取出来了新的特征,而这个过程是模型在训练过程中自动“学习”出来的。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cbr\u003E【\u003Cb\u003E支持向量机(简称SVM)\u003C\u002Fb\u003E】\u003Cp\u003E神经网络的出现一度引起研究热潮,但有如下缺点:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E一般来说需要大量的训练样本。\u003C\u002Fli\u003E\u003Cli\u003E代价函数边界复杂,非凸,存在多个局部最优值。\u003C\u002Fli\u003E\u003Cli\u003E参数意义模糊,比如隐层的神经元个数应该取多少一直没有定论。\u003C\u002Fli\u003E\u003Cli\u003E浅层神经网络(Shallow network)对于特征学习的表达能力有限。(只能学习很底层的浅特征 ,无法得到抽象层次更高的深特征 例如原子-&分子-&细胞 层次逐步加深)\u003C\u002Fli\u003E\u003Cli\u003E深层神经网络(Deep network)的参数繁多,一方面容易导致过拟合问题,另一方面因为训练时间过长而导致不可学习。(参数多容易从噪声中学习模式)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E上世纪90年代\u003Ca href=\&http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSupport_vector_machine\& data-editable=\&true\& data-title=\&SVM\& class=\&\&\u003ESVM\u003C\u002Fa\u003E被提出来后,神经网络一度衰落了。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E典型的(不加核函数的)SVM是 L-SVM,本质上依然是一个线性分类器,SVM的核心思想在于它的分类准则——最大间隔(max margin).\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cimg src=\&v2-e643c294c3fcacb8bbda81.png\& data-rawwidth=\&228\& data-rawheight=\&228\&\u003E(备注:同为线性分类器的拓展,逻辑回归和L-SVM有着千丝万缕的关系,Andrew Ng的课件有一张图很清晰地把这两者的代价函数联系起来了)\u003C\u002Fp\u003E\u003Cp\u003E由于L-SVM是线性分类器,所以不能解决样本线性不可分的问题。于是后来人们引入了核函数的概念,于是得到了K-SVM(K是Kernel的意思)。从本质上讲,核函数是用于将原始特征映射到高维的特征空间中去,并认为在高维特征空间中能够实现线性可分。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cimg src=\&v2-41f9a0c57d56a84de9d2ca1.jpg\& data-rawwidth=\&444\& data-rawheight=\&356\&\u003E\u003Cp\u003ESVM比起神经网络有着以下的优点:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E代价函数是凸函数,存在全局最优值。\u003C\u002Fli\u003E\u003Cli\u003E能够应付小样本集的情况\u003C\u002Fli\u003E\u003Cli\u003E不容易过拟合,并且有着不错的泛化性能和鲁棒性\u003C\u002Fli\u003E\u003Cli\u003E核函数的引入,解决了非线性问题,同时还避免了维数灾难\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cbr\u003E\u003Cp\u003ESVM参考:\u003Ca href=\&http:\u002F\u002Fblog.csdn.net\u002Fv_july_v\u002Farticle\u002Fdetails\u002F7624837\& data-editable=\&true\& data-title=\&支持向量机通俗导论(理解SVM的三层境界)\& class=\&\&\u003E支持向量机通俗导论(理解SVM的三层境界)\u003C\u002Fa\u003E。\u003C\u002Fp\u003E\u003Cp\u003E其实我们依然可以将SVM看成一种特殊的神经元模型:\u003C\u002Fp\u003E\u003Col\u003E\u003Cli\u003EL-SVM本质上跟单神经元(即逻辑回归)模型的最大差别,只是代价函数的不同,所以可以将SVM也理解成一种神经元,只不过它的激活函数不是sigmoid函数,而是SVM独有的一种激活函数的定义方法。\u003C\u002Fli\u003E\u003Cli\u003EK-SVM只是比起L-SVM多了一个负责用于非线性变换的核函数,这个跟神经网络的隐层的思想也是一脉相承的。所以K-SVM实际上是两层的神经元网络结构:第一层负责非线性变换,第二层负责回归。\u003C\u002Fli\u003E\u003Cli\u003E\u003Ca href=\&http:\u002F\u002Fwww.cnki.com.cn\u002FArticle\u002FCJFDTotal-JSJX.htm\& data-editable=\&true\& data-title=\&《基于核函数的SVM机与三层前向神经网络的关系》\& class=\&\&\u003E《基于核函数的SVM机与三层前向神经网络的关系》\u003C\u002Fa\u003E一文中,认为这两者从表达性来说是等价的。(注:这里的“三层前向神经网络”实际上是带一个隐层的神经网络,说是三层是因为它把网络的输入也看成一个层。)\u003C\u002Fli\u003E\u003C\u002Fol\u003E\u003Cp\u003E( 四种算法小结:\u003C\u002Fp\u003E\u003Cimg src=\&v2-28bf778cf0a.png\& data-rawwidth=\&796\& data-rawheight=\&316\&\u003E\u003Cp\u003E)\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E【\u003Cb\u003E卷积神经网络\u003C\u002Fb\u003E】\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E近年来,神经网络又重新兴盛起来了。尤以“卷积神经网络”为其代表。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E生物学背景:\u003C\u002Fp\u003E\u003Cblockquote\u003E引自\u003Ca href=\&http:\u002F\u002Fblog.csdn.net\u002Fzouxy09\u002Farticle\u002Fdetails\u002F8781543\& data-editable=\&true\& data-title=\&Deep Learning(深度学习)学习笔记整理系列之(七)\& class=\&\&\u003EDeep Learning(深度学习)学习笔记整理系列之(七)\u003C\u002Fa\u003E。1962年Hubel和Wiesel通过对猫视觉皮层细胞的研究,提出了感受野(receptive field)的概念,1984年日本学者Fukushima基于感受野概念提出的神经认知机(neocognitron)可以看作是卷积神经网络的第一个实现网络,也是感受野概念在人工神经网络领域的首次应用。神经认知机将一个视觉模式分解成许多子模式(特征),然后进入分层递阶式相连的特征平面进行处理,它试图将视觉系统模型化,使其能够在即使物体有位移或轻微变形的时候,也能完成识别。通常神经认知机包含两类神经元,即承担\u003Cstrong\u003E特征抽取的S-元\u003C\u002Fstrong\u003E和\u003Cstrong\u003E抗变形的C-元\u003C\u002Fstrong\u003E。S-元中涉及两个重要参数,即感受野与阈值参数,前者确定输入连接的数目,后者则控制对特征子模式的反应程度。许多学者一直致力于提高神经认知机的性能的研究:在传统的神经认知机中,每个S-元的感光区中由C-元带来的视觉模糊量呈正态分布。如果感光区的边缘所产生的模糊效果要比中央来得大,S-元将会接受这种非正态模糊所导致的更大的变形容忍性。我们希望得到的是,训练模式与变形刺激模式在感受野的边缘与其中心所产生的效果之间的差异变得越来越大。为了有效地形成这种非正态模糊,Fukushima提出了带双C-元层的改进型神经认知机。\u003C\u002Fblockquote\u003E\u003Cbr\u003E\u003Cp\u003E基本网络结构:\u003C\u002Fp\u003E\u003Cp\u003ELeNet\u003Cimg src=\&v2-f6e5cd35f6b378fce20c9.png\& data-rawwidth=\&865\& data-rawheight=\&260\&\u003E图中的Convolutions对应了上一段说的S-元,Subsampling对应了上一段中说的C-元。\u003Cbr\u003E对于Convolution层的每个神经元,它们的权值都是共享的,这样做的好处是大大减少了神经网络的参数个数。\u003Cbr\u003E对于Sampling层的每个神经元,它们是上一层Convolution层的局部范围的均值(或者最大值),能够有效地提供局部的平移和旋转不变性。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E为何神经网络重新兴起?\u003C\u002Fp\u003E\u003Cp\u003E卷积神经网络属于一种深度的神经网络,如上文所说,深度神经网络在之前是不可计算的,主要是由于网络层次变深后会导致下面问题:\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Col\u003E\u003Cli\u003E由于网络参数增多,导致了严重的过拟合现象\u003C\u002Fli\u003E\u003Cli\u003E在训练过程中,对深度网络使用BP算法传播时候梯度迅速减少,导致前面的网络得不到训练,网络难以收敛。\u003C\u002Fli\u003E\u003C\u002Fol\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E而深度卷积网络提出了一系列改进办法:\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cul\u003E\u003Cli\u003E减少参数:\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cul\u003E\u003Cli\u003E共享权值:即上文提到的卷积层的卷积核权值共享,大大减少了网络中参数的数量级。\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cli\u003E解决过拟合\u003C\u002Fli\u003E\u003Cul\u003E\u003Cli\u003E加大数据量:一个是通过众包的方式来增加样本的量级,比如,目前ImageNet已经有了120万的带标注的图片数据。另一个是通过对已有的样本进行随机截取、局部扰动、小角度扭动等方法,来倍增已有的样本数(人工扩增数据)。\u003C\u002Fli\u003E\u003Cli\u003EL1正则化:衰减权值,防止从噪声中学习模式,专注于少数重要的连接 \u003C\u002Fli\u003E\u003Cli\u003EL2正则化:衰减权值,防止从噪声中学习模式,\u003C\u002Fli\u003E\u003Cli\u003EDropout机制:Hinton在2012提出了\u003Ca href=\&http:\u002F\u002Farxiv.org\u002Fabs\u002F\& data-editable=\&true\& data-title=\&Dropout机制\&\u003EDropout机制\u003C\u002Fa\u003E,能够在训练过程中将通过随机禁止一半的神经元被修改,避免了过拟合的现象。(相当于取平均 参考\u003Ca href=\&https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F\& data-editable=\&true\& data-title=\&Dropout解决过拟合问题 - 晓雷机器学习笔记 - 知乎专栏\&\u003EDropout解决过拟合问题 - 晓雷机器学习笔记 - 知乎专栏\u003C\u002Fa\u003E) \u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cli\u003EBP传播时梯度衰减导致网络难以收敛的问题:改变激活函数,使用\u003Ca href=\&http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRectifier_(neural_networks\& data-editable=\&true\& data-title=\&ReLU\& class=\&\&\u003EReLU\u003C\u002Fa\u003E作为激活函数,由于ReLU的导数对于正数输入来说恒为1,能够很好地将梯度传到位于前面的网络当中。\u003C\u002Fli\u003E\u003Cli\u003E增强计算能力:使用GPU进行运算,比起CPU时代运算性能有了数量级的提升。(可以以更小的时间进行更多次迭代搜索问题空间,更快的收敛)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003C\u002Fblockquote\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cp\u003E上述问题得到有效解决后,神经网络的优势就得到充分的显现了:\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Col\u003E\u003Cli\u003E复杂模型带来的强大的表达能力\u003C\u002Fli\u003E\u003Cli\u003E有监督的自动特征提取\u003C\u002Fli\u003E\u003C\u002Fol\u003E\u003C\u002Fblockquote\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cb\u003E深度卷积网络案例\u003C\u002Fb\u003E:\u003C\u002Fp\u003ECNN样例1 AlexNet:\u003Cp\u003E在ImageNet举办的大规模图像识别比赛ILSVRC2012中分类比赛中,Hinton的学生Alex搭建了一个8层的CNN,最终top-5的漏报率是16%,抛离而第二名的27%整整有11个百分点。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cimg src=\&v2-9c7862eae440d739ed7a26e93c29e933.png\& data-rawwidth=\&859\& data-rawheight=\&295\&\u003E\u003Cp\u003E这个网络中用到的技术有:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003EReLU激活函数\u003C\u002Fli\u003E\u003Cli\u003E多GPU编程\u003C\u002Fli\u003E\u003Cli\u003E局部正则化(Local Response Normalization)\u003C\u002Fli\u003E\u003Cli\u003E重叠的下采样(Overlapping Pooling)\u003C\u002Fli\u003E\u003Cli\u003E通过随机截取和PCA来增加数据\u003C\u002Fli\u003E\u003Cli\u003EDropout\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cbr\u003E\u003Cp\u003ECNN样例2 deconvnet:\u003C\u002Fp\u003E\u003Cp\u003E在下一年的比赛ILSVRC2013中,在同样的数据集同样的任务下,Matthew进一步将漏报率降到了11%。他使用了一个被命名为“Deconvolutional Network”(简称deconvnet)的技术。\u003Cbr\u003EMatthew的核心工作在于尝试将CNN学习出来的特征映射回原图片,来对每个卷积层最具有判别性的部分实现可视化——也就是,观察CNN在卷积层中学习到了什么。\u003C\u002Fp\u003E\u003Cimg src=\&v2-ee2f580d1ae60b0121187.png\& data-rawwidth=\&430\& data-rawheight=\&428\&\u003ECNN样例3 DeepPose:\u003Cp\u003EDeepPose的贡献在于它对CNN使用了级联的思想:首先,可以用第一层CNN大致定位出人物的关节位置,然后使用反复使用第二层神经网络对第一层网络进行微调,以达到精细定位的目的。从另外一个角度,这个工作也说明了,CNN不仅能够应付分类问题,也能够应付定位的问题。\u003C\u002Fp\u003E\u003Cimg src=\&v2-0ab98ecd8f7cf00dcb7a6c.png\& data-rawwidth=\&675\& data-rawheight=\&172\&\u003ECNN样例4 CNN vs 人工特征:\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Farxiv.org\u002Fabs\u002F\& data-editable=\&true\& data-title=\&CNN Features off-the-shelf: an Astounding Baseline for Recognition\& class=\&\&\u003ECNN Features off-the-shelf: an Astounding Baseline for Recognition\u003C\u002Fa\u003E\u003Cbr\u003E该工作旨在验证CNN提取出来的特征是否有效,于是作者做了这样的一个实验:将在ILSVRC2013的分类+定位比赛中获胜的OverFeat团队使用CNN提取出来的特征,加上一个L-SVM后构成了一个分类器,去跟各个物体分类的数据集上目前最好(state-of-the-art)的方法进行比较,结果几乎取得了全面的优胜。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cb\u003E【总结】\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E神经元网络模型是个极其有效的模型,近年来由于样本数量和计算性能都得到了几何量级的提高,CNN这一深度框架得以发挥它的优势,在计算机视觉的数个领域都取得了不菲的成就。\u003Cbr\u003E目前来说,对CNN本身的研究还不够深入,CNN效果虽然优秀,但对于我们来说依然是一个黑盒子。弄清楚这个黑盒子的构造,从而更好地去改进它,会是一个相当重要的工作。\u003C\u002Fp\u003E&,&updated&:new Date(&T00:57:10.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:4,&likeCount&:53,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T08:57:10+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic1.zhimg.com\u002Fv2-cd4983cac374c5cc2a1fc87_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:4,&likesCount&:53},&&:{&title&:&神经网络架构演进(经典论文)-Alexnet&,&author&:&xiao-lei-75-81&,&content&:&\u003Cp\u003E前面发表是发现有些内容没有自动保存,不知道知乎的服务器怎么了。 果断删了重新发。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E这一篇是 Alexnet : \u003Ca href=\&http:\u002F\u002Fpapers.nips.cc\u002Fpaper\u002F4824-imagenet-classification-w\& data-editable=\&true\& data-title=\&Imagenet classification with deep convolutional neural networks\&\u003E\u003Cu\u003EImagenet classification with deep convolutional neural networks\u003C\u002Fu\u003E\u003C\u002Fa\u003E 。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1 Introduction\u003C\u002Fp\u003E\u003Cp\u003E当前目标检测主要采用机器学习的方法。为了改善性能,我们可以收集更多的数据,学习更强大的模型,使用更好的技术防止过拟合。目前有标记的图片数据库还比较小,简单的识别任务足够应付,尤其是我们还可以采用 保留标签图片变换的方法人工扩增这些数据。 例如: MNIST 数字识别率可以媲美人类。 但是,现实中的物体是复杂多样的,这就需要更大的已标记数据集。人们早就意识到训练数据太小是个严峻的问题,直到最近才得以收集到百万级别的标记图片数据,这些大数据集包括 LabelMe , ImageNet 等。\u003C\u002Fp\u003E\u003Cp\u003E从百万级的图片数据中学习数千个物体,我们需要一个具备强大学习能力的模型。但是,对于大量物体识别的复杂任务,ImageNet这样的大数据集依然不够用,因此我们的模型也需要具备一些先验知识来补偿那些不知道的数据。卷积神经网络(CNN)就是一类满足要求的模型,它可以通过改变深度和宽度调整学习能力,它也会做出 很强但是近乎正确的假设(先验知识 例如:统计稳定性,局部像素相关性) 。 相比于 同样大小的标准前馈神经网络( standard feedforward neural networks ) 卷积神经网络有更少的神经元连接和参数,因此它可以更快的训练(学习)但是性能上只有轻微的降低。 不过仅有自身的良好特性还是不够的,还得加上GPU(高度优化的2D卷积实现)来加快训练CNN网络 , 大数据集(例如 ImageNet)的解决过拟合(外因)。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E2. 数据\u003C\u002Fp\u003E\u003Cp\u003EImageNet:固定大小256x256。先把最小边缩放为256然后从图像中间扣取256x256图片。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cbr\u003E3. 结构\u003Cbr\u003E\u003Cp\u003E3.1 ReLU Nonlinearity\u003C\u002Fp\u003E\u003Cp\u003E激活函数一般采用tanh 或者 sigma 但是它们会出现饱和现象(函数图像的两边梯度变得很小,不利于反向传播梯度下降法学习)。ReLU不会出现饱和现象,它在大于0时的梯度是恒定的(只要大于0就可以学习)。\u003C\u002Fp\u003E\u003Cimg src=\&v2-b2c9e41a339db126d7cdd43.png\& data-rawheight=\&305\& data-rawwidth=\&360\&\u003E\u003Cp\u003E
图:实线表示ReLUs 很快就收敛到0.25,虚线代表 tanh 很难收敛\u003C\u002Fp\u003E\u003Cp\u003E3.2 Training on Multiple GPUs\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E一个 GTX 580 GPU 只有 3GB内存, 这限制了可训练神经网络的最大容量。所以作者把网络放在两个GPU中训练。当前的GPU很适合跨GP并行,它们可以互相直接读写不必经过主机内存。作者采取的并行化方式是 每个GPU放一半的核,另外还有一个小技巧:GPU只在特定层之间通信。例如 第三层的核以全部第二层的的特征图作为输入,第四层的核仅以第三层中同一GPU的特征图作为输入。选择这种链接方式不利于交叉验证,但是可以精确的调整通信的数量直到达到可接受的计算量。\u003C\u002Fp\u003E\u003Cimg src=\&v2-f88ee63665cbffe8c732c.png\& data-rawheight=\&289\& data-rawwidth=\&600\&\u003E\u003Cp\u003E3.3 Local Response Normalization\u003C\u002Fp\u003E\u003Cp\u003EReLU 不需要输入归一化解决饱和问题。只要ReLU的输入大于0就可以学习。但是 局部正则模式( local normalization scheme )有利于增加泛化能力。 \u003Cequation\u003Ea_{x,y}^{i}\u003C\u002Fequation\u003E表示 首先应用第i个核 在位置(x,y) 然后运用ReLU非线性化 再 响应归一化 的神经元输出,\u003Cequation\u003Eb_{x,y}^{i}\u003C\u002Fequation\u003E
表示局部响应归一化。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cimg src=\&v2-7b57dafb350b693f0b8600.png\& data-rawheight=\&99\& data-rawwidth=\&400\&\u003E\u003Cp\u003E下面是 两种 局部响应归一化的示意图,上面公式对应的是下面左图。\u003C\u002Fp\u003E\u003Cimg src=\&v2-07f621de5f08a1b01dafee9aa9d24ef7.png\& data-rawheight=\&305\& data-rawwidth=\&600\&\u003E\u003Cbr\u003E\u003Cp\u003E局部归一的动机:在神经生物学有一个概念叫做 侧抑制(lateral inhibitio),指的是 被激活的神经元抑制相邻神经元。归一化(normalization)的目的是“抑制”,局部响应归一化就是借鉴 侧抑制 的思想来实现局部抑制,尤其当我们使用ReLU 的时候这种“侧抑制”很管用。因为ReLU的响应结果是无界的(可以非常大)所以需要归一化。\u003C\u002Fp\u003E\u003Cblockquote\u003E参考:\u003Ca href=\&https:\u002F\u002Fprateekvjoshi.com\u002F\u002F05\u002Fwhat-is-local-response-normalization-in-convolutional-neural-networks\u002F\& data-editable=\&true\& data-title=\&What Is Local Response Normalization In Convolutional Neural Networks\&\u003E\u003Cu\u003EWhat Is Local Response Normalization In Convolutional Neural Networks\u003C\u002Fu\u003E\u003C\u002Fa\u003E In neurobiology, there is a concept called “lateral inhibition”. Now what does that mean? This refers to the capacity of an excited neuron to subdue its neighbors. We basically want a significant peak so that we have a form of local maxima. This tends to create a contrast in that area, hence increasing the sensory perception. Increasing the sensory perception is a good thing! We want to have the same thing in our CNNs.\u003C\u002Fblockquote\u003E\u003Cbr\u003E\u003Cp\u003E3.4 Overlapping Pooling\u003C\u002Fp\u003E\u003Cp\u003E相比于正常池化(步长s=2,窗口z=2) 重叠池化(步长s=2,窗口z=3) 可以减少top-1, top-5分别为0.4% 和0.3%。重叠池化可以比避免过拟合。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E4 Reducing Overfitting\u003C\u002Fp\u003E\u003Cp\u003E4.1
Data Augmentation\u003C\u002Fp\u003E\u003Cp\u003E两种方式人工扩增数据。第一种是 抠图(从256x256抠出224x224)加上水平反转。第二种是 改变RGB颜色通道强度。 有效增加数据量,减少过拟合现象。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E4.2
Dropout \u003C\u002Fp\u003E\u003Cp\u003E组合多个模型的预测结果是一种非常有效的减少过拟合方法,但是代价太高。 而dropout是一种有效的组合模型的方法,只需要两倍的训练时间即可实现模型组合(类似取平均)的效果。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F\& data-editable=\&true\& data-title=\&Dropout解决过拟合问题 - 晓雷机器学习笔记 - 知乎专栏\&\u003EDropout解决过拟合问题 - 晓雷机器学习笔记 - 知乎专栏\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cp\u003E5. 结构\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cimg src=\&v2-eb4bbcac2b6fc1eb292afb.png\& data-rawheight=\&279\& data-rawwidth=\&600\&\u003E\u003Cimg src=\&v2-be31f689eeba.png\& data-rawheight=\&146\& data-rawwidth=\&548\&\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cimg src=\&v2-b02ed3dcbe.png\& data-rawheight=\&110\& data-rawwidth=\&541\&\u003E&,&updated&:new Date(&T07:27:35.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:5,&likeCount&:42,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T15:27:35+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic1.zhimg.com\u002Fv2-f88ee63665cbffe8c732c_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:5,&likesCount&:42},&&:{&title&:&历史|从神经元到深度学习&,&author&:&xiao-lei-75-81&,&content&:&本篇是 \u003Ca href=\&http:\u002F\u002Fwww.cnblogs.com\u002Fsubconscious\u002Fp\u002F5058741.html\& data-editable=\&true\& data-title=\&神经网络浅讲:从神经元到深度学习\&\u003E神经网络浅讲:从神经元到深度学习\u003C\u002Fa\u003E 的笔记。\u003Cbr\u003E\u003Cbr\u003E说明:层数不考虑输入。\u003Cbr\u003E\u003Cbr\u003E\u003Cb\u003E一, 单层神经网络(感知器)\u003C\u002Fb\u003E\u003Cbr\u003E\u003Cbr\u003E1.引子 \u003Cbr\u003E1958年,计算科学家Rosenblatt提出了由两层神经元组成的神经网络。他给它起了一个名字–“感知器”(Perceptron)人们认为已经发现了智能的奥秘,许多学者和科研机构纷纷投入到神经网络的研究中。美国军方大力资助了神经网络的研究,并认为神经网络比“原子弹工程”更重要。这段时间直到1969年才结束,这个时期可以看作神经网络的第一次高潮。\u003Cbr\u003E\u003Cbr\u003E2.结构 \u003Cbr\u003E\u003Cimg src=\&v2-c9f3a2ff67bbeb49b2ed20.jpg\&\u003E\u003Cimg src=\&v2-ddd195d7fe9cfc9b50888.jpg\&\u003E3.效果\u003Cbr\u003E\u003Cbr\u003E感知器类似一个逻辑回归模型,可以做线性分类任务。 我们可以用决策分界来形象的表达分类的效果。决策分界就是在二维的数据平面中划出一条直线,当数据的维度是3维的时候,就是划出一个平面,当数据的维度是n维时,就是划出一个n-1维的超平面。\u003Cbr\u003E\u003Cimg src=\&v2-b37952e2fefa3.png\&\u003E\u003Cbr\u003E4.影响\u003Cbr\u003E\u003Cbr\u003E感知器只能做简单的线性分类任务。但是当时的人们热情太过于高涨,并没有人清醒的认识到这点。于是,当人工智能领域的巨擘Minsky指出这点时,事态就发生了变化。\u003Cbr\u003E\u003Cbr\u003EMinsky在1969年出版了一本叫《Perceptron》的书,里面用详细的数学证明了感知器的弱点,尤其是感知器对XOR(异或)这样的简单分类任务都无法解决。\u003Cbr\u003E\u003Cbr\u003EMinsky认为,如果将计算层增加到两层,计算量则过大,而且没有有效的学习算法。所以,他认为研究更深层的网络是没有价值的。\u003Cbr\u003E由于Minsky的巨大影响力以及书中呈现的悲观态度,让很多学者和实验室纷纷放弃了神经网络的研究。神经网络的研究陷入了冰河期。这个时期又被称为“AI winter”。\u003Cbr\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cb\u003E二. 两层神经网络(多层感知器)\u003C\u002Fb\u003E\u003Cbr\u003E\u003Cbr\u003E1.引子\u003Cbr\u003EMinsky说过单层神经网络无法解决异或问题。但是当增加一个计算层以后,两层神经网络不仅可以解决异或问题,而且具有非常好的非线性分类效果。不过两层神经网络的计算是一个问题,没有一个较好的解法。\u003Cbr\u003E\u003Cp\u003E1986年,Rumelhar和Hinton等人提出了反向传播(Backpropagation,BP)算法,解决了两层神经网络所需要的复杂计算量问题,从而带动了业界使用两层神经网络研究的热潮。这时候的Hinton还很年轻,30年以后,正是他重新定义了神经网络,带来了神经网络复苏的又一春。\u003Cbr\u003E\u003Cbr\u003E2.结构\u003Cbr\u003E\u003Cbr\u003E两层神经网络除了包含一个输入层,一个输出层以外,还增加了一个中间层。此时,中间层和输出层都是计算层。\u003Cbr\u003E\u003Cbr\u003E\u003Cimg src=\&v2-d4fccea75743ffe9f7ebabdce96f6718.jpg\&\u003E\u003Cimg src=\&v2-60ceae65bcd544f.png\&\u003E使用矩阵运算来表达是很简洁的,而且也不会受到节点数增多的影响(无论有多少节点参与运算,乘法两端都只有一个变量)。因此神经网络的教程中大量使用矩阵运算来描述。\u003Cbr\u003E\u003Cbr\u003E我们对神经网络的结构图的讨论中都没有提到偏置节点(bias unit)。事实上,这些节点是默认存在的。它本质上是一个只含有存储功能,且存储值永远为1的单元。在神经网络的每个层次中,除了输出层以外,都会含有这样一个偏置单元。正如线性回归模型与逻辑回归模型中的一样。 \u003Cbr\u003E\u003Cbr\u003E\u003Cimg src=\&v2-62158fbbc001e4dbf1ee5ced3a4466fd.jpg\&\u003E\u003Cimg src=\&v2-ecc14ba771e893cf880eb.png\&\u003E在两层神经网络中,我们不再使用sgn函数作为函数g,而是使用平滑函数sigmoid作为函数g。我们把函数g也称作激活函数(active function)。\u003Cbr\u003E\u003Cbr\u003E事实上,神经网络的本质就是通过参数与激活函数来拟合特征与目标之间的真实函数关系。初学者可能认为画神经网络的结构图是为了在程序中实现这些圆圈与线,但在一个神经网络的程序中,既没有“线”这个对象,也没有“单元”这个对象。实现一个神经网络最需要的是线性代数库。\u003Cbr\u003E\u003Cbr\u003E3.效果\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E与单层神经网络不同。理论证明两层神经网络可以无限逼近任意连续函数。也就是说,面对复杂的非线性分类任务,两层(带一个隐藏层)神经网络可以分类的很好。\u003Cbr\u003E\u003Cbr\u003E下面就是一个例子(此两图来自colah的\u003Ca href=\&http:\u002F\u002Fcolah.github.io\u002Fposts\u002F2014-03-NN-Manifolds-Topology\u002F\& data-editable=\&true\& data-title=\&博客\&\u003E博客\u003C\u002Fa\u003E),红色的线与蓝色的线代表数据。而红色区域和蓝色区域代表由神经网络划开的区域,两者的分界线就是决策分界。\u003Cimg src=\&v2-7120bf9e4b36cfd032ac.png\&\u003E可以看到,这个两层神经网络的决策分界是非常平滑的曲线,而且分类的很好。有趣的是,前面已经学到过,单层网络只能做线性分类任务。而两层神经网络中的后一层也是线性分类层,应该只能做线性分类任务。为什么两个线性分类任务结合就可以做非线性分类任务?\u003Cbr\u003E\u003Cbr\u003E我们可以把输出层的决策分界单独拿出来看一下。就是下图。\u003Cbr\u003E\u003Cbr\u003E\u003Cimg src=\&v2-d576188bce499915cac5e6b40f320e84.jpg\&\u003E可以看到,输出层的决策分界仍然是直线。关键就是,从输入层到隐藏层时,数据发生了空间变换。也就是说,两层神经网络中,隐藏层对原始的数据进行了一个空间变换,使其可以被线性分类,然后输出层的决策分界划出了一个线性分类分界线,对其进行分类。\u003Cbr\u003E\u003Cbr\u003E这样就导出了两层神经网络可以做非线性分类的关键–隐藏层。联想到我们一开始推导出的矩阵公式,我们知道,矩阵和向量相乘,本质上就是对向量的坐标空间进行一个变换。因此,隐藏层的参数矩阵的作用就是使得数据的原始坐标空间从线性不可分,转换成了线性可分。\u003Cbr\u003E\u003Cbr\u003E两层神经网络通过两层的线性模型模拟了数据内真实的非线性函数。因此,多层的神经网络的本质就是复杂函数拟合 。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E隐藏层节点设计:在设计一个神经网络时,输入层的节点数需要与特征的维度匹配,输出层的节点数要与目标的维度匹配。而中间层的节点数,却是由设计者指定的。节点数设置的多少,却会影响到整个模型的效果。目前业界没有完善的理论来指导这个决策。一般是根据经验来设置。较好的方法就是预先设定几个可选值,通过切换这几个值来看整个模型的预测效果,选择效果最好的值作为最终选择。这种方法又叫做Grid Search(网格搜索)。\u003C\u002Fp\u003E\u003Cp\u003E实际例子: \u003Ca href=\&http:\u002F\u002Fwww.cnblogs.com\u002Fsubconscious\u002Fp\u002F3979988.html\& data-editable=\&true\& data-title=\&EasyPR\&\u003EEasyPR\u003C\u002Fa\u003E 字符识别网络架构(下图),它是一个中文车牌识别系统。\u003C\u002Fp\u003E\u003Cimg src=\&v2-bfb73fa4364eef2ead0f5f.jpg\& data-rawwidth=\&1128\& data-rawheight=\&806\&\u003E\u003Cp\u003E EasyPR使用了字符的图像去进行字符文字的识别。输入是120维的向量。输出是要预测的文字类别,共有65类((数字+字母+省份简称))。根据实验,我们测试了一些隐藏层数目,发现当值为40时,整个网络在测试集上的效果较好,因此选择网络的最终结构就是120,40,65。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cb\u003E4.训练\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E 在Rosenblat提出的感知器模型中,模型中的参数可以被训练,但是使用的方法较为简单,并没有使用目前机器学习中通用的方法,这导致其扩展性与适用性非常有限。从两层神经网络开始,神经网络的研究人员开始使用机器学习相关的技术进行神经网络的训练。例如用大量的数据(左右),使用算法进行优化等等,从而使得模型训练可以获得性能与数据利用上的双重优势。\u003C\u002Fp\u003E\u003Cp\u003E定义损失函数(关于参数的函数)来衡量预测值与实际值的差距。梯度下降 让参数向着梯度的反方向前进一段距离,不断重复,直到梯度接近零时截止。一般这个时候,所有的参数恰好达到使损失函数达到一个最低值的状态。 \u003C\u002Fp\u003E\u003Cp\u003E在神经网络模型中,由于结构复杂,每次计算梯度的代价很大。因此还需要使用\u003Cstrong\u003E反向传播\u003C\u002Fstrong\u003E算法。反向传播算法是利用了神经网络的结构进行的计算。不一次计算所有参数的梯度,而是从后往前。首先计算输出层的梯度,然后是第二个参数矩阵的梯度,接着是中间层的梯度,再然后是第一个参数矩阵的梯度,最后是输入层的梯度。计算结束以后,所要的两个参数矩阵的梯度就都有了。\u003C\u002Fp\u003E\u003Cp\u003E反向传播算法可以直观的理解为下图。梯度的计算从后往前,一层层反向传播。前缀E代表着相对导数的意思。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cimg src=\&v2-38dabdfb578c4bca94adf4.jpg\& data-rawwidth=\&686\& data-rawheight=\&659\&\u003E反向传播算法的启示是数学中的\u003Cstrong\u003E链式法则\u003C\u002Fstrong\u003E。在此需要说明的是,尽管早期神经网络的研究人员努力从生物学中得到启发,但从BP算法开始,研究者们更多地从数学上寻求问题的最优解。不再盲目模拟人脑网络是神经网络研究走向成熟的标志。正如科学家们可以从鸟类的飞行中得到启发,但没有必要一定要完全模拟鸟类的飞行方式,也能制造可以飞天的飞机。\u003C\u002Fp\u003E\u003Cp\u003E优化问题只是训练中的一个部分。机器学习问题之所以称为学习问题,而不是优化问题,就是因为它不仅要求数据在训练集上求得一个较小的误差,在测试集上也要表现好。因为模型最终是要部署到没有见过训练数据的真实场景。提升模型在测试集上的预测效果的主题叫做\u003Cstrong\u003E泛化\u003C\u002Fstrong\u003E(generalization),相关方法被称作正则化(regularization)。神经网络中常用的泛化技术有\u003Cstrong\u003E权重衰减\u003C\u002Fstrong\u003E等。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cb\u003E5.影响\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E 两层神经网络在多个地方的应用说明了其效用与价值。10年前困扰神经网络界的异或问题被轻松解决。神经网络在这个时候,已经可以发力于语音识别,图像识别,自动驾驶等多个领域。\u003C\u002Fp\u003E\u003Cp\u003E但是神经网络仍然存在若干的问题:尽管使用了BP算法,一次神经网络的训练仍然耗时太久,而且困扰训练优化的一个问题就是局部最优解问题,这使得神经网络的优化较为困难。同时,隐藏层的节点数需要调参,这使得使用不太方便,工程和研究人员对此多有抱怨。\u003C\u002Fp\u003E\u003Cp\u003E  90年代中期,由Vapnik等人发明的SVM(Support Vector Machines,支持向量机)算法诞生,很快就在若干个方面体现出了对比神经网络的优势:无需调参;高效;全局最优解。基于以上种种理由,SVM迅速打败了神经网络算法成为主流。\u003C\u002Fp\u003E\u003Cp\u003E 神经网络的研究再次陷入了冰河期。当时,只要你的论文中包含神经网络相关的字眼,非常容易被会议和期刊拒收,研究界那时对神经网络的不待见可想而知。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E三. 多层神经网络(深度学习)\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E 1.引子\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E  在被人摒弃的10年中,有几个学者仍然在坚持研究。这其中的棋手就是加拿大多伦多大学的Geoffery Hinton教授。\u003C\u002Fp\u003E\u003Cp\u003E  2006年,Hinton在《Science》和相关期刊上发表了论文,首次提出了“深度信念网络”的概念。与传统的训练方式不同,“深度信念网络”有一个“\u003Cstrong\u003E预训练\u003C\u002Fstrong\u003E”(pre-training)的过程,这可以方便的让神经网络中的权值找到一个接近最优解的值,之后再使用“\u003Cstrong\u003E微调\u003C\u002Fstrong\u003E”(fine-tuning)技术来对整个网络进行优化训练。这两个技术的运用大幅度减少了训练多层神经网络的时间。他给多层神经网络相关的学习方法赋予了一个新名词--“\u003Cstrong\u003E深度学习\u003C\u002Fstrong\u003E”。\u003C\u002Fp\u003E\u003Cp\u003E   很快,深度学习在语音识别领域暂露头角。接着,2012年,深度学习技术又在图像识别领域大展拳脚。Hinton与他的学生在ImageNet竞赛中,用多层的卷积神经网络成功地对包含一千类别的一百万张图片进行了训练,取得了分类错误率15%的好成绩,这个成绩比第二名高了近11个百分点,充分证明了多层神经网络识别效果的优越性。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E 2.结构\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cimg src=\&v2-d1a48f1d738a44e07dc14b184a5c529d.png\& data-rawwidth=\&627\& data-rawheight=\&590\&\u003E\u003Cp\u003E上图,可以看出\u003Cstrong\u003EW\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cblockquote\u003E(1)\u003C\u002Fblockquote\u003E中有6个参数,\u003Cstrong\u003EW\u003C\u002Fstrong\u003E\u003Cblockquote\u003E(2)\u003C\u002Fblockquote\u003E中有4个参数,\u003Cstrong\u003EW\u003C\u002Fstrong\u003E\u003Cblockquote\u003E(3)\u003C\u002Fblockquote\u003E中有6个参数,所以整个神经网络中的参数有16个(这里我们不考虑偏置节点,下同)。\u003Cp\u003E经过调整以后,整个网络的参数变成了33个。\u003Cimg src=\&v2-83d52c5f783bc52c0e6c5d.jpg\& data-rawwidth=\&1091\& data-rawheight=\&865\&\u003E虽然层数保持不变,但是第二个神经网络的\u003Cb\u003E参数数量却是第一个神经网络的接近两倍之多,从而带来了更好的表示(represention)能力。\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E在参数一致的情况下,我们也可以获得一个“更深”的网络。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cimg src=\&v2-7e38e33bea5a63ed89b872.jpg\& data-rawwidth=\&1203\& data-rawheight=\&801\&\u003E上图的网络中,虽然参数数量仍然是33,但却有4个中间层,是原来层数的接近两倍。这意味着一样的参数数量,可以用更深的层次去表达(可以更深入的表示特征)。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E3.效果\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E与两层层神经网络不同。多层神经网络中的层数增加了很多。增加更多的层次 就可以更深入的表示特征(深度),以及更强的函数模拟能力(参数数量)。\u003C\u002Fp\u003E\u003Cp\u003E 更深入的表示特征可以这样理解,随着网络的层数增加,每一层对于前一层次的抽象表示更深入。在神经网络中,每一层神经元学习到的是前一层神经元值的更抽象的表示。例如第一个隐藏层学习到的是“边缘”的特征,第二个隐藏层学习到的是由“边缘”组成的“形状”的特征,第三个隐藏层学习到的是由“形状”组成的“图案”的特征,最后的隐藏层学习到的是由“图案”组成的“目标”的特征。通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。\u003C\u002Fp\u003E\u003Cp\u003E更强的函数模拟能力是由于随着层数的增加,整个网络的参数就越多。而神经网络其实本质就是模拟特征与目标之间的真实关系函数的方法,更多的参数意味着其模拟的函数可以更加的复杂,可以有更多的\u003Cstrong\u003E容量\u003C\u002Fstrong\u003E(capcity)去拟合真正的关系。\u003C\u002Fp\u003E\u003Cp\u003E  通过研究发现,在参数数量一样的情况下,更深的网络往往具有比浅层的网络更好的识别效率。这点也在ImageNet的多次大赛中得到了证实。从2012年起,每年获得ImageNet冠军的深度神经网络的层数逐年增加,2015年最好的方法GoogleNet是一个多达22层的神经网络。在最新一届的ImageNet大赛上,目前拿到最好成绩的MSRA团队的方法使用的更是一个深达152层的网络!关于这个方法更多的信息有兴趣的可以查阅ImageNet网站。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E4.训练\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E  在单层神经网络时,我们使用的激活函数是sgn函数。到了两层神经网络时,我们使用的最多的是sigmoid函数。而到了多层神经网络时,通过一系列的研究发现,ReLU函数在训练多层神经网络时,更容易收敛,并且预测性能更好。因此,目前在深度学习中,最流行的非线性函数是ReLU函数。ReLU函数不是传统的非线性函数,而是分段线性函数。其表达式非常简单,就是y=max(x,0)。简而言之,在x大于0,输出就是输入,而在x小于0时,输出就保持为0。这种函数的设计启发来自于生物神经元对于激励的线性响应,以及当低于某个阈值后就不再响应的模拟。\u003C\u002Fp\u003E\u003Cp\u003E  在多层神经网络中,训练的主题仍然是优化和泛化。当使用足够强的计算芯片(例如GPU图形加速卡)时,梯度下降算法以及反向传播算法在多层神经网络中的训练中仍然工作的很好。目前学术界主要的研究既在于开发新的算法,也在于对这两个算法进行不断的优化,例如,增加了一种带动量因子(momentum)的梯度下降算法。 \u003C\u002Fp\u003E\u003Cp\u003E  在深度学习中,泛化技术变的比以往更加的重要。这主要是因为神经网络的层数增加了,参数也增加了,表示能力大幅度增强,很容易出现\u003Cstrong\u003E过拟合现象\u003C\u002Fstrong\u003E。因此正则化技术就显得十分重要。目前,Dropout技术,以及数据扩容(Data-Augmentation)技术是目前使用的最多的正则化技术。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E5.影响\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E  目前,深度神经网络在人工智能界占据统治地位。但凡有关人工智能的产业报道,必然离不开深度学习。神经网络界当下的四位引领者除了前文所说的Ng,Hinton以外,还有CNN的发明人Yann Lecun,以及《Deep Learning》的作者Bengio。\u003C\u002Fp\u003E\u003Cp\u003E多层神经网络的研究仍在进行中。现在最为火热的研究技术包括RNN,LSTM等,研究方向则是图像理解方面。图像理解技术是给计算机一幅图片,让它用语言来表达这幅图片的意思。ImageNet竞赛也在不断召开,有更多的方法涌现出来,刷新以往的正确率。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E四 回顾\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E  1.影响\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E  我们回顾一下神经网络发展的历程。神经网络的发展历史曲折荡漾,既有被人捧上天的时刻,也有摔落在街头无人问津的时段,中间经历了数次大起大落。\u003C\u002Fp\u003E\u003Cp\u003E  从单层神经网络(感知器)开始,到包含一个隐藏层的两层神经网络,再到多层的深度神经网络,一共有三次兴起过程。详见下图。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cimg src=\&v2-d08da478ac54de67b4c76864.jpg\& data-rawwidth=\&1967\& data-rawheight=\&1069\&\u003E 历史最大的好处是可以给现在做参考。科学的研究呈现螺旋形上升的过程,不可能一帆风顺。同时,这也给现在过分热衷深度学习与人工智能的人敲响警钟,因为这不是第一次人们因为神经网络而疯狂了。1958年到1969年,以及1985年到1995,这两个十年间人们对于神经网络以及人工智能的期待并不现在低,可结果如何大家也能看的很清楚。\u003C\u002Fp\u003E\u003Cp\u003E因此,冷静才是对待目前深度学习热潮的最好办法。如果因为深度学习火热,或者可以有“钱景”就一窝蜂的涌入,那么最终的受害人只能是自己。神经网络界已经两次有被人们捧上天了的境况,相信也对于捧得越高,摔得越惨这句话深有体会。因此,神经网络界的学者也必须给这股热潮浇上一盆水,不要让媒体以及投资家们过分的高看这门技术。很有可能,三十年河东,三十年河西,在几年后,神经网络就再次陷入谷底。根据上图的历史曲线图,这是很有可能的。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E2.效果\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E  下面说一下神经网络为什么能这么火热?简而言之,就是其学习效果的强大。随着神经网络的发展,其表示性能越来越强。\u003C\u002Fp\u003E\u003Cp\u003E  从单层神经网络,到两层神经网络,再到多层神经网络,下图说明了,随着网络层数的增加,以及激活函数的调整,神经网络所能拟合的决策分界平面的能力。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cimg src=\&v2-fbcf773b6b9025dc70cc.jpg\& data-rawwidth=\&1896\& data-rawheight=\&1259\&\u003E 可以看出,随着层数增加,其非线性分界拟合能力不断增强。图中的分界线并不代表真实训练出的效果,更多的是示意效果。\u003C\u002Fp\u003E\u003Cp\u003E  神经网络的研究与应用之所以能够不断地火热发展下去,与其强大的函数拟合能力是分不开关系的。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E3.外因\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E 当然,光有强大的内在能力,并不一定能成功。一个成功的技术与方法,不仅需要内因的作用,还需要时势与环境的配合。神经网络的发展背后的外在原因可以被总结为:更强的计算性能,更多的数据,以及更好的训练方法。只有满足这些条件时,神经网络的函数拟合能力才能得已体现,见下图。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cimg src=\&v2-86f94b8edf1f.jpg\& data-rawwidth=\&1297\& data-rawheight=\&813\&\u003E之所以在单层神经网络年代,Rosenblat无法制作一个双层分类器,就在于当时的计算性能不足,Minsky也以此来打压神经网络。但是Minsky没有料到,仅仅10年以后,计算机CPU的快速发展已经使得我们可以做两层神经网络的训练,并且还有快速的学习算法BP。\u003C\u002Fp\u003E\u003Cp\u003E  但是在两层神经网络快速流行的年代。更高层的神经网络由于计算性能的问题,以及一些计算方法的问题,其优势无法得到体现。直到2012年,研究人员发现,用于高性能计算的图形加速卡(GPU)可以极佳地匹配神经网络训练所需要的要求:高并行性,高存储,没有太多的控制需求,配合预训练等算法,神经网络才得以大放光彩。\u003C\u002Fp\u003E\u003Cp\u003E  互联网时代,大量的数据被收集整理,更好的训练方法不断被发现。所有这一切都满足了多层神经网络发挥能力的条件。\u003C\u002Fp\u003E\u003Cp\u003E外在条件的满足也是神经网络从神经元得以发展到目前的深度神经网络的重要因素。\u003C\u002Fp\u003E\u003Cp\u003E 除此以外,一门技术的发扬没有“伯乐”也是不行的。在神经网络漫长的历史中,正是由于许多研究人员的锲而不舍,不断钻研,才能有了现在的成就。前期的Rosenblat,Rumelhart没有见证到神经网络如今的流行与地位。但是在那个时代,他们为神经网络的发展所打下的基础,却会永远流传下去,不会退色。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cp\u003E备注: 神经网络分类\u003C\u002Fp\u003E\u003Cimg src=\&v2-0fdd5f222cf1a73cd2816650feab0668.jpg\& data-rawwidth=\&1823\& data-rawheight=\&807\&\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cp\u003E原文:\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fwww.cnblogs.com\u002Fsubconscious\u002Fp\u002F5058741.html\& data-editable=\&true\& data-title=\&神经网络浅讲:从神经元到深度学习\&\u003E神经网络浅讲:从神经元到深度学习\u003C\u002Fa\u003E\u003C\u002Fp\u003E&,&updated&:new Date(&T03:24:06.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:5,&likeCount&:60,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T11:24:06+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-1e5c381b517f4f74d8c5_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:5,&likesCount&:60},&&:{&title&:&Caffe入门与实践-简介&,&author&:&xiao-lei-75-81&,&content&:&\u003Cp\u003E目录:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E一,整体结构\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli\u003E二,接口\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli\u003E三,使用流程\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli\u003E四,实战案例\u003Cbr\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cbr\u003E===================================================\u003Cbr\u003E\u003Ch2\u003E一,整体结构\u003C\u002Fh2\u003E\u003Cp\u003E神经网络一般包括:\u003Cb\u003E训练\u003C\u002Fb\u003E,\u003Cb\u003E测试\u003C\u002Fb\u003E两大阶段。\u003C\u002Fp\u003E\u003Cp\u003E按照 \u003Ca href=\&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fli-mu-23\& class=\&\& data-editable=\&true\& data-title=\&李沐 \&\u003E李沐 \u003C\u002Fa\u003E的说法,训练: 就是把\u003Cb\u003E训练数据\u003C\u002Fb\u003E(原料)和 \u003Cb\u003E神经网络模型:如AlexNet\u003C\u002Fb\u003E(丹方) “倒进” \u003Cb\u003E神经网络训练框架例如cafffe,Mxnet\u003C\u002Fb\u003E(炼丹炉)然后用\u003Cb\u003E CPU或GPU\u003C\u002Fb\u003E(真火) “提炼出”\u003Cb\u003E 模型参数\u003C\u002Fb\u003E(仙丹)的过程。测试: 就是把 测试数据 用 训练好的模型(神经网络模型 + 模型参数)跑一跑 看看结果如何。\u003C\u002Fp\u003E作为炼丹炉之一的caffe,就是把炼制过程所涉及的概念做抽象,形成一套体系。\u003Cp\u003E总的来讲,由低到高依次把 网络中的数据抽象成Blob, 各层网络抽象成
Layer ,整个网络抽象成Net,网络模型的求解方法 抽象成 Solver。\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003EBlob 主要用来表示网络中的数据,包括训练数据,网络各层自身的参数,网络之间传递的数据都是通过 Blob 来实现的,同时 Blob 数据也支持在 CPU 与 GPU 上存储,能够在两者之间做同步。\u003C\u002Fli\u003E\u003Cli\u003ELayer 是对神经网络中各种层的一个抽象,包括我们熟知的卷积层和下采样层,还有全连接层和各种激活函数层等等。同时每种 Layer 都实现了前向传播和反向传播,并通过 Blob 来传递数据。\u003C\u002Fli\u003E\u003Cli\u003ENet 是对整个网络的表示,由各种 Layer 前后连接组合而成,也是我们所构建的网络模型。\u003C\u002Fli\u003E\u003Cli\u003ESolver 定义了针对 Net 网络模型的求解方法,记录网络的训练过程,保存网络模型参数,中断并恢复网络的训练过程。自定义 Solver 能够实现不同的网络求解方式。\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cbr\u003E\u003Cp\u003E上段内容来自:\u003Ca href=\&http:\u002F\u002Fblog.luoyetx.com\u002F\u002Freading-caffe-1\u002F\& class=\&\&\u003Ehttp:\u002F\u002Fblog.luoyetx.com\u002F\u002Freading-caffe-1\u002F\u003C\u002Fa\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ch2\u003E二,接口\u003C\u002Fh2\u003E\u003Cp\u003E一个系统必须提供方便人类使用的人机交互的接口。而当前可选接口无非是那么几种: 命令行,配置文件,GUI,编程语言API,web API(例如RESTful) 等等。Caffe提供了三大接口。 命令行(cmdcaffe ),python API(pycaffe),matlab API (matcaffe)。 \u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E命令行(Command Line)\u003C\u002Fb\u003E:\u003C\u002Fp\u003E\u003Cp\u003E命令行简单高效,配合一下配置文件就可以向机器完美表达人类的意图。\u003C\u002Fp\u003E\u003Cp\u003E训练: solver.prototxt 是网络求解文件,由它定义 一些网络训练参数和网络结构文件路径等。\u003C\u002Fp\u003E\u003Ccode lang=\&bash\&\u003E# 训练示例 (参数: 求解文件)\ncaffe train -solver examples\u002Fmnist\u002Flenet_solver.prototxt\n\n# 从训练一半的模型快照中恢复训练 (参数:求解文件 快照)\ncaffe train -solver examples\u002Fmnist\u002Flenet_solver.prototxt -snapshot examples\u002Fmnist\u002Flenet_iter_5000.solversta\n\n# 由其它训练好的模型 fine-tune
(参数:求解文件 其它训练好的模型参数) \ncaffe train -solver examples\u002Ffinetuning_on_flickr_style\u002Fsolver.prototxt -weights models\u002Fbvlc_reference_caffenet\u002Fbvlc_reference_caffenet.caffemodel\u003C\u002Fcode\u003E\u003Cp\u003E测试:\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003E# score the learned LeNet model on the validation set as defined in the\n# model architeture lenet_train_test.prototxt\n# 测试 (参数: 求解文件 训练好的模型参数 )\ncaffe test -model examples\u002Fmnist\u002Flenet_train_test.prototxt -weights examples\u002Fmnist\u002Flenet_iter_10000.caffemodel -gpu 0 -iterations 100\n\u003C\u002Fcode\u003E\u003Cp\u003E注意:网络结构必须定义输出精度或者输出损失作为结果。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cb\u003EPython\u003C\u002Fb\u003E:\u003C\u002Fp\u003E\u003Cli\u003Ecaffe.Net is the central interface for loading, configuring, and running models. caffe.Classifierand caffe.Detector provide convenience interfaces for common tasks.\u003C\u002Fli\u003E\u003Cul\u003E\u003Cli\u003Ecaffe.SGDSolver exposes the solving interface.\u003C\u002Fli\u003E\u003Cli\u003Ecaffe.io handles input \u002F output with preprocessing and protocol buffers.\u003C\u002Fli\u003E\u003Cli\u003Ecaffe.draw visualizes network architectures.\u003C\u002Fli\u003E\u003Cli\u003ECaffe blobs are exposed as numpy ndarrays for ease-of-use and efficiency.\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E举例:\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003Ecaffe.set_mode_cpu() #设置cpu模式\n\ncaffe.set_device(0) #设置GPU模式\ncaffe.set_mode_gpu()\n\nnet = caffe.Net('conv.prototxt', caffe.TEST) #加载网络\n\nnet.blobs #for input data and its propagation in the layers \n\nnet.params #a vector of blobs for weight and bias parameters\n\nnet.forward() #前向传播\n\nnet.save('mymodel.caffemodel') #保存模型参数\n\u003C\u002Fcode\u003E\u003Cbr\u003E\u003Cp\u003E具体请参考官网:\u003Ca href=\&http:\u002F\u002Fcaffe.berkeleyvision.org\u002Ftutorial\u002Finterfaces.html\& class=\&\&\u003Ehttp:\u002F\u002Fcaffe.berkeleyvision.org\u002Ftutorial\u002Finterfaces.html\u003C\u002Fa\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003EMATLAB\u003C\u002Fb\u003E:\u003C\u002Fp\u003E\u003Cp\u003E具体请参考官网:\u003Ca href=\&http:\u002F\u002Fcaffe.berkeleyvision.org\u002Ftutorial\u002Finterfaces.html\& class=\&\&\u003Ehttp:\u002F\u002Fcaffe.berkeleyvision.org\u002Ftutorial\u002Finterfaces.html\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ch2\u003E三,使用流程\u003C\u002Fh2\u003E\u003Cp\u003E\u003Cb\u003E1、数据格式处理\u003C\u002Fb\u003E,把原始图片处理成caffe支持的如下格式之一:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E数据库格式 (LEVELDB or LMDB)
$CAFFEROOT\u002Fbuild\u002Ftools\u002Fconvert_imageset 可以用来做把原始图片转换为LevelDB或者 Lmdb格式。\u003C\u002Fli\u003E\u003Cbr\u003E\u003Cli\u003E内存数据\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli\u003EHDF5数据\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli\u003E图像数据\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003EWindows\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003EDummy\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E参考:\u003Ca href=\&http:\u002F\u002Fcaffe.berkeleyvision.org\u002Ftutorial\u002Flayers.html#data-layers\& class=\&\&\u003Ehttp:\u002F\u002Fcaffe.berkeleyvision.org\u002Ftutorial\u002Flayers.html#data-layers\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cb\u003E2.
编写网络结构文件 \u003C\u002Fb\u003E( .prototxt) \u003Cbr\u003E作用就是定义网络结构:
caffe\u002Fexamples\u002Fmnist\u002Flenet_train_test.prototxt 定义了下图的结构:\u003Cbr\u003E\u003Cimg src=\&v2-5ebddb179b.png\& data-rawwidth=\&2696\& data-rawheight=\&274\&\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cb\u003E3、网络求解文件\u003C\u002Fb\u003E (.prototxt) \u003Cbr\u003E定义了网络模型训练过程中需要设置的参数,比如学习率,权重衰减系数,迭代次数,使用GPU还是CP等。\u003Cbr\u003E\u003Cbr\u003E 示例: caffe\u002Fexamples\u002Fmnist\u002Flenet_solver.prototxt \u003Cbr\u003E# The train\u002Ftest net protocol buffer definition\u003Cbr\u003Enet: \&examples\u002Fmnist\u002Flenet_train_test.prototxt\&\u003Cbr\u003E# test_iter specifies how many forward passes the test should carry out.\u003Cbr\u003E# In the case of MNIST, we have test batch size 100 and 100 test iterations,\u003Cbr\u003E# covering the full 10,000 testing images.\u003Cbr\u003Etest_iter: 100\u003Cbr\u003E# Carry out testing every 500 training iterations.\u003Cbr\u003Etest_interval: 500\u003Cbr\u003E# The base learning rate, momentum and the weight decay of the network.\u003Cbr\u003Ebase_lr: 0.01\u003Cbr\u003Emomentum: 0.9\u003Cbr\u003Eweight_decay: 0.Cbr\u003E# The learning rate policy\u003Cbr\u003Elr_policy: \&inv\&\u003Cbr\u003Egamma: 0.Cbr\u003Epower: 0.75\u003Cbr\u003E# Display every 100 iterations\u003Cbr\u003Edisplay: 100\u003Cbr\u003E# The maximum number of iterations\u003Cbr\u003Emax_iter: 1Cbr\u003E# snapshot intermediate results\u003Cbr\u003Esnapshot: Cbr\u003Esnapshot_prefix: \&examples\u002Fmnist\u002Flenet\&\u003Cbr\u003E# solver mode: CPU or GPU\u003Cbr\u003Esolver_mode: CPU\u003Cbr\u003E其中训练网络和测试网络的定义有两种方式:\u003Cbr\u003E方式一: 在solver.prototxt 文件中分别定义训练网络和测试网络\u003Cbr\u003E\u003Ccode lang=\&text\&\u003Etrain_net: \&examples\u002Fhdf5_classification\u002Fnonlinear_auto_train.prototxt\&\ntest_net: \&examples\u002Fhdf5_classification\u002Fnonlinear_auto_test.prototxt\&\u003C\u002Fcode\u003E方式二: 在solver.prototxt 文件只定义一个网络结构\u003Cbr\u003E\u003Ccode lang=\&text\&\u003Enet: \&examples\u002Fmnist\u002Flenet_train_test.prototxt\&\n\u003C\u002Fcode\u003E但是在改网络结构中 通过
\u003Cstrong\u003Einclude phase \u003C\u002Fstrong\u003E判断该层是在测试时加载,还是训练时加载。\u003Cbr\u003E\u003Cbr\u003E\u003Ccode lang=\&text\&\u003Elayer {\n
name: \&data\&\n
type: \&Data\&\n
top: \&data\&\n
top: \&label\&\n
include {\n
phase: TRAIN\n
data_param {\n
source: \&examples\u002Fimagenet\u002Filsvrc12_train_lmdb\&\n
batch_size: 256\n
backend: LMDB\n
}\n}\nlayer {\n
name: \&data\&\n
type: \&Data\&\n
top: \&data\&\n
top: \&label\&\n
top: \&label\&\n
include {\n
phase: TEST\n
data_param {\n
source: \&examples\u002Fimagenet\u002Filsvrc12_val_lmdb\&\n
batch_size: 50\n
backend: LMDB\n
}\n}\n\u003C\u002Fcode\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cb\u003E4. 训练\u003C\u002Fb\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cbr\u003E基于命令行的训练: \u003Cbr\u003E\u003Ccode lang=\&text\&\u003E# 训练示例 (参数: 求解文件)\ncaffe train -solver examples\u002Fmnist\u002Flenet_solver.prototxt\n\n# 从训练一半的模型快照中恢复训练 (参数:求解文件 快照)\ncaffe train -solver examples\u002Fmnist\u002Flenet_solver.prototxt -snapshot examples\u002Fmnist\u002Flenet_iter_5000.solversta\n\n# 由其它训练好的模型 fine-tune
(参数:求解文件 其它训练好的模型参数) \ncaffe train -solver examples\u002Ffinetuning_on_flickr_style\u002Fsolver.prototxt -weights models\u002Fbvlc_reference_caffenet\u002Fbvlc_reference_caffenet.caffemodel\n\n\u003C\u002Fcode\u003E\u003Cp\u003E基于Python和Matlab的训练请看官网。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cb\u003E5.测试\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E基于命令行测试:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003E# score the learned LeNet model on the validation set as defined in the\n# model architeture lenet_train_test.prototxt\n# 测试 (参数: 求解文件 训练好的模型参数 )\ncaffe test -model examples\u002Fmnist\u002Flenet_train_test.prototxt -weights examples\u002Fmnist\u002Flenet_iter_10000.caffemodel -gpu 0 -iterations 100\u003C\u002Fcode\u003E网络结构必须定义输出精度或者输出损失作为结果。\u003Cbr\u003E\u003Cbr\u003E\u003Cbr\u003E基于python和Matlab的测试请看官网和后续实战案例。\u003Cbr\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Ch2\u003E三,实战案例\u003C\u002Fh2\u003E\u003Cp\u003E接下来准备写几篇手写数字识别的案例。\u003C\u002Fp\u003E\u003Cp\u003E案例一: caffe官网Lenet实战,基于命令行接口(cmdcaffe)的训练 和 测试详解\u003C\u002Fp\u003E\u003Cp\u003E案例二: 用训练好的Lenet模型,基于python接口 预测手写数字 \u003C\u002Fp\u003E\u003Cp\u003E案例三: 用训练号的Lenet模型,基于python接口 完成 kaggle 的数字识别挑战\u003C\u002Fp\u003E&,&updated&:new Date(&T07:30:47.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:2,&likeCount&:71,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T15:30:47+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-bacc3fc8ee2_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:2,&likesCount&:71},&&:{&title&:&caffe入门与实践-LeNet MNIST 教程&,&author&:&xiao-lei-75-81&,&content&:&本教程来自 \u003Ca href=\&http:\u002F\u002Fcaffe.berkeleyvision.org\u002Fgathered\u002Fexamples\u002Fmnist.html\& data-title=\&官网\& class=\&\& data-editable=\&true\&\u003E官网\u003C\u002Fa\u003E,加上自己的配图和部分说明。\u003Cbr\u003E\u003Cp\u003E官网提供了大量案例。一般把数据源放在 $CAFFE_ROOT\u002Fdata 文件夹下面。处理后的数据和模型文件等放在 $CAFFE_ROOT\u002Fexamples文件夹下。($CAFFE_ROOT 表示你电脑上的caffe代码路径。)\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E因此LeNet涉及两个文件夹 $CAFFE_ROOT\u002Fdata
和 $CAFFE_ROOT\u002Fexamples :\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ch2\u003E一,准备数据\u003C\u002Fh2\u003E\u003Cp\u003EMNIST数据: $CAFFE_ROOT\u002Fdata\u002Fmnist\u002F 存放数据源,但是你会发现 只有一个
get_mnist.sh 脚本,运行它就可以帮我们下载数据。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ccode lang=\&text\&\u003Ecd $CAFFE_ROOT\n.\u002Fdata\u002Fmnist\u002Fget_mnist.sh #得到MNIST数据\n\u003C\u002Fcode\u003E\u003Cimg src=\&v2-b89d2dbf95d3b6a1865fae5f9f5fa5e7.png\& data-rawwidth=\&664\& data-rawheight=\&83\&\u003E\u003Cp\u003E转换格式为 LMDB(上篇文章已经提到过caffe支持的几种数据格式)\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ccode lang=\&text\&\u003Ecd $CAFFE_ROOT\n.\u002Fexamples\u002Fmnist\u002Fcreate_mnist.sh #官方给出的专门转换MNIST数据格式的脚本\u003C\u002Fcode\u003E\u003Cp\u003E得到下面两个文件。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cimg src=\&v2-4b849d711d40ced7a2fdf3e39f17c7a8.png\& data-rawwidth=\&166\& data-rawheight=\&48\&\u003E\u003Ch2\u003E二,配置网络结构\u003C\u002Fh2\u003E\u003Cp\u003E官网提供了定义好的网络文件 $CAFFE_ROOT\u002Fexamples\u002Fmnist\u002Flenet_train_test.prototxt
其内容如下:\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003Ename: \&LeNet\&\nlayer {\n
name: \&mnist\&\n
type: \&Data\& #数据层\n
top: \&data\& \n
top: \&label\&\n
include {\n
phase: TRAIN #训练时才加载\n
transform_param {\n
scale: 0. #每个像素乘以改值做归一化(1\u002F255 = 0.)\n
data_param {\n
source: \&examples\u002Fmnist\u002Fmnist_train_lmdb\& #前面生成的训练数据集\n
batch_size: 64 # 每一批训练集大小\n
backend: LMDB #数据格式\n
}\n}\nlayer {\n
name: \&mnist\&\n
type: \&Data\& #数据层\n
top: \&data\&\n
top: \&label\&\n
include {\n
phase: TEST #测试时才加载\n
transform_param {\n
scale: 0.\n
data_param {\n
source: \&examples\u002Fmnist\u002Fmnist_test_lmdb\& #前面生成的测试数据集\n
batch_size: 100\n
backend: LMDB\n
}\n}\nlayer {\n
name: \&conv1\&\n
type: \&Convolution\& #卷积层\n
bottom: \&data\&\n
top: \&conv1\&\n
lr_mult: 1 #weights学习率\n
lr_mult: 2 #bias学习率\n
convolution_param {\n
num_output: 20 #输出多少个特征图(对应卷积核数量)\n
kernel_size: 5 #卷积核大小\n
stride: 1 #步长\n
weight_filler {\n
type: \&xavier\& #权重初始化算法\n
bias_filler {\n
type: \&constant\& #基值初始化算法\n
}\n}\nlayer {\n
name: \&pool1\&\n
type: \&Pooling\& #池化层\n
bottom: \&conv1\& \n
top: \&pool1\&\n
pooling_param {\n
pool: MAX #池化方法\n
kernel_size: 2\n
stride: 2\n
}\n}\nlayer {\n
name: \&conv2\&\n
type: \&Convolution\&\n
bottom: \&pool1\&\n
top: \&conv2\&\n
lr_mult: 1\n
lr_mult: 2\n
convolution_param {\n
num_output: 50\n
kernel_size: 5\n
stride: 1\n
weight_filler {\n
type: \&xavier\&\n
bias_filler {\n
type: \&constant\&\n
}\n}\nlayer {\n
name: \&pool2\&\n
type: \&Pooling\&\n
bottom: \&conv2\&\n
top: \&pool2\&\n
pooling_param {\n
pool: MAX\n
kernel_size: 2\n
stride: 2\n
}\n}\nlayer {\n
name: \&ip1\&\n
type: \&InnerProduct\& #全链接层\n
bottom: \&pool2\&\n
top: \&ip1\&\n
lr_mult: 1 #weights学习率\n
lr_mult: 2 #bias学习率\n
inner_product_param {\n
num_output: 500\n
weight_filler {\n
type: \&xavier\&\n
bias_filler {\n
type: \&constant\&\n
}\n}\nlayer {\n
name: \&relu1\&\n
type: \&ReLU\& #relu层\n
bottom: \&ip1\&\n
top: \&ip1\&\n}\nlayer {\n
name: \&ip2\&\n
type: \&InnerProduct\&\n
bottom: \&ip1\&\n
top: \&ip2\&\n
lr_mult: 1\n
lr_mult: 2\n
inner_product_param {\n
num_output: 10\n
weight_filler {\n
type: \&xavier\&\n
bias_filler {\n
type: \&constant\&\n
}\n}\nlayer {\n
name: \&accuracy\&\n
type: \&Accuracy\& #输出精度\n
bottom: \&ip2\&\n
bottom: \&label\&\n
top: \&accuracy\&\n
include {\n
phase: TEST\n
}\n}\nlayer {\n
name: \&loss\& \n
type: \&SoftmaxWithLoss\& #输出损失\n
bottom: \&ip2\&\n
bottom: \&label\&\n
top: \&loss\&\n}\n\u003C\u002Fcode\u003E\u003Cbr\u003E\u003Cp\u003E可以用 官方自带的python绘图工具绘制出网络图:\u003C\u002Fp\u003E\u003Cimg src=\&v2-ca03df14a573bfedb17a5f89c165613a.png\& data-rawwidth=\&744\& data-rawheight=\&82\&\u003E\u003Cimg src=\&v2-5ebddb179b.png\& data-rawwidth=\&2696\& data-rawheight=\&274\&\u003E\u003Cbr\u003E\u003Ch2\u003E三,配置网络求解文件\u003C\u002Fh2\u003E\u003Cp\u003E官网给出了一个求解文件:$CAFFE_ROOT\u002Fexamples\u002Fmnist\u002Flenet_solver.prototxt:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003E# The train\u002Ftest net protocol buffer definition\nnet: \&examples\u002Fmnist\u002Flenet_train_test.prototxt\&\n# test_iter specifies how many forward passes the test should carry out.\n# In the case of MNIST, we have test batch size 100 and 100 test iterations,\n# covering the full 10,000 testing images.\ntest_iter: 100\n# Carry out testing every 500 training iterations. 设置每500次测试一下网络 精度 损失\ntest_interval: 500\n# The base learning rate, momentum and the weight decay of the network.\nbase_lr: 0.01\nmomentum: 0.9\nweight_decay: 0.0005\n# The learning rate policy\nlr_policy: \&inv\&\ngamma: 0.0001\npower: 0.75\n# Display every 100 iterations
设置每100次迭代训练显示当前状态 lr loss\ndisplay: 100\n# The maximum number of iterations\nmax_iter: 10000\n# snapshot intermediate results 中间结果快照每5000次保存一次\nsnapshot: 5000\nsnapshot_prefix: \&examples\u002Fmnist\u002Flenet\& \n# solver mode: CPU or GPU\nsolver_mode: GPU\u003C\u002Fcode\u003E\u003Cbr\u003E\u003Cp\u003E四,训练\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003Ecd $CAFFE_ROOT\n.\u002Fexamples\u002Fmnist\u002Ftrain_lenet.sh\u003C\u002Fcode\u003E\u003Cp\u003E其内容如下:\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003E#!\u002Fusr\u002Fbin\u002Fenv sh\nset -e\n\n.\u002Fbuild\u002Ftools\u002Fcaffe train --solver=examples\u002Fmnist\u002Flenet_solver.prototxt $@\n\n\u003C\u002Fcode\u003E\u003Cp\u003E可见只是调用前一篇文章 (\u003Ca href=\&http

我要回帖

更多关于 zf网络模型 的文章

 

随机推荐