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^{
大白话:1. 整个过程就是先用上一层的得到的激活值和当前层的输入分别乘参数后相加,得到当前层的激活值a,最后用a乘参数得到当前层的输入y; 2. 参数共享:Waa在第一层计算了之后,后面的每个时间步是共享的,即公用一个参数矩阵。
合并计算a是的两个参数矩阵:Waa和Wax,即可得到:
a < t > = g t ( W a [ a < t − 1 > , x < t > ] + b a ) a^{
即就是:
[ a < t − 1 > , x < t > ] = [ W a a W a x ] [ a < t − 1 > x < t > ] [a^{
采样我的理解就是取值,如语言模型,在第一层,输入a0和x0之后,通过计算预测下一个词是词库里的每个次的概率,该过程就是采样。
图虽然简单,但是意思都到了。流程就是:通过参数和a与x进行运算后,一方面可以得到a,另一方面可以使用softmax激活函数得到预测值y
公式:
a t = g ( W a [ a < t − 1 > , x < t > ] + b a ) a^t=g(W_a[a^{
先公式后说明:
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^{
说明:
在GRU中需要说明的是c是记忆细胞,就是记前面发生过的东西。该值就是原来RNN里边的a。
很明显,核心就是上一层的a的值和当前层的输入分别和参数矩阵运算得到当前层的输出,只是换不同的激活函数得到不同含义的值。比如:
g就是将c(RNN中的a)和输入x分别和参数矩阵运算后,使用sigmoid函数得到更新门。
公式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^{
得到c的值(图中紫色的黑团表示这个公式的计算),如果使用softmax等激活函数,还可得到预测值y.
前提:在GRU中,a是等于c的,而LSTM对此进行了改进。如下:
a < t > = g o × t a n h c < t > a^{
其中g_o是输出们的值,后面有公式。因此,图中的流程是:
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^{
完结,撒花。整个RNN以及两个变体GRU和LSTM的基本公式和单元图就这些,认真看,还是能看懂的,都是基本的公式,慢慢理解。