ML读书笔记(循环神经网络)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/smartcat2010/article/details/102647104

目的:捕捉序列中的长距离依赖关系

A. 文本分类的RNN:

net_{t}=Ux_{t}+Wh_{t-1}

h_{t}=f(net_{t})  过激活函数f得到h

y=g(Vh_{T})  最后一个时刻的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)

生成候选记忆\tilde{C}使用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一定程度上解决了编码长序列的问题;

猜你喜欢

转载自blog.csdn.net/smartcat2010/article/details/102647104