深度学习笔记——理论与推导之Neural Network的记忆力(四)

Neural Network with Memory

记忆力的重要性:如进位这个问题,你可以设计如下模型来实现这个记忆力:
这里写图片描述
如上图所示,左边的神经元是将两个数字相加后,如果大于10则输出1,反之输出0,输出后存在Memory cell里一份,然后将值乘以-10做为红色神经元的输入;右边的神经元则是将输入相加,相加后做为红色神经元的输入,红色神经元则是将左右两个输入相加。如,现在传入的是x1 = 4,x2 = 7,那么左边的绿色神经元会输出1,并存一份到Memory cell中,再将这个1*-10作为红色神经元的输入;右边的绿色神经元会输出一个11;接下来将这两个神经元作为红色神经元的输入,11-10 = 1,所以输出值为1。

目录:

  • RNN
  • RNN的变形
  • LSTM(长短时间记忆)

RNN

  1. RNN的简单过程:
    这里写图片描述
    这里写图片描述
    换一种表现形式:
    这里写图片描述
    这里的网络结构都是相同的,包括参数Wi,Wh,Wo都是相同的。
    这里写图片描述
    输出的yi是由x1,x2,…xi决定的。
  2. RNN的Cost:
    这里写图片描述
    对于RNN来说,越接近input层的神经元会影响的更小。
  3. RNN的Training:
    Training要做的就是调参,这里的参数只有三组Wh,Wo,Wi。由于RNN和时间序列有关,因此我们使用BPTT算法
    这里写图片描述
  4. RNN的应用场景:
    • 语音识别等(如果采用DNN,那么每一帧将会被独立考虑)。
    • input和output都是vector sequence with the same length,如:POS Tagging(词性标注)
    • Name entity recognition(命名实体识别),即定义什么词是人名,地名,组织等等。如:Harry Potter[people] is a student of Hogwarts[organizations] and lived on Privet Drive[places]
    • Information extraction(消息提取),如对话系统。

RNN的变形

  1. Elman Network(最常见的type)与Jordan Network:
    因为Jordan Network是将输出传递给下一个神经元,这时候的输出是有标准答案的,因此Jordan Network可能比Elman Network更加实用,但当Jordan Network输出维度很大的时候就得不偿失了。
    这里写图片描述
  2. Deep RNN:
    这里写图片描述
  3. Bidirectional RNN:
    这种RNN将input中的左右都看了。
    这里写图片描述
    以上都是input和output都是the same length。
  4. 多对一的RNN:
    • 如:Sentiment Analysis(情感分析)
      这里写图片描述
  5. 多对多(输出比较短):
    • 如:Speech Recognition(语音识别)
      这里写图片描述
      这时候可以用Connectionist Temporal Classification(CTC):
      这里写图片描述
  6. 多对多(没有限制,即不知道谁长谁短):
    • 如:Machine Translation(机器翻译)
      这里写图片描述
      在看完一句句子之后,由于我们知道input,而不知道output的长度,所以我们要如何做停止呢?我们可以增加一个断句符”===”
      这里写图片描述
  7. 一对多(Input is one vector,output is a vector sequence):
    • Caption generation(字幕生成):
      这里写图片描述

长短期记忆(LSTM)

  1. 这是一个有4个input,1个output的特殊神经元,有三个门为:Output Gate,Forget Gate和Input Gate。
    这里写图片描述
    神经元的计算如下:
    这里写图片描述
    假设有两个输入,这里不同颜色的线代表不同的参数,这里比之前多了4倍的参数。
    这里写图片描述
  2. 实例:
    在下面问题中:
    • x2 = 1:表示将x1与memory中的数值求和并且存入memory中。
    • x2 = -1:表示重置memory
    • x3 = 1:表示输出memory中的值
      这里写图片描述
      具体流程如下:
      这里写图片描述

Application on language modeling

Language model(LM):
Language Model在语音辨识的时候有很大作用,它就是对word sequence出现的几率进行估算。假如今天需要判断一段语音是recognize speech还是wreck a nice beach,那么单单从发音上进行辨识是不行的,还需要从概率上进行辨识,如果P(recognize speech)>P(wreck a nice beach)那么output就是”recognize speech”。
这里写图片描述
传统方法,怎么估测几率呢?
1. 收集一系列的text data作为training data。
2. 然而如果这时候word sequence w1,w2,…,wn没出现在training data中。那么我们应该这么计算P(w1,w2,w3,…,wn) = P(w1|START)P(w2|w1)…P(wn|wn-1)。具体说P(“wreck a nice beach”) = P(wreck|START)P(a|wreck)P(nice|a)P(beach|nice)
3. 那么上述几率要怎么估测呢?比如P(beach|nice) = C(nice beach)/C(nice)。
这里写图片描述
4. 现在做LM中有可能出现的问题:

  • Training Data中:
    • The dog ran…
    • The cat jumped…

那么这时候就可能出现以下问题,如果Training data中没有狗跑猫跳那么就会出现:
P(jumped|dog) = 0 / P(ran|cat) = 0
这是因为training data是有限的,所以几率的估测是很不准的,一个比较简单的方法,就是看到几率为0的时候,我们给这个0修改成一个很小的值,这样我们就可以算每一个word sequence的几率,这样可以比直接设0更好,这就叫做language model smoothing:
这里写图片描述
5. NN based LM:
我们有NN如何做LM呢?
P(“wreck a nice beach”) = P(wreck|START)P(a|wreck)P(nice|a)P(beach|nice)我们本来是直接用count,来计算P。但我们现在有一个NN是可以估测next word的。比如说,我们输入一个”wreck”,通过NN,我们得到一个m维的vector,那么针对”a”的dimension输出的值就是P(a|wreck)。
这里写图片描述
为什么用NN而不用count,可以处理smoothing的问题呢?
因为我们收入1-of-N encoding后,类似的word的hidden layer的output是类似的。这样当P(jump|dog) 变大,P(jump|cat)也会变大,即使training data中从来没有出现”…cat jump…”,因为dog和cat是类似的词,而dog后面有接跳,cat后面接跳的可能性就会变大。
这里写图片描述
6. RNN-based LM:

  • input是1-of-N encoding,output是下一个word出现的几率。
    这里写图片描述
    如果我们更详细的来说就是这样的:
    这里写图片描述

猜你喜欢

转载自blog.csdn.net/sysstc/article/details/75331450
今日推荐