应用举例
如果有很多词汇的时候,one-encode会导致很长,可以将不常见的归类到other,也可以用n-gram进行编码
输出的是一个概率分布
相同的词得到不同的结果,需要网络具有记忆,RNN网络的设计就是使得网络具有部分的记忆能力。
存在memory中的内容会不同,输出也会不同
深层次的网络也是可以的
不同的变形
- jordan network是将输出放入memory
- elman network是将中间放入memory
- jordan network一般而言要比elman network要好
双向的RNN:考虑从前到后,从后到前。
LSTM
- 输入门中,input-gate,打开还是关闭,是自己学习得到。
- 输出门中,output-gate,外界是否可以读出来,打开的时候才能读出来,也是自己学习得到。
- 遗忘门中,forget-gate,什么时候把memory里面的值遗忘掉,也是自己学习得到的。
c’是新的memory中存的内容。
遗忘门:打开的时候是记得,关闭的时候是遗忘。
人工RNN例子
4个input产生一个output,参数量是一般的网络的4倍。
Learning target
RNN训练也是使用梯度下降算法得到,但是比较训练。
RNN的loss上下跳动非常震荡
通过clipping 控制梯度,当大于某个值的时候,都设置为该值继续训练。
RNN层数多,小量的变化会导致后续发生非常大的变化,梯度无穷大或者梯度为0.
不好训练的原因不是来自于激活函数,来自于累计。
帮助训练的技巧:
- LSTM:解决梯度消失的问题,但不能解决梯度爆炸的问题
- GRU更方便,只有两个门。
如果使用RNN比较过拟合时候,可以换成GRU试试。
其他变体:
更多应用
CTC解决叠字多问题
假设所有的都是对的,穷举,可以通过dp规划来解决
知道下一个,但是不知道什么时候停止。
要加一个符号表示停止符,到这块就断。
直接用声音信号,然后标签是其他语言,不需要先进行语言识别再进行翻译。
不用考虑P(x)
deep and structured will be the future. 另外一门课MLDS