参考链接

Introduction:

  • 本文提出是的方法是adaptive softmax, 该算法目的是为了提高softmax函数的运算效率,适用于一些具有非常大词汇量的神经网络。
  • 在NLP的大部分任务中,都会用到softmax,但是对于词汇量非常大的任务,每次进行完全的softmax会有非常大的计算量,很耗时。所以paper中提出adaptive softmax来提升softmax的运算效率。
  • adaptive softmax的特点
    • 该算法的提出利用到了单词分布不均衡的特点(unbalanced word distribution)来形成将单词分成不同的类, 这样在计算softmax时可以避免对词汇量大小的线性依赖关系,降低时间复杂度;
    • 另外通过结合现代架构和矩阵乘积操作的特点,通过使其更适合GPU单元的方式进一步加速计算。

Computation time model of matrix-multiplication:

  • 大部分语言模型的瓶颈在于:隐藏状态的矩阵HRB×dH∈R^{B×d}(B=batch size,d为隐藏层状态维度)与词汇表矩阵ERd×kE∈R^{d×k}(k=词汇表的大小)之间的矩阵相乘。
  • 假设将ddBB固定,下图为两个GPU模型K40和M40矩阵乘法时间随kk的变化图:
    Adaptive softmax模型:Efficient softmax approximation for GPUs
    我们将上图的曲线记为函数g(k)g(k),我们可以看到,大概在k<k050k<k_0≈50时,时间g(k)g(k)是一个常量。直到k>k0k>k_0时, 时间g(k)g(k)变成成了一个线性函数。
  • 因此假设g(k)的表达式如下:g(k)=max{c+λk0,c+λk}=cm+max{0,λ(k+k0)}g(k)=max\{c+\lambda k_0,c+\lambda k\}=c_m+max\{0,\lambda (k+k_0)\}在K40上cm=0.4c_m=0.4,在M40上cm=0.22c_m=0.22.
  • 同样的,假设将ddKK固定,模型K40和M40矩阵乘法时间随BB的变化也呈现上面这样的关系。
  • 这就表明矩阵相乘时,当其中一个维度很小时,矩阵乘法是低效的。也就是说计算大量小矩阵是不划算的,很容易理解,数据传输、函数调用开销等也需要消耗时间。也说明了,按层次来组织words时,如果中间节点有较少的子节点时 (比如huffman 编码的tree)是次优的。
  • 所以paper中综合考虑了kkBB,提出了下面的计算时间模型g(k;B)=max(c+λk0B0;c+λkB)g(k; B) = max(c + λk_0 B_0; c + λkB)

two-clusters case:

  • 这部分讲解将词汇表分成两个类的Adaptive softmax模型。
  • 在自然语言中,单词的分布遵循Zipf定律。大部分的概率被词典中一小部分词所覆盖,例如,在Penn TreeBank中87%的文档只被20%的词汇所覆盖。
  • 首先将将词汇表VV分成两部分VhV_hVtV_t,VhV_h包含在词汇表头部高频词,VtV_t中包含在词汇表尾部的低频词。高频词会经常被访问所有它应该被高效的计算。这使得我们使用不平衡基数(unbalanced cardinalities):VhVt|V_h |≪|V_t |和不平衡概率(unbalanced probabilities):P(Vh)P(Vt)P(V_h)≫P(V_t)(其中P(A)=mAPiP(A)=∑_{m∈A}P_i表示一个词在AA中的概率),来进行词典划分。
  • 两个词类(clusters)有两种组织方式:
    • 方法一VhV_hVtV_t都放在树的第二层的叶节点中。
    • 方法二VhV_h保存在根节点中而VtV_t保存在第二层的叶节点中。
  • 方法一比方法二性能上要低5%10%5\%-10\%。当预测cc类中词ww时:
    • 方法一P(cH)P(wc,h)P(c│H)*P(w│c,h)
    • 方法二P(wh)P(w|h),其更为简单直接,所以效果更好。
  • 因此,除非方法一比方法二的计算时间快很多,否则选择方法二的组织方式。

Minimizing the computation time:

  • 令词汇表的大小为kkVhV_h中词的个数为kh,Vhk_h, V_h对应的概率为php_h.则:kt=kkhpt=1ptk_t=k-k_h;p_t=1-p_t.
  • 所以,根部计算的时间为:g(kh+1;B);Vtg(k_h+1;B); V_t叶节点的计算时间为:g(kt;ptB)g(k_t; p_t B);所以整体的计算时间为:C=g(kh+1;B)+g(kt;ptB)C = g(k_h+1;B) + g(k_t; p_t B)
  • 这样我们通过最小化CC来求的合适的khk_hCCkhk_h的关系图如下
    Adaptive softmax模型:Efficient softmax approximation for GPUs

Adapting the classifier capacity for each cluster:

  • 每个类(cluster)是独立的被访问,因此它们不需要有相同的能力。对应频繁的词它们使用跟高的能力,而稀少的词他们可以不被学的非常好,因为它们很少被查看。
  • 在论文中,对不同的类共享隐层,通过加映射矩阵的方式降低分类器的输入大小。一般的,tail部分(低频词部分)的映射矩阵将其大小从dd维缩小到dt=d/4d_t=d/4 维。

General case

  • 现在考虑更一般的情况,将词汇表分成J分:V=VhV1VJV = V_h ∪V_1…∪ V_J,并且ViVj=(ij)V_i∩V_j=∅(i≠j),分成结构如下所示:

    Adaptive softmax模型:Efficient softmax approximation for GPUs

  • C:总计算时间;词ww属于类ViV_i的概率为P(wVi)=piwvip(w)P(w∈V_i )=p_i ∑_{w∈{v_i}}p(w),ki=Vik_i=|V_i|;固定BB(batch size)和dd(隐藏层维度),仅考虑CCkik_i和概率的关系.

  • CC进行如下分解:C=Ch+iCi=g(J+kh;B)+g(ki;piB)C =C_h+∑_iC_i =g(J+k_h; B)+g(k_i; p_i B)

  • 回顾公式:g(k;B)=max(c+λk0B0;c+λkB)g(k; B)= max(c + λk_0 B_0; c + λkB);其中+λk0B0+ λk_0 B_0为常数部分, c+λkc + λkB是kBkB的线性函数。有上面部分分析可知,在常数部分GPU的算力并未得到充分利用,因此应尽量避免落入该部分;所以设置一个约束条件:kBk0B0kB≥k_0 B_0;合并上面式子得:C=c+λ(J+kh)B+i(c+λkipiB)=(J+1)c+λB[J+kh+ipiki]C=c+\lambda (J+k_h)B+\sum_i(c+\lambda k_ip_iB)=(J+1)c+\lambda B[J+k_h+\sum_ip_ik_i]

  • 讨论ipiki∑_ip_i k_i项:

    • pi+j=pi+pjp_{i+j}=p_i+p_j,则pjkj=(p(i+j)pi)kjp_j k_j=(p_(i+j)-p_i ) k_j则可以得到:piki+pjkj=pi(kikj)+pi+p(i+j)kjp_i k_i+p_j k_j=p_i (k_i-k_j)+p_i+p_(i+j) k_j
    • 假设ki>kj,p(i+j)kjk_i>k_j, p_(i+j)、k_j都固定,只有pip_i是可变的;那么当pip_i越小式上式越小,即让容量更大的第ii类包含更多概率小的词。
  • 讨论kik_i项: 论文中说使用了动态规划。

  • 讨论JJ:最优的计算机时间关于J的函数图形如下图所示:

    Adaptive softmax模型:Efficient softmax approximation for GPUs

相关文章:

  • 2021-04-11
  • 2021-07-11
  • 2021-07-13
  • 2021-04-27
  • 2021-04-28
  • 2021-06-29
  • 2021-08-20
猜你喜欢
  • 2022-01-16
  • 2021-11-08
  • 2022-12-23
  • 2021-07-06
  • 2021-12-24
  • 2021-09-06
相关资源
相似解决方案