dl-rnn

【激活函数】
1、sigmoid函数
   σ(x) = y = 1/(1 + e**(-x))
   σ'(x) = y * (1 -y)
   
2、tanh函数
   tanh(x) = y = (e**x - e**(-x))/(e**x + e**(-x))
   tanh'(x) = 1 - y**2
【RNN推导】
RNN求解过程推导与实现
https://www.cnblogs.com/YiXiaoZhou/p/6058890.html

1、前向传播
1)、隐层节点输入:u[t] = V * x[t] + U* h[t-1] + b
2)、隐层节点输出:h[t] = f(u[t])
3)、输出层输入:v[t] = W * h[t] + c
4)、输出层输出:o[t] = g(v[t])
5)、损失函数:L[t]= (∑(o[t] - y[t]**2)/2
6)、符号说明
  x[t]:序列t的输入 
    u[t]:序列t的隐藏层输入
    h[t]:序列t的隐藏层状态
    v[t]:序列t的输出层输入
    o[t]:序列t的预测输出
    b、c:隐藏层、输出层的偏执
    L[t]:序列t的损失函数
    y[t]:序列t的真实输出
    U,W,V:模型的线性关系参数
    f(x)、g(x):隐藏层、输出层的激活函数
    它在整个RNN网络中是共享的,这点和DNN很不相同。 
    也正因为共享体现了RNN的模型的"循环反馈"的思想。

2、反向传播
1)、最终损失: L= ∑L[t]
2)、v[t]、u[t]梯度
    δ[y][t] = ∂L/∂v[t] = ∂L[t]/∂o[t]) * (∂o[t]/∂v[t]) 
            = (y[t]-o[t]) * g'(v[t])
    【位置t的梯度损失由当前和t+1的梯度损失共同决定】
    δ[h][t] = ∂L/∂u[t] = {∂L[t]/∂v[t]) * (∂v[t]/∂h[t])) 
                         + ∂L[t]/∂u[t+1]) * (∂u[t+1]/∂h[t])} * (∂h[t]/∂u[t])
                       = (δ[y][t] * W' + δ[h][t+1] * U' )* f'(u[t])
3)、W、U、V、b、c梯度
    ∂L/∂W = ∑(∂L[t]/∂v[t]) * (∂c[t]/∂W) = ∑h[t]'*δ[y]
    ∂L/∂c = ∑(∂L[t]/∂v[t]) * (∂c[t]/∂c) = ∑δ[y]
    ∂L/∂U = ∑(∂L[t]/∂u[t]) * (∂u[t]/∂U) = ∑h[t-1]'*δ[h]
    ∂L/∂U = ∑(∂L[t]/∂u[t]) * (∂u[t]/∂V) = ∑x[t]'*δ[h]
    ∂L/∂b = ∑(∂L[t]/∂u[t]) * (∂u[t]/∂V) = ∑δ[h]

【LSTM推导】
[简洁版]详解 LSTM
https://www.jianshu.com/p/dcec3f07d3b5
[详细版]零基础入门深度学习(6) - 长短时记忆网络(LSTM)
https://zybuluo.com/hanbingtao/note/581764

1、前向传播
1)、决定从"细胞状态"中丢弃什么信息即"遗忘门"
   net[f] = W[f] * [h[t-1], x[t]] + b[f]
   f[t] = σ(net[f])
2)、决定放什么信息到"细胞状态"中
   net[i] = W[i] * [h[t-1], x[t]] + b[i]
   net[C'] = W[c]*[h[t-1], x[t]] + b[c]
   i[t] = σ(net[i])   
   C'[t] = tanh(net[C'])   
3)、更新"细胞状态"   
   C[t] = f[t] ⊙C'[t-1] + i[t] ⊙C'[t]
4)、基于"细胞状态"得到输出
   net[o] = W[o] * [h[t-1], x[t]] + b[o]
   o[t] = σ(net[o])
   h[t] = o[t] ⊙ tanh(C[t])  
5)、在RNN中当前状态值:S[t]= tanh(x[t] * U + W * S[t-1])
   若其中只要有一个是接近零的那么总体值就容易为0,导致梯度消失,不能解决长时依赖问题
   而LSTM更新状态值:C[t] = f[t] ⊙ C'[t-1] + i[t] ⊙ C'[t]
   是相加的形式所以不容易出现状态值逐渐接近0的情况
6)、符号说明
    加权输入:net
    遗忘门的权重矩阵:W[f]和偏置项:b[f]
    输入门的权重矩阵:W[i]和偏置项:b[i]
    计算单元状态的权重矩阵:W[c]和偏置项:b[c]
    输出门的权重矩阵:W[o]和偏置项:b[o]
    
2、反向传播
1)、加权误差项定义(参数皆来自加权项) 
     δ[f,t] = ∂L/∂net[f]
     δ[i,t] = ∂L/∂net[i]
     δ[C',t] = ∂L/∂net[C']
     δ[o,t] = ∂L/∂net[o]
2)、t-1时刻的误差项(对h即传递的求导)
    δ[t-1] = ∂L/∂h[t-1] = (∂L/∂h[t])*(∂h[t]/∂h[t-1]) = δ[t] * (∂h[t]/∂h[t-1])
           = δ[t] * {(∂h[t]/o[t])*(∂o[t]/∂h[t-1]) + (∂h[t]/∂C[t])*(∂C[t]/∂h[t-1])}
           = {δ[t] * (∂h[t]/o[t])*(∂o[t]/∂net[t])}*(∂net[t]/∂h[t-1]) 
           + {δ[t] * (∂h[t]/∂C[t])*{(∂C[t]/∂f[t])*(∂f[t]/∂net[f]}*(∂net[f]/∂h[t-1]) 
           + {δ[t] * (∂C[t]/∂i[t])*(∂i[t]/∂net[i]}*(∂net[i]/∂h[t-1])  
           + {δ[t] * (∂C[t]/∂C'[t])*(∂C'[t]/∂net[C']}*(∂net[C']/∂h[t-1])}
           = {δ[t] * tanh(C[t]) . o[t] . (1 - o[t] )} .  W[o,h]
           + {δ[t] * o[t] . (1 - C[t]**2 )  . C'[t-1] . f[t] . (1 - f[t])} . W[f,h]
           + {δ[t] * o[t] . (1 - C[t]**2 )  . C'[t] . i[t] . (1 - i[t])} . W[i,h]
           + {δ[t] * o[t] . (1 - C[t]**2 )  . i[t] . (1 - C'[t]**2)} . W[c,h] 
           =  δ[o,t] * W[o,h] + δ[f,t] * W[f,h] + δ[i,t] * W[i,h] + δ[C',t] * W[C',h]
    = >
          δ[o,t]  = {δ[t] * tanh(C[t]) . o[t] . (1 - o[t] )
          δ[f,t]  = δ[t] * o[t] . (1 - C[t]**2 )  . C'[t-1] . f[t] . (1 - f[t])
          δ[C',t]  = δ[t] * o[t] . (1 - C[t]**2 )  . C'[t] . i[t] . (1 - i[t])
          δ[i,t]  = {δ[t] * o[t] . (1 - C[t]**2 )  . i[t] . (1 - C'[t]**2)
3)、W[f,h]、W[i,h]、W[C',h]、W[o,h]梯度
    ∂L/∂W[f,h] = (∂L/∂net[f])*(net[f]/∂W[f,h]) = ∑ δ[f,t]*h'[t-1]
    ∂L/∂W[i,h] = (∂L/∂net[i])*(net[i]/∂W[i,h]) = ∑ δ[i,t]*h'[t-1]
    ∂L/∂W[C',h] = (∂L/∂net[C'])*(net[C']/∂W[C',h]) = ∑ δ[C',t]*h'[t-1]    
    ∂L/∂W[o,h] = (∂L/∂net[o])*(net[o]/∂W[o,h]) = ∑ δ[o,t]*h'[t-1]
    
4)、W[f,x]、W[i,x]、W[C',x]、W[o,x]梯度    
    ∂L/∂W[f,x] = (∂L/∂net[f])*(net[f]/∂W[f,x]) = ∑ δ[f,t]*x'[t]
    ∂L/∂W[i,x] = (∂L/∂net[i])*(net[i]/∂W[i,x]) = ∑ δ[i,t]*x'[t]
    ∂L/∂W[C',x] = (∂L/∂net[C'])*(net[C']/∂W[C',x]) = ∑ δ[C',t]*x'[t]    
    ∂L/∂W[o,x] = (∂L/∂net[o])*(net[o]/∂W[o,x]) = ∑ δ[o,t]*x'[t]
    
5)、b[f]、b[i]、b[C']、b[o]梯度    
    ∂L/∂b[f] = (∂L/∂net[f])*(net[f]/∂b[f]) = ∑ δ[f,t]
    ∂L/∂b[i] = (∂L/∂net[i])*(net[i]/∂b[i]) = ∑ δ[i,t]
    ∂L/∂b[C'] = (∂L/∂net[C'])*(net[C']/∂b[C']) = ∑ δ[C',t]
    ∂L/∂b[o] = (∂L/∂net[o])*(net[o]/∂b[o]) = ∑ δ[o,t]    

【LSTM核心理念】
https://www.jianshu.com/p/75eeaee7f67d
LSTM的关键点是细胞状态,就是穿过图中的水平线。
单元状态有点像是个传送带,贯穿整个链条,只有一些线性相互作用。
这很容易让信息以不变的方式向下流动。
LSTM有能力向单元状态中移除或添加信息,通过门结构来管理,包括"遗忘门","输出门","输入门"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值