0 序言
RNN是一类用于处理序列数据的神经网络。时间序列数据是指在不听时间点上手机到的数据,这类数据反映了某一事物、现象等随时间的变化。序列数据有一个特点:后面的数据跟前面的数据有关系。
一、模型基本结构
其中:
1)Xt代表序列t时刻训练样本的输入;
2) ht代表序列t时刻模型的隐藏状态;
3) ot代表序列t时刻模型的输出;
4) Lt代表序列t时刻模型的损失函数,模型整体的损失函数是所有Lt相加所得;
5)yt代表序列t时刻模型的真实输出;
6)U,W,V是模型的参数,它在整个RNN网络中是共享的,也正是因为它们共享,这体现了RNN模型的“循环反馈”思想。
二、前向传播
三、反向更新算法(back propagation through time)
四、**函数
RNN中的**函数一般有sigmoid、tanh、Relu函数
五、梯度消失问题
我们可以从中观察到,sigmoid 函数的导数范围是(0, 0.25], tanh 函数的导数范围是 (0, 1] ,他们的导数最大都不大于 1。因此在上面求梯度的乘积中,随着时间序列的不断深入,小数的累乘就会导致梯度越来越小直到接近于 0,这就会引起梯度消失现象。梯度消失就意味着那一层的参数再也不更新了,则模型的训练毫无意义。Relu 函数一定程度上可以解决梯度消失的问题,但是容易引起梯度爆炸的问题。此外 tanh 函数的收敛速度要快于 sigmoid 函数,而且梯度消失的速度要慢于 sigmoid 函数。
利用BPTT算法训练网络时容易出现梯度消失的问题,当序列很长的时候问题尤其严重,因此上面的RNN模型一般不能直接应用。而较为广泛使用的是RNN的一个特例LSTM。
Q:当句子的长度不一致的时候,如何确定T?T是固定大小的吗?
1)[batch_size, time_step, embedding]是RNN输入的维度信息
2)RNN的神经元个数和序列长度没有关系,RNN中的神经元对应embedding的大小,即输入层神经元(LSTM/RNN unit中神经元数)的个数等于词向量的size,跟sequence(序列)无关
3)RNN模型是对第一个同一个模型反复的训练for in sequence,整个RNN模型结构跟序列长度没有任何关系,序列长度处理就像一个for循环,是凌驾于RNN模型结构之外的。
对于不同长度的句子,embeding padding every sentence to fixed length,例如
sentence1: 1 34 21 98 10 23 9 23 0 0 0 0 0
sentence2: 17 12 21 12 8 10 13 79 31 44 9 23 0
step5, mapping token to an embeddings:[M,N]
每一列代表一个词向量,M代表输入维度,N代表sequence长度(time_step)
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:RNN循环神经网络模型1-基本结构 - Python技术站