语音识别食用指南

Posted Debroon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了语音识别食用指南相关的知识,希望对你有一定的参考价值。

循环神经网络 RNN

之前描述的全连接神经网络(FCN)和卷积神经网络(CNN),其目标数据的样本是不分先后的。

比如下面这句话:

  • 早上好天气,适合(去打球\\睡懒觉)。

既然“天气不错”,那么做出 “去打球” 这个决策的可能性应该高于“睡懒觉”。

为了获取这一类序列特征,在此基础上,具备记忆机制的循环网络模型,逐渐演进到现在,成为更有效的循环神经网络模型(RNN)。

RNN 是一种特别适合识别带有时间先后顺序的数据的算法模型(比如像是文本、语音信息,还有一些具有前后因果关系的图像数据)。

我们平常用的很多中英文翻译软件(如微信的语音转文字),就使用到了这个算法。
 


单层RNN

早上好天气,适合(去打球\\睡懒觉)。

输入到 RNN 中,会被切分成依次排成的序列:

  • [ 早 , 上 , 好 , 天 , 气 , 适 , 合 , ⋅ ⋅ ⋅ ] [早,上,好,天,气,适,合,···] []

  • [ x 1 , x 2 , ⋅ ⋅ ⋅ , x t ] [x_{1},x_{2},···,x_{t}] [x1x2,xt]

P.S. 如果有做分词的,那 x 1 x_{1} x1 对应的不是一个字,而是一个词。

  • 输出: [ 去 , 打 , 球 ] [去,打,球] []


上图中, h t h_{t} ht 组成的一条竖线,称为一个 “时间步”。

  • h t h_{t} ht:第 t 层元素的激活值(a)
  • x t x_{t} xt:第 t 个元素
  • W h x W_{hx} Whx:x 作为输入来计算 h 时的参数
  • W h h W_{hh} Whh:上一步 h 作为输入来计算 h 时的参数
  • W h y W_{hy} Why:上一步 h 作为输入来计算 y 时的参数

  • h 0 h_{0} h0:一般初始化为零向量,是人为添加的
  • h 1 = f ( W h x x 1 + W h h h 0 + b ) h_{1}=f(W_{hx}x_{1}+W_{hh}h_{0}+b) h1=f(Whxx1+Whhh0+b)
  • h 2 = f ( W h x x 2 + W h h h 1 + b ) h_{2}=f(W_{hx}x_{2}+W_{hh}h_{1}+b) h2=f(Whxx2+Whhh1+b)
  • ···
  • h t = f ( W h x x t + W h h h t − 1 + b ) h_{t}=f(W_{hx}x_{t}+W_{hh}h_{t-1}+b) ht=f(Whxxt+Whhht1+b)
  • y t = W h y h t + b y y_{t}=W_{hy}h_{t}+b_{y} yt=Whyht+by

第 1 次处理过程输入是 h 0 、 x 1 h_{0}、x_{1} h0x1,得到激活值 h 1 h_{1} h1

第 2 次处理过程输入是 h 1 、 x 2 h_{1}、x_{2} h1x2,得到激活值 h 2 h_{2} h2

也就是说,网络再对第 2 个字( x 2 x_{2} x2)预测的时候,会参考第 1 个字( x 1 x_{1} x1)的信息。

这样一次处理过程,也叫一个时间步,每次输入不同,但后一个时间步的输入是前一个时间步的输出。
 


双向RNN

如果遇到,下文反过来推理上文的场景就需要双向 RNN,例如:

  • 早上难得好天气,适合(去打球/睡懒觉),可别叫醒我。

综合上下文,既然有 “别叫醒我” 跟在后面,显然 “睡懒觉” 的可能性大幅提高。

在这一类需要结合上下文,在正序、倒序两个方向上做推理的场景中,可以通过双向 RNN 结构,加入逆向推理机制。

  • h i h_{i} hi:表示正向
  • h i ′ h'_{i} hi:表示反向

同正方向序列上的权值参数一样,逆序列也有权参 W h x ′ 、 W h h ′ 、 W h y ′ W'_{hx}、W'_{hh}、W'_{hy} WhxWhhWhy,相应的参数量和隐藏节点个数扩展到单向模型的两倍。

俩者的区别只在于,计算激活值的方向不同, h i h_{i} hi 是从 1 1 1 t t t h i ′ h'_{i} hi 是从 t t t i i i