RNN————循环神经网络(Recurrent Neural Network)
目录
在零时刻通常使用零向量来初始化\(a^{<0>}\)
Teddy Roosevelt was a great President.
Teddy bears are on sale!
如果只给定前三个单词,是不可能确切地知道Teddy是否是人名的一部分,所以在某一时刻的预测需要该时刻之后的输入信息,因此需要双向循环神经网络
。
RNN的计算:
\[激活项:a^{<t>}=g_1(W_{aa}a^{<t-1>}+W_{ax}x^{<t>}+b_a)\\
\hat{y}^{<t>}=g_2(W_{ya}a^{<t>}+b_y)
\]
RNN前向传播示意图:
损失函数:
计算每个时间步的损失函数,再将所有的损失函数都加起来
RNN 反向传播示意图:
RNN的不同结构:
多对一:情感分类(对一句话进行1~5的类别分类)
一对多:音乐生成
多对多:
输入与输出长度相等:上面的例子
输入与输出的长度不等:机器翻译(英语与法语一句话的长度不同,但是表达的意思是一样的)
使用RNN生成语言模型
例子:Cats average 15 hours of sleep a day.
1.首先在句子的结尾加上\(<EOS>\)标志表示句子的结尾。
2.其次将句子中的单词使用one—hot向量
进行表示,并与自己的语料数据库进行比对,如果句子中存在单词是语料库中没有的,那么将这个词使用UNK
进行替换。
3.开始建立RNN模型。
开始的第一个输入\(x^{<1>}\)为零向量,而按照之前介绍的普通的初始化方法,\(a^{<0>}\)也为一个零向量,于是\(a^{<1>}\)要做的就是它会通过 softmax 进行一些预测来 计算出第一个词可能会是什么
,其结果就是\(\widehat{y}^{<1>}\),这一步其实就是通过一个 softmax 层来预测字典中的任意单词会是第一个词的概率,比如说第一个词是