(一)tensorflow入门笔记
(二)RNN,LSTM和GRU原理
(三)attention机制
(四)seq2seq实例详解
##RNN
RNN主要用来处理当样本是一定时间序列的情况,例如一段语音,一串文本等等。这类任务如果用CNN处理,很难反映出其时间上的特征
原理
Figure 1. RNN Structure
时间为t时,输入为x(t),隐藏层为h(t),输出为y(t),图中w1,w2,w3为共享的权重。
向前传播:
当前时刻隐藏层h(t)由前一时刻隐藏层h(t-1)和当前输入x(t)决定:
${z1(t) = w1 * x(t) + w2 * h(t-1) + c1}$
${h(t) = σ1(z1(t))}$
σ1为激活函数,一般为tanh(),c1为bias
当前时刻的输出y(t)由当前时刻隐藏层h(t)决定:
${z2(t) = w3 * h(t) + c2}$
${\hat{y}(t) = σ2(z2(t))}$
σ2为激活函数,一般为sigmoid(),c2为bias
**反向传播**: 我们需要用梯度下降算法来优化参数,所以先要根据链式法则计算损失函数L(t)对每个参数的导数。
从后向前,先看对w3和c2的导数:
${\frac{\partial L}{\partial w3} = \sum_{t=1}^{T} \frac{\partial L}{\partial z2} \frac{\partial z2}{\partial w3} = \sum_{t=1}^{T} (\hat{y}(t) - y(t))*h(t)^{T}}$
${\frac{\partial L}{\partial c2} = \sum_{t=1}^{T} \frac{\partial L}{\partial z2} \frac{\partial z2}{\partial c2} = \sum_{t=1}^{T} \hat{y}(t) - y(t)}$
再来看对w1,w2和c1的导数,与前一时刻的隐藏层状态有关:
\begin{align} \frac{\partial L}{\partial h(t)}&= \frac{\partial L}{\partial z2(t)} \frac{\partial z2(t)}{\partial h(t)} + \frac{\partial L}{\partial h(t+1)} \frac{\partial h(t+1)}{\partial h(t)} \\ &= V^T(\hat{y}(t) - y(t))+W^T \frac{\partial L}{\partial h(t+1)} diag(1−(h(t+1))^2) \end{align}
通过递推可以得到 ∂ L ∂ h ( t ) {\frac{\partial L}{\partial h(t)}}