Loading [MathJax]/extensions/TeX/boldsymbol.js
5 Mar

MoE环游记:3、换个思路来分配

这篇文章我们继续探讨MoE的负载均衡问题。在上一篇文章《MoE环游记:2、不患寡而患不均》中,我们主要讨论了通过Aux Loss来促进负载均衡的思路。Aux Loss固然简单直观,但它也有一个明显的缺点——权重不好调——调低了无法促进均衡,调高了容易损害LM Loss,所以业界一直有寻找替代方案的尝试。

本文要分享的是名为“Loss-Free”的方案,由DeepSeek在《Auxiliary-Loss-Free Load Balancing Strategy for Mixture-of-Experts》提出。和DeepSeek众多耀眼的开源作品相比,这篇论文也许不算起眼,但在笔者看来,它潜在的学术影响力可能远超其他工作,因为所提方法不仅简单有效,而且极具普适性,堪称经典。

方法大意

面对负载不均衡,Aux Loss的应对思路是通过额外的损失引导Router给出均衡的打分,而Loss-Free的想法则是换个新的分配思路,即不改变Router现有打分结果,而是改变\mathop{\text{argtop}}_k \boldsymbol{\rho}这个分配方式。

点击阅读全文...

23 Dec

鬼斧神工:求n维球的体积

今天早上同学问了我有关伽马函数和n维空间的球体积之间的关系,我记得我以前想要研究,但是并没有落实。既然她提问了,那么就完成这未完成的计划吧。

标准思路

简单来说,n维球体积就是如下n重积分
V_n(r)=\int_{x_1^2+x_2^2+\dots+x_n^2\leq r^2}dx_1 dx_2\dots dx_n
用更加几何的思路,我们通过一组平行面(n-1维的平行面)分割,使得n维球分解为一系列近似小柱体,因此,可以得到递推公式
V_n (r)=\int_{-r}^r V_{n-1} \left(\sqrt{r^2-t^2}\right)dt
t=r\sin\theta_1,就有
V_n (r)=r\int_{-\frac{\pi}{2}}^{\frac{\pi}{2}} V_{n-1} \left(r\cos\theta_1\right)\cos\theta_1 d\theta_1

点击阅读全文...

30 Aug

封闭曲线所围成的面积:一个新技巧

本文主要做了一个尝试,尝试不通过Green公式而实现将封闭曲线的面积与线积分相互转换。这种转换的思路,因为仅仅利用了二重积分的积分变换,较为容易理解,而且易于推广。至于这种技巧是否真正具有实际价值,还请读者评论。

假设平面上一条简单封闭曲线由以下参数方程给出:
\begin{equation}\left\{\begin{aligned}x = f(t)\\y = g(t)\end{aligned}\right.\end{equation}
其中参数t位于某个区间[a,b]上,即f(a)=f(b),g(a)=g(b)。现在的问题是,求该封闭曲线围成的区域的面积。

点击阅读全文...

10 Sep

RNN模型中输入的重要性的评估

Saliency Maps for RNN

RNN是很多序列任务的不二法门,比如文本分类任务的常用方法就是“词向量+LSTM+全连接分类器”。如下图

RNN分类器

RNN分类器

假如这样的一个模型可以良好地工作,那么现在考虑一个任务是:如何衡量输入w_1,\dots,w_n对最终的分类结果的影响的重要程度(Saliency)呢?例如假设这是一个情感分类任务,那么怎么找出是哪些词对最终的分类有较为重要的影响呢?本文给出了一个较为直接的思路。

思路的原理很简单,因为我们是将RNN最后一步的状态向量(也就是绿色阴影所代表的向量)传递给后面的分类器进行分类的,因此最后一步的状态向量\boldsymbol{h}_n就是一个目标向量。而RNN是一个递推的过程,

点击阅读全文...

24 Jun

为方轮自行车铺路

方轮自行车

方轮自行车

你见过正方形轮子的自行车吗?一般认为,只有圆形的车轮才能使我们的车子平稳向前移动,但这只是针对平直道路而言的。谁规定路一定是平的?只要铺好一条适当的道路,正方形车轮的自行车照样可以平稳前行!本文就让我们为方轮自行车铺一条路。

其实,方轮自行车已经不是新鲜玩意了,它早已出现在不少科技馆中。从图片中可以看到,它的特殊轨道是有许多段弧组成的,每一段弧的长度等于正方形的边长。车轮前行时,正方形会保持与弧形相切(确保不会打滑)。这样的路的形状是什么曲线呢?很幸运,它并不十分复杂,而且让人意外的是,它就是我们之前已经研究过的“悬链线”!原来,要设计这样的一个曲线的轨道,不需要多么高深的设计师,只需要我们手拿一条铁链,让它自由垂下......

点击阅读全文...

6 Mar

Openwrt自动扫描WiFi并连接中继

最近入手了一个非常迷你的路由器——由25 x 25mm的vocore开发板搭建成的超小路由器,配上外壳后,也仅仅是37.4 x 34 x 25.9mm,比一个随身WiFi稍大。(链接

vocore路由器

vocore路由器

点击阅读全文...

1 Sep

玩转Keras之seq2seq自动生成标题

话说自称搞了这么久的NLP,我都还没有真正跑过NLP与深度学习结合的经典之作——seq2seq。这两天兴致来了,决定学习并实践一番seq2seq,当然最后少不了Keras实现了。

seq2seq可以做的事情非常多,我这挑选的是比较简单的根据文章内容生成标题(中文),也可以理解为自动摘要的一种。选择这个任务主要是因为“文章-标题”这样的语料对比较好找,能快速实验一下。

seq2seq简介

所谓seq2seq,就是指一般的序列到序列的转换任务,比如机器翻译、自动文摘等等,这种任务的特点是输入序列和输出序列是不对齐的,如果对齐的话,那么我们称之为序列标注,这就比seq2seq简单很多了。所以尽管序列标注任务也可以理解为序列到序列的转换,但我们在谈到seq2seq时,一般不包含序列标注。

要自己实现seq2seq,关键是搞懂seq2seq的原理和架构,一旦弄清楚了,其实不管哪个框架实现起来都不复杂。早期有一个第三方实现的Keras的seq2seq库,现在作者也已经放弃更新了,也许就是觉得这么简单的事情没必要再建一个库了吧。可以参考的资料还有去年Keras官方博客中写的《A ten-minute introduction to sequence-to-sequence learning in Keras》

点击阅读全文...

8 Sep

“让Keras更酷一些!”:小众的自定义优化器

沿着之前的《“让Keras更酷一些!”:精巧的层与花式的回调》写下去~

今天我们来看一个小众需求:自定义优化器。

细想之下,不管用什么框架,自定义优化器这个需求可谓真的是小众中的小众。一般而言,对于大多数任务我们都可以无脑地直接上Adam,而调参炼丹高手一般会用SGD来调出更好的效果,换言之不管是高手新手,都很少会有自定义优化器的需求。

那这篇文章还有什么价值呢?有些场景下会有一点点作用。比如通过学习Keras中的优化器写法,你可以对梯度下降等算法有进一步的认识,你还可以顺带看到Keras的源码是多么简洁优雅。此外,有时候我们可以通过自定义优化器来实现自己的一些功能,比如给一些简单的模型(例如Word2Vec)重写优化器(直接写死梯度,而不是用自动求导),可以使得算法更快;自定义优化器还可以实现诸如“软batch”的功能。

Keras优化器

我们首先来看Keras中自带优化器的代码,位于:
https://github.com/keras-team/keras/blob/master/keras/optimizers.py

点击阅读全文...