视频:https://www.bilibili.com/video/BV1ZX4y1F7K3?p=2&vd_source=a65ee2ded9f480f3a3c3f55e6fd7e912
书:https://zh.d2l.ai/chapter_recurrent-neural-networks/language-models-and-dataset.html#id4
8.3. 语言模型和数据集
拉普拉斯平滑(Laplace smoothing)
问题:在统计词频的时候可能会出现,词对n(deep,learning)在样本中频数为0从而导致0概率
解决办法:加上一个较小的常数
对于本章例子,可以使用
齐普夫定律(Zipf’s law)
即第i个最常用单词的频率ni为:
其中α是刻画分布的指数,c是常数。 这告诉我们想要通过计数统计和平滑来建模单词是不可行的, 因为这样建模的结果会大大高估尾部单词的频率,也就是所谓的不常用单词。
齐普夫定律支配着单词的分布,这个分布不仅适用于一元语法,还适用于其他n元语法。
低频词过滤
绝大部分词元组出现的次数很小,对于n_gram的数量随n进行指数级别的增加,但是删除低频词后,数目却几乎和unigram相近,因此删除低频词使得n_gram计算成为可能
困惑度(perplexity)
按照分类问题来看,一般采用交叉熵:
为了将优化的好处放大,采用困惑度,进行指数放大:
梯度剪裁
·迭代中计算这T个时间步上的梯度,在反向传播过程中产生长度为O(T)的矩阵乘法链,导致数值不稳定
9.1. 门控循环单元(GRU)
问题1:GRU网络中,R_t和Z_t的网络结构一样,为什么就可以自动把R_t选成Reset gate,Z_t选成Update gate?
因为模型对参数的学习不同,即使是一样的网络结构,学出来的东西并不一样
GRU的作用理解
门控循环神经网络可以更好地捕获时间步距离很长的序列上的依赖关系。
重置门有助于捕获序列中的短期依赖关系。
更新门有助于捕获序列中的长期依赖关系。
重置门打开时,门控循环单元包含基本循环神经网络;更新门打开时,门控循环单元可以跳过子序列。
9.2. 长短期记忆网络(LSTM)
区分LSTM和GRU的区别:
GRU:
LSTM:
门单元更新:
候选记忆单元更新:
C将始终保持在[-1,1]内
隐藏状态更新:
为什么要对Ct也加一个tanh?因为Ct得可能值是在[-2,2],所以多做一步映射
LSTM于GRU相比,用了三个门:输入们,遗忘门,输出门;而GRU则只用到了隐藏门和更新门。
二者目的相同,捕捉较长的时间序列得依赖关系。
LSTM中的C的值并没有范围约束,而H则是在[-1,1]之内的矩阵
LSTM
遗忘门:将值超0方向减小
输入门:决定是否忽略的输入数据
输出门:决定是否使用隐藏状态
一般来说,lstm和gru的表现和性能相差不大
9.4. 双向循环神经网络
在双向循环神经网络中,每个时间步的隐状态由当前时间步的前后数据同时决定。
双向循环神经网络与概率图模型中的“前向-后向”算法具有相似性。
双向循环神经网络主要用于序列编码和给定双向上下文的观测估计。
由于梯度链更长,因此双向循环神经网络的训练代价非常高。
不适合推理预测未来,适合做“填空”:翻译,文本分类等任务
9.7. 序列到序列学习(seq2seq)
对embeding的理解:https://zhuanlan.zhihu.com/p/164502624
Embedding 是一个将离散变量转为连续向量表示的一个方式
狭义的理解:
one-hot编码讲一句话,如”我爱学习“转换成一个4*vocab_size大小的二维矩阵,这样做的好处是:将矩阵稀疏化,计算速度大大提高;带来的缺点则是,占用空间较大
使用embeding层可以:
降低维度,将较大的词向量组成的句子,维度降低
对低维的数据进行升维时,可能把一些其他特征给放大了,或者把笼统的特征给分开了。