NLP-RNN

    RNN(循环神经网络)相较于传统神经网络考虑了输入数据的时序性,训练当前时间步时会受到前面时间步信息的影响。

    例如我们要提取出句子中的人名。我们首先要对每个单词进行编码,一般使用one-hot编码。这样一个单词就可以表示为一个01向量。我们可以这样设计神经网络结构:

    问题可以转化为多个二分类问题,即单词是否是名字。损失函数可以使用交叉熵表示,整个序列的损失函数可以用所有时间步的损失值的和表示。输出层激活函数可以使用sigmoid,隐藏层激活函数通常使用tanh。可以看到我们在计算当前的a时将上一个时间步的a也作为输入进行计算。

    对于这两个句子:

    He said,"Teddy Roosevelt was a great President."

    He said,"Teddy bears are on sale!"

    可以看到我们在判断Teddy是否是人名的时候不能只考虑前面单词的影响,还要考虑后面单词的影响。我们可以将网络结构设计为双向的循环网络。同时考虑前面部分的影响和后面部分的影响。

前向传播:

a^{<t>}=g(w_{aa}a^{<t-1>}+w_{ax}x^{<t>}+b_{a})

\hat{y}^{<t>}=g(w_{ya}a^{<t>}+b_{y})

为了简化计算,我们可以写成这种形式:

a^{<t>}=g(w_{a}[a^{<t-1>},x^{<t>}]+b_{a})

w_{a}=\begin{bmatrix} w_{aa} & w_{ax} \end{bmatrix}

[a^{<t-1>},x^{<t>}]=\begin{bmatrix} a^{<t-1>}\\ x^{<t>} \end{bmatrix}

\hat{y}^{<t>}=g(w_{y}a^{<t>}+b_{y})

梯度消失

    然而一个句子中后面的词不一定只依赖相邻的词汇,可能会依赖句子前面部分的词汇。由于RNN通常使用tanh激活函数,这就导致RNN会像DNN那样出现梯度消失的问题。

梯度爆炸

    通常在训练RNN的时候会面临梯度爆炸的问题。

BRNN(双向循环神经网络)

    BRNN就是同时训练两个方向的RNN,更新两套参数,预测结果时同时考虑两个激活值。

 同时BRNN还可以加入GRU或者LSTM。

Deep RNN

    可以增加隐含层的层数,即时间步间传递信息的单元,一般不会超过3层,因为这样会带来巨大的计算量。还可以增加输出层的层数,即互相不连接的单元,更通用,可以增加更多的层数,这样带来的计算量相对较少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值