54 循环神经网络 RNN【动手学深度学习v2】
深度学习学习笔记
学习视频:https://www.bilibili.com/video/BV1D64y1z7CA/?spm_id_from=333.880.my_history.page.click&vd_source=75dce036dc8244310435eaf03de4e330
对序列化数据集的训练网络,通常称为RNN。
潜变量自回归模型
xt与xt-1和ht相关
循环神经网络
有一个隐变量ht,根据ht输出ot,ht用的是xt-1的东西。
输入“你”给到隐变量预测出下一个“好”字,输入“好”给到隐变量预测出“,”…
ht数据来自于xt-1,xt用来更新ht使他到下一个单元。与多层感知机不同就是有个时间轴。φ() 就是一个激活函数,Whh存的是时序信息。
困惑度
衡量模型的好坏。语言模型实际上看做为一个分类模型,输出是判断下一个词,用m个类别的分类问题,可以用交叉熵,做n次预测也就是n次分类得到n次的平均来衡量模型的好坏。
困惑度是此基础上做了一个指数来衡量,π就数值变大了;直观上更好理解。
梯度裁剪
迭代时要做T个时间步上的梯度,反向传播时会做O(T)次的矩阵乘法,会导致数值不稳定(梯度爆炸),于是使用梯度裁剪能够有效预防梯度爆炸,假设梯度 g(所有层的梯度放在一起),len(g) g的长度超过了θ,就将g长度降回θ,否则不变乘以1。避免g太大,有效避免梯度爆炸。
总结
循环神经网络的输出取决于当下的输出和前一个时间的隐变量,隐变量是用来存历史信息(Whh存过去的历史信息和下一个历史信息的联系),RNN是一个隐变量模型,告诉你一个隐变量,然后怎样去更新。
使用困惑度来衡量语言模型的好坏,每次预测有多少个候选词,平均候选词的个数。
RNN一般要用到梯度剪裁来避免梯度爆炸。
QA
- 循环神经网络和递归神经网络不是一个东西,递归神经网络可以看出树神经网络,循环神经网络是个平的网络。
- NLP现在在用transformer刷预训练模型
- 中文基于字和词都可以,英语中很多是基于字根。
- tracking 追踪视频里的目标,已经很成熟了。