一文读懂神经网络

2024-05-10 01:48

1. 一文读懂神经网络

 要说近几年最引人注目的技术,无疑的,非人工智能莫属。无论你是否身处科技互联网行业,随处可见人工智能的身影:从 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 ..
   本文我们通过
   这四点,全面的学习了神经网络这个知识点,希望本文能给你带来帮助。
   参考:

一文读懂神经网络

2. 神经网络

 神经网络是一种运算模型,模拟大脑神经网络处理、记忆信息的方式进行信息处理。
                                           .
   搜索神经网络经常会看到这种圈、线图。神经网络定义是由大量的节点之间相互联接构成,每个结点代表什么?每条线代表什么?
                                           上图每个圆圆的圈称之为节点,节点就是对输入数据乘上一定的权重后,进行函数处理。
   每两个节点间的连接都代表一个权重,这相当于人工神经网络的记忆。
   术语上把上面一个个圆圈叫做 “神经元” ,深入了解这些圈圈的内部构造。   当这些圈圈(神经元)收到数据输入时,经历三个步骤:
                                           输出的结果又可以作为数据进入下一个神经元。
   还有一个“偏置”的定义用来完善步骤二,这里就不提了。
   ·
   有时候会遇到这样的神经网络的图,其实就是把上面两种类型图结合起来。
                                           输入数据经过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,三个属性重新赋予合适的权重。

3. 神经网络的定义

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

神经网络的定义

4. 神经网络的研究内容

神经网络的研究内容相当广泛,反映了多学科交叉技术领域的特点。主要的研究工作集中在以下几个方面: 在理论模型研究的基础上构作具体的神经网络模型,以实现计算机模拟或准备制作硬件,包括网络学习算法的研究。这方面的工作也称为技术模型研究。神经网络用到的算法就是向量乘法,并且广泛采用符号函数及其各种逼近。并行、容错、可以硬件实现以及自我学习特性,是神经网络的几个基本优点,也是神经网络计算方法与传统方法的区别所在。 在网络模型与算法研究的基础上,利用人工神经网络组成实际的应用系统,例如,完成某种信号处理或模式识别的功能、构作专家系统、制成机器人、复杂系统控制等等。纵观当代新兴科学技术的发展历史,人类在征服宇宙空间、基本粒子,生命起源等科学技术领域的进程中历经了崎岖不平的道路。我们也会看到,探索人脑功能和神经网络的研究将伴随着重重困难的克服而日新月异。

5. 神经网络的研究方向

神经网络的研究可以分为理论研究和应用研究两大方面。理论研究可分为以下两类:1、利用神经生理与认知科学研究人类思维以及智能机理。2、利用神经基础理论的研究成果,用数理方法探索功能更加完善、性能更加优越的神经网络模型,深入研究网络算法和性能,如:稳定性、收敛性、容错性、鲁棒性等;开发新的网络数理理论,如:神经网络动力学、非线性神经场等。应用研究可分为以下两类:1、神经网络的软件模拟和硬件实现的研究。2、神经网络在各个领域中应用的研究。这些领域主要包括:模式识别、信号处理、知识工程、专家系统、优化组合、机器人控制等。随着神经网络理论本身以及相关理论、相关技术的不断发展,神经网络的应用定将更加深入。

神经网络的研究方向

6. 神经网络简述

机器学习中谈论的神经网络是指“神经网络学习”,或者说,是机器学习和神经网络这两个学科领域的交叉部分[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)介绍

7. 神经网络理论的介绍

神经网络理论:认知心理学家通过计算机模拟提出的一种知识表征理论,认为知识在人脑中以神经网络形式储存,神经网络由可在不同水平上被激活的结点组成,结点与结点之间有联结,学习是联结的创造及其强度的改变。

神经网络理论的介绍

8. 神经网络的介绍

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