循环神经网络(RNN)及其变体GRU和LSTM的基础知识详解(公式)

RNN计算公式

RNN结构图结构

循环神经网络(RNN)及其变体GRU和LSTM的基础知识详解(公式)_第1张图片

图中变量名介绍

  • a:上一个时间步的激活值(activate value)
  • x :第x个输入(一句话中第x个字)
  • y:第y个输出(预测值)
  • Waa:与激活值进行计算的参数。其中第一个a是指当前参数是计算a(激活值)的,第二个a是指当前参数与激活值进行乘运算
  • Wax:与输入进行计算的参数。其中第一个a是指当前参数是计算a(激活值)的,第二个x是指与输入值x进行运算
  • Wya:与激活值运算的参数,得到的记过为y。其中第一个y是指当前参数是计算输入值y的,第二个a是指与激活值a进行运算

公式

step1:

a < 0 > = 0 ⃗ a^{<0>}=\vec{0} a<0>=0
step2:
a < 1 > = g 1 ( W a a a < 0 > + W a x x < 1 > + b a ) y < 1 > = g 2 ( W y a a < 1 > + b y ) a^{<1>}=g_1(W_{aa}a^{<0>}+W_{ax}x^{<1>}+b_a)\\ y^{<1>}=g_2(W_{ya}a^{<1>}+b_y) a<1>=g1(Waaa<0>+Waxx<1>+ba)y<1>=g2(Wyaa<1>+by)

step t:
a < t > = g t ( W a a a < t − 1 > + W a x x < t > + b a ) y < t > = g t ( W y a a < t > + b y ) a^{}=g_t(W_{aa}a^{}+W_{ax}x^{}+b_a)\\ y^{}=g_t(W_{ya}a^{}+b_y) a<t>=gt(Waaa<t1>+Waxx<t>+ba)y<t>=gt(Wyaa<t>+by)
大白话:1. 整个过程就是先用上一层的得到的激活值和当前层的输入分别乘参数后相加,得到当前层的激活值a,最后用a乘参数得到当前层的输入y; 2. 参数共享:Waa在第一层计算了之后,后面的每个时间步是共享的,即公用一个参数矩阵。

优化

合并计算a是的两个参数矩阵:Waa和Wax,即可得到:
a < t > = g t ( W a [ a < t − 1 > , x < t > ] + b a ) a^{}=g_t(W_{a}[a^{}, x^{}]+b_a)\\ a<t>=gt(Wa[a<t1>,x<t>]+ba)
即就是:
[ a < t − 1 > , x < t > ] = [ W a a W a x ] [ a < t − 1 > x < t > ] [a^{}, x^{}] = \left[ \begin{matrix} W_{aa} &W_{ax}\end{matrix} \right]\left[ \begin{matrix} a^{} \\x^{}\end{matrix} \right] [a<t1>,x<t>]=[WaaWax][a<t1>x<t>]

额外的知识点:采样

采样我的理解就是取值,如语言模型,在第一层,输入a0和x0之后,通过计算预测下一个词是词库里的每个次的概率,该过程就是采样。

GRU

回顾RNN

rnn的算法结构图:
循环神经网络(RNN)及其变体GRU和LSTM的基础知识详解(公式)_第2张图片

图虽然简单,但是意思都到了。流程就是:通过参数和a与x进行运算后,一方面可以得到a,另一方面可以使用softmax激活函数得到预测值y

公式:
a t = g ( W a [ a < t − 1 > , x < t > ] + b a ) a^t=g(W_a[a^{}, x^{}]+b_a) at=g(Wa[a<t1>,x<t>]+ba)

简化GRU

循环神经网络(RNN)及其变体GRU和LSTM的基础知识详解(公式)_第3张图片

先公式后说明:
c < t > = a < t > c c < t > = t a n h ( W c [ c < t − 1 > , x < t > ] + b c ) g < t > = σ ( W u [ c < t − 1 > , x < t > ] + b u ) c < t > = g < t > × c c < t > + ( 1 − g < t > ) × c < t − 1 > c^{}=a^{}\\ c_c^{}=tanh(W_c[c^{}, x^{}]+b_c)\\ g^{}=\sigma(W_u[c^{}, x^{}]+b_u)\\ c^{}=g^{} \times c_c^{}+(1-g^{}) \times c^{} c<t>=a<t>cc<t>=tanh(Wc[c<t1>,x<t>]+bc)g<t>=σ(Wu[c<t1>,x<t>]+bu)c<t>=g<t>×cc<t>+(1g<t>)×c<t1>
说明:

  1. 在GRU中需要说明的是c是记忆细胞,就是记前面发生过的东西。该值就是原来RNN里边的a

  2. 很明显,核心就是上一层的a的值和当前层的输入分别和参数矩阵运算得到当前层的输出,只是换不同的激活函数得到不同含义的值。比如:

    g就是将c(RNN中的a)和输入x分别和参数矩阵运算后,使用sigmoid函数得到更新门。

  3. 公式1:c是记忆细胞,与RNN中的a相同。

    公式2:cc是候选记忆细胞,即新的需要记忆的值。

    公式3:g是更新门,用来计算是否需要更新记忆细胞c的,值域在0-1之间,如果靠近0则不更新,否则更新(在公式4中可以看出)

    公式4:c的更新算法:如果g靠近1,则加号后面为0,只执行前面的,即更新c的值。其过程是:将cc的值赋给c;如果g靠近0,否则不变,继续使用c。

在图中,流程是:

step1: 使用c(即RNN中的a)和x分别与对应的参数矩阵运算:将得到的结果使用sigmoid函数得到更新门的值,使用tanh得到候选记忆细胞的值。

step2: 使用公式:
c < t > = g < t > × c c < t > + ( 1 − g < t > ) × c < t − 1 > c^{}=g^{} \times c_c^{}+(1-g^{}) \times c^{} c<t>=g<t>×cc<t>+(1g<t>)×c<t1>
得到c的值(图中紫色的黑团表示这个公式的计算),如果使用softmax等激活函数,还可得到预测值y.

LSTM 单元

图结构

循环神经网络(RNN)及其变体GRU和LSTM的基础知识详解(公式)_第4张图片
前提:在GRU中,a是等于c的,而LSTM对此进行了改进。如下:
a < t > = g o × t a n h c < t > a^{}=g_o \times tanh c^{} a<t>=go×tanhc<t>
其中g_o是输出们的值,后面有公式。因此,图中的流程是:

  • step1: 将t-1时间步的a的值和参数矩阵运算,t时间步的输入与参数矩阵进行运算,这两个结果的和在使用四个激活函数可以得到四个值:遗忘门、更新门、记忆细胞的候选值、输出门。
  • step2: 计算当前层的记忆细胞的值(是否更新记忆的内容)。其过程是:用旧的(t-1)时间步的记忆细胞的值乘以遗忘门的值,用新得到的(记忆细胞的候选值)乘以更新门的值,再将两者相加即可得到新的记忆细胞的值(和GRU类似:用要继续用上一时间步的c,要么用新得到的候选值)。可以理解为:
    1. 如果遗忘门g_f是1,则更新门g_u为0,则沿用上一时间步所记忆的内容;
    2. 如果遗忘门g_f是0,则更新门g_u为1,则赋予新的候选值所记忆的内容;

c c < t > = t a n h ( W c [ a t − 1 , x < t > ] + b c ) g u = σ ( W u [ a < t − 1 > , x < t > ] + b u ) g f = σ ( W f [ a < t − 1 > , x < t > ] + b f ) g o = σ ( W o [ a < t − 1 > , x < t > ] + b o ) c < t > = g u × c c < t > + g f × c t − 1 c^{}_c=tanh(W_c[a^{t-1}, x^{}]+b_c)\\ g_u=\sigma(W_u[a^{}, x^{}]+b_u)\\ g_f=\sigma(W_f[a^{}, x^{}]+b_f)\\ g_o=\sigma(W_o[a^{}, x^{}]+b_o)\\ c^{}=g_u\times c_c^{}+g_f \times c^{t-1}\\ cc<t>=tanh(Wc[at1,x<t>]+bc)gu=σ(Wu[a<t1>,x<t>]+bu)gf=σ(Wf[a<t1>,x<t>]+bf)go=σ(Wo[a<t1>,x<t>]+bo)c<t>=gu×cc<t>+gf×ct1

  • step3: 使用c_t的值输入tanh激活函数后乘以输出们的值,得到当前层的a的值。对a再进行softmax激活函数即可得到预测值y.

完结,撒花。整个RNN以及两个变体GRU和LSTM的基本公式和单元图就这些,认真看,还是能看懂的,都是基本的公式,慢慢理解。

你可能感兴趣的:(神经网络,Python,人工智能,rnn,深度学习,机器学习)