DLNg序列模型第一周
1.为何选择序列模型?
给出上面一些序列数据的例子,真的很神奇,语音识别、音乐生成、情感分类、DNS序列分析、机器翻译、视频活动检测、命名实体识别。
2.数字符号
对于输入序列x,进行人名识别,输出中进行标识。其中T_x(i)表示第i个序列的长度,此处的例子=9.
如何表示单词,首先是有一个词典,假设为10000长度,那么每一个出现在字典中的单词都可以被表示为10000维的one-hot向量。
//但是这也太高维了,肯定有改进办法的。
3.RNN
为什么标准的神经网络不可以?
1.对于序列来说,不同的序列长度不同,那么输入输出在不同的例子中由不同的长度
2.他们在文本中不同位置的特征并不相同。
在RNN中,如yhat3是由前两个决定,而与后面的单词没有关系,这就对于下面的例子,不能判断teddy是否是人名,需要知道后面的内容,这就出现了双向RNN。
RNN的前向传播,a<0>被初始化为0向量,依次进行前向传播。下面是进行化简的形式。系数函数经常使用tanh/relu,激活(输出)函数使用sigmoid。
下面是化简形式的表示:
4.前向传播和反向传播
RNN中,输入x进行计算前向传播,得到结果后进行反向传播。反向传播是从每个计算结果yhat<i>开始。
首先使用原始序列中的x<1>和a<0>计算出时间激活项a<1>,然后用x<2>和a<1>计算a<2>等,一直计算到a<Tx>。Tx为序列长度。
其中绿色是计算需要的参数。
为进行反向传播,定义了损失函数,类似逻辑回归,;
例如在人名识别中,y<t>是人名,那么值=1,得到的yhat<t>则是P(人名)概率值,对序列中所有单词求损失和就得到了真正的损失函数。
损失就是把每个单独时间步的损失都加起来。
5.不同类型的RNN
T_x与T_y的长度可能不同,在命名实体识别中,输入输出序列是等长的,但是在第一页PPT中提到的序列数据中,比如音乐生成,输入可能是空集;在电影评价时,输入可能是评价,输出是数字;在机器翻译时,输入是法文,输出是英文等例子。
多对多tx=ty举例,每个xi对应输出一个yi;在情感分类中,是多对一,输入是电影评价,输出y等;
一对多,音乐生成,其中每部输出的y都作为下一个时间的输入;
多对多,机器翻译中,有两个部分,一个是编码部分,另一个是解码部分。
上面是一个总结,共有6种类型的RNN。
6.语言模型和序列生成
在语音识别中,给出两个很相似的句子,能够计算出对应的概率,即共同出现的概率,从而判断出正确的结果。
对于给的例句,首先在时间0,x1是设置为0的向量,用softmat层来计算出第一个单词的概率,得到yhat1,比如第一个单词是a的P,是average的P,等等..,那么可能就有10000个结果,依照你的语料库,接下来依旧使用激活项a1,输入是y1=cats,输出的y^2,是在第一个词是cats的情况下,下一个是字典中所有其他词的结果。
为了训练这个网络,提出了损失函数,其中i是指在一句话中每个word的预测结果,对t求和是对所有句子的损失求和。
7.对新序列采样
从一个训练好的RNN中采样一个序列。
在采样中,得到的yhat1,是所有可能的输出,比如对a、cat、EOS等,得到的是一个向量,然后使用np.random.choice进行采样,这样就能对第一个单词进行采样了,然后进入下一个时间步,并且将上一步得到的yhat1作为输入,将会预测yhat2是什么。直到最后一个时间步,
对于可能会出现unk单词,可以规定如果出现那么再重新选择,
基于字母的字典,那么此时字典中会有26个字母、空格键、标点、数字。
例如在句子:cats average。。中y1就是c,a是y2。
对于基于字符的,对硬件要求更高。
8.RNN梯度消失
在很深的NN中,在反向传播时可能对前面的参数影响很小,梯度影响不了,也就是导数太小了;
在RNN中,同样有这样的问题,例如yhat3是受之前的附近输入的影响,那么对于最终的反向传播对前面参数的影响也较小。
梯度爆炸比较容易发现,参数会变成NaN等非常大的值,可以通过梯度削减,设置一个阈值。
9.GRU单元
如图是一个RNN的单元,首先是一个tanh函数,之后预测是通过softmax函数。tanh输出结果是a<t>。softmax输出结果是yhat<t>。
这里是门循环单元,能使网络记忆更远距离的信息。
如例句中,was是通过记忆主语cat来的,通过门,能够将信息保持一致。
通过增加记忆单元c<t>,由前一单元的记忆单元值和当前输入,通过sigmoid函数得到,因为sigmoid的属性在0-1之间。
这是门控循环单元的表示方法。//最后一个式子的加号应该是乘号吧。
10.LSTM
可以通过图来帮助理解公式。从下图中可以看出,c<0>可以一直传递到c<3>,是记忆时间很长的。