MMOE:多门控专家混合用于多任务推荐

FreeGuideOnline 最新 2026-06-24

python import tensorflow as tf from tensorflow.keras.layers import Dense, Softmax, Multiply, Add, Input

def expert_network(x, units, name): h = Dense(units, activation='relu', name=name+'_d1')(x) return Dense(units, activation='relu', name=name+'_d2')(h)

def gate_network(x, num_experts, name): return Dense(num_experts, activation='softmax', name=name)(x)

构建 MMOE 模块

inputs = Input(shape=(input_dim,)) num_experts = 4 num_tasks = 3 expert_units = 128

创建专家列表

experts = [expert_network(inputs, expert_units, name=f'expert_{i}') for i in range(num_experts)] expert_outputs = tf.stack(experts, axis=1) # (batch, num_experts, units)

为每个任务生成融合表示

task_inputs = [] for k in range(num_tasks): gate = gate_network(inputs, num_experts, name=f'gate_{k}') gate = tf.expand_dims(gate, axis=2) # (batch, num_experts, 1) weighted = Multiply()([expert_outputs, gate]) task_rep = tf.reduce_sum(weighted, axis=1) # (batch, units) task_inputs.append(task_rep)

构建各个任务的塔

outputs = [] for idx, rep in enumerate(task_inputs): tower = Dense(64, activation='relu')(rep) tower = Dense(1, activation='sigmoid', name=f'task_{idx}_out')(tower) outputs.append(tower)

model = tf.keras.Model(inputs=inputs, outputs=outputs)