The error surface is rough. The error surface is either very flat or very steep.
如图5.30 所示,RNN 的误差外貌是总损失的变革是非常陡峭的或坎坷的。误差外貌有一些地方非常平坦,一些地方非常陡峭。纵轴是总损失,x 和y 轴代表是两个参数。这样会造成什么样的问题呢?假设我们从橙色的点当做初始点,用梯度下降开始调整参数,更新参数,可能会跳过一个悬崖,这时间损失会突然爆长,损失会非常上下剧烈的震荡(学习率来不及调整,直接跨过了悬崖)。有时间我们可能会遇到更惨的状态,就是以恰好我们一脚踩到这个悬崖上,会发生这样的事情,由于在悬崖上的梯度很大,之前的梯度会很小,所以措手不及,由于之前梯度很小,所以可能把学习率调的比较大。很大的梯度乘上很大的学习率结果参数就更新许多,整个参数就飞出去了。裁剪(clipping)可以解决该问题,当梯度大于某一个阈值的时间,不要让它高出那个阈值,当梯度大于15 时,让梯度等于15 竣事。由于梯度不会太大,所以我们要做裁剪的时间,就算是踩着这个悬崖上,也不飞出来,会飞到一个比较近的地方,这样还可以继承做RNN 的训练。
序列到序列的技能也被用到句法分析(syntacticparsing)。句法分析,让呆板看一个句子,得到句子结构树。如图5.42 所示,只要把树状图描述成一个序列,好比:“John has a dog.”,序列到序列学习直接学习一个序列到序列模子,其输出直接就是句法分析树,这个是可以训练的起来的。LSTM的输出的序列也是符合文法结构,左、右括号都有。
要将一个文档表示成一个向量,如图5.43所示,每每会用词袋(Bag-of-Words,BoW)的方法,用这个方法的时间,每每会忽略掉单词次序信息。举例来说,有一个单词序列是“white blood cells destroying an infection”,别的一个单词序列是:“an infection destroying white blood cells”,这两句话的意思完全是相反的。但是我们用词袋的方法来描述的话,他们的词袋完全是一样的。它们里面有完全一摸一样的六个单词,由于单词的次序是不一样的,所以他们的意思一个变成正面的,一个变成负面的,他们的意思是很不一样的。
可以用序列到序列自编码器这种做法来考虑单词序列次序的环境下,把一个文档变成一个向量。