使用BiLSTM 对用户行为进行建模时,神经网络的输入层是什么?输出层是什么?怎么把用户行为数据转换

2020-08-03 10:33发布

2条回答
卡卡
2楼 · 2020-08-03 16:54






  1. 引言

在深度学习十分火热的今天,不时会涌现出各种新型的人工神经网络,想要实时了解这些新型神经网络的架构还真是不容易。光是知道各式各样的神经网络模型缩写(如:DCIGN、BiLSTM、DCGAN……还有哪些?),就已经让人招架不住了。


因此,这里整理出一份清单来梳理所有这些架构。其中大部分是人工神经网络,也有一些完全不同的怪物。尽管所有这些架构都各不相同、功能独特,当我在画它们的节点图时……其中潜在的关系开始逐渐清晰起来。


把这些架构做成节点图,会存在一个问题:它无法展示神经网络架构内部的工作原理。举例来说,变分自编码机(VAE:variationalautoencoders)看起来跟自编码机(AE:autoencoders)差不多,但它们的训练过程却大不相同。训练后的模型在使用场景上差别更大:VAE是生成器,通过插入噪音数据来获取新样本;而AE仅仅是把他们所收到的任何信息作为输入,映射到“记忆中”最相似的训练样本上。


在介绍不同模型的神经元和神经细胞层之间的连接方式前,我们一步一步来,先来了解不同的神经元节点内部是如何工作的。




1.1神经元


对不同类型的神经元标记不同的颜色,可以更好地在各种网络架构之间进行区分。但是,这些神经元的工作方式却是大同小异。在下图的基本神经元结构后面,你会看到详细的讲解:


基本的人工神经网络神经元(basicneuralnetworkcell)相当简单,这种简单的类型可以在常规的前馈人工神经网络架构里面找到。这种神经元与其它神经元之间的连接具有权重,也就是说,它可以和前一层神经网络层中的所有神经元有连接。


每一个连接都有各自的权重,通常情况下是一些随机值(关于如何对人工神经网络的权重进行初始化是一个非常重要的话题,这将会直接影响到之后的训练过程,以及最终整个模型的性能)。这个权重可以是负值,正值,非常小,或者非常大,也可以是零。和这个神经元连接的所有神经元的值都会乘以各自对应的权重。然后,把这些值都求和。


在这个基础上,会额外加上一个bias,它可以用来避免输出为零的情况,并且能够加速某些操作,这让解决某个问题所需要的神经元数量也有所减少。这个bias也是一个数字,有些时候是一个常量(经常是-1或者1),有些时候会有所变化。这个总和最终被输入到一个激活函数,这个激活函数的输出最终就成为这个神经元的输出。






1.2卷积神经元(Convolutionalcells)


和前馈神经元非常相似,除了它们只跟前一神经细胞层的部分神经元有连接。因为它们不是和某些神经元随机连接的,而是与特定范围内的神经元相连接,通常用来保存空间信息。这让它们对于那些拥有大量局部信息,比如图像数据、语音数据(但多数情况下是图像数据),会非常实用。




1.3解卷积神经元


恰好相反:它们是通过跟下一神经细胞层的连接来解码空间信息。这两种神经元都有很多副本,它们都是独立训练的;每个副本都有自己的权重,但连接方式却完全相同。可以认为,这些副本是被放在了具备相同结构的不同的神经网络中。这两种神经元本质上都是一般意义上的神经元,但是,它们的使用方式却不同。




1.4池化神经元和插值神经元(Poolingandinterpolatingcells)


经常和卷积神经元结合起来使用。它们不是真正意义上的神经元,只能进行一些简单的操作。


池化神经元接受到来自其它神经元的输出过后,决定哪些值可以通过,哪些值不能通过。在图像领域,可以理解成是把一个图像缩小了(在查看图片的时候,一般软件都有一个放大、缩小的功能;这里的图像缩小,就相当于软件上的缩小图像;也就是说我们能看到图像的内容更加少了;在这个池化的过程当中,图像的大小也会相应地减少)。这样,你就再也不能看到所有的像素了,池化函数会知道什么像素该保留,什么像素该舍弃。


插值神经元恰好是相反的操作:它们获取一些信息,然后映射出更多的信息。额外的信息都是按照某种方式制造出来的,这就好像在一张小分辨率的图片上面进行放大。插值神经元不仅仅是池化神经元的反向操作,而且,它们也是很常见,因为它们运行非常快,同时,实现起来也很简单。池化神经元和插值神经元之间的关系,就像卷积神经元和解卷积神经元之间的关系。




1.5均值神经元和标准方差神经元(Meanandstandarddeviationcells)(作为概率神经元它们总是成对地出现)


是一类用来描述数据概率分布的神经元。均值就是所有值的平均值,而标准方差描述的是这些数据偏离(两个方向)均值有多远。比如:一个用于图像处理的概率神经元可以包含一些信息,比如:在某个特定的像素里面有多少红色。举个例来说,均值可能是0.5,同时标准方差是0.2。当要从这些概率神经元取样的时候,你可以把这些值输入到一个高斯随机数生成器,这样就会生成一些分布在0.4和0.6之间的值;值离0.5越远,对应生成的概率也就越小。它们一般和前一神经元层或者下一神经元层是全连接,而且,它们没有偏差(bias)。




1.6循环神经元(Recurrentcells)


不仅仅在神经细胞层之间有连接,而且在时间轴上也有相应的连接。每一个神经元内部都会保存它先前的值。它们跟一般的神经元一样更新,但是,具有额外的权重:与当前神经元之前值之间的权重,还有大多数情况下,与同一神经细胞层各个神经元之间的权重。当前值和存储的先前值之间权重的工作机制,与非永久性存储器(比如RAM)的工作机制很相似,继承了两个性质:


第一,维持一个特定的状态;

第二:如果不对其持续进行更新(输入),这个状态就会消失。

由于先前的值是通过激活函数得到的,而在每一次的更新时,都会把这个值和其它权重一起输入到激活函数,因此,信息会不断地流失。实际上,信息的保存率非常的低,以至于仅仅四次或者五次迭代更新过后,几乎之前所有的信息都会流失掉。




1.7长短期记忆神经元(Longshorttermmemorycells)


用于克服循环神经元中信息快速流失的问题。


LSTM是一个逻辑回路,其设计受到了计算机内存单元设计的启发。与只存储两个状态的循环神经元相比,LSTM可以存储四个状态:输出值的当前和先前值,记忆神经元状态的当前值和先前值。它们都有三个门:输入门,输出门,遗忘门,同时,它们也还有常规的输入。


这些门它们都有各自的权重,也就是说,与这种类型的神经元细胞连接需要设置四个权重(而不是一个)。这些门的工作机制与流门(flowgates)很相似,而不是栅栏门(fencegates):它们可以让所有的信息都通过,或者只是通过部分,也可以什么都不让通过,或者通过某个区间的信息。


这种运行机制的实现是通过把输入信息和一个在0到1之间的系数相乘,这个系数存储在当前门中。这样,输入门决定输入的信息有多少可以被叠加到当前门值。输出门决定有多少输出信息是可以传递到后面的神经网络中。遗忘门并不是和输出神经元的先前值相连接,而是,和前一记忆神经元相连接。它决定了保留多少记忆神经元最新的状态信息。因为没有和输出相连接,以及没有激活函数在这个循环中,因此只会有更少的信息流失。




1.8门控循环神经元(Gatedrecurrentunits(cells))


是LSTM的变体。它们同样使用门来抑制信息的流失,但是只用两个门:更新门和重置门。这使得构建它们付出的代价没有那么高,而且运行速度更加快了,因为它们在所有的地方使用了更少的连接。


从本质上来说LSTM和GRU有两个不同的地方:


第一:GRU神经元没有被输出门保护的隐神经元;

第二:GRU把输出门和遗忘门整合在了一起,形成了更新门。核心的思想就是如果你想要一些新的信息,那么你就可以遗忘掉一些陈旧的信息(反过来也可以)。

1.9神经细胞层(Layers)


形成一个神经网络,最简单的连接神经元方式是——把所有的神经元与其它所有的神经元相连接。这就好像Hopfield神经网络和玻尔兹曼机(Boltzmannmachines)的连接方式。当然,这也就意味着连接数量会随着神经元个数的增加呈指数级地增加,但是,对应的函数表达力也会越来越强。这就是所谓的全连接(completely(orfully)connected)。


经历了一段时间的发展,发现把神经网络分解成不同的神经细胞层会非常有效。神经细胞层的定义是一群彼此之间互不连接的神经元,它们仅跟其它神经细胞层有连接。这一概念在受限玻尔兹曼机(RestrictedBoltzmannMachines)中有所体现。现在,使用神经网络就意味着使用神经细胞层,并且是任意数量的神经细胞层。其中一个比较令人困惑的概念是全连接(fullyconnectedorcompletelyconnected),也就是某一层的每个神经元跟另一层的所有神经元都有连接,但真正的全连接神经网络相当罕见。




1.10卷积连接层(Convolutionallyconnectedlayers)


相对于全连接层要有更多的限制:在卷积连接层中的每一个神经元只与相邻的神经元层连接。图像和声音蕴含了大量的信息,如果一对一地输入到神经网络(比如,一个神经元对应一个像素)。卷积连接的形成,受益于保留空间信息更为重要的观察。实践证明这是一个非常好的猜测,因为现在大多数基于人工神经网络的图像和语音应用都使用了这种连接方式。然而,这种连接方式所需的代价远远低于全连接层的形式。从本质上来讲,卷积连接方式起到重要性过滤的作用,决定哪些紧紧联系在一起的信息包是重要的;卷积连接对于数据降维非常有用。


当然了,还有另外一种选择,就是随机连接神经元(randomlyconnectedneurons)。这种形式的连接主要有两种变体:


第一,允许部分神经元进行全连接。

第二,神经元层之间只有部分连接。

随机连接方式有助于线性地降低人工神经网络的性能;当全连接层遇到性能问题的时候,在大规模人工神经网络中,使用随机连接方式非常有益。拥有更多神经元且更加稀疏的神经元层在某些情况下运行效果更好,特别是很多的信息需要被存储起来,但是,需要交换的信息并不多(这与卷积连接层的运行机制很相似,但是,它们是随机的)。非常稀疏的连接网络(1%或2%)也有被使用,比如ELMs,ESNs和LSMs。这特别适用于脉冲网络(spikingnetworks),因为一个神经元拥有更多的连接,它对应的权重具有的能量也就更少,这也就意味着将会有更少的扩展和重复模式。

1.11时间滞后连接(Timedelayedconnections)


是指相连的神经元(通常是在同一个神经元层,甚至于一个神经元自己跟自己连接),它们不从前面的神经元层获取信息,而是从神经元层先前的状态获取信息。这使得暂时(时间上或者序列上)联系在一起的信息可以被存储起来。这些形式的连接经常被手工重新进行设置,从而可以清除神经网络的状态。和常规连接的主要区别是,这种连接会持续不断地改变,即便这个神经网络当前没有处于训练状态。


下图展示了以上所介绍的神经网络及其连接方式。当我卡在哪种神经元与哪个神经细胞层该连到一起的时候,就会拿这张图出来作为参考(尤其是在处理和分析LSTM与GRU神经元时):




显而易见,整理一份完整的清单是不切实际的,因为新的架构正被源源不断地发明出来。所以,接下来这份清单的目的,只想带你一窥人工智能领域的基础设施。对于每一个画成节点图的架构,我都会写一个非常非常简短的描述。你会发现这些描述还是很有用的,毕竟,总还是有一些你并不是那么熟悉的架构。




值得一提的是,虽说大多数的简写都已被普遍接受,但总会出现一些冲突。RNNs有时表示递归神经网络(recursiveneuralnetworks),但大多时候,它们指的是循环神经网络(recurrentneuralnetworks)。这还没完,它们在许多地方还会泛指各种循环架构,这包括在LSTMs、GRU甚至是双向变体。AEs也经常会面临同样的问题,VAEs、DAEs及其相似结构有时都被简称为AEs。很多缩写后面的“N”也常常会有所变化,因为同一个架构你既可称之为卷积神经网络(convolutionalneuralnetwork),也可简称为卷积网络(convolutionalnetwork),这样就出现了CNN和CN两种形式。


2.前馈神经网络(FFNN)


前馈神经感知网络与感知机(FForFFNN:FeedforwardneuralnetworksandP:perceptrons)非常简单,信息从前往后流动(分别对应输入和输出)。


一般在描述神经网络的时候,都是从它的层说起,即相互平行的输入层、隐含层或者输出层神经结构。单独的神经细胞层内部,神经元之间互不相连;而一般相邻的两个神经细胞层则是全连接(一层的每个神经元和另一层的每一个神经元相连)。一个最简单却最具有实用性的神经网络由两个输入神经元和一个输出神经元构成,也就是一个逻辑门模型。给神经网络一对数据集(分别是“输入数据集”和“我们期望的输出数据集”),一般通过反向传播算法来训练前馈神经网络(FFNNs)。


这就是所谓的监督式学习。与此相反的是无监督学习:我们只给输入,然后让神经网络去寻找数据当中的规律。反向传播的误差往往是神经网络当前输出和给定输出之间差值的某种变体(比如MSE或者仅仅是差值的线性变化)。如果神经网络具有足够的隐层神经元,那么理论上它总是能够建立输入数据和输出数据之间的关系。在实践中,FFNN的使用具有很大的局限性,但是,它们通常和其它神经网络一起组合成新的架构。


参考文献:Rosenblatt,Frank.“Theperceptron:aprobabilisticmodelforinformationstorageandorganizationinthebrain.”Psychologicalreview65.6(1958):386.




3.径向基神经网络(RBF)


径向神经网络(RBF:Radialbasisfunction)是一种以径向基核函数作为激活函数的前馈神经网络。没有更多描述了。这不是说没有相关的应用,但大多数以其它函数作为激活函数的FFNNs都没有它们自己的名字。这或许跟它们的发明年代有关系。


参考文献:Broomhead,DavidS.,andDavidLowe.Radialbasisfunctions,multi-variablefunctionalinterpolationandadaptivenetworks.No.RSRE-MEMO-4148.ROYALSIGNALSANDRADARESTABLISHMENTMALVERN(UNITEDKINGDOM),1988.




4.霍普菲尔网络(HN)


霍普菲尔网络(HN:Hopfieldnetwork)是一种每一个神经元都跟其它神经元相互连接的网络。


这就像一盘完全搅在一起的意大利面,因为每个神经元都在充当所有角色:训练前的每一个节点都是输入神经元,训练阶段是隐神经元,输出阶段则是输出神经元。


该神经网络的训练,是先把神经元的值设置到期望模式,然后计算相应的权重。在这以后,权重将不会再改变了。一旦网络被训练包含一种或者多种模式,这个神经网络总是会收敛于其中的某一种学习到的模式,因为它只会在某一个状态才会稳定。值得注意的是,它并不一定遵从那个期望的状态(很遗憾,它并不是那个具有魔法的黑盒子)。它之所以会稳定下来,部分要归功于在训练期间整个网络的“能量(Energy)”或“温度(Temperature)”会逐渐地减少。每一个神经元的激活函数阈值都会被设置成这个温度的值,一旦神经元输入的总和超过了这个阈值,那么就会让当前神经元选择状态(通常是-1或1,有时也是0或1)。


可以多个神经元同步,也可以一个神经元一个神经元地对网络进行更新。一旦所有的神经元都已经被更新,并且它们再也没有改变,整个网络就算稳定(退火)了,那你就可以说这个网络已经收敛了。这种类型的网络被称为“联想记忆(associativememory)”,因为它们会收敛到和输入最相似的状态;比如,人类看到桌子的一半就可以想象出另外一半;与之相似,如果输入一半噪音+一半桌子,这个网络就能收敛到整张桌子。


参考文献:Hopfield,JohnJ.“Neuralnetworksandphysicalsystemswithemergentcollectivecomputationalabilities.”Proceedingsofthenationalacademyofsciences79.8(1982):2554-2558.




5.马尔可夫链(MC)


马尔可夫链(MC:MarkovChain)或离散时间马尔可夫链(DTMC:MCordiscretetimeMarkovChain)在某种意义上是BMs和HNs的前身。可以这样来理解:从从我当前所处的节点开始,走到任意相邻节点的概率是多少呢?它们没有记忆(所谓的马尔可夫特性):你所得到的每一个状态都完全依赖于前一个状态。尽管算不上神经网络,但它却跟神经网络类似,并且奠定了BM和HN的理论基础。跟BM、RBM、HN一样,MC并不总被认为是神经网络。此外,它也并不总是全连接的。


参考文献:Hayes,Brian.“FirstlinksintheMarkovchain.”AmericanScientist101.2(2013):252.




6.玻尔兹曼机(BM)


玻尔兹曼机(BM:Boltzmannmachines)和霍普菲尔网络很接近,差别只是:一些神经元作为输入神经元,剩余的则是作为隐神经元。


在整个神经网络更新过后,输入神经元成为输出神经元。刚开始神经元的权重都是随机的,通过反向传播(back-propagation)算法进行学习,或是最近常用的对比散度(contrastivedivergence)算法(马尔可夫链用于计算两个信息增益之间的梯度)。


相比HN,大多数BM的神经元激活模式都是二元的。BM由MC训练获得,因而是一个随机网络。BM的训练和运行过程,跟HN大同小异:为输入神经元设好钳位值,而后让神经网络自行学习。因为这些神经元可能会得到任意的值,我们反复地在输入和输出神经元之间来回地进行计算。激活函数的激活受全局温度的控制,如果全局温度降低了,那么神经元的能量也会相应地降低。这个能量上的降低导致了它们激活模式的稳定。在正确的温度下,这个网络会抵达一个平衡状态。

参考文献:Hinton,GeoffreyE.,andTerrenceJ.Sejnowski.“LearningandreleaminginBoltzmannmachines.”Paralleldistributedprocessing:Explorationsinthemicrostructureofcognition1(1986):282-317.




8.受限玻尔兹曼机(RBM)




受限玻尔兹曼机(RBM:RestrictedBoltzmannmachines)与BM出奇地相似,因而也同HN相似。


它们的最大区别在于:RBM更具实用价值,因为它们受到了更多的限制。它们不会随意在所有神经元间建立连接,而只在不同神经元群之间建立连接,因此任何输入神经元都不会同其他输入神经元相连,任何隐神经元也不会同其他隐神经元相连。


RBM的训练方式就像稍微修改过的FFNN:前向通过数据之后再将这些数据反向传回(回到第一层),而非前向通过数据然后反向传播误差。之后,再使用前向和反向传播进行训练。


参考文献:Smolensky,Paul.Informationprocessingindynamicalsystems:Foundationsofharmonytheory.No.CU-CS-321-86.COLORADOUNIVATBOULDERDEPTOFCOMPUTERSCIENCE,1986.




9.自编码机(AE)




自编码机(AE:Autoencoders)和FFNN有些相近,因为它更像是FFNN的另一种用法,而非本质上完全不同的另一种架构。


自编码机的基本思想是自动对信息进行编码(像压缩一样,而非加密),它也因此而得名。整个网络的形状酷似一个沙漏计时器,中间的隐含层较小,两边的输入层、输出层较大。自编码机总是对称的,以中间层(一层还是两层取决于神经网络层数的奇偶)为轴。最小的层(一层或者多层)总是在中间,在这里信息压缩程度最大(整个网络的关隘口)。在中间层之前为编码部分,中间层之后为解码部分,中间层则是编码部分。


自编码机可用反向传播算法进行训练,给定输入,将误差设为输入和输出之差。自编码机的权重也是对称的,因此编码部分权重与解码部分权重完全一样。


参考文献:Bourlard,Hervé,andYvesKamp.“Auto-associationbymultilayerperceptronsandsingularvaluedecomposition.”Biologicalcybernetics59.4-5(1988):291-294.




10.稀疏自编码机(SAE)




稀疏自编码机(SAE:Sparseautoencoders)某种程度上同自编码机相反。稀疏自编码机不是用更小的空间表征大量信息,而是把原本的信息编码到更大的空间内。因此,中间层不是收敛,而是扩张,然后再还原到输入大小。它可以用于提取数据集内的小特征。


如果用训练自编码机的方式来训练稀疏自编码机,几乎所有的情况,都是得到毫无用处的恒等网络(输入=输出,没有任何形式的变换或分解)。为避免这种情况,需要在反馈输入中加上稀疏驱动数据。稀疏驱动的形式可以是阈值过滤,这样就只有特定的误差才会反向传播用于训练,而其它的误差则被忽略为0,不会用于反向传播。这很像脉冲神经网络(并不是所有的神经元一直都会输出)。


Marc’AurelioRanzato,ChristopherPoultney,SumitChopra,andYannLeCun.“Efficientlearningofsparserepresentationswithanenergy-basedmodel.”ProceedingsofNIPS.2007.




11.变分自编码机(VAE)




变分自编码机(VAE:Variationalautoencoders)和AE有着相同的架构,却被教会了不同的事情:输入样本的一个近似概率分布,这让它跟BM、RBM更相近。


不过,VAE却依赖于贝叶斯理论来处理概率推断和独立(probabilisticinferenceandindependence),以及重新参数化(re-parametrisation)来进行不同的表征。推断和独立非常直观,但却依赖于复杂的数学理论。基本原理是:把影响纳入考虑。如果在一个地方发生了一件事情,另外一件事情在其它地方发生了,它们不一定就是关联在一起的。如果它们不相关,那么误差传播应该考虑这个因素。这是一个有用的方法,因为神经网络是一个非常大的图表,如果你能在某些节点排除一些来自于其它节点的影响,随着网络深度地增加,这将会非常有用。


Kingma,DiederikP.,andMaxWelling.“Auto-encodingvariationalbayes.”arXivpreprintarXiv:1312.6114(2013).




12.去噪自编码机(DAE)


去噪自编码机(DAE:Denoisingautoencoders)是一种自编码机,它的训练过程,不仅要输入数据,还有再加上噪音数据(就好像让图像变得更加模糊一样)。


但在计算误差的时候跟自动编码机一样,降噪自动编码机的输出也是和原始的输入数据进行对比。这种形式的训练旨在鼓励降噪自编码机不要去学习细节,而是一些更加宏观的特征,因为细微特征受到噪音的影响,学习细微特征得到的模型最终表现出来的性能总是很差。


Vincent,Pascal,etal.“Extractingandcomposingrobustfeatureswithdenoisingautoencoders.”Proceedingsofthe25thinternationalconferenceonMachinelearning.ACM,2008.http://machinelearning.org/archive/icml2008/papers/592.pdf




13.深度信念网络(DBN)




深度信念网络(DBN:Deepbeliefnetworks)之所以取这个名字,是由于它本身几乎是由多个受限玻尔兹曼机或者变分自编码机堆砌而成。


实践表明一层一层地对这种类型的神经网络进行训练非常有效,这样每一个自编码机或者受限玻尔兹曼机只需要学习如何编码前一神经元层的输出。这种训练技术也被称为贪婪训练,这里贪婪的意思是通过不断地获取局部最优解,最终得到一个相当不错解(但可能不是全局最优的)。可以通过对比散度算法或者反向传播算法进行训练,它会慢慢学着以一种概率模型来表征数据,就好像常规的自编码机或者受限玻尔兹曼机。一旦经过非监督式学习方式,训练或者收敛到了一个稳定的状态,那么这个模型就可以用来产生新的数据。如果以对比散度算法进行训练,那么它甚至可以用于区分现有的数据,因为那些神经元已经被引导来获取数据的不同特定。


Bengio,Yoshua,etal.“Greedylayer-wisetrainingofdeepnetworks.”Advancesinneuralinformationprocessingsystems19(2007):153.https://papers.nips.cc/paper/3048-greedy-layer-wise-training-of-deep-networks.pdf


14.卷积神经网络(CNN)




卷积神经网络(CNN:Convolutionalneuralnetworks)或深度卷积神经网络(DCNN:deepconvolutionalneuralnetworks)跟其它类型的神经网络大有不同。它们主要用于处理图像数据,但可用于其它形式数据的处理,如语音数据。对于卷积神经网络来说,一个典型的应用就是给它输入一个图像,而后它会给出一个分类结果。也就是说,如果你给它一张猫的图像,它就输出“猫”;如果你给一张狗的图像,它就输出“狗”。


卷积神经网络是从一个数据扫描层开始,这种形式的处理并没有尝试在一开始就解析整个训练数据。比如:对于一个大小为200X200像素的图像,你不会想构建一个40000个节点的神经元层。而是,构建一个20X20像素的输入扫描层,然后,把原始图像第一部分的20X20像素图像(通常是从图像的左上方开始)输入到这个扫描层。当这部分图像(可能是用于进行卷积神经网络的训练)处理完,你会接着处理下一部分的20X20像素图像:逐渐(通常情况下是移动一个像素,但是,移动的步长是可以设置的)移动扫描层,来处理原始数据。


注意,你不是一次性移动扫描层20个像素(或其它任何扫描层大小的尺度),也不是把原始图像切分成20X20像素的图像块,而是用扫描层在原始图像上滑过。这个输入数据(20X20像素的图像块)紧接着被输入到卷积层,而非常规的神经细胞层——卷积层的节点不是全连接。每一个输入节点只会和最近的那个神经元节点连接(至于多近要取决于具体的实现,但通常不会超过几个)。


这些卷积层会随着深度的增加而逐渐变小:大多数情况下,会按照输入层数量的某个因子缩小(比如:20个神经元的卷积层,后面是10个神经元的卷积层,再后面就是5个神经元的卷积层)。2的n次方(32,16,8,4,2,1)也是一个非常常用的因子,因为它们在定义上可以简洁且完整地除尽。除了卷积层,池化层(poolinglayers)也非常重要。


池化是一种过滤掉细节的方式:一种常用的池化方式是最大池化,比如用2X2的像素,然后取四个像素中值最大的那个传递。为了让卷积神经网络处理语音数据,需要把语音数据切分,一段一段输入。在实际应用中,通常会在卷积神经网络后面加一个前馈神经网络,以进一步处理数据,从而对数据进行更高水平的非线性抽象。


LeCun,Yann,etal.“Gradient-basedlearningappliedtodocumentrecognition.”ProceedingsoftheIEEE86.11(1998):2278-2324.http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf


15.解卷积网络(DN)




解卷积网络(DN:Deconvolutionalnetworks),又称为逆图形网络(IGNs:inversegraphicsnetworks),是逆向的卷积神经网络。


想象一下,给一个神经网络输入一个“猫”的词,就可以生成一个像猫一样的图像,通过比对它和真实的猫的图片来进行训练。跟常规CNN一样,DN也可以结合FFNN使用,但没必要为这个新的缩写重新做图解释。它们可被称为深度解卷积网络,但把FFNN放到DNN前面和后面是不同的,那是两种架构(也就需要两个名字),对于是否需要两个不同的名字你们可能会有争论。需要注意的是,绝大多数应用都不会把文本数据直接输入到神经网络,而是用二元输入向量。比如<0>代表猫,<1>代表狗,<1>代表猫和狗。


CNN的池化层往往也是被对应的逆向操作替换了,主要是插值和外推(基于一个基本的假设:如果一个池化层使用了最大池化,你可以在逆操作的时候生成一些相对于最大值更小的数据)。


Zeiler,MatthewD.,etal.“Deconvolutionalnetworks.”ComputerVisionandPatternRecognition(CVPR),2010IEEEConferenceon.IEEE,2010.http://www.matthewzeiler.com/pubs/cvpr2010/cvpr2010.pdf


16.深度卷积逆向图网络(DCIGN)




深度卷积逆向图网络(DCIGN:Deepconvolutionalinversegraphicsnetworks),这个名字具有误导性,因为它们实际上是VAE,但分别用CNN、DNN来作编码和解码的部分。


这些网络尝试在编码过程中对“特征“进行概率建模,这样一来,你只要用猫和狗的独照,就能让它们生成一张猫和狗的合照。同理,你可以输入一张猫的照片,如果猫旁边有一只恼人的邻家狗,你可以让它们把狗去掉。很多演示表明,这种类型的网络能学会基于图像的复杂变换,比如灯光强弱的变化、3D物体的旋转。一般也是用反向传播算法来训练此类网络。


Kulkarni,TejasD.,etal.“Deepconvolutionalinversegraphicsnetwork.”AdvancesinNeuralInformationProcessingSystems.2015.https://arxiv.org/pdf/1503.03167v4.pdf


17.生成式对抗网络(GAN)




生成式对抗网络(GAN:Generativeadversarialnetworks)是一类不同的网络,它们有一对“双胞胎”:两个网络协同工作。


GAN可由任意两种网络组成(但通常是FF和CNN),其中一个用于生成内容,另一个则用于鉴别生成的内容。


鉴别网络(discriminatingnetwork)同时接收训练数据和生成网络(generativenetwork)生成的数据。鉴别网络的准确率,被用作生成网络误差的一部分。这就形成了一种竞争:鉴别网络越来越擅长于区分真实的数据和生成数据,而生成网络也越来越善于生成难以预测的数据。这种方式非常有效,部分是因为:即便相当复杂的类噪音模式最终都是可预测的,但跟输入数据有着极为相似特征的生成数据,则很难区分。


训练GAN极具挑战性,因为你不仅要训练两个神经网络(其中的任何一个都会出现它自己的问题),同时还要平衡两者的运行机制。如果预测或生成相比对方表现得过好,这个GAN就不会收敛,因为它会内部发散。


Goodfellow,Ian,etal.“Generativeadversarialnets.”AdvancesinNeuralInformationProcessingSystems.2014.https://arxiv.org/pdf/1406.2661v1.pdf


18.循环神经网络(RNN)




循环神经网络(RNN:Recurrentneuralnetworks)是具有时间联结的前馈神经网络:它们有了状态,通道与通道之间有了时间上的联系。神经元的输入信息,不仅包括前一神经细胞层的输出,还包括它自身在先前通道的状态。


这就意味着:你的输入顺序将会影响神经网络的训练结果:相比先输入“曲奇饼”再输入“牛奶”,先输入“牛奶”再输入“曲奇饼”后,或许会产生不同的结果。RNN存在一大问题:梯度消失(或梯度爆炸,这取决于所用的激活函数),信息会随时间迅速消失,正如FFNN会随着深度的增加而失去信息一样。


直觉上,这不算什么大问题,因为这些都只是权重,而非神经元的状态,但随时间变化的权重正是来自过去信息的存储;如果权重是0或1000000,那之前的状态就不再有信息价值。


原则上,RNN可以在很多领域使用,因为大部分数据在形式上不存在时间线的变化,(不像语音或视频),它们能以某种序列的形式呈现出来。一张图片或一段文字可以一个像素或者一个文字地进行输入,因此,与时间相关的权重描述了该序列前一步发生了什么,而不是多少秒之前发生了什么。一般来说,循环神经网络是推测或补全信息很好的选择,比如自动补全。


Elman,JeffreyL.“Findingstructureintime.”Cognitivescience14.2(1990):179-211.https://crl.ucsd.edu/~elman/Papers/fsit.pdf


19.长短期记忆(LSTM)




长短期记忆(LSTM:Long/shorttermmemory)网络试图通过引入门结构与明确定义的记忆单元来解决梯度消失/爆炸的问题。


这更多的是受电路图设计的启发,而非生物学上某种和记忆相关机制。每个神经元都有一个记忆单元和三个门:输入门、输出门、遗忘门。这三个门的功能就是通过禁止或允许信息流动来保护信息。


输入门决定了有多少前一神经细胞层的信息可留在当前记忆单元,输出层在另一端决定下一神经细胞层能从当前神经元获取多少信息。遗忘门乍看很奇怪,但有时候遗忘部分信息是很有用的:比如说它在学习一本书,并开始学一个新的章节,那遗忘前面章节的部分角色就很有必要了。


实践证明,LSTM可用来学习复杂的序列,比如像莎士比亚一样写作,或创作全新的音乐。值得注意的是,每一个门都对前一神经元的记忆单元赋有一个权重,因此会需要更多的计算资源。


Hochreiter,Sepp,andJürgenSchmidhuber.“Longshort-termmemory.”Neuralcomputation9.8(1997):1735-1780.http://deeplearning.cs.cmu.edu/pdfs/Hochreiter97_lstm.pdf


20.门循环单元(GRU)




门循环单元(GRU:Gatedrecurrentunits)是LSTM的一种轻量级变体。它们少了一个门,同时连接方式也稍有不同:它们采用了一个更新门(updategate),而非LSTM所用的输入门、输出门、遗忘门。


更新门决定了保留多少上一个状态的信息,还决定了收取多少来自前一神经细胞层的信息。重置门(resetgate)跟LSTM遗忘门的功能很相似,但它存在的位置却稍有不同。它们总是输出完整的状态,没有输出门。多数情况下,它们跟LSTM类似,但最大的不同是:GRU速度更快、运行更容易(但函数表达力稍弱)。


在实践中,这里的优势和劣势会相互抵消:当你你需要更大的网络来获取函数表达力时,这样反过来,性能优势就被抵消了。在不需要额外的函数表达力时,GRU的综合性能要好于LSTM。


Chung,Junyoung,etal.“Empiricalevaluationofgatedrecurrentneuralnetworksonsequencemodeling.”arXivpreprintarXiv:1412.3555(2014).https://arxiv.org/pdf/1412.3555v1.pdf


21.神经图灵机(NTM)




神经图灵机(NTM:NeuralTuringmachines)可以理解为对LSTM的抽象,它试图把神经网络去黑箱化(以窥探其内部发生的细节)。


NTM不是把记忆单元设计在神经元内,而是分离出来。NTM试图结合常规数字信息存储的高效性、永久性与神经网络的效率及函数表达能力。它的想法是设计一个可作内容寻址的记忆库,并让神经网络对其进行读写操作。NTM名字中的“图灵(Turing)”是表明,它是图灵完备(Turingcomplete)的,即具备基于它所读取的内容来读取、写入、修改状态的能力,也就是能表达一个通用图灵机所能表达的一切。


Graves,Alex,GregWayne,andIvoDanihelka.“Neuralturingmachines.”arXivpreprintarXiv:1410.5401(2014).https://arxiv.org/pdf/1410.5401v2.pdf


22.BiRNN、BiLSTM、BiGRU


双向循环神经网络(BiRNN:Bidirectionalrecurrentneuralnetworks)、双向长短期记忆网络(BiLSTM:bidirectionallong/shorttermmemorynetworks)和双向门控循环单元(BiGRU:bidirectionalgatedrecurrentunits)在图表中并未呈现出来,因为它们看起来与其对应的单向神经网络结构一样。


所不同的是,这些网络不仅与过去的状态有连接,而且与未来的状态也有连接。比如,通过一个一个地输入字母,训练单向的LSTM预测“鱼(fish)”(在时间轴上的循环连接记住了过去的状态值)。在BiLSTM的反馈通路输入序列中的下一个字母,这使得它可以了解未来的信息是什么。这种形式的训练使得该网络可以填充信息之间的空白,而不是预测信息。因此,它在处理图像时不是扩展图像的边界,而是填补一张图片中的缺失。


Schuster,Mike,andKuldipK.Paliwal.“Bidirectionalrecurrentneuralnetworks.”IEEETransactionsonSignalProcessing45.11(1997):2673-2681.http://www.di.ufpe.br/~fnj/RNA/bibliografia/BRNN.pdf




23.深度残差网络(DRN)




深度残差网络(DRN:Deepresidualnetworks)是非常深的FFNN网络,它有一种特殊的连接,可以把信息从某一神经细胞层传至后面几层(通常是2到5层)。


该网络的目的不是要找输入数据与输出数据之间的映射,而是致力于构建输入数据与输出数据+输入数据之间的映射函数。本质上,它在结果中增加一个恒等函数,并跟前面的输入一起作为后一层的新输入。结果表明,当层数超过150后,这一网络将非常擅于学习模式,这比常规的2到5层要多得多。然而,有证据表明这些网络本质上只是没有时间结构的RNN,它们总是与没有门结构的LSTM相提并论。


He,Kaiming,etal.“Deepresiduallearningforimagerecognition.”arXivpreprintarXiv:1512.03385(2015).https://arxiv.org/pdf/1512.03385v1.pdf


24.回声状态网络(ESN)




回声状态网络(ESN:Echostatenetworks)是另一种不同类型的(循环)网络。


它的不同之处在于:神经元之间的连接是随机的(没有整齐划一的神经细胞层),其训练过程也有所不同。不同于输入数据后反向传播误差,ESN先输入数据、前馈、而后更新神经元状态,最后来观察结果。它的输入层和输出层在这里扮演的角色不太常规,输入层用来主导网络,输出层作为激活模式的观测器随时间展开。在训练过程中,只有观测和隐藏单元之间连接会被改变。


Jaeger,Herbert,andHaraldHaas.“Harnessingnonlinearity:Predictingchaoticsystemsandsavingenergyinwirelesscommunication.”science304.5667(2004):78-80.https://pdfs.semanticscholar.org/8922/17bb82c11e6e2263178ed20ac23db6279c7a.pdf


25.极限学习机(ELM)




极限学习机(ELM:Extremelearningmachines)本质上是拥有随机连接的FFNN。


它们与LSM、ESN极为相似,除了循环特征和脉冲性质,它们还不使用反向传播。相反,它们先给权重设定随机值,然后根据最小二乘法拟合来一次性训练权重(在所有函数中误差最小)。这使ELM的函数拟合能力较弱,但其运行速度比反向传播快多了。


Cambria,Erik,etal.“Extremelearningmachines[trends&controversies].”IEEEIntelligentSystems28.6(2013):30-59.http://www.ntu.edu.sg/home/egbhuang/pdf/ieee-is-elm.pdf


26.液态机(LSM)




液态机(LSM:Liquidstatemachines)换汤不换药,跟ESN同样相近。


区别在于,LSM是一种脉冲神经网络(spikingneuralnetworks),用阈值激活函数(thresholdfunctions)取代了sigmoid激活函数,每个神经元同时也是具有累加性质的记忆单元。因此,当神经元状态更新时,其值不是相邻神经元的累加值,而是它自身状态值的累加。一旦累加到阈值,它就释放能量至其它神经元。这就形成了一种类似于脉冲的模式:神经元不会进行任何操作,直至到达阈值的那一刻。


Maass,Wolfgang,ThomasNatschläger,andHenryMarkram.“Real-timecomputingwithoutstablestates:Anewframeworkforneuralcomputationbasedonperturbations.”Neuralcomputation14.11(2002):2531-2560.https://web.archive.org/web/20120222154641/http://ramsesii.upf.es/seminar/Maass_et_al_2002.pdf


27.支持向量机(SVM)




支持向量机(SVM:Supportvectormachines)能为分类问题找出最优方案。


传统意义上,它们只能处理线性可分的数据;比如找出哪张图片是加菲猫、哪张是史努比,此外就无法做其它输出了。


训练过程中,SVM可以理解为:先在平面图表上标绘所有数据(加菲猫、史努比),然后找出到那条能够最好区分这两类数据点的线。这条线能把数据分为两部分,线的这边全是史努比,线的那边全是加菲猫。而后移动并优化该直线,令两边数据点到直线的距离最大化。分类新的数据,则将该数据点画在这个图表上,然后察看这个数据点在分隔线的哪一边(史努比一侧,还是加菲猫一侧)。


通过使用核方法,SVM便可用来分类n维空间的数据。这就引出了在3维空间中标绘数据点,从而让SVM可以区分史努比、加菲猫与西蒙,甚至在更高的维度对更多卡通人物进行分类。SVM并不总被视为神经网络。


Cortes,Corinna,andVladimirVapnik.“Support-vectornetworks.”Machinelearning20.3(1995):273-297.http://image.diku.dk/imagecanon/material/cortes_vapnik95.pdf


28.Kohonen网络




最后,我们来介绍一下Kohonen网络(KN,也称之为自组织(特征)映射(SOM/SOFM:selforganising(feature)map))。


KN利用竞争学习来对数据进行分类,不需要监督。先给神经网络一个输入,而后它会评估哪个神经元最匹配该输入。然后这个神经元会继续调整以更好地匹配输入数据,同时带动相邻的神经元。相邻神经元移动的距离,取决于它们与最佳匹配单元之间的距离。KN有时也不被认为是神经网络。


参考文献:

Kohonen,Teuvo.“Self-organizedformationoftopologicallycorrectfeaturemaps.”Biologicalcybernetics43.1(1982):59-69.http://cioslab.vcu.edu/alg/Visualize/kohonen-82.pdf

原文链接:


中文链接:http://www.toutiao.com/i6432188985530909186/

英文链接1:http://www.asimovinstitute.org/neural-network-zoo/

英文链接2:http://www.asimovinstitute.org/neural-network-zoo-prequel-cells-layers/


Naughty
3楼 · 2020-10-09 09:47





  1. RecurrentNeuralNetwork(RNN)

  2. 尽管从多层感知器(MLP)到循环神经网络(RNN)的扩展看起来微不足道,但是这对于序列的学习具有深远的意义。循环神经网络(RNN)的使用是用来处理序列数据的。在传统的神经网络中模型中,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题是无能为力的。比如,预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。循环神经网络(RNN)指的是一个序列当前的输出与之前的输出也有关。具体的表现形式为网络会对前面的信息进行记忆,保存在网络的内部状态中,并应用于当前输出的计算中,即隐含层之间的节点不再无连接而是有链接的,并且隐含层的输入不仅包含输入层的输出还包含上一时刻隐含层的输出。理论上,循环神经网络能够对任何长度的序列数据进行处理,但是在实践中,为了减低复杂性往往假设当前的状态只与前面的几个状态相关。

  3. 下图展示的是一个典型的循环神经网络(RNN)结构。



图1循环神经网络(RNN)结构



将循环神经网络(RNN)可视化的一种有效方法是考虑将其在时间上进行展开,得到如图2结构。




图2循环神经网络(RNN)在时间上展开



图中展示的是一个在时间上展开的循环神经网络(RNN),其包含输入单元(InputUnits),输入集标记为{


x0,x1,...,xt−1,xt,xt+1,...

[removed]x_0,x_1,...,x_{t-1},x_t,x_{t+1},...[removed]},输出单元(OutputUnits),输出集标记为{


y0,y1,...,yt−1,yt,yt+1,...

[removed]y_0,y_1,...,y_{t-1},y_t,y_{t+1},...[removed]},以及隐含单元(HiddenUnits),输出集标记为{


s0,s1,...,st−1,st,st+1,...

[removed]s_0,s_1,...,s_{t-1},s_t,s_{t+1},...[removed]},这些隐含单元完成了最为主要的工作。图中,从输入层连接到隐含层的权值被标记为U,从隐含层到自己的连接权值被标记为W,从隐含层到输出层的权值被标记为V。注意,在每一个时步的时候同样的权值被再使用。同时,为了表示清晰,偏置的权值在这里被忽略。

在循环神经网络中(RNN),有一条单向流动的信息流是从输入单元到达隐含单元的,与此同时,另一条单向流动的信息流从隐含单元到达输出单元。在某些情况下,循环神经网络(RNN)会打破后者的限制,引导信息从输出单元返回隐含单元,这些被称为“Backprojections”,并且隐含层的输入还包括上一层隐含层的输出,即隐含层内的节点是可以自连也可以互连的。

对于图2网络的计算过程如下:

1)


xt

[removed]x_t[removed]表示第t,t=1,2,3,…步的输入

2)


st

[removed]s_t[removed]为隐含层第t步的状态,它是网络的记忆单元。


st

[removed]s_t[removed]根据当前输入层的输出和上一步隐含层的输出进行计算


st=f(Uxt+Wst−1)

[removed]s_t=f(Ux_t+Ws_{t-1})[removed],其中f一般为非线性的激活函数,如tanh或ReLU(后面会用到LSTM),在计算


s0

[removed]s_0[removed]时,即第一个的隐含状态,需要用到


st−1

[removed]s_{t-1}[removed],但其并不存在,在现实中一般被设置为0向量。

3)


ot

[removed]o_t[removed]是第t步的输出,


ot=softmax(Vst)

[removed]o_t=softmax(Vs_t)[removed]

需要注意的是:

隐含层状态


st

[removed]s_t[removed]被认为是网络的记忆单元。


st

[removed]s_t[removed]包含了前面所有步的隐含层状态。而输出层的


ot

[removed]o_t[removed]只与当前步的


st

[removed]s_t[removed]有关。在实践中,为了降低网络的复杂度,往往


st

[removed]s_t[removed]只包含前面若干步而不是所有步的隐含层输出。

在传统神经网络中,每一个网络层的参数是不共享的。而在循环神经网络(RNN)中,每输入一步,每一层各自都共享参数U,V,W,其反映着循环神经网络(RNN)中的每一步都在做相同的事,只是输入不同。因此,这大大降低了网络中需要学习的参数。具体的说是,将循环神经网络(RNN)进行展开,这样变成了多层的网络,如果这是一个多层的传统神经网络,那么


xt

[removed]x_t[removed]到


st

[removed]s_t[removed]之间的U矩阵与


xt+1

[removed]x_{t+1}[removed]到


st+1

[removed]s_{t+1}[removed]之间的U是不同的,而循环神经网络(RNN)中的却是一样的,同理对于隐含层与隐含层之间的W、隐含层与输出层之间的V也是一样的。

图中每一步都会有输出,但是每一步都要有输出并不是必须的。比如,我们需要预测一条语句所表达的情绪,我们仅仅需要关系最后一个单词输入后的输出,而不需要知道每个单词输入后的输出。同理,每步都需要输入也不是必须的。循环神经网络(RNN)的关键之处在于隐含层,隐含层能够捕捉序列的信息。

最后,对于整个循环神经网络(RNN)的计算过程如下:

向前推算(Forwardpass):

对于一个长度为T的输入x,网络有I个输入单元,H个隐含单元,K个输出单元。定义


xti

[removed]x_i^t[removed]为t时刻的第i个输入,定义


atj

[removed]a_j^t[removed]和


btj

[removed]b_j^t[removed]分别表示为t时刻网络单元j的输入以及t时刻单元j非线性可微分激活函数的输出。对于完整序列的隐含单元我们可以从时间t=1开始并通过递归的调用如下公式得到:






与此同时,对于网络的输出单元也可以通过如下公式计算出:






向后推算(Forwardpass):

如同标准的反向传播(Backpropagation),通过时间的反向传播(BPTT)包含对链规则的重复应用。具体的说是,对于循环网络,目标函数依赖于隐含层的激活函数(不仅通过其对输出层的影响,以及其对下一个时步隐含层的影响),也就是:






对于全部的序列


δ

[removed]\delta[removed]项能够从时刻t=T通过递归的使用上面的公式计算得到。最后,在每一个时步对于隐含层单元的输入和输出的权值是相同的,我们这个序列求和来得到关于每个网络权值的导数。






2.Bi-directionalRecurrentNeuralNetwork(BRNN)

如果能像访问过去的上下文信息一样,访问未来的上下文,这样对于许多序列标注任务是非常有益的。例如,在最特殊字符分类的时候,如果能像知道这个字母之前的字母一样,知道将要来的字母,这将非常有帮助。同样,对于句子中的音素分类也是如此。

然而,由于标准的循环神经网络(RNN)在时序上处理序列,他们往往忽略了未来的上下文信息。一种很显而易见的解决办法是在输入和目标之间添加延迟,进而可以给网络一些时步来加入未来的上下文信息,也就是加入M时间帧的未来信息来一起预测输出。理论上,M可以非常大来捕获所有未来的可用信息,但事实上发现如果M过大,预测结果将会变差。这是因为网路把精力都集中记忆大量的输入信息,而导致将不同输入向量的预测知识联合的建模能力下降。因此,M的大小需要手动来调节。

双向循环神经网络(BRNN)的基本思想是提出每一个训练序列向前和向后分别是两个循环神经网络(RNN),而且这两个都连接着一个输出层。这个结构提供给输出层输入序列中每一个点的完整的过去和未来的上下文信息。下图展示的是一个沿着时间展开的双向循环神经网络。六个独特的权值在每一个时步被重复的利用,六个权值分别对应:输入到向前和向后隐含层(w1,w3),隐含层到隐含层自己(w2,w5),向前和向后隐含层到输出层(w4,w6)。值得注意的是:向前和向后隐含层之间没有信息流,这保证了展开图是非循环的。




图3双向循环神经网络(BRNN)在时间上展开



对于整个双向循环神经网络(BRNN)的计算过程如下:

向前推算(Forwardpass):

对于双向循环神经网络(BRNN)的隐含层,向前推算跟单向的循环神经网络(RNN)一样,除了输入序列对于两个隐含层是相反方向的,输出层直到两个隐含层处理完所有的全部输入序列才更新:


向后推算(Backwardpass):

双向循环神经网络(BRNN)的向后推算与标准的循环神经网络(RNN)通过时间反向传播相似,除了所有的输出层


δ

[removed]\delta[removed]项首先被计算,然后返回给两个不同方向的隐含层:


3.LongShort-TermMemory(LSTM)

循环神经网路(RNN)在工作时一个重要的优点在于,其能够在输入和输出序列之间的映射过程中利用上下文相关信息。然而不幸的是,标准的循环神经网络(RNN)能够存取的上下文信息范围很有限。这个问题就使得隐含层的输入对于网络输出的影响随着网络环路的不断递归而衰退。因此,为了解决这个问题,长短时记忆(LSTM)结构诞生了。与其说长短时记忆是一种循环神经网络,倒不如说是一个加强版的组件被放在了循环神经网络中。具体地说,就是把循环神经网络中隐含层的小圆圈换成长短时记忆的模块。这个模块的样子如下图所示:




图4长短时记忆模块



关于这个单元的计算过程如下所示:

向前推算(Forwardpass):

InputGate:











通过上图可以观察有哪些连接了InputGate:t时刻外面的输入,t-1时刻隐含单元的输出,以及来自t-1时刻Cell的输出。累计求和之后进行激活函数的计算就是上面两行式子的含义了。

ForgetGate:











这两行公式的计算意义跟上一个相同,ForgetGate的输入来自于t时刻外面的输入,t-1时刻隐含单元的输出,以及来自t-1时刻Cell的输出。

Cells:











这部分有些复杂,Cell的输入是:t时刻ForgetGate的输出*t-1时刻Cell的输出+t时刻InputGate的输出*激活函数计算(t时刻外面的输入+t-1时刻隐含单元的输出)

OutputGate:











这部分就同样好理解了:OutputGate的输入是:t时刻外面的输入,t-1时刻隐含单元的输出以及t时刻Cell单元的输出。

CellOutput:






最后,模块的输出是t时刻OutputGate的输出*t时刻Cell单元的输出。

向后推算(Forwardpass):






CellOutput:






OutputGate:






Cells:











ForgetGate:






InputGate:







相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,&#39;\n&#39;是换行,&#39;\t&#39;是tab,&#39;\\&#39;是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open(&#39;3_2.txt&#39;,&#39;r&#39;)linecount=len(file.readlines())linecache.getline(&#39;3_2.txt&#39;,linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问