目的:捕捉序列中的长距离依赖关系
A. 文本分类的RNN:
过**函数f得到h
最后一个时刻的h,编码了整个输入序列,在最后一个时刻的h上加输出层,过softmax,得到各个类别的概率;
B.
BPTT(Back Propagation Through Time)
梯度爆炸:使用梯度裁剪来缓解,当梯度的L2-Norm大于某个给定值时,对梯度进行等比收缩;(Tensorflow里的tf.clip_by_norm)
梯度消失:传统前馈网络,通过ReLU,Resnet等解决;RNN使用LSTM和GRU等gate解决;
C.
f如果使用ReLU做**函数,则会在**区域(即x>0的区域)造成多个W连乘,最终结果很可能趋于0或者无穷,即引发数值问题;同理,反向传播时,梯度也成了多个W连乘,导致梯度消失或梯度爆炸;
只有当W在单位矩阵附近时,以上问题才解决;所以有一种思路是初始化W为单位矩阵附近;
CNN和RNN用ReLU做**函数,因为他们的权重矩阵W是不同的,因此可以相互抵消;
D. LSTM (注意c是记忆,h是输出的隐状态(短记忆!))
长期记忆:遗忘门的值接近1,输入门的值接近0
短期记忆:遗忘门的值接近0,输入门的值接近1
E.
3种gate使用sigmoid函数,值域0~1, 符合门控的物理意义(0是关门,1是开门);(Attention中的门控用的也是sigmoid)
生成候选记忆使用tanh函数,值域-1~1,符合特征分布以0为中心的常识;
F.
机器翻译:解码器,输入的第1个词是<EOS>,解码输出遇到<EOS>则终止;
BeamSearch: 每一步保留N个最优解;(N一般取8~12);
常用技术:多层RNN、dropout、残差网络、顶层输出加CRF、attention
G.
RNN,包括LSTM等,包括双向RNN, 都有当前时刻的h重点编码了和他最近的几个时刻的倾向(离当前时刻远的那些时刻们,往往被当前时刻所淡化),所以要用attention,所以要用Transformer那种无视顺序的;
attention把解码器上一时刻隐层输出,和编码器所有时刻隐层输出,依次点乘过softmax得权重,编码器所有时刻隐层输出的加权和,当做解码器当前时刻的重要输入(还有上一时刻隐层输出,上一时刻输出层结果的embedding)
attention一定程度上解决了编码长序列的问题;
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ML读书笔记(循环神经网络) - Python技术站