简单的是语言的概率模型,根据前面的单词推断下一个单词。
p(wordi∣word1,...,wordi−1)
2-gram LM Model
两个词作为输入向量,wi∣wi−1,wi−2 pi(wi∣wi−1,wi−2)
同样会出现参数的爆炸,序列的长度决定MLP的长度。很难扩展到long-term的模型。MLP网络中参数不是共享的,但是在RNN网络中参数是共享的。
RNN
RNN时间上的局部依赖,对比CNN网络中空间的局部依赖。
p(x1,...,xT)=∏t=1Tp(xt∣x1,...xt−1)=∏t=1Tg(st−2,xt−1)
但是上面的联合概率分布的计算的复杂度是(dT).
一阶马尔可夫:T=2
-
假设1:st−2代表将前面的概率编码到隐变量中,这就是循环神经网络的局部依赖假设。
-
假设2: 参数共享
p(xt1+τ,...,xtn+τ)=P(xt1,...,xtn)时间平移的平稳性。平稳性假设是需要的,不然RNN无法建模,如果没有平稳性假设,变量的数据无法对应到网络的输入。
重要的公式:
yt=Vht这里是线性的变化,也可以在分类的时候使用softmax。
ht=fW(ht−1,xt)−>ht=tanh(Wht−1+Uxt) 这里的+ 代表concat 操作。
深度循环神经网络
yt^=softmax(Vhtl)
时间上的循环ht1=tanh(W1ht−11+U1xt)
层次之间的循环 htl=tanh(Wlht−1+Ulhtl−1)
分类问题:损失函数(cross-entroy):
L=−T1∑t=1T∑c=1Cyt,clog(yt,c^)
回归问题采用:L1, L2损失函数。
L1损失函数 L=∑i=1n(Yi−f(yi))
L2损失函数:L=∑i=1n(Yi−f(yi))2
双向循环网络(Bidirectional RNN)
Bert等大规模的循环网络仍然有采用双向循环网络。
优点
1.循环网络在时序依赖上是无界的。
2.历史的信息编码到固定的长度。
3.参数打小不随着序列的长度变化。
缺点
很难建模长时间的依赖关系。例如时间上相邻很远的输入之间的关系。