光谷做网站推广哪家好,wordpress 快递公司,登录免费注册网址,阳泉建设公司网站神经网络的权重初始化
从神经网络输入和输出尽量都要有相同的方差出发#xff0c;但均值很难保持一致#xff08;由于有一些非负的激活函数#xff09;。而且现有的标准化策略也是起到了同样的作用#xff0c;如BN#xff0c;LN等#xff0c;都是努力将中间层的输出的方…神经网络的权重初始化
从神经网络输入和输出尽量都要有相同的方差出发但均值很难保持一致由于有一些非负的激活函数。而且现有的标准化策略也是起到了同样的作用如BNLN等都是努力将中间层的输出的方差和均值限定为1和0但是最近的一些BN的工作如用在Google T5中的RMS Norm尝试了去掉减去均值的操作反而会有提点的效果。说明保持均值一致并不是必须的。 一个直观的猜测是center操作类似于全连接层的bias项储存到的是关于预训练任务的一种先验分布信息而把这种先验分布信息直接储存在模型中反而可能会导致模型的迁移能力下降。所以T5不仅去掉了Layer Normalization的center操作它把每一层的bias项也都去掉了。 对于一个输入含有m个神经单元的网络层输出n个值。当没有激活函数时模型为 y i b i ∑ j w i , j x i , j y_ib_i\sum_{j}w_{i, j}x_{i, j} yibi∑jwi,jxi,j可以计算输出值的期望和方差主要是看二阶矩方差当权重和偏置的初始化的均值都是0时并且输入值 x x x的方差是1可以得到 E [ y i 2 ] m E [ w i , j 2 ] E[y_i^2]mE[w_{i,j}^2] E[yi2]mE[wi,j2]所以当神经网络权重初始化的方差是 1 / m 1/m 1/m时输出值y的方差也是1这就是Lecun初始化可以让每一层的输出值的方差都保持在1左右。
对于Xaiver初始化也考虑了反向传播时神经网络权重方差的变化得到了两个约束对于第 i i i层的权重 W i W^i Wi和神经元个数 n i n_i ni有两个约束条件 n i V a r [ W i ] 1 n_iVar[W^i]1 niVar[Wi]1, n i 1 V a r [ W i ] 1 n_{i1}Var[W^i]1 ni1Var[Wi]1所以可以使 W i ∼ N ( 0 , 2 n i n i 1 ) W^i\sim N(0, \frac{2}{n_in_{i1}}) Wi∼N(0,nini12)当神经网络所有层的宽度是一样时这两个个约束条件才会同时被满足。如果使用均匀分布初始化例如初始权重从 U ( − 1 n , 1 n ) U(-\frac{1}{\sqrt{n}}, \frac{1}{\sqrt{n}}) U(−n 1,n 1)中采样那么和上面一样有 E [ y i 2 ] n i V a r ( W i ) 1 / 3 E[y_i^2]n_iVar(W^i)1/3 E[yi2]niVar(Wi)1/3,所以为了使 E [ y i 2 ] E[y_i^2] E[yi2]的方差也为1当W是从均匀分布中采样时需要从 U ( − 6 n j n j 1 , 6 n j n j 1 ) U(-\frac{\sqrt{6}}{\sqrt{n_jn_j1}}, \frac{\sqrt{6}}{\sqrt{n_jn_j1}}) U(−njnj1 6 ,njnj1 6 )中采样。
但是实际情况都有激活函数如果算上激活函数后考虑神经网络权重的方差如最简单的Relu激活函数可以假设神经网络如果神经网络权重初始化的分布还是正态分布的话可以假设约有一半的神经单元被激活则 E [ y i 2 ] m 2 E [ w i , j 2 ] E[y_i^2]\frac{m}{2}E[w_{i,j}^2] E[yi2]2mE[wi,j2]此时就要求 E [ w i , j 2 ] 2 m E[w_{i,j}^2]\frac{2}{m} E[wi,j2]m2便是He初始化考虑到反向传播 m f a n _ i n mfan\_in mfan_in或 m f a n _ o u t mfan\_out mfan_out,其中fan_in和fan_out分别是当前层的输入和输出。
相比于Lecun初始化使用“均值为0方差为1/m的正态分布其中m是当前层的神经单元个数”还有一种NTK参数化的方法用“均值为0、方差为1的随机分布”来初始化但是将输出结果除以 m \sqrt{m} m 也即是模型变为 y i b j 1 m ∑ i x i w i , j y_i b_j\frac{1}{\sqrt{m}}\sum_{i}x_{i}w_{i,j} yibjm 1∑ixiwi,j使用NTK参数化的好处是可以将所有参数放在 O ( 1 ) O(1) O(1)级别所以可以设置较大的学习率。
对于transformer中的注意力机制除以 d \sqrt{d} d 的作用也便是稳定传播时候的二阶矩因为 E [ ( q ⋅ k ) 2 ] d E[(q\cdot k)^2]d E[(q⋅k)2]d其中d为q和k向量的维度。
标准化
相比于对权重初始化的这种微调来使模型的传播过程中的方差不会过大还有一类比较直接粗暴的方法来使训练稳定就是直接标准化LN,BN等。
关于残差连接的二阶矩
残差连接xF(x),如果x的方差为 σ 1 2 \sigma_1^2 σ12,F(x)的方差为 σ 2 2 \sigma_2^2 σ22,那么xF(x)的方差就是 σ 1 2 σ 2 2 \sigma_1^2\sigma^2_2 σ12σ22,会进一步放大所以需要采取办法处理。原版本的Transformer和Bert直接采用了一种PostNorm的方法也即是 x t 1 N o r m ( x t F t ( x t ) ) x_{t1}Norm(x_tF_t(x_t)) xt1Norm(xtFt(xt)).然而这种做法虽然稳定了前向传播的方差但事实上已经严重削弱了残差的恒等分支(递归到很多层之后)所以反而失去了残差“易于训练”的优点通常要warmup并设置足够小的学习率才能使它收敛。一个针对性的改进称为Pre Norm它的思想是“要用的时候才去标准化”其形式为 x t 1 x t F t ( N o r m ( x t ) ) x_{t1}x_tF_t(Norm(x_t)) xt1xtFt(Norm(xt))。
但是preNorm的效果不如Post Norm。pre Norm方法将深度网络退化成了一个宽网络学习能力自然不如postnorm的深网络。