23 Feb

MoE环游记:7、动态激活极简解

上一篇文章《MoE环游记:6、最优分配促均衡》中,我们通过求解如下最优分配问题来实现负载均衡
\begin{equation}\max_{x_{i,j}\in\{0,1\}} \sum_{i,j} x_{i,j}s_{i,j} \qquad\text{s.t.}\qquad \sum_j x_{i,j} = k,\quad \sum_i x_{i,j} = \frac{mk}{n}\end{equation}
其中$\sum_j x_{i,j} = k$表示每个Token恰好激活$k$个Expert,而$\sum_i x_{i,j} = mk/n$表示每个Expert恰好被激活$mk/n$次。然而,仔细思考就会发现,其实前者对训练和推理都不是必要的,我们真正需要的是后者,它意味着“平均来说每个Token激活$k$个Expert”以及每个Expert的负载均衡,这足以达成MoE的目标,所以本文考虑更简化的问题
\begin{equation}\max_{x_{i,j}\in\{0,1\}} \sum_{i,j} x_{i,j}s_{i,j} \qquad\text{s.t.}\qquad \sum_i x_{i,j} = \frac{mk}{n}\label{eq:target-dyn}\end{equation}

点击阅读全文...

22 Feb

MoE环游记:6、最优分配促均衡

我们知道,负载均衡(Load Balance)是MoE架构中基本且关键的一环,直接影响模型的效率和性能。本系列已经有两篇文章介绍了两种实现负载均衡的主流思路,分别是《MoE环游记:2、不患寡而患不均》介绍的经典方案Aux Loss,以及《MoE环游记:3、换个思路来分配》中的由DeepSeek提出的Loss-Free方案。两者各有所长,亦各有局限。

本文将探讨第三种思路:最优分配,它将负载均衡视为等式约束下的线性规划问题。从最终形式上看,它仍属于Loss-Free,但基于截然不同的原理,提供了更准确且无超参的更新方式。

方法回顾

现有的两种方法中,Aux Loss的思路相对朴素,核心是“哪里不稳罚哪里”,通过正则项对负载不均施加惩罚。然而,Aux Loss有两个问题:首先,惩罚系数不好调,过大会干扰主Loss的优化,过小则均衡效果差;其次,Aux Loss的背后是STE(Straight-Through Estimator),这意味着它的梯度是次优的,它可能会带来负载均衡以外的未知影响。

点击阅读全文...

14 Feb

多任务学习漫谈(三):分主次之序

多任务学习是一个很宽泛的命题,不同场景下多任务学习的目标不尽相同。在《多任务学习漫谈(一):以损失之名》《多任务学习漫谈(二):行梯度之事》中,我们将多任务学习的目标理解为“做好每一个任务”,具体表现是“尽量平等地处理每一个任务”,我们可以称之为“平行型多任务学习”。然而,并不是所有多任务学习的目标都是如此,在很多场景下,我们主要还是想学好某一个主任务,其余任务都只是辅助,希望通过增加其他任务的学习来提升主任务的效果罢了,此类场景我们可以称为“主次型多任务学习”。

在这个背景下,如果还是沿用平行型多任务学习的“做好每一个任务”的学习方案,那么就可能会明显降低主任务的效果了。所以本文继续沿着“行梯度之事”的想法,探索主次型多任务学习的训练方案。

目标形式

在这篇文章中,我们假设读者已经阅读并且基本理解《多任务学习漫谈(二):行梯度之事》里边的思想和方法,那么在梯度视角下,让某个损失函数保持下降的必要条件是更新量与其梯度夹角至少大于90度,这是贯穿全文的设计思想。

点击阅读全文...

8 Feb

多任务学习漫谈(二):行梯度之事

《多任务学习漫谈(一):以损失之名》中,我们从损失函数的角度初步探讨了多任务学习问题,最终发现如果想要结果同时具有缩放不变性和平移不变性,那么用梯度的模长倒数作为任务的权重是一个比较简单的选择。我们继而分析了,该设计等价于将每个任务的梯度单独进行归一化后再相加,这意味着多任务的“战场”从损失函数转移到了梯度之上:看似在设计损失函数,实则在设计更好的梯度,所谓“以损失之名,行梯度之事”。

那么,更好的梯度有什么标准呢?如何设计出更好的梯度呢?本文我们就从梯度的视角来理解多任务学习,试图直接从设计梯度的思路出发构建多任务学习算法。

整体思路

我们知道,对于单任务学习,常用的优化方法就是梯度下降,那么它是怎么推导的呢?同样的思路能不能直接用于多任务学习呢?这便是这一节要回答的问题。

点击阅读全文...

20 Jan

从Wasserstein距离、对偶理论到WGAN

推土机哪家强?成本最低找Wasserstein

推土机哪家强?成本最低找Wasserstein

2017年的时候笔者曾写过博文《互怼的艺术:从零直达WGAN-GP》,从一个相对通俗的角度来介绍了WGAN,在那篇文章中,WGAN更像是一个天马行空的结果,而实际上跟Wasserstein距离没有多大关系。

在本篇文章中,我们再从更数学化的视角来讨论一下WGAN。当然,本文并不是纯粹地讨论GAN,而主要侧重于Wasserstein距离及其对偶理论的理解。本文受启发于著名的国外博文《Wasserstein GAN and the Kantorovich-Rubinstein Duality》,内容跟它大体上相同,但是删除了一些冗余的部分,对不够充分或者含糊不清的地方作了补充。不管怎样,在此先对前辈及前辈的文章表示致敬。

注:完整理解本文,应该需要多元微积分、概率论以及线性代数等基础知识。还有,本文确实长,数学公式确实多,但是,真的不复杂、不难懂,大家不要看到公式就吓怕了~)

点击阅读全文...

15 Nov

力学系统及其对偶性(三)

在上一篇文章中,我已经初步地从最小作用量原理的角度来观察对偶定律的表现。虽然那是一种便捷有效的方法,但是还是给我们流下了一些遗憾。上一节是从几何形式的作用量原理出发的,而没有在一般形式的作用量框架下讨论。因为如果在$S=\int Ldt=\int (T-U)dt$的形式下讨论坐标变换问题会出现困难,困难源于我们进行了变换$d\tau=|z|^2 dt$,这导致了时间和空间的耦合,变分不能简单地进行。但是,这并非无法解决的问题。我们还是可以在基本的作用量原理之下讨论变换问题。下面将对此问题进行讨论。

变分中的变量代换

考虑一个一般的保守系统的作用量:
$$S=\int_{t_1}^{t_2} L(q,\frac{dq}{dt})dt$$

点击阅读全文...

14 Nov

力学系统及其对偶性(二)

如果仅仅从牛顿第二定律的角度来进行变换推导,那么关于力学定律的对偶性的结果无疑仅仅是初等的。对于理论分析来说,更方便的是从做小作用量原理的形式出发,事实上,这种形式计算量也是很少的,甚至比直接代入运动方程变换更加便捷。

上一篇文章中我们讲到,变换$z \mapsto z^2$将一个原点为几何中心的椭圆映射为一个原点为焦点的椭圆,并且相信这种变换可以将胡克定律跟牛顿万有引力定律联系起来。然后就立即给出了变换$w=z^2,d\tau=|z^2|dt$。但是这个变换本身并不显然的,假如我们仅仅发现了$z \mapsto z^2$的几何意义,如何相应地得出$d\tau=|z^2|dt$这个变换呢?本文初步地解决这个问题。

几何作用量

让我们回顾力学的最小作用量原理:
$$ S = \int_{{t_1}}^{{t_2}} L dt = \int_{{t_1}}^{{t_2}} {(T - U)} dt $$

点击阅读全文...

8 Nov

力学系统及其对偶性(一)

写在前头

经过两年多的开发,本站所用的Typecho终于发布了新版,虽然还是beta,但是我还是迫不及待地升级了。当然,前台并没有变化,但是几乎整个程序都是重构了的,后台也更加清爽了。本文是新版程度的第一篇文章,使用Markdowm语法编写。

----------

牛顿Vs胡克

在所有的力学系统中,最简单的或许就是简谐运动了。它由一个最简单的常系数线性微分方程组描述:
$$\ddot{\boldsymbol{x}}+\omega^2 \boldsymbol{x}=0$$

这也就是物体在弹性形变的胡克定律所描述的力的作用下的运动情况。我们可以很快用三角函数写出该方程的精确解。相比之下,二体问题的解就复杂多了,虽然二体问题也是精确可解的,但是显然没有简谐运动那样简单明了。然而,除了都是有心力之外,它们之间还有一个共同点,它们的运动轨道都是椭圆!(严格来说是圆锥曲线,因为还可能有抛物线跟双曲线,但是不失一般性,本文只分析椭圆轨道)两者之间是否存在着某种联系呢?如果可以将二体问题转变为简谐运动,那么分析过程应该可以大大化简了?

点击阅读全文...