循环序列模型

作者: dreampai | 来源:发表于2019-04-12 18:34 被阅读7次

    数学符号——构建字典

    建立字典(对于商业应用来说,或者对于一般规模的商业应用来说 30,000 到 50,000 词大小的词典比较常见,但是 100,000 词的也不是没有,而且有些大型互联网公司会用百万词,甚至更大的词典。)

    • 一个不在你词表中的单词,答案就是创建一个新的标记,也就是一个叫做 Unknow Word 的伪单词,用<UNK>作为标记,来表示不在词表中的单词。
    • 要定义句子的结尾,一般的做法就是增加一个额外的标记,叫做 EOS

    循环神经网络模型——RNN

    标准神经网络的缺点:

    • 是输入和输出数据在不同例子中可以有不同的长度
    • 它并不共享从文本的不同位置上学到的特征
    image.png
    循环神经网络:

    神经网络结构的一个限制是它在某一时刻的预测仅使用了从序列之前的输入信息并没有使用序列中后部分的信息。


    image.png

    在零时刻需要构造一个激活值 𝑎[0],这通常是零向量。有些研究人员会随机用其他方法初始化 𝑎[0],不过使用零向量作为零时刻的伪激活值是最常见的选择,因此我们把它输入神经网络。

    不同类型的循环神经网络

    • many-to-many:命名实体识别、机器翻译
    • many-to-one:情感分类
    • one-to-one:标准类型的神经网络
    • one-to-many:音乐生成或者序列生成
    image.png

    语言模型和序列生成

    语言模型:告诉你某个特定的句子它出现的概率是多少。

    对新序列采样

    怎样知道一个句子结束了呢?

    • 如果代表句子结尾的标识在你的字典中,你可以一直进行采样直到得到 EOS 标识这代表着已经抵达结尾,可以停止采样了。
    • 如果你的字典中没有这个词,你可以决定从 20 个或100 个或其他个单词进行采样,然后一直将采样进行下去直到达到所设定的时间步。不过这种过程有时候会产生一些未知标识,如果你要确保你的算法不会输出这种标识,你能做的一件事就是拒绝采样过程中产生任何未知的标识,一旦出现就继续在剩下的词中进行重采样,直到得到一个不是未知标识的词。如果你不介意有未知标识产生的话,你也可以完全不管它们。
      生成模型分类:
    • 基于字符的语言模型
      • 优点:不会出现未知的标识
      • 缺点:最后会得到太多太长的序列
    • 基于词汇的语言模型
      基于字符的语言模型在捕捉句子中的依赖关系也就是句子较前部分如何影响较后部分不如基于词汇的语言模型那样可以捕捉长范围的关系,并且基于字符的语言模型训练起来计算成本比较高昂

    循环神经网络的梯度消失

    先从左到右前向传播,然后反向传播。但是反向传播会很困难,因为同样的梯度消失的问题,后面层的输出误差(上图编号 6 所示)很难影响前面层的计算。

    • 梯度消失
    • 梯度爆炸:一个解决方法就是用梯度修剪。梯度修剪的意思就是观察你的梯度向量,如果它大于某个阈值,缩放梯度向量,保证它不会太大,这就是通过一些最大值来修剪的方法

    GRU

    image.png
    • 更新门
    • 相关门


      image.png

    LSTM

    • 遗忘门
      -更新门
      -输出门


      image.png

    双向循环神经网络

    双向 RNN网络模型的缺点就是你需要完整的数据的序列,你才能预测任意位置。比如说你要构建一个语音识别系统,那么双向 RNN 模型需要你考虑整个语音表达,但是如果直接用这个去实现的话,你需要等待这个人说完,然后获取整个语音表达才能处理这段语音,并进一步做语音识别。但是对于很多自然语言处理的应用,如果你总是可以获取整个句子,这个标准的双向 RNN 算法实际上很高效。

    image.png

    深层循环神经网络

    对于RNN 来说,有三层就已经不少了。
    在每一个上面堆叠循环层,把这里的输出去掉(上图编号 1 所示),然后换成一些深的层,这些层并不水平连接,只是一个深层的网络,然后用来预测y


    image.png

    相关文章

      网友评论

        本文标题:循环序列模型

        本文链接:https://www.haomeiwen.com/subject/lxocwqtx.html