吴恩达序列模型——循环序列模型

  对于自然语言和音频等前后相关联的数据,需要使用循环神经网络进行处理

 1. 数据表示

  序列数据:对于一个序列数据 x,用符号xt来表示这个数据中的第t个元素,用yt来表示第 t个标签,用 Tx和 Ty来表示输入和输出的长度。可以是单词也可以是字符,音频的一段元素。第 i个序列数据的第t 个元素用符号x(i)(t),第 t个标签即为y(i)(t)。对应即有T(i)x和 T(i)y 

  词汇表(Vocabulary):字典(Dictionary)。将需要表示的所有词语变为一个列向量,可以根据字母顺序排列,然后根据单词在向量中的位置,用 one-hot 向量(one-hot vector)来表示该单词的标签,如果出现词汇表之外的单词,可以使用UNK或其他字符串来表示。将每个单词编码成一个R|v|x1向量,其中 |V|<是词汇表中单词的数量。一个单词在词汇表中的索引在该向量对应的元素为 1,其余元素均为 0。例如,'zebra'排在词汇表的最后一位,因此它的词向量表示为:wzebra=[0,0,0,...,1]T

2. 循环神经网络

对于序列数据,使用标准神经网络存在以下问题:

  • 对于不同的示例,输入和输出可能有不同的长度,因此输入层和输出层的神经元数量无法固定。
  • 从输入文本的不同位置学到的同一特征无法共享。
  • 模型中的参数太多,计算量太大。

 

 

 

  当元素x(t)输入对应时间步(Time Step)的隐藏层的同时,该隐藏层也会接收来自上一时间步的隐藏层的激活值 a(t-1),其中 a(0)一般直接初始化为零向量。一个时间步输出一个对应的预测结果y^(t)循环神经网络从左向右扫描数据,同时每个时间步的参数也是共享的,输入、激活、输出的参数对应为 Wax、Waa、Wya。下图是一个 RNN 神经元的结构:

  为了计算反向传播过程,需要先定义一个损失函数。单个位置上(或者说单个时间步上)某个单词的预测值的损失函数采用交叉熵损失函数

  将单个位置上的损失函数相加,得到整个序列的成本函数如下

  循环神经网络的反向传播被称为通过时间反向传播(Backpropagation through time),因为从右向左计算的过程就像是时间倒流。

3. RNN结构

 

 

 还可以通过双向RNN 实现

4. 语言模型

  语言模型(Language Model)是根据语言客观事实而进行的语言抽象数学建模,能够估计某个序列中各元素出现的可能性。建立语言模型所采用的训练集是一个大型的语料库(Corpus),指数量众多的句子组成的文本。建立过程的第一步是标记化(Tokenize),即建立字典;然后将语料库中的每个词表示为对应的 one-hot 向量。另外,需要增加一个额外的标记 EOS(End of Sentence)来表示一个句子的结尾。标点符号可以忽略,也可以加入字典后用 one-hot 向量表示。对于语料库中部分特殊的、不包含在字典中的词汇,例如人名、地名,可以不必针对这些具体的词,而是在词典中加入一个 UNK(Unique Token)标记来表示。

 

 

语言模型模拟了任意特定单词序列的概率,要做的是对这些概率分布进行采样来生成一个新的单词序列。

  怎样知道一个句子结束:如果代表句子结尾的标识在字典中,可以一直进行采样直到得到EOS标识,代表着已经抵达结尾,可以停止采样;如果字典中没有这个词,可以决定从20个或100个或其他个单词进行采样,然后一直将采样进行下去直到达到所设定的时间步。不过这种过程有时候会产生一些未知标识,如果要确保算法不会输出这种标识,要做的是拒绝采样过程中产生任何未知的标识,一旦出现就继续在剩下的词中进行重采样,直到得到一个不是未知标识的词
基于字符的RNN 不会出现未知的表示,但序列会很长,训练成本高

5. 梯度消失

  梯度消失:RNN 不擅长捕获长期依赖关系,在反向传播时,后面层的输出误差很难影响到较靠前层的计算,网络很难调整靠前的计算。
  在反向传播时,随着层数的增多,梯度不仅可能指数型下降,也有可能指数型上升,即梯度爆炸。不过梯度爆炸比较容易发现,因为参数会急剧膨胀到数值溢出(可能显示为 NaN)。这时可以采用梯度修剪(Gradient Clipping)来解决:观察梯度向量,如果它大于某个阈值,则缩放梯度向量以保证其不会太大。相比之下,梯度消失问题更难解决。GRU 和 LSTM 都可以作为缓解梯度消失问题的方案。
GRU门控循环单元
 

 

LSTM长短期记忆

LSTM中不再有a<t>=c<t>的情况,红线显示了只要正确地设置了遗忘门和更新门,LSTM很容易把c<0>的值一直往下传递到右边,比如c<3>=c<0>。这就是为什么LSTMGRU非常擅长于长时间记忆某个值

 窥视孔连接”(peephole connection):门值不仅取决于a<t−1>x<t>,也取决于上一个记忆细胞的值c<t−1>,c<t1>也能影响门值

 

双向循环神经网络 Bidirectional RNN

 深层循环神经网络(多个隐藏层构成DRNN)

posted @   forever_fate  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示