MMOE:多门控专家混合用于多任务推荐
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)