循环神经网络

2024-05-13

1. 循环神经网络

  为什么卷积神经网络不会出现严重的数值问题呢?    卷积神经网络中每一层的权重矩阵 W 是不同的,并且在初始化时它们是独立同分布的,因此可以相互抵消,在多层之后一般不会出现严重的数值问题。   循环神经网络采用 ReLu 激活函数,只有当 W 的取值在单位矩阵附近时才能取得比较好的效果,因此需要将 W 初始化为单位矩阵。
   Seq2Seq 模型最基础的解码方法是贪心法,即选取一种度量标准后,每次都在当前状态下选择最佳的一个结果,直到结束。贪心法的计算代价低,适合作为基准结果与其他方法相比较。贪心法获得的是一个局部最优解,由于实际问题的复杂性,该方法往往不能取得最好的结果。    集束搜索: 是一种启发式算法,会保存 beam size 个当前的较佳选择,然后解码时每一步根据保存的选则进行下一步扩展和排序,接着选择前 b 个进行保存,循环迭代,知道结束时选择最佳的一个作为解码的结果。 b 往往选择一个适中的范围,以 8-12 为佳。    
                                           
    Seq2Seq 模型引入注意力机制是为了解决什么问题?为什么选用了双向的循环神经网络模型?    编码时输入序列的全部信息压缩到了一个向量中,随着序列增长,句子越前面的词的信息丢失越严重。同时,Seq2Seq 模型的输出序列中,常常会损失部分输入序列信息,这是解码时,当前词及对应的源语言词的上下文信息和位置信息在编解码过程中丢失了。 引入注意力机制,解决上述问题 。使用双向的循环神经网络进行建模,可以获取前后文的信息。

循环神经网络

2. 循环神经网络

 花书中关于RNN的内容记录于 https://www.jianshu.com/p/206090600f13 。
   在前馈神经网络中,信息的传递是单向的,这种限制虽然使得网络变得更容易学习,但在一定程度上也减弱了神经网络模型的能力。在生物神经网络中,神经元之间的连接关系要复杂的多。 前馈神经网络可以看作是一个复杂的函数,每次输入都是独立的,即网络的输出只依赖于当前的输入。但是在很多现实任务中,网络的输入不仅和当前时刻的输入相关,也和其过去一段时间的输出相关 。因此,前馈网络难以处理时序数据,比如视频、语音、文本等。时序数据的长度一般是不固定的,而前馈神经网络要求输入和输出的维数都是固定的,不能任意改变。因此,当处理这一类和时序相关的问题时,就需要一种能力更强的模型。
    循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其它神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。 和前馈神经网络相比,循环神经网络更加符合生物神经网络的结构。循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上。循环神经网络的参数学习可以通过 随时间反向传播算法 来学习。
   为了处理这些时序数据并利用其历史信息,我们需要让网络具有短期记忆能力。而前馈网络是一个静态网络,不具备这种记忆能力。
   一种简单的利用历史信息的方法是建立一个额外的延时单元,用来存储网络的历史信息(可以包括输入、输出、隐状态等)。比较有代表性的模型是延时神经网络。
   延时神经网络是在前馈网络中的非输出层都添加一个延时器,记录最近几次神经元的输出。在第  个时刻,第  层神经元和第  层神经元的最近  次输出相关,即:
     
    延时神经网络在时间维度上共享权值,以降低参数数量。因此对于序列输入来讲,延时神经网络就相当于卷积神经网络 。
    自回归模型(Autoregressive Model,AR) 是统计学上常用的一类时间序列模型,用一个变量  的历史信息来预测自己:
     
   其中  为超参数,  为参数,  为第  个时刻的噪声,方差  和时间无关。
    有外部输入的非线性自回归模型(Nonlinear Autoregressive with ExogenousInputs Model,NARX) 是自回归模型的扩展,在每个时刻  都有一个外部输入  ,产生一个输出  。NARX通过一个延时器记录最近几次的外部输入和输出,第  个时刻的输出  为:
     
   其中  表示非线性函数,可以是一个前馈网络,  和  为超参数。
   循环神经网络通过使用带自反馈的神经元,能够处理任意长度的时序数据。
   给定一个输入序列  ,循环神经网络通过下面   公式更新带反馈边的隐藏层的活性值  :
     
   其中  ,  为一个非线性函数,也可以是一个前馈网络。
                                           从数学上讲,上式可以看成一个动力系统。动力系统(Dynamical System)是一个数学上的概念,指 系统状态按照一定的规律随时间变化的系统 。具体地讲,动力系统是使用一个函数来描述一个给定空间(如某个物理系统的状态空间)中所有点随时间的变化情况。因此, 隐藏层的活性值  在很多文献上也称为状态(State)或隐状态(Hidden States) 。理论上,循环神经网络可以近似任意的非线性动力系统。
   简单循环网络(Simple Recurrent Network,SRN)是一个非常简单的循环神经网络,只有一个隐藏层的神经网络。
   在一个两层的前馈神经网络中,连接存在相邻的层与层之间,隐藏层的节点之间是无连接的。而 简单循环网络增加了从隐藏层到隐藏层的反馈连接 。
   假设在时刻  时,网络的输入为  ,隐藏层状态(即隐藏层神经元活性值)   不仅和当前时刻的输入  相关,也和上一个时刻的隐藏层状态  相关: 
     
   其中  为隐藏层的净输入,  是非线性激活函数,通常为Logistic函数或Tanh函数,  为状态-状态权重矩阵,  为状态-输入权重矩阵,  为偏置。上面两式也经常直接写为:
     
    如果我们把每个时刻的状态都看作是前馈神经网络的一层的话,循环神经网络可以看作是在时间维度上权值共享的神经网络 。下图给出了按时间展开的循环神经网络。
                                           由于循环神经网络具有短期记忆能力,相当于存储装置,因此其计算能力十分强大。 前馈神经网络可以模拟任何连续函数,而循环神经网络可以模拟任何程序。 
   定义一个完全连接的循环神经网络,其输入为  ,输出为  :
     
   其中  为隐状态,  为非线性激活函数,  和  为网络参数。
    这样一个完全连接的循环神经网络可以近似解决所有的可计算问题 。
   循环神经网络可以应用到很多不同类型的机器学习任务。根据这些任务的特点可以分为以下几种模式: 序列到类别模式、同步的序列到序列模式、异步的序列到序列模式 。
   序列到类别模式主要用于序列数据的分类问题:输入为序列,输出为类别。比如在文本分类中,输入数据为单词的序列,输出为该文本的类别。
   假设一个样本  为一个长度为  的序列,输出为一个类别  。我们可以将样本  按不同时刻输入到循环神经网络中,并得到不同时刻的隐藏状态  。我们可以将  看作整个序列的最终表示(或特征),并输入给分类器  进行分类:
     
   其中  可以是简单的线性分类器(比如Logistic 回归)或复杂的分类器(比如多层前馈神经网络)
   除了将最后时刻的状态作为序列表示之外,我们还可以对整个序列的所有状态进行平均,并用这个平均状态来作为整个序列的表示:
     
                                           同步的序列到序列模式 主要用于序列标注(Sequence Labeling)任务,即每一时刻都有输入和输出,输入序列和输出序列的长度相同 。比如词性标注(Partof-Speech Tagging)中,每一个单词都需要标注其对应的词性标签。
   输入为序列  ,输出为序列  。样本  按不同时刻输入到循环神经网络中,并得到不同时刻的隐状态  。每个时刻的隐状态  代表当前和历史的信息,并输入给分类器  得到当前时刻的标签  。
     
                                           异步的序列到序列模式也称为 编码器-解码器(Encoder-Decoder)模型,即输入序列和输出序列不需要有严格的对应关系,也不需要保持相同的长度。 比如在机器翻译中,输入为源语言的单词序列,输出为目标语言的单词序列。
   在异步的序列到序列模式中,输入为长度为  的序列  ,输出为长度为  的序列  。经常通过 先编码后解码 的方式来实现。先将样本  按不同时刻输入到一个循环神经网络(编码器)中,并得到其编码  。然后再使用另一个循环神经网络(解码器)中,得到输出序列  。为了建立输出序列之间的依赖关系,在解码器中通常使用非线性的自回归模型。
     
   其中  分别为用作编码器和解码器的循环神经网络,  为分类器,  为预测输出  的向量表示。
                                           循环神经网络的参数可以通过梯度下降方法来进行学习。给定一个训练样本  ,其中  为长度是  的输入序列,  是长度为  的标签序列。即在每个时刻  ,都有一个监督信息  ,我们定义时刻  的损失函数为:
     
   其中  为第  时刻的输出,  为可微分的损失函数,比如交叉熵。那么整个序列上损失函数为:
     
   整个序列的损失函数  关于参数  的梯度为:
     
   即每个时刻损失  对参数  的偏导数之和。
   循环神经网络中存在一个递归调用的函数  ,因此其计算参数梯度的方式和前馈神经网络不太相同。在循环神经网络中主要有两种计算梯度的方式: 随时间反向传播(BPTT)和实时循环学习(RTRL)算法。 
    随时间反向传播(Backpropagation Through Time,BPTT) 算法的主要思想是通过类似前馈神经网络的错误反向传播算法来进行计算梯度。
    BPTT算法将循环神经网络看作是一个展开的多层前馈网络,其中“每一层”对应循环网络中的“每个时刻”。在“展开”的前馈网络中,所有层的参数是共享的,因此参数的真实梯度是将所有“展开层”的参数梯度之和 。
   因为参数  和隐藏层在每个时刻  的净输入  有关,因此第  时刻的损失函数  关于参数  的梯度为:
     
   其中  表示“直接”偏导数,即公式  中保持  不变,对  求偏导数,得到:
     
   其中  为第  时刻隐状态的第  维;  除了第  个值为  外,其余都为  的行向量。
   定义误差项  为第  时刻的损失对第  时刻隐藏神经层的净输入  的导数,则:
     
   从而:
     
   写成矩阵形式为:
     
   由此得到整个序列的损失函数  关于参数  的梯度:
     
   同理可得,  关于权重  和偏置  的梯度为:
     
   在BPTT算法中,参数的梯度需要在一个完整的“前向”计算和“反向”计算后才能得到并进行参数更新。如下图所示。
                                            与反向传播的BPTT算法不同的是,实时循环学习(Real-Time Recurrent Learning)是通过前向传播的方式来计算梯度。 
   假设循环神经网络中第  时刻的状态  为:
     
   其关于参数  的偏导数为:
     
   RTRL算法从第1 个时刻开始,除了计算循环神经网络的隐状态之外,还依次前向计算偏导数  。
   两种学习算法比较:
   RTRL算法和BPTT算法都是基于梯度下降的算法,分别通过前向模式和反向模式应用链式法则来计算梯度。 在循环神经网络中,一般网络输出维度远低于输入维度,因此BPTT算法的计算量会更小,但BPTT算法需要保存所有时刻的中间梯度,空间复杂度较高。RTRL算法不需要梯度回传,因此非常适合于需要在线学习或无限序列的任务中 。
   循环神经网络在学习过程中的主要问题是由于 梯度消失或爆炸问题 ,很难建模长时间间隔(Long Range)的状态之间的依赖关系。
   在BPTT算法中,我们有:
     
   如果定义  ,则:
     
   若  ,当  时,  ,会造成系统不稳定,称为梯度爆炸问题;相反,若  ,当  时,  ,会出现和深度前馈神经网络类似的梯度消失问题。
   虽然简单循环网络理论上可以建立长时间间隔的状态之间的依赖关系,但是由于梯度爆炸或消失问题,实际上只能学习到短期的依赖关系。这样,如果t时刻的输出  依赖于  时刻的输入  ,当间隔  比较大时,简单神经网络很难建模这种长距离的依赖关系,称为 长程依赖问题(Long-Term dependencies Problem) 。
   一般而言,循环网络的梯度爆炸问题比较容易解决,一般 通过权重衰减或梯度截断来避免。 权重衰减是通过给参数增加  或  范数的正则化项来限制参数的取值范围,从而使得  。梯度截断是另一种有效的启发式方法,当梯度的模大于一定阈值时,就将它截断成为一个较小的数。
   梯度消失是循环网络的主要问题。除了使用一些优化技巧外,更有效的方式就是改变模型,比如让  ,同时使用  ,即:
     
   其中  是一个非线性函数,  为参数。
   上式中,  和  之间为线性依赖关系,且权重系数为1,这样就不存在梯度爆炸或消失问题。但是,这种改变也丢失了神经元在反馈边上的非线性激活的性质,因此也降低了模型的表示能力。
   为了避免这个缺点,我们可以采用一种更加有效的改进策略:
     
   这样  和  之间为既有线性关系,也有非线性关系,并且可以缓解梯度消失问题。但这种改进依然存在两个问题:
   为了解决这两个问题,可以通过引入 门控机制 来进一步改进模型。
   为了改善循环神经网络的长程依赖问题,一种非常好的解决方案是引入门控机制来控制信息的累积速度,包括 有选择地加入新的信息,并有选择地遗忘之前累积的信息 。这一类网络可以称为基于门控的循环神经网络(Gated RNN)。本节中,主要介绍两种基于门控的循环神经网络: 长短期记忆网络和门控循环单元网络。 
    长短期记忆(Long Short-Term Memory,LSTM)网络 是循环神经网络的一个变体,可以有效地解决简单循环神经网络的梯度爆炸或消失问题。
   在  基础上,LSTM网络主要改进在以下两个方面:
     
   其中  和  三个门(gate)来控制信息传递的路径;  为向量元素乘积;  为上一时刻的记忆单元;  是通过非线性函数得到的候选状态:
     
   在每个时刻  ,LSTM网络的内部状态  记录了到当前时刻为止的历史信息。
   在数字电路中,门(Gate)为一个二值变量{0, 1},0代表关闭状态,不许任何信息通过;1代表开放状态,允许所有信息通过。LSTM网络中的“门”是一种“软”门,取值在(0, 1) 之间,表示 以一定的比例运行信息通过 。LSTM网络中三个门的作用为:
   (1)遗忘门  控制上一个时刻的内部状态  需要遗忘多少信息。   (2)输入门  控制当前时刻的候选状态  有多少信息需要保存。   (3)输出门

3. 一文读懂神经网络

 要说近几年最引人注目的技术,无疑的,非人工智能莫属。无论你是否身处科技互联网行业,随处可见人工智能的身影:从 AlphaGo 击败世界围棋冠军,到无人驾驶概念的兴起,再到科技巨头 All in AI,以及各大高校向社会输送海量的人工智能专业的毕业生。以至于人们开始萌生一个想法:新的革命就要来了,我们的世界将再次发生一次巨变;而后开始焦虑:我的工作是否会被机器取代?我该如何才能抓住这次革命?
   人工智能背后的核心技术是深度神经网络(Deep Neural Network),大概是一年前这个时候,我正在回老家的高铁上学习  3Blue1Brown 的 Neural Network  系列视频课程,短短 4 集 60 多分钟的时间,就把神经网络从 High Level 到推导细节说得清清楚楚,当时的我除了获得新知的兴奋之外,还有一点新的认知,算是给头脑中的革命性的技术泼了盆冷水:神经网络可以解决一些复杂的、以前很难通过写程序来完成的任务——例如图像、语音识别等,但它的实现机制告诉我,神经网络依然没有达到生物级别的智能,短期内期待它来取代人也是不可能的。
   一年后的今天,依然在这个春运的时间点,将我对神经网络的理解写下来,算是对这部分知识的一个学习笔记,运气好的话,还可以让不了解神经网络的同学了解起来。
   维基百科这样解释 神经网络 :
   这个定义比较宽泛,你甚至还可以用它来定义其它的机器学习算法,例如之前我们一起学习的逻辑回归和 GBDT 决策树。下面我们具体一点,下图是一个逻辑回归的示意图:
                                           其中 x1 和 x2 表示输入,w1 和 w2 是模型的参数,z 是一个线性函数:        接着我们对 z 做一个 sigmod 变换(图中蓝色圆),得到输出 y:        其实,上面的逻辑回归就可以看成是一个只有 1 层 输入层 , 1 层 输出层 的神经网络,图中容纳数字的圈儿被称作 神经元 ;其中,层与层之间的连接 w1、w2 以及 b,是这个 神经网络的参数 ,层之间如果每个神经元之间都保持着连接,这样的层被称为 全连接层 (Full Connection Layer),或 稠密层 (Dense Layer);此外,sigmoid 函数又被称作 激活函数 (Activation Function),除了 sigmoid 外,常用的激活函数还有 ReLU、tanh 函数等,这些函数都起到将线性函数进行非线性变换的作用。我们还剩下一个重要的概念: 隐藏层 ,它需要把 2 个以上的逻辑回归叠加起来加以说明:
                                           如上图所示,除输入层和输出层以外,其他的层都叫做 隐藏层 。如果我们多叠加几层,这个神经网络又可以被称作 深度神经网络 (Deep Neural Network),有同学可能会问多少层才算“深”呢?这个没有绝对的定论,个人认为 3 层以上就算吧:)
   以上,便是神经网络,以及神经网络中包含的概念,可见,神经网络并不特别,广义上讲,它就是
   可见,神经网络和人脑神经也没有任何关联,如果我们说起它的另一个名字—— 多层感知机(Mutilayer Perceptron) ,就更不会觉得有多么玄乎了,多层感知机创造于 80 年代,可为什么直到 30 年后的今天才爆发呢?你想得没错,因为改了个名字……开个玩笑;实际上深度学习这项技术也经历过很长一段时间的黑暗低谷期,直到人们开始利用 GPU 来极大的提升训练模型的速度,以及几个标志性的事件:如 AlphaGo战胜李世石、Google 开源 TensorFlow 框架等等,感兴趣的同学可以翻一下这里的历史。
   就拿上图中的 3 个逻辑回归组成的神经网络作为例子,它和普通的逻辑回归比起来,有什么优势呢?我们先来看下单逻辑回归有什么劣势,对于某些情况来说,逻辑回归可能永远无法使其分类,如下面数据:
   这 4 个样本画在坐标系中如下图所示
                                           因为逻辑回归的决策边界(Decision Boundary)是一条直线,所以上图中的两个分类,无论你怎么做,都无法找到一条直线将它们分开,但如果借助神经网络,就可以做到这一点。
   由 3 个逻辑回归组成的网络(这里先忽略 bias)如下:
                                           观察整个网络的计算过程,在进入输出层之前,该网络所做的计算实际上是:        即把输入先做了一次线性变换(Linear Transformation),得到  [z1, z2] ,再把  [z1, z2]  做了一个非线性变换(sigmoid),得到  [x1', x2'] ,(线性变换的概念可以参考 这个视频 )。从这里开始,后面的操作就和一个普通的逻辑回归没有任何差别了,所以它们的差异在于: 我们的数据在输入到模型之前,先做了一层特征变换处理(Feature Transformation,有时又叫做特征抽取 Feature Extraction),使之前不可能被分类的数据变得可以分类了 。
   我们继续来看下特征变换的效果,假设    为   ,带入上述公式,算出 4 个样本对应的  [x1', x2']  如下:
   再将变换后的 4 个点绘制在坐标系中:
                                           显然,在做了特征变换之后,这两个分类就可以很容易的被一条决策边界分开了。
   所以, 神经网络的优势在于,它可以帮助我们自动的完成特征变换或特征提取 ,尤其对于声音、图像等复杂问题,因为在面对这些问题时,人们很难清晰明确的告诉你,哪些特征是有用的。
   在解决特征变换的同时,神经网络也引入了新的问题,就是我们需要设计各式各样的网络结构来针对性的应对不同的场景,例如使用卷积神经网络(CNN)来处理图像、使用长短期记忆网络(LSTM)来处理序列问题、使用生成式对抗网络(GAN)来写诗和作图等,就连去年自然语言处理(NLP)中取得突破性进展的 Transformer/Bert 也是一种特定的网络结构。所以, 学好神经网络,对理解其他更高级的网络结构也是有帮助的 。
   上面说了,神经网络可以看作一个非线性函数,该函数的参数是连接神经元的所有的 Weights 和 Biases,该函数可以简写为  f(W, B) ,以手写数字识别的任务作为例子:识别  MNIST 数据集 中的数字,数据集(MNIST 数据集是深度学习中的 HelloWorld)包含上万张不同的人写的数字图片,共有 0-9 十种数字,每张图片为  28*28=784  个像素,我们设计一个这样的网络来完成该任务:
   把该网络函数所具备的属性补齐:
   接下来的问题是,这个函数是如何产生的?这个问题本质上问的是这些参数的值是怎么确定的。
   在机器学习中,有另一个函数 c 来衡量 f 的好坏,c 的参数是一堆数据集,你输入给 c 一批 Weights 和 Biases,c 输出 Bad 或 Good,当结果是 Bad 时,你需要继续调整 f 的 Weights 和 Biases,再次输入给 c,如此往复,直到 c 给出 Good 为止,这个 c 就是损失函数 Cost Function(或 Loss Function)。在手写数字识别的列子中,c 可以描述如下:
   可见,要完成手写数字识别任务,只需要调整这 12730 个参数,让损失函数输出一个足够小的值即可,推而广之,绝大部分神经网络、机器学习的问题,都可以看成是定义损失函数、以及参数调优的问题。
   在手写识别任务中,我们既可以使用交叉熵(Cross Entropy)损失函数,也可以使用 MSE(Mean Squared Error)作为损失函数,接下来,就剩下如何调优参数了。
   神经网络的参数调优也没有使用特别的技术,依然是大家刚接触机器学习,就学到的梯度下降算法,梯度下降解决了上面迭代过程中的遗留问题——当损失函数给出 Bad 结果时,如何调整参数,能让 Loss 减少得最快。
   梯度可以理解为:
   把 Loss 对应到 H,12730 个参数对应到 (x,y),则 Loss 对所有参数的梯度可以表示为下面向量,该向量的长度为 12730:   $$   \nabla L(w,b) = \left[
   \frac{\partial L}{\partial w_1},   \frac{\partial L}{\partial w_2},...,   \frac{\partial L}{\partial b_{26}}
   \right] ^\top   $$   所以,每次迭代过程可以概括为
   用梯度来调整参数的式子如下(为了简化,这里省略了 bias):        上式中,   是学习率,意为每次朝下降最快的方向前进一小步,避免优化过头(Overshoot)。
   由于神经网络参数繁多,所以需要更高效的计算梯度的算法,于是,反向传播算法(Backpropagation)呼之欲出。
   在学习反向传播算法之前,我们先复习一下微积分中的链式法则(Chain Rule):设  g = u(h) , h = f(x)  是两个可导函数,x 的一个很小的变化 △x 会使 h 产生一个很小的变化 △h,从而 g 也产生一个较小的变化 △g,现要求 △g/△x,可以使用链式法则:        有了以上基础,理解反向传播算法就简单了。
   假设我们的演示网络只有 2 层,输入输出都只有 2 个神经元,如下图所示:
                                           其中    是输入,   是输出,   是样本的目标值,这里使用的损失函数 L 为 MSE;图中的上标 (1) 或 (2) 分别表示参数属于第 (1) 层或第 (2) 层,下标 1 或 2 分别表示该层的第 1 或 第 2 个神经元。
   现在我们来计算    和    ,掌握了这 2 个参数的偏导数计算之后,整个梯度的计算就掌握了。
   所谓反向传播算法,指的是从右向左来计算每个参数的偏导数,先计算    ,根据链式法则        对左边项用链式法则展开        又    是输出值,   可以直接通过 MSE 的导数算出:        而   ,则    就是 sigmoid 函数的导数在    处的值,即        于是    就算出来了:        再来看    这一项,因为        所以         注意:上面式子对于所有的    和    都成立,且结果非常直观,即    对    的偏导为左边的输入    的大小;同时,这里还隐含着另一层意思:需要调整哪个    来影响   ,才能使 Loss 下降得最快,从该式子可以看出,当然是先调整较大的    值所对应的   ,效果才最显著 。
   于是,最后一层参数    的偏导数就算出来了        我们再来算上一层的   ,根据链式法则 :        继续展开左边这一项        你发现没有,这几乎和计算最后一层一摸一样,但需要注意的是,这里的    对 Loss 造成的影响有多条路径,于是对于只有 2 个输出的本例来说:        上式中,   都已经在最后一层算出,下面我们来看下   ,因为        于是        同理         注意:这里也引申出梯度下降的调参直觉:即要使 Loss 下降得最快,优先调整 weight 值比较大的 weight。 
   至此,   也算出来了        观察上式, 所谓每个参数的偏导数,通过反向传播算法,都可以转换成线性加权(Weighted Sum)计算 ,归纳如下:        式子中 n 代表分类数,(l) 表示第 l 层,i 表示第 l 层的第 i 个神经元。 既然反向传播就是一个线性加权,那整个神经网络就可以借助于 GPU 的矩阵并行计算了 。
   最后,当你明白了神经网络的原理,是不是越发的认为,它就是在做一堆的微积分运算,当然,作为能证明一个人是否学过微积分,神经网络还是值得学一下的。Just kidding ..
   本文我们通过
   这四点,全面的学习了神经网络这个知识点,希望本文能给你带来帮助。
   参考:

一文读懂神经网络

4. 如何理解循环神经网络实现预测

神经系统(nervous system)是机体内起主导作用的系统,分为中枢神经系统和周围神经系统两大部分。
神经系统是人体内起主导作用的功能调节系统。人体的结构与功能均极为复杂,体内各器官、系统的功能和各种生理过程都不是各自孤立地进行,而是在神经系统的直接或间接调节控制下,互相联系、相互影响、密切配合,使人体成为一个完整统一的有机体,实现和维持正常的生命活动。同时,人体又是生活在经常变化的环境中,神经系统能感受到外部环境的变化对体内各种功能不断进行迅速而完善的调整,使人体适应体内外环境的变化。可见,神经系统在人体生命活动中起着主导的调节作用,人类的神经系统高度发展,特别是大脑皮层不仅进化成为调节控制的最高中枢,而且进化成为能进行思维活动的器官。因此,人类不但能适应环境,还能认识和改造世界。
神经系统由中枢部分及其外周部分所组成。中枢部分包括脑和脊髓,分别位于颅腔和椎管内,两者在结构和功能上紧密联系,组成中枢神经系统。外周部分包括12对脑神经和31对脊神经,它们组成外周神经系统。外周神经分布于全身,把脑和脊髓与全身其他器官联系起来,使中枢神经系统既能感受内外环境的变化(通过传入神经传输感觉信息),又能调节体内各种功能(通过传出神经传达调节指令),以保证人体的完整统一及其对环境的适应。神经系统的基本结构和功能单位是神经元(神经细胞),而神经元的活动和信息在神经系统中的传输则表现为一定的生物电变化及其传播。例如,外周神经中的传入神经纤维把感觉信息传入中枢,传出神经纤维把中枢发出的指令信息传给效应器,都是以神经冲动的形式传送的,而神经冲动就是一种称为动作电位的生物电变化,是神经兴奋的标志。
中枢神经通过周围神经与人体其他各个器官、系统发生极其广泛复杂的联系。神经系统在维持机体内环境稳定,保持机体完整统一性及其与外环境的协调平衡中起着主导作用。在社会劳动中,人类的大脑皮层得到了高速发展和不断完善,产生了语言、思维、学习、记忆等高级功能活动,使人不仅能适应环境的变化,而且能认识和主动改造环境。内、外环境的各种信息,由感受器接受后,通过周围神经传递到脑和脊髓的各级中枢进行整合,再经周围神经控制和调节机体各系统器官的活动,以维持机体与内、外界环境的相对平衡。神经系统是由神经细胞(神经元)和神经胶质所组成。
中枢神经通过周围神经与人体其他各个器官、系统发生极其广泛复杂的联系。神经系统在维持机体内环境稳定,保持机体完整统一性及其与外环境的协调平衡中起着主导作用。在社会劳动中,人类的大脑皮层得到了高速发展和不断完善,产生了语言、思维、学习、记忆等高级功能活动,使人不仅能适应环境的变化,而且能认识和主动改造环境。内、外环境的各种信息,由感受器接受后,通过周围神经传递到脑和脊髓的各级中枢进行整合,再经周围神经控制和调节机体各系统器官的活动,以维持机体与内、外界环境的相对平衡。神经系统是由神经细胞(神经元)和神经胶质所组成。
中枢神经系统central nervous system包括位于颅腔内的脑和位于椎管内的脊髓。
脑brain是中枢神经系统的头端膨大部分,位于颅腔内。人脑可分为端脑、间脑、中脑、脑桥、小脑和延髓六个部分。通常把中脑、脑桥和延髓合称为脑干,延髓向下经枕骨大孔连接脊髓。脑的内腔称为腔室,内含脑脊髓液。端脑包括左、右大脑半球。每个半球表层为灰质所覆叫大脑皮质。人类的大脑皮质在长期的进化过程中高度发展,它不仅是人类各种机能活动的高级中枢,也是人类思维和意识活动的物质基础。
脊髓spinal cord呈前后扁的圆柱体,位于椎管内,上端在平齐枕骨大孔处与延髓相续,下端终于第1腰椎下缘水平。脊髓前、后面的两侧发出许多条细的神经纤维束,叫做根丝。一定范围的根丝向外方集中成束,形成脊神经的前根和后根。前、后根在椎间孔处合并形成脊神经。脊髓以每对脊神经根根丝的出入范围为准,划分为31个节段,即颈髓8节(C1-8),胸髓12节(T1-12),腰髓5节(L1-5),骶髓(S1-5),尾髓1节(Co1)。
周围神经系统peripheral nervous system联络于中枢神经和其它各系统器官之间,包括与脑相连的12对脑神经cranial nerves和与脊髓相连的31对脊神经spinal nerves。按其所支配的周围器官的性质可分为分布于体表和骨骼肌的躯体神经系和分布于内脏、心血管和腺体的内脏神经系。
最新文章
热门文章
推荐阅读