AI随笔、

参数初始化

一般来说,正态分布的采样结果更多样化一些,但它理论上是无界的,如果采样到绝对值过大的结果可能不利于优化;相反均匀分布是有界的,但采样结果通常更单一。于是就出现了结合两者优点的“截尾正态分布”。截尾正态分布既指定均值 μ \mu μ和方差 σ 2 \sigma^2 σ2,也需要指定区间 [ a , b ] [a,b] [a,b],它从 N ( μ , σ 2 ) \mathcal{N}(\mu,\sigma^2) N(μ,σ2)中采样,如果采样结果在 [ a , b ] [a,b] [a,b]中,那么保留该结果,否则重复采样直到采样结果落到 [ a , b ] [a,b] [a,b]

关于标准化

普通的Batch Normalization
y i , j , k = x i , j , k − μ i , j σ i , j 2 + ϵ × γ k + β k , μ i , j = 1 d ∑ k = 1 d x i , j , k , σ i , j 2 = 1 d ∑ k = 1 d ( x i , j , k − μ i , j ) 2 y_{i, j, k}=\frac{x_{i, j, k}-\mu_{i, j}}{\sqrt{\sigma_{i, j}^{2}+\epsilon}} \times \gamma_{k}+\beta_{k}, \quad \mu_{i, j}=\frac{1}{d} \sum_{k=1}^{d} x_{i, j, k}, \quad \sigma_{i, j}^{2}=\frac{1}{d} \sum_{k=1}^{d}\left(x_{i, j, k}-\mu_{i, j}\right)^{2} yi,j,k=σi,j2+ϵ xi,j,kμi,j×γk+βk,μi,j=d1k=1dxi,j,k,σi,j2=d1k=1d(xi,j,kμi,j)2
但在有些情况下,center化反而效果不好,所以也有新的Normalization的提出,例如RMS Norm
y i , j , k = x i , j , k σ i , j 2 + ϵ × γ k , σ i , j 2 = 1 d ∑ k = 1 d x i , j , k 2 y_{i, j, k}=\frac{x_{i, j, k}}{\sqrt{\sigma_{i, j}^{2}+\epsilon}} \times \gamma_{k}, \quad \sigma_{i, j}^{2}=\frac{1}{d} \sum_{k=1}^{d} x_{i, j, k}^{2} yi,j,k=σi,j2+ϵ xi,j,k×γk,σi,j2=d1k=1dxi,j,k2
在T5中,使用的就是这种Norm。center操作,类似于全连接层的bias项,储存到的是关于数据的一种先验分布信息,而把这种先验分布信息直接储存在模型中,反而可能会导致模型的迁移能力下降。

为什么Attention中除以 d \sqrt d d 这么重要?

对于两个 d d d维向量 q , k q,k q,k,假设它们都采样自“均值为0、方差为1”的分布,那么它们的内积的二阶矩是 d d d,由于均值也是0,那么方差也是 d d d。Attention是内积后softmax,主要设计的运算是 e q ⋅ k e^{q·k} eqk,我们可以大致认为内积之后、softmax之前的数值在 − 3 d −3d 3d 3 d 3d 3d这个范围内,由于 d d d通常都至少是64,所以 e d e^d ed非常大而 e − d e^{-d} ed非常小,因此经过softmax之后,Attention的分布非常接近一个one hot分布了,这带来严重的梯度消失问题,导致训练效果差。

相应地,解决方法就有两个,一是在内积之后除以 d \sqrt d d ,使 q ⋅ k q·k qk的方差变为1,对应 e 1 e^1 e1 e − 1 e^{-1} e1都不至于过大过小,这样softmax之后也不至于变成one hot而梯度消失了,这也是常规的Transformer如BERT里边的Self Attention的做法;另外就是不除以 d \sqrt d d ,但是初始化 q ⋅ k q·k qk的全连接层的时候,其初始化方差要多除以一个 d d d,这同样能使得使 q ⋅ k q·k qk的初始方差变为1,T5采用了这样的做法。

 module.q.weight.data.normal_(mean=0.0, std=factor * ((d_model * key_value_proj_dim) ** -0.5))
 module.k.weight.data.normal_(mean=0.0, std=factor * (d_model ** -0.5))
 module.v.weight.data.normal_(mean=0.0, std=factor * (d_model ** -0.5))

TM中的残差模块

如果 x x x的方差为 σ 1 2 \sigma^2_1 σ12 F ( x ) F(x) F(x)的方差为 σ 2 2 \sigma^2_2 σ22,并且假设两者相互独立,那么 x + F ( x ) x+F(x) x+F(x)的方差为 σ 1 2 + σ 2 2 \sigma^2_1+\sigma^2_2 σ12+σ22。也就是说,残差会进一步放大方差,所以我们也要想相应的策略缩小其方差。所以TM中接了Norm
x t + 1 = Norm ⁡ ( x t + F t ( x t ) ) x_{t+1}=\operatorname{Norm}\left(x_{t}+F_{t}\left(x_{t}\right)\right) xt+1=Norm(xt+Ft(xt))
这个也称为Post Norm,假设初始状态下 x , F ( x ) x,F(x) x,F(x)的方差均为1,那么 x + F ( x ) x+F(x) x+F(x)的方差就是2,而Normalization操作负责将方差重新降为1,这就说明初始阶段Post Norm相当于
x t + 1 = x t + F t ( x t ) 2 x_{t+1}=\frac{x_{t}+F_{t}\left(x_{t}\right)}{\sqrt{2}} xt+1=2 xt+Ft(xt)
当网络很深时就有
x l = x l − 1 2 + F l − 1 ( x l − 1 ) 2 = x l − 2 2 + F l − 2 ( x l − 2 ) 2 + F l − 1 ( x l − 1 ) 2 = ⋯ = x 0 2 l / 2 + F 0 ( x 0 ) 2 l / 2 + F 1 ( x 1 ) 2 ( l − 1 ) / 2 + F 2 ( x 2 ) 2 ( l − 2 ) / 2 + ⋯ + F l − 1 ( x l − 1 ) 2 1 / 2 \begin{aligned} x_{l} &=\frac{x_{l-1}}{\sqrt{2}}+\frac{F_{l-1}\left(x_{l-1}\right)}{\sqrt{2}} \\ &=\frac{x_{l-2}}{2}+\frac{F_{l-2}\left(x_{l-2}\right)}{2}+\frac{F_{l-1}\left(x_{l-1}\right)}{\sqrt{2}} \\ &=\cdots \\ &=\frac{x_{0}}{2^{l / 2}}+\frac{F_{0}\left(x_{0}\right)}{2^{l / 2}}+\frac{F_{1}\left(x_{1}\right)}{2^{(l-1) / 2}}+\frac{F_{2}\left(x_{2}\right)}{2^{(l-2) / 2}}+\cdots+\frac{F_{l-1}\left(x_{l-1}\right)}{2^{1 / 2}} \end{aligned} xl=2 xl1+2 Fl1(xl1)=2xl2+2Fl2(xl2)+2 Fl1(xl1)==2l/2x0+2l/2F0(x0)+2(l1)/2F1(x1)+2(l2)/2F2(x2)++21/2Fl1(xl1)
本来残差的意思是给前面的层搞一条“绿色通道”,让梯度可以更直接地回传,但是在Post Norm中,这条“绿色通道”被严重削弱了,越靠近前面的通道反而权重越小,残差“名存实亡”。

一个针对性的改进称为Pre Norm,它的思想是“要用的时候才去标准化”,其形式为
x t + 1 = x t + F t ( Norm ⁡ ( x t ) ) x_{t+1}=x_{t}+F_{t}\left(\operatorname{Norm}\left(x_{t}\right)\right) xt+1=xt+Ft(Norm(xt))
类似地,迭代展开之后我们可以认为初始阶段有
x l = x 0 + F 0 ( x 0 ) + F 1 ( x 1 / 2 ) + F 2 ( x 2 / 3 ) + ⋯ + F l − 1 ( x l − 1 / l ) x_{l}=x_{0}+F_{0}\left(x_{0}\right)+F_{1}\left(x_{1} / \sqrt{2}\right)+F_{2}\left(x_{2} / \sqrt{3}\right)+\cdots+F_{l-1}\left(x_{l-1} / \sqrt{l}\right) xl=x0+F0(x0)+F1(x1/2 )+F2(x2/3 )++Fl1(xl1/l )
这样一来,起码每一条残差通道都是平权的,残差的作用会比Post Norm更加明显,所以它也更好优化。当然,这样最后的 x l x_l xl方差将会很大,所以在接预测层之前 x l x_l xl也还要加个Normalization。

除此之外,还有更优的方案,成为SkipInit、ReZero,引入一个初始化为0的标量参数 α t \alpha_t αt,然后再逐渐更新 α t \alpha_t αt
x t + 1 = x t + α t F t ( x t ) x_{t+1}=x_{t}+\alpha_{t} F_{t}\left(x_{t}\right) xt+1=xt+αtFt(xt)

线搜索和信赖域

线搜索方法的策略是,先确定优化变量的更新方向 p K p_K pK ,然后在该方向上确定一个最佳的步长 α \alpha α,使得目标函数沿着该方向前进 α \alpha α距离后下降得最多,相当于求解下式
在这里插入图片描述
信赖域方法的策略则有所不同,先用另一个简单的模型 m k m_k mk近似目标函数,然后确定一个信赖域半径 Δ k \Delta_k Δk,在该半径限制的范围内寻找一个使得模型下降最多的更新量 p p p,相当于求解下式

在这里插入图片描述

也就是说,线搜索方法是先确定方向,再确定步长,而信赖域方法是先确定最大步长,再确定方向和实际步长。

Lipschitz

Lipschitz条件,即利普希茨连续条件(Lipschitz continuity)。其定义为:对于函数f(x),若其任意定义域中的 x 1 , x 2 x1,x2 x1,x2,都存在 L > 0 L>0 L>0,使得 ∣ f ( x 1 ) − f ( x 2 ) ∣ ≤ L ∣ x 1 − x 2 ∣ |f(x1)-f(x2)|≤L|x1-x2| f(x1)f(x2)Lx1x2。 大白话就是:存在一个实数 L L L,使得对于函数 f ( x ) f(x) f(x)上的每对点,连接它们的线的斜率的绝对值不大于这个实数 L L L。最小的 L L L称为该函数的Lipschitz常数。

对比学习的本质

对比学习系统应该具备两个属性:Alignment和Uniformity(参考上图)。所谓“Alignment”,指的是相似的例子,也就是正例,映射到单位超球面后,应该有接近的特征,也即是说,在超球面上距离比较近;所谓“Uniformity”,指的是系统应该倾向在特征里保留尽可能多的信息,这等价于使得映射到单位超球面的特征,尽可能均匀地分布在球面上,分布得越均匀,意味着保留的信息越充分。乍一看不好理解“分布均匀和保留信息”两者之间的关联,其实道理很简单:分布均匀意味着两两有差异,也意味着各自保有独有信息,这代表信息保留充分。

总体而言,温度参数 τ 起到如下作用:温度参数会将模型更新的重点,聚焦到有难度的负例,并对它们做相应的惩罚,难度越大,也即是与 距离越近,则分配到的惩罚越多。所谓惩罚,就是在模型优化过程中,将这些负例从 身边推开,是一种斥力。也就是说,距离 越近的负例,温度超参会赋予更多的排斥力,将它从 推远。而如果温度超参数 τ 设置得越小,则InfoNCE分配惩罚项的范围越窄,更聚焦在距离 比较近的较小范围内的负例里。同时,这些被覆盖到的负例,因为数量减少了,所以,每个负例,会承担更大的斥力(参考上图左边子图)。极端情况下,假设温度系数趋近于0,那么InfoNCE基本退化为Triplet,也就是说,有效负例只会聚焦在距离 最近的一到两个最难的实例。从上述分析,可以看出:温度超参越小,则更倾向把超球面上的局部密集结构推开打散,使得超球面上的数据整体分布更均匀(参考上图右边子图)。

深度学习的本质

深度学习的本质就是做两件事情:Representation Learning(表示学习)和 Inductive Bias Learning(归纳偏好学习)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值