学习序列模型rnn实现从X到Y的映射。
最简单的NN模型,将九个输入变量输出9个0或1的结果。
但是这样不好,因为输入输出长度不一定相同。
单纯的神经网络并不能分享从不同位置学到的特征。如识别不同位置的人名。
RNN
读到第二个单词时候不是只通过当前的词x<2>就预测出y<2> 的,
也会输入一些来自时间步(time-step)1的信息。时间步1的**值就会传递到时间步2。
one-hot向量~如上
输入下一个单词x<3>,rnn试图预测y<3>。
rnn传递一个**值到下一个时间步用于计算。
初始化a<0>有很多方法。如赋值为0。
(一些文章中这样表示循环神经网络但是没有上面展开的图清晰)
每一步使用相同的参数w_ax,
**值,也就是水平参数,是由参数w_aa决定的,
每一个time-step使用相同的w_aa。
每一个输出由w_ya决定。
rnn的缺点是只用到了当前预测节点之前的输入的信息。位于其之后的输入信息都没有被利用。
某一时刻的预测没有使用序列后部分的信息。可以使用双向循环神经网络(BRNNs)解决这个问题。
整洁版rnn:
首先输入零向量a0。为了计算a1,使用**函数g
rnn使用的**函数经常是tanh,reLU也会用但前者更常用。
使用何种**函数取决与问题种类。
二分类:sigmoid
k类别分类:softmax
命名体识别(输出是0或1):sigmoid
计算a<1>、y<1>标准式
通用计算公式:
简化符号:
把waa,wax合并成一个矩阵。
如waa是100x100,wax是100x10000
所以wa是100x10100的矩阵。
a<t-1>与x<t>竖着摞起来。
总体:
正确。
重写输出y<t>的表达式:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:循环神经网络模型RNN - Python技术站