神经网络浅谈

2024-05-04 16:53

1. 神经网络浅谈

人工智能技术是当前炙手可热的话题,而基于神经网络的深度学习技术更是热点中的热点。去年谷歌的Alpha Go 以4:1大比分的优势战胜韩国的李世石九段,展现了深度学习的强大威力,后续强化版的Alpha Master和无师自通的Alpha Zero更是在表现上完全碾压前者。不论你怎么看,以深度学习为代表的人工智能技术正在塑造未来。
  
  
 下图为英伟达(NVIDIA)公司近年来的股价情况, 该公司的主要产品是“图形处理器”(GPU),而GPU被证明能大大加快神经网络的训练速度,是深度学习必不可少的计算组件。英伟达公司近年来股价的飞涨足以证明当前深度学习的井喷之势。
  
 
  
                                          
 好,话不多说,下面简要介绍神经网络的基本原理、发展脉络和优势。
  
 神经网络是一种人类由于受到生物神经细胞结构启发而研究出的一种算法体系,是机器学习算法大类中的一种。首先让我们来看人脑神经元细胞:
  
 
  
                                          
 一个神经元通常具有多个树突 ,主要用来接受传入信息,而轴突只有一条,轴突尾端有许多轴突末梢,可以给其他多个神经元传递信息。轴突末梢跟其他神经元的树突产生连接,从而传递信号。
  
 下图是一个经典的神经网络(Artificial Neural Network,ANN):
  
 
  
                                          
 乍一看跟传统互联网的拓扑图有点类似,这也是称其为网络的原因,不同的是节点之间通过有向线段连接,并且节点被分成三层。我们称图中的圆圈为神经元,左边三个神经元组成的一列为输入层,中间神经元列为隐藏层,右边神经元列为输出层,神经元之间的箭头为权重。
  
 神经元是计算单元,相当于神经元细胞的细胞核,利用输入的数据进行计算,然后输出,一般由一个线性计算部分和一个非线性计算部分组成;输入层和输出层实现数据的输入输出,相当于细胞的树突和轴突末梢;隐藏层指既不是输入也不是输出的神经元层,一个神经网络可以有很多个隐藏层。
  
 神经网络的关键不是圆圈代表的神经元,而是每条连接线对应的权重。每条连接线对应一个权重,也就是一个参数。权重具体的值需要通过神经网络的训练才能获得。我们实际生活中的学习体现在大脑中就是一系列神经网络回路的建立与强化,多次重复的学习能让回路变得更加粗壮,使得信号的传递速度加快,最后对外表现为“深刻”的记忆。人工神经网络的训练也借鉴于此,如果某种映射关系出现很多次,那么在训练过程中就相应调高其权重。
  
 1943年,心理学家McCulloch和数学家Pitts参考了生物神经元的结构,发表了抽象的神经元模型MP:
  
 
  
                                          
 符号化后的模型如下:
  
 
  
                                          
 Sum函数计算各权重与输入乘积的线性组合,是神经元中的线性计算部分,而sgn是取符号函数,当输入大于0时,输出1,反之输出0,是神经元中的非线性部分。向量化后的公式为z=sgn(w^T a)(w^T=(w_1,w_2,w_3),a=〖(a_1,a_2,a_3)〗^T)。
  
 但是,MP模型中,权重的值都是预先设置的,因此不能学习。该模型虽然简单,并且作用有限,但已经建立了神经网络大厦的地基
  
 1958年,计算科学家Rosenblatt提出了由两层神经元组成(一个输入层,一个输出层)的神经网络。他给它起了一个名字–“感知器”(Perceptron)
  
 
  
                                          
 感知器是当时首个可以学习的人工神经网络。Rosenblatt现场演示了其学习识别简单图像的过程,在当时引起了轰动,掀起了第一波神经网络的研究热潮。
  
 但感知器只能做简单的线性分类任务。1969年,人工智能领域的巨擘Minsky指出这点,并同时指出感知器对XOR(异或,即两个输入相同时输出0,不同时输出1)这样的简单逻辑都无法解决。所以,明斯基认为神经网络是没有价值的。
  
 随后,神经网络的研究进入低谷,又称  AI Winter 。
  
 Minsky说过单层神经网络无法解决异或问题,但是当增加一个计算层以后,两层神经网络不仅可以解决异或问题,而且具有非常好的非线性分类效果。
  
 下图为两层神经网络(输入层一般不算在内):
  
 
  
                                          
 上图中,输出层的输入是上一层的输出。
  
 向量化后的公式为:
  
 
  
                                          
 注意:
  
 每个神经元节点默认都有偏置变量b,加上偏置变量后的计算公式为:
  
 
  
                                          
 同时,两层神经网络不再使用sgn函数作为激励函数,而采用平滑的sigmoid函数:
  
 σ(z)=1/(1+e^(-z) )
  
 其图像如下:
  
 
  
                                          
 理论证明: 两层及以上的神经网络可以无限逼近真实的对应函数,从而模拟数据之间的真实关系 ,这是神经网络强大预测能力的根本。但两层神经网络的计算量太大,当时的计算机的计算能力完全跟不上,直到1986年,Rumelhar和Hinton等人提出了反向传播(Backpropagation,BP)算法,解决了两层神经网络所需要的复杂计算量问题,带动了业界使用两层神经网络研究的热潮。
  
 但好景不长,算法的改进仅使得神经网络风光了几年,然而计算能力不够,局部最优解,调参等一系列问题一直困扰研究人员。90年代中期,由Vapnik等人发明的SVM(Support Vector Machines,支持向量机)算法诞生,很快就在若干个方面体现出了对比神经网络的优势:无需调参;高效;全局最优解。
  
 由于以上原因,SVM迅速打败了神经网络算法成为主流。神经网络的研究再一次进入低谷, AI Winter again 。
  
 多层神经网络一般指两层或两层以上的神经网络(不包括输入层),更多情况下指两层以上的神经网络。
  
 2006年,Hinton提出使用 预训练 ”(pre-training)和“微调”(fine-tuning)技术能优化神经网络训练,大幅度减少训练多层神经网络的时间
  
 并且,他给多层神经网络相关的学习方法赋予了一个新名词–“ 深度学习 ”,以此为起点,“深度学习”纪元开始了:)
  
 “深度学习”一方面指神经网络的比较“深”,也就是层数较多;另一方面也可以指神经网络能学到很多深层次的东西。研究发现,在权重参数不变的情况下,增加神经网络的层数,能增强神经网络的表达能力。
  
 但深度学习究竟有多强大呢?没人知道。2012年,Hinton与他的学生在ImageNet竞赛中,用多层的卷积神经网络成功地对包含一千类别的一百万张图片进行了训练,取得了分类错误率15%的好成绩,这个成绩比第二名高了近11个百分点,充分证明了多层神经网络识别效果的优越性。
  
 同时,科研人员发现GPU的大规模并行矩阵运算模式完美地契合神经网络训练的需要,在同等情况下,GPU的速度要比CPU快50-200倍,这使得神经网络的训练时间大大减少,最终再一次掀起了神经网络研究的热潮,并且一直持续到现在。
  
 2016年基于深度学习的Alpha Go在围棋比赛中以4:1的大比分优势战胜了李世石,深度学习的威力再一次震惊了世界。
  
 神经网络的发展历史曲折荡漾,既有被捧上神坛的高潮,也有无人问津的低谷,中间经历了数次大起大落,我们姑且称之为“三起三落”吧,其背后则是算法的改进和计算能力的持续发展。
  
 下图展示了神经网络自发明以来的发展情况及一些重大时间节点。
  
 
  
                                          
 当然,对于神经网络我们也要保持清醒的头脑。由上图,每次神经网络研究的兴盛期持续10年左右,从最近2012年算起,或许10年后的2022年,神经网络的发展将再次遇到瓶颈。
  
 神经网络作为机器学习的一种,其模型训练的目的,就是使得参数尽可能的与真实的模型逼近。理论证明,两层及以上的神经网络可以无限逼近真实的映射函数。因此,给定足够的训练数据和训练时间,总能通过神经网络找到无限逼近真实关系的模型。
  
 具体做法:首先给所有权重参数赋上随机值,然后使用这些随机生成的参数值,来预测训练数据中的样本。假设样本的预测目标为yp ,真实目标为y,定义值loss,计算公式如下:
  
 loss = (yp -y) ^2
  
 这个值称之为 损失 (loss),我们的目标就是使对所有训练数据的损失和尽可能的小,这就转化为求loss函数极值的问题。
  
 一个常用方法是高等数学中的求导,但由于参数不止一个,求导后计算导数等于0的运算量很大,所以常用梯度下降算法来解决这样的优化问题。梯度是一个向量,由函数的各自变量的偏导数组成。
  
 比如对二元函数 f =(x,y),则梯度∇f=(∂f/∂x,∂f/∂y)。梯度的方向是函数值上升最快的方向。梯度下降算法每次计算参数在当前的梯度,然后让参数向着梯度的反方向前进一段距离,不断重复,直到梯度接近零时截止。一般这个时候,所有的参数恰好达到使损失函数达到一个最低值的状态。下图为梯度下降的大致运行过程:
  
 
  
                                          
 在神经网络模型中,由于结构复杂,每次计算梯度的代价很大。因此还需要使用 反向传播 (Back Propagation)算法。反向传播算法利用了神经网络的结构进行计算,不一次计算所有参数的梯度,而是从后往前。首先计算输出层的梯度,然后是第二个参数矩阵的梯度,接着是中间层的梯度,再然后是第一个参数矩阵的梯度,最后是输入层的梯度。计算结束以后,所要的两个参数矩阵的梯度就都有了。当然,梯度下降只是其中一个优化算法,其他的还有牛顿法、RMSprop等。
  
 确定loss函数的最小值后,我们就确定了整个神经网络的权重,完成神经网络的训练。
  
 在神经网络中一样的参数数量,可以用更深的层次去表达。
  
 
  
                                          
 由上图,不算上偏置参数的话,共有三层神经元,33个权重参数。
  
 
  
                                          
 由下图,保持权重参数不变,但增加了两层神经元。
  
 在多层神经网络中,每一层的输入是前一层的输出,相当于在前一层的基础上学习,更深层次的神经网络意味着更深入的表示特征,以及更强的函数模拟能力。更深入的表示特征可以这样理解,随着网络的层数增加,每一层对于前一层次的抽象表示更深入。
  
 
  
                                          
 如上图,第一个隐藏层学习到“边缘”的特征,第二个隐藏层学习到“边缘”组成的“形状”的特征,第三个隐藏层学习到由“形状”组成的“图案”的特征,最后的隐藏层学习到由“图案”组成的“目标”的特征。通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。
  
 前面提到, 明斯基认为Rosenblatt提出的感知器模型不能处理最简单的“异或”(XOR)非线性问题,所以神经网络的研究没有前途,但当增加一层神经元后,异或问题得到了很好地解决,原因何在?原来从输入层到隐藏层,数据发生了空间变换,坐标系发生了改变,因为矩阵运算本质上就是一种空间变换。
  
 如下图,红色和蓝色的分界线是最终的分类结果,可以看到,该分界线是一条非常平滑的曲线。
  
 
  
                                          
 但是,改变坐标系后,分界线却表现为直线,如下图:
  
 
  
                                          
 同时,非线性激励函数的引入使得神经网络对非线性问题的表达能力大大加强。
  
 对于传统的朴素贝叶斯、决策树、支持向量机SVM等分类器,提取特征是一个非常重要的前置工作。在正式训练之前,需要花费大量的时间在数据的清洗上,这样分类器才能清楚地知道数据的维度,要不然基于概率和空间距离的线性分类器是没办法进行工作的。然而在神经网络中,由于巨量的线性分类器的堆叠(并行和串行)以及卷积神经网络的使用,它对噪声的忍耐能力、对多通道数据上投射出来的不同特征偏向的敏感程度会自动重视或忽略,这样我们在处理的时候,就不需要使用太多的技巧用于数据的清洗了。有趣的是,业内大佬常感叹,“你可能知道SVM等机器学习的所有细节,但是效果并不好,而神经网络更像是一个黑盒,很难知道它究竟在做什么,但工作效果却很好”。
  
 人类对机器学习的环节干预越少,就意味着距离人工智能的方向越近。神经网络的这个特性非常有吸引力。
  
 1) 谷歌的TensorFlow开发了一个非常有意思的神经网络 入门教程  ,用户可以非常方便地在网页上更改神经网络的参数,并且能看到实时的学习效率和结果,非常适合初学者掌握神经网络的基本概念及神经网络的原理。网页截图如下:
  
 
  
                                          
 2) 深度学习领域大佬吴恩达不久前发布的《 神经网络和深度学习  》MOOC,现在可以在网易云课堂上免费观看了,并且还有中文字幕。
  
 3) 《神经网络于深度学习》(Michael Nielsen著)、《白话深度学习与TensorFlow》也是不错的入门书籍。

神经网络浅谈

2. 神经网络的定义

人工智能入门-机器学习与神经网络

3. 神经网络

 神经网络是一种运算模型,模拟大脑神经网络处理、记忆信息的方式进行信息处理。
                                           .
   搜索神经网络经常会看到这种圈、线图。神经网络定义是由大量的节点之间相互联接构成,每个结点代表什么?每条线代表什么?
                                           上图每个圆圆的圈称之为节点,节点就是对输入数据乘上一定的权重后,进行函数处理。
   每两个节点间的连接都代表一个权重,这相当于人工神经网络的记忆。
   术语上把上面一个个圆圈叫做 “神经元” ,深入了解这些圈圈的内部构造。   当这些圈圈(神经元)收到数据输入时,经历三个步骤:
                                           输出的结果又可以作为数据进入下一个神经元。
   还有一个“偏置”的定义用来完善步骤二,这里就不提了。
   ·
   有时候会遇到这样的神经网络的图,其实就是把上面两种类型图结合起来。
                                           输入数据经过3层神经网络处理后,输出结果。   不同层数可以有不同数量的神经元。   每个神经元都有对应输入值的权值w,以及一个偏置b,还有一个激活函数f。   每个神经元的权重w、偏置b、激活函数f都可以不一样。
                                             所以针对这一特性,当神经元函数采用sigmoid函数时,权重的计算:
                                           其中gj计算如下:
                                           这里y为实际分类,y^为预测分类(神经元f处理结果) 详细计算 
   .
   有一组数据,包含4个样本,每个样本有3个属性,每一个样本对于一个已知的分类结果y。(相当于已知结果的训练样本,4个样本,3个特征)
                                           每个样本有3个属性,对应3个权重,进入神经元训练。第一层采用10个神经元进行处理。
                                           步骤一:输入数据*权重
                                           步骤二:代入函数f中计算   上面加权求和后的数据带入函数,这里使用sigmoid函数。
                                           到这一步一层的神经网络就处理好了,比较预测结果和实际y之间的数值差(上面算法中提到的偏差d)为:-0.009664、0.00788003、0.00641069、-0.00786466,相差不多。
   步骤三:完善权重w   一开始的权重是随便设置的,故需要根据公式需要完善权重值。
                                           权重计算结果为-0.62737713,-0.30887831,-0.20651647,三个属性重新赋予合适的权重。

神经网络

4. 神经网络简述

机器学习中谈论的神经网络是指“神经网络学习”,或者说,是机器学习和神经网络这两个学科领域的交叉部分[1]。
  
 在这里,神经网络更多的是指计算机科学家模拟人类大脑结构和智能行为,发明的一类算法的统称。
  
 神经网络是众多优秀仿生算法中的一种,读书时曾接触过蚁群优化算法,曾惊讶于其强大之处,但神经网络的强大,显然蚁群优化还不能望其项背。
  
  
 A、起源与第一次高潮。有人认为,神经网络的最早讨论,源于现代计算机科学的先驱——阿兰.图灵在1948年的论文中描述的“B型组织机器”[2]。二十世纪50年代出现了以感知机、Adaling为代表的一系列成功,这是神经网络发展的第一个高潮[1]。
  
  
 B、第一次低谷。1969年,马文.明斯基出版《感知机》一书,书中论断直接将神经网络打入冷宫,导致神经网络十多年的“冰河期”。值得一提的是,在这期间的1974年,哈佛大学Paul Webos发明BP算法,但当时未受到应有的重视[1]。
  
 C、第二次高潮。1983年,加州理工学院的物理学家John Hopfield利用神经网络,在旅行商问题上获得当时最好结果,引起轰动;Rumelhart等人重新发明了BP算法,BP算法迅速走红,掀起神经网络第二次高潮[1]。
  
 D、第二次低谷。二十世纪90年代中期,统计学习理论和支持向量机兴起,较之于这些算法,神经网络的理论基础不清晰等缺点更加凸显,神经网络研究进入第二次低谷[1]。
  
 E、深度学习的崛起。2010年前后,随着计算能力的提升和大数据的涌现,以神经网络为基础的“深度学习”崛起,科技巨头公司谷歌、Facebook、百度投入巨资研发,神经网络迎来第三次高潮[1]。2016年3月9日至15日,Google人工智能程序AlphaGo对阵韩国围棋世界冠军李世乭,以4:1大比分获胜,比众多专家预言早了十年。这次比赛,迅速在全世界经济、科研、计算机产业各领域掀起人工智能和深度学习的热烈讨论。
  
 F、展望。从几个方面讨论一下。
  
 1)、近期在Google AlphaGo掀起的热潮中,民众的热情与期待最大,甚至有少许恐慌情绪;计算机产业和互联网产业热情也非常巨大,对未来充满期待,各大巨头公司对其投入大量资源;学术界的反应倒是比较冷静的。学术界的冷静,是因为神经网络和深度神经网络的理论基础还没有出现长足的进步,其缺点还没有根本改善。这也从另一个角度说明了深度神经网络理论进步的空间很大。
  
 2)、"当代神经网络是基于我们上世纪六十年代掌握的脑知识。"关于人类大脑的科学与知识正在爆炸式增长。[3]世界上很多学术团队正在基于大脑机制新的认知建立新的模型[3]。我个人对此报乐观态度,从以往的仿生算法来看,经过亿万年进化的自然界对科技发展的促进从来没有停止过。
  
 3)、还说AlphaGo,它并不是理论和算法的突破,而是基于已有算法的工程精品。AlhphaGo的工作,为深度学习的应用提供了非常广阔的想象空间。分布式技术提供了巨大而廉价的计算能力,巨量数据的积累提供了丰富的训练样本,深度学习开始腾飞,这才刚刚开始。
  
                                          
 一直沿用至今的,是McChlloch和Pitts在1943年依据脑神经信号传输结构抽象出的简单模型,所以也被称作”M-P神经元模型“。
                                          
 其中,
  
                                          
 f函数像一般形如下图的函数,既考虑阶跃性,又考虑光滑可导性。
  
                                          
 实际常用如下公式,因形如S,故被称作sigmoid函数。
  
                                          
 把很多个这样的神经元按一定层次连接起来,就得到了神经网络。
  
                                          
 两层神经元组成,输入层接收外界输入信号,输出层是M-P神经元(只有输出层是)。
  
  
 感知机的数学模型和单个M-P神经元的数学模型是一样的,如因为输入层只需接收输入信号,不是M-P神经元。
                                          
 感知机只有输出层神经元是B-P神经元,学习能力非常有限。对于现行可分问题,可以证明学习过程一定会收敛。而对于非线性问题,感知机是无能为力的。
  
  
 BP神经网络全称叫作误差逆传播(Error Propagation)神经网络,一般是指基于误差逆传播算法的多层前馈神经网络。这里为了不占篇幅,BP神经网络将起篇另述。
  
 BP算法是迄今最为成功的神经网络学习算法,也是最有代表性的神经网络学习算法。BP算法不仅用于多层前馈神经网络,还用于其他类型神经网络的训练。
  
 RBF网络全程径向基函数(Radial Basis Function)网络,是一种单隐层前馈神经网络,其与BP网络最大的不同是采用径向基函数作为隐层神经元激活函数。
  
 卷积神经网络(Convolutional neural networks,简称CNNs)是一种深度学习的前馈神经网络,在大型图片处理中取得巨大成功。卷积神经网络将起篇另述。
  
 循环神经网络(Recurrent Neural Networks,RNNs)与传统的FNNs不同,RNNs引入定向循环,能够处理那些输入之间前后关联的问题。RNNs已经在众多自然语言处理(Natural Language Processing, NLP)中取得了巨大成功以及广泛应用[5]。RNNs将起篇另述。[5]
  
 [1]、《机器学习》,周志华著
  
 [2]、《模式识别(第二版)》,Richard O.Duda等著,李宏东等译
  
 [3]、《揭秘IARPA项目:解码大脑算法或将彻底改变机器学习》,Emily Singerz著,机器之心编译出品
  
 [4]、图片来源于互联网
  
 [5]、 循环神经网络(RNN, Recurrent Neural Networks)介绍

5. 神经网络的介绍

人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。

神经网络的介绍

6. 神经网络的介绍

神经网络可以指向两种,一个是生物神经网络,一个是人工神经网络。生物神经网络:一般指生物的大脑神经元,细胞,触点等组成的网络,用于产生生物的意识,帮助生物进行思考和行动。人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。人工神经网络:是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。在工程与学术界也常直接简称为“神经网络”或类神经网络。

7. 简单神经网络

输入层未做任何变换,可以不看做单独的一层;
   实际中网络输入层的每个神经元代表了一个特征,输入层个数代表了分类标签的个数;
  
 
                                                                                  
 
  
 常用的激活函数包括:sigmoid函数、tanh函数、ReLU函数。
  
 当目标是解决一个二分类问题,可在输出层使用sigmoid函数进行二分类。
  
 该函数数将取值为(−∞,+∞) 的数映射到(0,1)之间,其公式以及函数图如下所示:
                                                                                  
 缺点
  
 tanh读作Hyperbolic Tangent,它解决了Sigmoid函数的不是zero-centered输出问题,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。
   该函数数将取值为(−∞,+∞) 的数映射到(-1,1)之间,其公式以及函数图如下所示:
                                                                                  
 ReLU函数又称为修正线性单元, 是一种分段线性函数,其弥补了sigmoid函数以及tanh函数的梯度消失问题。ReLU函数的公式以及图形如下:
                                          
 ReLU函数其实就是一个取最大值函数,注意这并不是全区间可导的,但是我们可以取sub-gradient,如上图所示。ReLU虽然简单,但却是近几年的重要成果,有以下几大优点:
   1) 解决了gradient vanishing问题 (在正区间)
   2)计算速度非常快,只需要判断输入是否大于0
   3)收敛速度远快于sigmoid和tanh
  
 ReLU也有几个需要特别注意的问题:
   1)ReLU的输出不是zero-centered
   2)Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
  
 尽管存在这两个问题,ReLU目前仍是最常用的activation function,在搭建人工神经网络的时候推荐优先尝试!
  
  https://www.jianshu.com/p/01a5ca060f07 
  
  https://blog.csdn.net/yyy430/article/details/88419694#FastText%E4%BB%8B%E7%BB%8D 
    https://github.com/nicken/nlp_study_on_datawhale/blob/master/task_3/task-03.md

简单神经网络

8. 深层神经网络

如上图所示,逻辑回归是一个浅层模型,可以理解为是单层神经网络。深层或浅层是一个程度的问题。如果将逻辑回归模型加入一个隐藏层就变了一个双层神经网络,但还是比较浅的。如果加入 5 个隐藏层,则可以说是一个深层模型。通常可以把隐藏层数当作超参数,然后在交叉验证数据集上进行评估,从而选择合适的深度。
                                          
 上图是一个 4 层的神经网络,包括三个隐藏层和一个输出层,隐藏层的单元数分别是 5 5 3,输出层只有一个单元。通常用 L 表示神经网络的层数,用    表示第    层的单元数,可以把输入层当作第 0 层。那么图中 L = 4,  ,  ,  ,  ,  。可以用    表示第    层的激活值,即   ,用    和    表示在    公式中计算    值的权重,即   。输入用 X 表示,X 也是第 0 层,所以   ,最后一层   ,也就是说    即为神经网络的预测值(输出值)。
                                          
 假设有一个样本 x,那么:
  
 第一层计算:  ,其中 x 也可以表示为   , w 和 b 是会影响第 1 层的激活单元的参数,接下来计算:  ,后面几层的计算也是如此。
  
 第二层计算:  ,  
  
 第三层计算:  ,  
  
 第四层计算:  ,  
  
 可以总结出,计算规律为:  
  
 前向传播的向量化计算:
  
   
  
 输入 X 即   ,是将 m 个样本横向堆叠构成的矩阵,前向传播需要一层一层来迭代计算,所以需要用 for 循环从第 1 层迭代计算到第 L 层,深层神经网络只是比浅层神经网络有更多层的迭代计算。
                                          
 在上图的神经网络中,除去输入层一共有 5 层,其中 4 个隐藏层,一个输出层。第 1 个隐藏层有 3 个隐藏单元,可以表示为  ,   是第 1 个隐藏层的激活函数向量,是一个 3 x 1 的列向量,x 有两个输入特征,所以 x 是 2 x 1 的列向量。在第一层的计算中:  ,如果忽略偏置项   ,  。    乘以一个 2 x 1 的列向量 x,需要等于一个 3 x 1 的列向量,那么    必须是一个 3 x 2 的矩阵,即    的矩阵。   的结果是一个 3 x 1 的向量,   也是一个 3 x1 的向量,所以结果    也是一个 3 x 1 的向量。可以发现,   必须是    维的矩阵,   必须是    维的列向量,所以    的维数是 5 x 3,即   ,   的维数是 5 x 1,即    x 1,所以在第二层的计算中:  ,5 x 3 的矩阵    乘以 3 x 1 的列向量    等于一个 5 x 1 的列向量,再加上一个 5 x 1 的偏置项   ,结果    是一个 5 x 1 的列向量。以此类推,   的维数是 4 x 5,   的维数是 2 x 4,   的维数是 1 x 2。
  
 前面证实了,   必须是    维的矩阵,   必须是    维的列向量。而且,在反向传播中,   和    的维度相同,   和   的维度相同。又因为   ,所以  和  的维度也相同,都是  。
  
 以上是神经网络中单个样本的计算,其中 x 表示单个样本,通常为了加速运算,需要将 m 个样本进行向量化计算,可以用 X 表示 m 个样本,第一个隐藏层的向量化计算公式即为:  ,其中    还是   维, X 变为   维,   的结果是    的矩阵,   的维度还是   ,但当一个    的矩阵和    相加时,Python会通过广播将    复制成为    的矩阵,然后两个矩阵逐个元素相加。所以    的维度变为   ,即 3 x m。   表示每一个单独的    横向叠加构成的行向量,即   。
  
 单个样本时,   和    的维度相同,都是   ,m 个样本时,   和    的维度相同,都是   ,当    等于 0 时,   等于   ,其中    是 x 的输入特征数。反向传播时,dZ、dA 和 Z、A 的维度相同。
  
 从直觉上可以把深度神经网络的前几层当做探测简单的函数,也就是学习一些低层次的简单特征,之后把它们和后几层结合在一起,也就是把简单的特征结合起来,那么总体上就能学习更多复杂的函数,也就是去探测更复杂的东西。可以把深度学习神经网络和人类大脑做类比,人的大脑也是先探测简单的东西,然后组合起来才能探测复杂的物体。
  
 神经网络为何有效的理论来源于电路理论,它和能够用电路元件计算哪些函数有着分不开的联系,根据不同的基本逻辑门(与,或,非),在非正式情况下,这些函数都可以用相对较小(指隐藏单元数量)但很深的神经网络来计算  ,如果用浅层神经网络则需要指数增长的隐藏单元数量才能达到同样的效果。
                                          
 上图是一个 4 层的神经网络,梯度下降的一个迭代过程即为前向传播和反向传播的计算过程,如下图所示:
                                          
 在前向传播计算中,从第 1 层开始,第    层的输入为上一层(第    层)的激活函数计算结果    和当前层的参数   ,输出为当前层激活函数计算结果   ,还要缓存    和    以供反向传播使用,   则输入到下一层(第    层),计算过程如下:
     
  
 向量化计算为:
     
  
 当计算完所有层的前向传播后,第 L 层的激活函数计算结果    即当前样本的预测值。接下来将进行反向传播计算,从第 L 层开始,第    层的输入为当前层激活函数计算结果的导数值    和当前层的参数   ,输出为上一层(第    层)激活函数计算结果的导数值   ,以及当前层参数的导数值   ,计算过程如下:
  
 首先   
  
   
  
 由    可知   ,将 da 带入可求得:  
  
 向量化计算为:
   首先   
  
   
  
 在每一层中根据梯度下降公式,更新参数:
     
  
 这就是神经网络中梯度下降一个迭代的计算过程。
  
 神经网络中的参数包括: W 和 b。超参数包括:学习率   ,梯度下降迭代次数(iterations),隐层数(L),隐藏单元数(units),激活函数(activefunction),因为这些参数是在某种程度上决定了参数 W 和 b 的参数,所以叫做超参数。其他超参数包括:momentum,batch size,正则化参数等
                                          
 可以通过尝试不同的超参数,观察代价函数曲线变化,从而选择表现最好的超参数。
  
 没有。
  
  https://mooc.study.163.com/smartSpec/detail/1001319001.htm
最新文章
热门文章
推荐阅读