2021SC@SDUSC
上周解析了UDA代码中的main.py文件,接下来这周解析models.py文件中的内容。
models.py主要是关于Transformer Model Classes & Config 转换器模型类和配置类。
首先是定义的Config类,Config类里是定义的BERT模型的参数,相当于设置这个神经网络的各项参数和输入项的参数 。
接下来是GELUs激活函数,GELUs函数不是常见的激活函数,但是效果更好。神经网络激活函数 Gaussian Error Linear Units(GELU),GELUs是在激活中引入了随机正则的思想,是一种对神经元输入的概率描述,直观上更符合自然的认识,同时实验效果要比Relus与ELUs都要好。
查阅资料知道,GULEs函数可以看作是dropout、zoneout、Relus的综合。GELUs对于输入乘以一个0,1组成的mask,而该mask的生成则是依概率随机的依赖于输入。假设输入为X, mask为m,则m服从一个伯努利分布( Φ ( x ) \Phi(x) Φ(x), Φ ( x ) = P ( X < = x ) , X 服 从 标 准 正 态 分 布 \Phi(x)=P(X<=x), X服从标准正太分布 Φ(x)=P(X<=x),X服从标准正太分布),这么选择是因为神经元的输入趋向于正态 分布,对模型随机正则,去拟合化。
GELU(x)=xP(X<=x)=xΦ(x)
GELU(x)=0.5x(1+tanh[2/π(x+0.044715x3)])
在相关论文中论证了GULEs 的激活效果比Relu等常见激活函数的效果更好。
LayerNorm:LayerNorm前向传播,LayerNorm的主要作用是做归一化,LayerNorm是对同一样本的不同维特征间做归一化,即标准化某一样本特征的分布。
y=self.gamma∗σ2+ϵx−μ+self.beta
计算公式如下: