为什么要layer Norm ?
随着网络层数增加,特征分布会变化,为了保持特征分布的稳定性,加速收敛
layer Norm 和 Batch Norm 的区别?
都是 均值0 方差1 ,layer是以样本维度计算(比如:一句话,一个用户),batch是以batch*单列特征为单位进行归一化
e.g. 推荐系统中: 【样本】年龄|性别|商品属性
NLP中:【样本】token1|token2|...
Batch 顾名思义是对一个batch进行操作。假设我们有 10行 3列 的数据,即我们的batchsize = 10,每一行数据有三个特征,假设这三个特征是【身高、体重、年龄】。那么BN是针对每一列(特征)进行缩放,例如算出【身高】的均值与方差,再对身高这一列的10个数据进行缩放。体重和年龄同理。这是一种“列缩放”。
image.png
而layer方向相反,它针对的是每一行进行缩放。即只看一笔数据,算出这笔所有特征的均值与方差再缩放。这是一种“行缩放”。
细心的你已经看出来,layer normalization 对所有的特征进行缩放,这显得很没道理。我们算出一行这【身高、体重、年龄】三个特征的均值方差并对其进行缩放,事实上会因为特征的量纲不同而产生很大的影响。但是BN则没有这个影响,因为BN是对一列进行缩放,一列的量纲单位都是相同的。
那么我们为什么还要使用LN呢?因为NLP领域中,LN更为合适。
如果我们将一批文本组成一个batch,那么BN的操作方向是,对每句话的第一个词进行操作。但语言文本的复杂性是很高的,任何一个词都有可能放在初始位置,且词序可能并不影响我们对句子的理解。而BN是针对每个位置进行缩放,这不符合NLP的规律。
https://zhuanlan.zhihu.com/p/74516930
为什么加残差网络?
1)解决深度加深时,梯度消失的问题。尽管上述LN可以缓解。
2)还存在网络退化问题:
在神经网络可以收敛的前提下,随着网络深度增加,网络的表现先是逐渐增加至饱和,然后迅速下降
decoder的第一个attn模块为什么要 masked_fill(mask == 0, -1e9) 呢?
每个时刻只能用前一时刻的数据,防止未来数据作弊
attn里为什么要有softmax操作?
权重归一化
多头相比单头的好处?
从不同方向做attn,可以表达更多的信息,类似随机森林思想
- 方便会回忆 https://www.jianshu.com/p/b40deff0ca63
- 方便回忆 代码实战:基于Transformer模型的机器翻译 11:30encoder 19:54 decoder
代码:http://nlp.seas.harvard.edu/2018/04/03/attention.html
seq2seq + attn 局限性:
- LSTM,必然存在梯度的问题
- LSTM、序列形式的数据,线性计算
transformer核心:
- 如何解决长依赖的
- self-attn、encoder 、 decoder 区别?
- 如何encode 单词顺序,因为不是序列模型?
ENCODER 结构
image.png
输入单词:Thinking、 Machine
输出:当前语境下的向量表示, Z1、 Z2
Q K V
Q和K目的,用于计算当前词在当前上下文中的影响
divide by 根号dk 作用:缩小score的绝对值,防止softmax时,exp的计算会变极端,成为1或者0
整体框架的好处:矩阵化计算可并行;不依赖梯度计算
多头的目的:希望不同组的QKV,能捕获不同维度的关系;类似 决策树组成随机森林
image.png
得到的权重score矩阵,维度为 单词数×(单词数×多头数)
网友评论