diff --git a/docs/README.md b/docs/README.md
index d23e8eb5..edd38f90 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -45,7 +45,7 @@
- MOBIUS
- **图召回**
- [EGES](ch02/ch2.1/ch2.1.3/EGES)
- - PinSAGE
+ - [PinSAGE](ch02/ch2.1/ch2.1.3/PinSage)
- **序列召回**
- [MIND](ch02/ch2.1/ch2.1.4/MIND)
- [SDM](ch02/ch2.1/ch2.1.4/SDM)
@@ -76,7 +76,7 @@
- **多任务学习**
- SharedBottom
- ESSM
- - MMOE
+ - [MMOE](ch02/ch2.2/ch2.2.5/MMOE)
- PLE
### 推荐系统实战
diff --git a/docs/_sidebar.md b/docs/_sidebar.md
index 4aa1a2a7..ce94aeb1 100644
--- a/docs/_sidebar.md
+++ b/docs/_sidebar.md
@@ -25,7 +25,7 @@
- MOBIUS
- 2.1.3 基于图的召回
- [EGES](ch02/ch2.1/ch2.1.3/EGES)
- - PinSAGE
+ - [PinSAGE](ch02/ch2.1/ch2.1.3/PinSage)
- 2.1.4 基于序列的召回
- [MIND](ch02/ch2.1/ch2.1.4/MIND)
- [SDM](ch02/ch2.1/ch2.1.4/SDM)
@@ -53,7 +53,7 @@
- 2.2.5 多任务学习
- SharedBottom
- ESSM
- - MMOE
+ - [MMOE](ch02/ch2.2/ch2.2.5/MMOE)
- PLE
- 第三章 推荐系统实战
- 3.1 天池入门赛-新闻推荐
diff --git a/docs/ch02/ch2.2/ch2.2.5/MMOE.md b/docs/ch02/ch2.2/ch2.2.5/MMOE.md
index 5c8a81de..48f57a9a 100644
--- a/docs/ch02/ch2.2/ch2.2.5/MMOE.md
+++ b/docs/ch02/ch2.2/ch2.2.5/MMOE.md
@@ -1,21 +1,16 @@
-## 1. 写在前面
+## 写在前面
MMOE是2018年谷歌提出的,全称是Multi-gate Mixture-of-Experts, 对于多个优化任务,引入了多个专家进行不同的决策和组合,最终完成多目标的预测。解决的是硬共享里面如果多个任务相似性不是很强,底层的embedding学习反而相互影响,最终都学不好的痛点。
本篇文章首先是先了解下Hard-parameter sharing以及存在的问题,然后引出MMOE,对理论部分进行整理,最后是参考deepctr简单复现。
-**主要内容**:
-* 背景与动机
-* MMOE模型的理论
-* MMOE模型代码复现
-* 小总
-
-## 2. 背景与动机
+## 背景与动机
推荐系统中,即使同一个场景,常常也不只有一个业务目标。 在Youtube的视频推荐中,推荐排序任务不仅需要考虑到用户点击率,完播率,也需要考虑到一些满意度指标,例如,对视频是否喜欢,用户观看后对视频的评分;在淘宝的信息流商品推荐中,需要考虑到点击率,也需要考虑转化率;而在一些内容场景中,需要考虑到点击和互动、关注、停留时长等指标。
模型中,如果采用一个网络同时完成多个任务,就可以把这样的网络模型称为多任务模型, 这种模型能在不同任务之间学习共性以及差异性,能够提高建模的质量以及效率。 常见的多任务模型的设计范式大致可以分为三大类:
* hard parameter sharing 方法: 这是非常经典的一种方式,底层是共享的隐藏层,学习各个任务的共同模式,上层用一些特定的全连接层学习特定任务模式。
-
- 
+
+

+
这种方法目前用的也有,比如美团的猜你喜欢,知乎推荐的Ranking等, 这种方法最大的优势是Task越多, 单任务更加不可能过拟合,即可以减少任务之间过拟合的风险。 但是劣势也非常明显,就是底层强制的shared layers难以学习到适用于所有任务的有效表达。 **尤其是任务之间存在冲突的时候**。MMOE中给出了实验结论,当两个任务相关性没那么好(比如排序中的点击率与互动,点击与停留时长),此时这种结果会遭受训练困境,毕竟所有任务底层用的是同一组参数。
* soft parameter sharing: 硬的不行,那就来软的,这个范式对应的结果从`MOE->MMOE->PLE`等。 即底层不是使用共享的一个shared bottom,而是有多个tower, 称为多个专家,然后往往再有一个gating networks在多任务学习时,给不同的tower分配不同的权重,那么这样对于不同的任务,可以允许使用底层不同的专家组合去进行预测,相较于上面所有任务共享底层,这个方式显得更加灵活
* 任务序列依赖关系建模:这种适合于不同任务之间有一定的序列依赖关系。比如电商场景里面的ctr和cvr,其中cvr这个行为只有在点击之后才会发生。所以这种依赖关系如果能加以利用,可以解决任务预估中的样本选择偏差(SSB)和数据稀疏性(DS)问题
@@ -28,13 +23,16 @@ MMOE是2018年谷歌提出的,全称是Multi-gate Mixture-of-Experts, 对于
带着这两个问题,下面看下MMOE的细节。
-## 3. MMOE模型的理论及论文细节
+## MMOE模型的理论及论文细节
MMOE模型结构图如下。
-
+
+

+
+
这其实是一个演进的过程,首先hard parameter sharing这个就不用过多描述了, 下面主要是看MOE模型以及MMOE模型。
-### 3.1 混合专家模型
+### 混合专家模型
我们知道共享的这种模型结构,会遭受任务之间冲突而导致可能无法很好的收敛,从而无法学习到任务之间的共同模式。这个结构也可以看成是多个任务共用了一个专家。
先抛开任务关系, 我们发现一个专家在多任务学习上的表达能力很有限,于是乎,尝试引入多个专家,这就慢慢的演化出了混合专家模型。 公式表达如下:
@@ -50,7 +48,7 @@ MOE使用了多个混合专家增加了各种表达能力,但是, 一个门
所以,这种方式的缺口很明显,这样,也更能理解为啥提出多门控控制的专家混合模型了。
-### 3.2 MMOE结构
+### MMOE结构
Multi-gate Mixture-of-Experts(MMOE)的魅力就在于在OMOE的基础上,对于每个任务都会涉及一个门控网络,这样,对于每个特定的任务,都能有一组对应的专家组合去进行预测。更关键的时候,参数量还不会增加太多。公式如下:
$$
@@ -78,8 +76,8 @@ OK, 到这里就把MMOE的故事整理完了,模型结构本身并不是很
> - 互相促进: 可以把多任务模型之间的关系看作是互相先验知识,也称为归纳迁移,有了对模型的先验假设,可以更好提升模型的效果。解决数据稀疏性其实本身也是迁移学习的一个特性,多任务学习中也同样会体现
>- 泛化作用:不同模型学到的表征不同,可能A模型学到的是B模型所没有学好的,B模型也有其自身的特点,而这一点很可能A学不好,这样一来模型健壮性更强
-## 4. MMOE模型的简单复现之多任务预测
-### 4.1 模型概貌
+## MMOE模型的简单复现之多任务预测
+### 模型概貌
这里是MMOE模型的简单复现,参考的deepctr。
由于MMOE模型不是很复杂,所以这里就可以直接上代码,然后简单解释:
@@ -164,8 +162,7 @@ dnn_features_columns = [SparseFeat(feat, feature_max_idx[feat], embedding_dim=4)
这就是整个MMOE网络的搭建逻辑。
-
-**参考**:
+**参考资料**:
* [MMOE论文](https://dl.acm.org/doi/pdf/10.1145/3219819.3220007)
* [Recommending What Video to Watch Next: A Multitask
Ranking System](https://dl.acm.org/doi/pdf/10.1145/3298689.3346997)