序列模型與Transformer

專家混合(mixture-of-experts)

/ MIKS-cher uv EK-sperts /

專家混合,是一種辦法,能在讓一個模型的總知識量大得多的同時,把使用它的代價大致維持平穩。它不是讓每個詞元都穿過一個大前饋網路,而是在該層並排放許多更小的「專家」網路,外加一個小小的「路由器」,為每個詞元只挑出兩三個專家真正去運行。可以想像一家有幾十名專科醫生的醫院:一名分診護士瞄一眼每位病人,把他送往最相關的那兩位醫生,而不是讓所有人看遍所有醫生。

妙處在於「總規模」與「激活規模」的分離。一個專家混合模型,參數量可能比一個相當的稠密模型多上八倍,但因為每個詞元只點燃八個專家中的兩個,每詞元的計算量幾乎不長。你以一個小得多的模型的運行代價,得到了一個巨大模型的存儲容量。這正是若干最大、最強的模型都這樣搭建的原因——它是少數幾根「加容量卻不讓算力成比例爆炸」的槓桿之一。

癥結在於:節省對計算是真的,對記憶體卻不然——所有那些專家仍必須被載入、被端著,所以一個專家混合模型即便每詞元運行便宜,部署起來也龐大而吃力。路由器還很嬌氣——若它偷懶地把大多數詞元都送往同樣那幾個專家,其餘的就閒置,容量便被浪費,所以訓練需要額外的技巧來保持負載均衡。而這些專家也極少變成乾淨、可被人解讀的專科;路由是學出來的,常常不透明,所以「專家」更多是個有用的比喻,而非字面的描述。

一個模型每層有 8 個專家,卻只把每個詞元路由給其中 2 個。它的總參數量足以與一個大上四倍的模型相比,而每個詞元的計算量卻與一個小得多的稠密模型相當——巨人的容量,矮人的運行代價。

帳面上專家眾多,每個詞元真正上班的只有幾個。

專家混合省的是計算,而非記憶體——每個專家仍必須被存儲與載入,所以這類模型龐大、託管起來吃力。而那些「專家」也極少與對人有意義的主題對得上號;路由是學出來的,基本不透明,所以別想像成一組各有名牌的整齊專科組。

又稱
MoEsparse mixture-of-experts专家混合專家混合混合专家