添加URL
分享

循环神经网络(RNN, Recurrent Neural Networks)介绍

这篇文章很多内容是参考: http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/ ,在这篇文章中,加入了一些新的内容与一些自己的理解。

循环神经网络(Recurrent Neural Networks,RNNs)已经在众多自然语言处理(Natural Language Processing, NLP)中取得了巨大成功以及广泛应用。但是,目前网上与RNNs有关的学习资料很少,因此该系列便是介绍RNNs的原理以及如何实现。主要分成以下几个部分对RNNs进行介绍:
1. RNNs的基本介绍以及一些常见的RNNs(本文内容);
2. 详细介绍RNNs中一些经常使用的训练算法,如Back Propagation Through Time(BPTT)、Real-time Recurrent Learning(RTRL)、Extended Kalman Filter(EKF)等学习算法,以及梯度消失问题(vanishing gradient problem)
3. 详细介绍Long Short-Term Memory(LSTM,长短时记忆网络);
4. 详细介绍Clockwork RNNs(CW-RNNs,时钟频率驱动循环神经网络);
5. 基于Python和 Theano 对RNNs进行实现,包括一些常见的RNNs模型。

不同于传统的FNNs(Feed-forward Neural Networks,前向反馈神经网络),RNNs引入了定向循环,能够处理那些输入之间前后关联的问题。定向循环结构如下图所示:

该tutorial默认读者已经熟悉了基本的神经网络模型。如果不熟悉,可以点击: Implementing A Neural Network From Scratch 进行学习。

什么是RNNs

RNNs的目的使用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNNs之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNNs能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关,下图便是一个典型的RNNs:
From Nature
RNNs包含输入单元(Input units),输入集标记为 { x 0 , x 1 , . . . , x t , x t + 1 , . . . } ,而输出单元(Output units)的输出集则被标记为 { y 0 , y 1 , . . . , y t , y t + 1 . , . . } 。RNNs还包含隐藏单元(Hidden units),我们将其输出集标记为 { s 0 , s 1 , . . . , s t , s t + 1 , . . . } ,这些隐藏单元完成了最为主要的工作。你会发现,在图中:有一条单向流动的信息流是从输入单元到达隐藏单元的,与此同时另一条单向流动的信息流从隐藏单元到达输出单元。在某些情况下,RNNs会打破后者的限制,引导信息从输出单元返回隐藏单元,这些被称为“Back Projections”,并且隐藏层的输入还包括上一隐藏层的状态,即隐藏层内的节点可以自连也可以互连。
上图将循环神经网络进行展开成一个全神经网络。例如,对一个包含5个单词的语句,那么展开的网络便是一个五层的神经网络,每一层代表一个单词。对于该网络的计算过程如下:

  • x t 表示第 t , t = 1 , 2 , 3... 步(step)的输入。比如, x 1 为第二个词的one-hot向量(根据上图, x 0 为第一个词);
    PS:使用计算机对自然语言进行处理,便需要将自然语言处理成为机器能够识别的符号,加上在机器学习过程中,需要将其进行数值化。而词是自然语言理解与处理的基础,因此需要对词进行数值化, 词向量(Word Representation,Word embeding)[1] 便是一种可行又有效的方法。何为词向量,即使用一个指定长度的实数向量v来表示一个词。有一种种最简单的表示方法,就是使用One-hot vector表示单词,即根据单词的数量|V|生成一个|V| * 1的向量,当某一位为一的时候其他位都为零,然后这个向量就代表一个单词。缺点也很明显:
    1. 由于向量长度是根据单词个数来的,如果有新词出现,这个向量还得增加,麻烦!(Impossible to keep up to date);
    2. 主观性太强(subjective)
    3. 这么多单词,还得人工打labor并且adapt,想想就恐
    4. 最不能忍受的一点便是很难计算单词之间的相似性。
      现在有一种更加有效的词向量模式,该模式是通过神经网或者深度学习对词进行训练,输出一个指定维度的向量,该向量便是输入词的表达。如 word2vec
  • s t 为隐藏层的第 t 步的状态,它是网络的记忆单元。 s t 根据当前输入层的输出与上一步隐藏层的状态进行计算。 s t = f ( U x t + W s t 1 ) ,其中 f 一般是非线性的激活函数,如 tanh ReLU ,在计算 s 0 时,即第一个单词的隐藏层状态,需要用到 s 1 ,但是其并不存在,在实现中一般置为0向量;
  • o t 是第 t 步的输出,如下个单词的向量表示, o t = s o f t m a x ( V s t ) .
    需要注意的是:
  • 你可以认为隐藏层状态 s t 是网络的记忆单元. s t 包含了前面所有步的隐藏层状态。而输出层的输出 o t 只与当前步的 s t 有关,在实践中,为了降低网络的复杂度,往往 s t 只包含前面若干步而不是所有步的隐藏层状态;
  • 在传统神经网络中,每一个网络层的参数是不共享的。而在RNNs中,每输入一步,每一层各自都共享参数 U , V , W 。其反应者RNNs中的每一步都在做相同的事,只是输入不同,因此大大地降低了网络中需要学习的参数;这里并没有说清楚,解释一下,传统神经网络的参数是不共享的,并不是表示对于每个输入有不同的参数,而是将RNN是进行展开,这样变成了多层的网络,如果这是一个多层的传统神经网络,那么 x t s t 之间的U矩阵与 x t + 1 s t + 1 之间的 U 是不同的,而RNNs中的却是一样的,同理对于 s s 层之间的 W s 层与 o 层之间的 V 也是一样的。
  • 上图中每一步都会有输出,但是每一步都要有输出并不是必须的。比如,我们需要预测一条语句所表达的情绪,我们仅仅需要关系最后一个单词输入后的输出,而不需要知道每个单词输入后的输出。同理,每步都需要输入也不是必须的。RNNs的关键之处在于隐藏层,隐藏层能够捕捉序列的信息。
  • 语言模型与文本生成(Language Modeling and Generating Text)

    给你一个单词序列,我们需要根据前面的单词预测每一个单词的可能性。语言模型能够一个语句正确的可能性,这是机器翻译的一部分,往往可能性越大,语句越正确。另一种应用便是使用生成模型预测下一个单词的概率,从而生成新的文本根据输出概率的采样。语言模型中,典型的输入是单词序列中每个单词的词向量(如 One-hot vector),输出时预测的单词序列。当在对网络进行训练时,如果 o t x t + 1 ,那么第 t 步的输出便是下一步的输入。
    下面是RNNs中的语言模型和文本生成研究的三篇文章:

  • Recurrent neural network based language model
  • Extensions of Recurrent neural network based language model
  • Generating Text with Recurrent Neural Networks
  • 机器翻译(Machine Translation)

    机器翻译是将一种源语言语句变成意思相同的另一种源语言语句,如将英语语句变成同样意思的中文语句。与语言模型关键的区别在于,需要将源语言语句序列输入后,才进行输出,即输出第一个单词时,便需要从完整的输入序列中进行获取。机器翻译如下图所示:
    RNN for Machine Translation. Image Source
    下面是关于RNNs中机器翻译研究的三篇文章:

  • A Recursive Recurrent Neural Network for Statistical Machine Translation
  • Sequence to Sequence Learning with Neural Networks
  • Joint Language and Translation Modeling with Recurrent Neural Networks
  • 图像描述生成 (Generating Image Descriptions)

    和卷积神经网络(convolutional Neural Networks, CNNs)一样,RNNs已经在对无标 图像描述 自动生成中得到应用。将CNNs与RNNs结合进行图像描述自动生成。这是一个非常神奇的研究与应用。该组合模型能够根据图像的特征生成描述。如下图所示:
    图像描述生成中的深度视觉语义对比. Image Source

    如何训练RNNs

    对于RNN是的训练和对传统的ANN训练一样。同样使用BP误差反向传播算法,不过有一点区别。如果将RNNs进行网络展开,那么参数 W , U , V 是共享的,而传统神经网络却不是的。并且在使用梯度下降算法中,每一步的输出不仅依赖当前步的网络,并且还以来前面若干步网络的状态。比如,在 t = 4 时,我们还需要向后传递三步,已经后面的三步都需要加上各种的梯度。该学习算法称为Backpropagation Through Time (BPTT)。后面会对BPTT进行详细的介绍。需要意识到的是,在vanilla RNNs训练中, BPTT无法解决长时依赖问题 (即当前的输出与前面很长的一段序列有关,一般超过十步就无能为力了),因为BPTT会带来所谓的梯度消失或梯度爆炸问题(the vanishing/exploding gradient problem)。当然,有很多方法去解决这个问题,如LSTMs便是专门应对这种问题的。

    RNNs扩展和改进模型

    这些年,研究者们已经提出了多钟复杂的RNNs去改进vanilla RNN模型的缺点。下面是目前常见的一些RNNs模型,后面会对其中使用比较广泛的进行详细讲解,在这里进行简单的概述。

    Simple RNNs(SRNs)[2]

    SRNs是RNNs的一种特例,它是一个三层网络,并且在隐藏层增加了上下文单元,下图中的 y 便是隐藏层, u 便是上下文单元。上下文单元节点与隐藏层中的节点的连接是固定(谁与谁连接)的,并且权值也是固定的(值是多少),其实是一个上下文节点与隐藏层节点一一对应,并且值是确定的。在每一步中,使用标准的前向反馈进行传播,然后使用学习算法进行学习。上下文每一个节点保存其连接的隐藏层节点的上一步的输出,即保存上文,并作用于当前步对应的隐藏层节点的状态,即隐藏层的输入由输入层的输出与上一步的自己的状态所决定的。因此SRNs能够解决标准的多层感知机(MLP)无法解决的对序列数据进行预测的任务。
    SRNs网络结构如下图所示:

  • 它的核心结构时一个随机生成、且保持不变的储备池(Reservoir),储备池是大规模的、随机生成的、稀疏连接(SD通常保持1%~5%,SD表示储备池中互相连接的神经元占总的神经元个数N的比例)的循环结构;
  • 其储备池到输出层的权值矩阵是唯一需要调整的部分;
  • 简单的线性回归就可完成网络的训练。
  • 从结构上讲,ESNs是一种特殊类型的循环神经网络,其基本思想是:使用大规模随机连接的循环网络取代经典神经网络中的中间层,从而简化网络的训练过程。因此ESNs的关键是中间的储备池。网络中的参数包括: W 为储备池中节点的连接权值矩阵, W i n 为输入层到储备池之间的连接权值矩阵,表明储备池中的神经元之间是连接的, W b a c k 为输出层到储备池之间的反馈连接权值矩阵,表明储备池会有输出层来的反馈, W o u t 为输入层、储备池、输出层到输出层的连接权值矩阵,表明输出层不仅与储备池连接,还与输入层和自己连接。 W o u t b i a s 表示输出层的偏置项。
    对于ESNs,关键是储备池的四个参数,如储备池内部连接权谱半径SR( S R = λ m a x = m a x { | W | } ,只有SR <1时,ESNs才能具有回声状态属性)、储备池规模N(即储备池中神经元的个数)、储备池输入单元尺度IS(IS为储备池的输入信号连接到储备池内部神经元之前需要相乘的一个尺度因子)、储备池稀疏程度SD(即为储备池中互相连接的神经元个数占储备池神经元总个数的比例)。对于IS,如果需要处理的任务的非线性越强,那么输入单元尺度越大。该原则的本质就是通过输入单元尺度IS,将输入变换到神经元激活函数相应的范围(神经元激活函数的不同输入范围,其非线性程度不同)。
    ESNs的结构如下图所示:

    Gated Recurrent Unit Recurrent Neural Networks[6]

    GRUs也是一般的RNNs的改良版本,主要是从以下两个方面进行改进。一是,序列中不同的位置处的单词(已单词举例)对当前的隐藏层的状态的影响不同,越前面的影响越小,即每个前面状态对当前的影响进行了距离加权,距离越远,权值越小。二是,在产生误差error时,误差可能是由某一个或者几个单词而引发的,所以应当仅仅对对应的单词weight进行更新。GRUs的结构如下图所示。GRUs首先根据当前输入单词向量word vector已经前一个隐藏层的状态hidden state计算出update gate和reset gate。再根据reset gate、当前word vector以及前一个hidden state计算新的记忆单元内容(new memory content)。当reset gate为1的时候,new memory content忽略之前的所有memory content,最终的memory是之前的hidden state与new memory content的结合。

  • new memory的计算方法都是根据之前的state及input进行计算,但是GRUs中有一个reset gate控制之前state的进入量,而在LSTMs里没有这个gate;
  • 产生新的state的方式不同,LSTMs有两个不同的gate,分别是forget gate (f gate)和input gate(i gate),而GRUs只有一个update gate(z gate);
  • LSTMs对新产生的state又一个output gate(o gate)可以调节大小,而GRUs直接输出无任何调节。
  • Clockwork RNNs(CW-RNNs)[9]

    CW-RNNs是较新的一种RNNs模型,其论文发表于2014年Beijing ICML。在 原文[8] 中作者表示其效果较SRN与LSTMs都好。
    CW-RNNs也是一个RNNs的改良版本,是一种使用时钟频率来驱动的RNNs。它将隐藏层分为几个块(组,Group/Module),每一组按照自己规定的时钟频率对输入进行处理。并且为了降低标准的RNNs的复杂性,CW-RNNs减少了参数的数目,提高了网络性能,加速了网络的训练。CW-RNNs通过不同的隐藏层模块工作在不同的时钟频率下来解决长时间依赖问题。将时钟时间进行离散化,然后在不同的时间点,不同的隐藏层组在工作。因此,所有的隐藏层组在每一步不会都同时工作,这样便会加快网络的训练。并且,时钟周期小的组的神经元的不会连接到时钟周期大的组的神经元,只会周期大的连接到周期小的(认为组与组之间的连接是有向的就好了,代表信息的传递是有向的),周期大的速度慢,周期小的速度快,那么便是速度慢的连速度快的,反之则不成立。现在还不明白不要紧,下面会进行讲解。
    CW-RNNs与SRNs网络结构类似,也包括输入层(Input)、隐藏层(Hidden)、输出层(Output),它们之间也有向前连接,输入层到隐藏层的连接,隐藏层到输出层的连接。但是与SRN不同的是,隐藏层中的神经元会被划分为若干个组,设为 g ,每一组中的神经元个数相同,设为 k ,并为每一个组分配一个时钟周期 T i { T 1 , T 2 , . . . , T g } ,每一个组中的所有神经元都是全连接,但是组 j 到组 i 的循环连接则需要满足 T j 大于 T i 。如下图所示,将这些组按照时钟周期递增从左到右进行排序,即 T 1 < T 2 < . . . < T g ,那么连接便是从右到左。例如:隐藏层共有256个节点,分为四组,周期分别是[1,2,4,8],那么每个隐藏层组256/4=64个节点,第一组隐藏层与隐藏层的连接矩阵为64*64的矩阵,第二层的矩阵则为64*128矩阵,第三组为64*(3*64)=64*192矩阵,第四组为64*(4*64)=64*256矩阵。这就解释了上一段的后面部分,速度慢的组连到速度快的组,反之则不成立。
    CW-RNNs的网络结构如下图所示:
    在传统的RNN中,按照下面的公式进行计算:

    s t = f s ( W s t 1 + W i n x t )

    o t = f o ( W o u t s t )

    其中, W 为隐藏层神经元的自连接矩阵, W i n 为输入层到隐藏层的连接权值矩阵, W o u t 是隐藏层到输出层的连接权值矩阵 , x t 是第 t 步的输入, s t 1 为第 t 1 步隐藏层的输出, s t 为第 t 步隐藏层的输出, o t 为第 t 步的输出, f s 为隐藏层的激活函数, f o 为输出层的激活函数。
    与传统的RNNs不同的是,在第 t 步时,只有那些满足 ( t mod T i ) = 0 的隐藏层组才会执行。并且每一隐藏层组的周期 { T 1 , T 2 , . . . , T g } 都可以是任意的。原文中是选择指数序列作为它们的周期,即 T i = 2 i 1 i [ 1 , . . . , g ]
    因此 W W i n 将被划分为 g 个块。如下:
    W = W 1 . . . W g

    W i n = W i n 1 . . . W i n g

    其中 W 是一个上三角矩阵,每一个组行 W i 被划分为列向量 { W 1 i , . . . , W i i , 0 ( i + 1 ) i , . . . , 0 g i } T W j i , j [ 1 , . . . , g ] 表示第i个组到第j个组的连接权值矩阵。在每一步中, W W i n 只有部分组行处于执行状态,其它的为0:
    W i = { W i 0 , f o r ( t mod T i ) = 0 , o t h e r w i s e

    W i n i = { W i n i 0 , f o r ( t mod T i ) = 0 , o t h e r w i s e

    为了使表达不混淆,将 W i n 写成 W i n 。并且执行的组所对应的 o 才会有输出。处于非执行状态下的隐藏层组仍保留着上一步的状态。下图是含五个隐藏层组在 t = 6 时的计算图:
    在CW-RNNs中,慢速组(周期大的组)处理、保留、输出长依赖信息,而快速组则会进行更新。CW-RNNs的误差后向传播也和传统的RNNs类似,只是误差只在处于执行状态的隐藏层组进行传播,而非执行状态的隐藏层组也复制其连接的前面的隐藏层组的后向传播。即执行态的隐藏层组的误差后向传播的信息不仅来自与输出层,并且来自与其连接到的左边的隐藏层组的后向传播信息,而非执行态的后向传播信息只来自于其连接到的左边的隐藏层组的后向传播数据。
    下图是原文对三个不同RNNs模型的实验结果图:
    上图中,绿色实线是预测结果,蓝色散点是真实结果。每个模型都是对前半部分进行学习,然后预测后半部分。LSTMs模型类似滑动平均,但是CW-RNNs效果更好。其中三个模型的输入层、隐藏层、输出层的节点数都相同,并且只有一个隐藏层,权值都使用均值为0,标准差为0.1的高斯分布进行初始化,隐藏层的初始状态都为0,每一个模型都使用 Nesterov-style
    momentum SGD(Stochastic Gradient Descent,随机梯度下降算法)[10]
    进行学习与优化。

    到目前为止,本文对RNNs进行了基本的介绍,并对常见的几种RNNs模型进行了初步讲解。下一步将基于Theano与Python实现一个RNNs语言模型并对上面的一些RNNs模型进行详解。这里有 更多的RNNs模型

    后面将陆续推出:

  • 详细介绍RNNs中一些经常使用的训练算法,如Back Propagation Through Time(BPTT)、Real-time Recurrent Learning(RTRL)、Extended Kalman Filter(EKF)等学习算法,以及梯度消失问题(vanishing gradient problem)
  • 详细介绍Long Short-Term Memory(LSTM,长短时记忆网络);
  • 详细介绍Clockwork RNNs(CW-RNNs,时钟频率驱动循环神经网络);
  • 基于Python和 Theano 对RNNs进行实现,包括一些常见的RNNs模型;
  • 本系列将实现一个 基于循环神经网络的语言模型(recurrent neural network based language model) 。该实现包含两个方面:一是能够得到任意语句在现实中成立的得分,其提供了判断语法与语义的正确性的度量方式。该模型是机器翻译中的典型应用。二是模型能够产生新的文本,这是一个非常棒的应用。比如,对莎士比亚的文章进行训练,能够产生一个新的类似莎士比亚的文本,目前,这个有趣的想法已经被 Andrew Karpathy基于RNNs的字符级别的语言模型 实现了。
    由于实在很忙,后面都没进行更新,抱歉。

    http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/

    [1] Hinton G E. Learning Distributed Representations of Concepts[C]. Proceedings of the 8th Annual Conference of the Cognitive Science Society. 1986, 1: 12.
    [2] Elman, J. L. Finding structure in time. CRL Technical Report 8801, Center for Research in Language, University
    of California, San Diego, 1988.
    [3] Schuster M, Paliwal K K. Bidirectional recurrent neural networks[J]. Signal Processing, IEEE Transactions on, 1997, 45(11): 2673-2681.
    [4] Graves A, Mohamed A R, Hinton G. Speech Recognition with Deep Recurrent Neural Networks[J]. Acoustics Speech & Signal Processing . icassp. international Conference on, 2013:6645 - 6649.
    [5] Jaeger H, Haas H. Harnessing nonlinearity: Predicting chaotic systems and saving energy in wireless communication[J]. Science, 2004, 304(5667): 78-80.
    [6] Cho K, Van Merrienboer B, Gulcehre C, et al. Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation[J]. Eprint Arxiv, 2014.
    [7] Hochreiter S, Schmidhuber J. Long short-term memory.[J]. Neural Computation, 1997, 9(8):1735-1780.
    [8] Chung J, Gulcehre C, Cho K H, et al. Empirical evaluation of gated recurrent neural networks on sequence modeling[J]. arXiv preprint arXiv:1412.3555, 2014.
    [9] Jan Koutnik, Klaus Greff, Faustino Gomez, Juergen Schmidhuber. A Clockwork RNN[J]. Proceedings of The 31st International Conference on Machine Learning, pp. 1863–1871, 2014.
    [10] Sutskever, Ilya, Martens, James, Dahl, George E., and Hinton, Geoffrey E. On the importance of initialization and momentum in deep learning. In Dasgupta, Sanjoy and Mcallester, David (eds.), Proceedings of the 30th International Conference on Machine Learning (ICML-13), volume 28, pp. 1139–1147.

    转载请标明地址: http://blog.csdn.net/heyongluoyao8/article/details/48636251#

    1.RNN怎么来的?2.RNN的网络结构及原理3.RNN的改进1:双向RNN4.RNN的改进2:深层双向RNN4.1PyramidalRNN5.RNN的训练-BPTT6.RNN与CNN的结合应用:看图... 来自: 多元思考力 RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络。首先我们要明确什么是序列数据,摘取百度百科词条:时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某... 来自: 了不起的赵队 一RNN概述  前面我们叙述了BP算法,CNN算法,那么为什么还会有RNN呢??什么是RNN,它到底有什么不同之处?RNN的主要应用领域有哪些呢?这些都是要讨论的问题.  1)BP算法,CNN之后,为... 来自: 笨拙的石头的博客 RNN(Recurrent Neuron Network)是一种对序列数据建模的神经网络。继Bengio提出基于神经网络的概率语言模型并获得成功之后,Mikolov于2010年提出利用RNN建模语言模... 来自: xingzhedai的专栏 人工神经网络介绍参考: https://blog.csdn.net/fengbingchun/article/details/50274471 卷积神经网络介绍参考: https://blog.csd... 来自: 网络资源是无限的 这篇文章对循环神经网络有了一个大致的介绍,并且其中有循环神经网络的各种应用和相应的外文文章可以参考,值得学习http://blog.csdn.net/heyongluoyao8/article/det... 来自: xuanlv2017的博客 此游戏全部由本人自己制作完成。游戏大部分的素材来源于原版游戏素材,少部分搜集于网络,以及自己制作。 此游戏为同人游戏而且仅供学习交流使用,任何人未经授权,不得对本游戏进行更改、盗用等,否则后果自负。目... 来自: 尔灵尔亿的博客 点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...... 来自: 爱开发 一.RNN的网络结构及原理二.RNN的改进2.1.双向RNN2.2.深层双向RNN五.PyramidalRNN六.RNN的训练-BPTT七.RNN与CNN的结合应用:看图说话八.RNN项目练手一.RN... 来自: 不忘初心~ 起因又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满!而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,... 来自: bigsai 目录1、个人申请2、团队申请3、企业/组织申请3.1、个人/企业/组织和企业/组织联合申请4、补充最近和团队做一个项目:基于NB-IoT技术的城市道路智慧路灯监控系统,决定申请计算机软件著作权便于保护... 来自: 不脱发的程序猿 我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记... 来自: 启舰 循环 神经网络 ( Recurrent Neural Network, RNN )和递归 神经网络 (Recursive Neural Network, RNN ),你搞清楚了吗? 09-05 一,循环神经网络:原文:https://zybuluo.com/hanbingtao/note/541458语言模型RNN是在自然语言处理领域中最先被用起来的,比如,RNN可以为语言模型来建模。那么,... 来自: 业余狙击手19 ▄︻┻┳═一 - AI 文章目录@[toc]spring cloud 介绍spring cloud 技术组成Spring Cloud 对比 Dubbo一、service - 服务二、commons 通用项目新建 maven ... 来自: weixin_38305440的博客 不要再问我python好不好学了我之前做过半年少儿编程老师,一个小学四年级的小孩子都能在我的教学下独立完成python游戏,植物大战僵尸简单版,如果要肯花时间,接下来的网络开发也不是问题,人工智能也可... 来自: 一行数据 首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。那么,... 来自: DavidGoGo_的博客 大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频... 来自: 帅地 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。七月初内推了字节跳动的提前批,因为内... 来自: ljh_shuai的博客 你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善前言这一期不算《吊打面试官》... 来自: 敖丙 【帮助】002-常用网站网址IT类:CSDN开源中国Awesomes洛谷计蒜客阿儿法营魔抓社区网易有道卡搭博客园慕课网GitHubCODING购物类:淘宝网天猫苏宁易购国美京东邮箱类:QQ邮箱网易邮箱... 来自: DYXM之寒舍 一、普通RNN最简单的RNN网络可以看成,在全连接网络的基础上,在每一层网络中增加一个将自己层的输出连接到在自己层的输入,如下图:                                   ... 来自: qq_33690342的博客 在前面两篇文章中(https://blog.csdn.net/qq_41453285/article/details/103050710、https://blog.csdn.net/qq_414532... 来自: 江南、董少 福利来了,给大家带来一个福利。最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的... 不知觉已中码龄已突破五年,一路走来从起初铁憨憨到现在的十九线程序员,一路成长,虽然不能成为高工,但是也能挡下一面,从15年很火的android开始入坑,走过java、.Net、QT,目前仍处于andr... 来自: Hello___Sunshine的专栏 1.为什么等待和通知是在 Object 类而不是 Thread 中声明的?一个棘手的 Java 问题,如果 Java编程语言不是你设计的,你怎么能回答这个问题呢。Java编程的常识和深入了解有助于回答... 来自: aaa13268的博客 博客说明:这是自己写的有关python语言的一篇综合博客。只作为知识广度和编程技巧学习,不过于追究学习深度,点到即止、会用即可。主要是基础语句,如三大控制语句(顺序、分支、循环),随机数的生成,数据类... 来自: 归零者 文章有点长并且绕,先来个图片缓冲下!前言现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。说到分布式,就必然... 来自: 公众号-[程序员之道] 循环神经网络RNN结构与全连接或者卷积神经网络结构相比,RNN比较复杂。通过阅读各种资料,觉得《TensorFlow:实战Google深度学习框架》中RNN讲的最通俗易懂,在这里将简单的总结一下书上的... 来自: 疯狂的兔子 作者:陈大鱼头github: KRISACHAN<input /> 标签是我们日常开发中非常常见的替换元素了,但是最近在刷 whattwg 跟 MDN 的时候发现 跟 <input ... 来自: 鱼头的Web海洋 作者 |胡书敏责编 | 刘静出品 | CSDN(ID:CSDNnews)本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。... 来自: CSDN资讯 欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所... 来自: Python作业辅导员 - 天元浪子【许向武】 你知道的越多,你不知道的越多点赞再看,养成习惯前言Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司... 来自: 敖丙 今天咱们第一课,来讲讲大家一直很关注的数据中台。其实,数据中台也是企业数据管理的一部分,甚至可以说是很重要的一部分。一、什么是中台?这其实是一个老生常谈的概念了,中台,顾名思义,就是在起中间作用的东西... 来自: Leo的博客 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的...
    ​ 进程通信是指进程之间的信息交换。这里需要和进程同步做一下区分,进程同步控制多个进程按一定顺序执行,进程通信是一种手段,而进程同步是目标。从某方面来讲,进程通信可以解决进程同步问题。 ​ 首先回顾下... 我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买ma... 双11不光是购物狂欢节,更是对技术的一次“大考”,对于阿里巴巴企业内部运营的基础保障技术而言,亦是如此。 回溯双11历史,这背后也经历过“小米加步枪”的阶段:作战室从随处是网线,交换机放地上的“一地... 小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycha... CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是... 2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人... 相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有... 其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...... Java Magazine上面有一个专门坑人的面试题系列: https://blogs.oracle.com/javamagazine/quiz-2。 这些问题的设计宗旨,主要是测试面试者对Java语... By 超神经场景描述:昨天 2 月 3 日,是大部分城市号召远程工作的第一天,全国有接近 2 亿人在家开始远程办公,钉钉上也有超过 1000 万家企业活跃起来。关键词:十一出行 人脸...... Java基础知识点梳理 虽然已经在实际工作中经常与java打交道,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法... 哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈... 蒙特卡罗方法,也称统计模拟方法,是1940年代中期由于科学技术的发展和电子计算机的发明,而提出的一种以概率统计理论为指导的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法 你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能... Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以We... Spring1.Spring是什么?有什么好处?2.IOC是什么?有什么好处?具体过程?3.DI是什么?4.IOC和DI的关系?5.bean标签的属性有哪些?6.IOC创建对象有哪几种方式?7.Spr... 作者| Just出品|CSDN(CSDNnews)紧急驰援疫区,AI医生也出动了。截止到2月6日,随着新冠病毒肺炎疫情的不断发展,全国累计已有31161例确诊病例,26359例疑...... 本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降... 利用HTML5,css,js实现爱心树 以及 纪念日期的功能 网页有播放音乐功能 以及打字倾诉感情的画面,非常适合情人节送给女朋友 具体的HTML代码 具体只要修改代码里面的男某某和女某某 文字... 4 容器类型 容器深层含义自己不知道,但是就表面意思。我自己理解的容器就是容器。他就是一个可以装“东西”的罐子啥的。不同的“罐子”可以装的“东西”不同,就像酒杯装酒,茶杯装茶,水缸装水。酒杯、茶杯、水... weixin_42178009: [reply]qq_40583374[/reply] 我也是对这个地方有困惑,觉得如果不是分行文档处理,那一篇文档的开头和另一篇文档的结尾就也会被放在一个Windows下面来训练,感觉就不是上下文。。。 你已经知道了嘛?