MoE 混合专家模型

MoE特点

做了特征增广;门控机制保证了特征增广的同时模型不会过拟合。

大模型中会使用到MoE技术。

简单实现

实现一个简单的linear混合专家模型。这里每个专家是一个Linear。

MoE简单理解
import torch
import torch.nn as nn
import torch.nn.functional as F

# 一个专家
class Linear(nn.Module):
  def __init__(self, in_features, out_features):
    super().__init__()
    self.fc = nn.Linear(in_features, out_features)

  def forward(self, x):
    return self.fc(x)

class MoELayer(nn.Module):
  # in_features是每个样本的维度
  def __init__(self, num_experts, in_features, out_features):
    super().__init__()
    self.num_experts = num_experts
    # 实现几个专家
    self.experts = nn.ModuleList([Linear(in_features, out_features) for _ in range(self.num_experts)])
    # 门控机制:对某个样本,为每个专家生成一个权重
    self.gate = nn.Linear(in_features, num_experts)
  def forward(self, x):  # x:batch x in_dim
    # 经过每一个专家
    expert_outputs = torch.stack([ep(x) for ep in self.experts], dim=1) # b x num_experts x out_dim
    # 不同样本,得到每个专家的概率,概率和为1
    weights = F.softmax(self.gate(x), dim=-1) # b x num_experts 
    # 不同专家的结果加权和 b x out_dim
    out = torch.bmm(weights.unsqueeze(1), expert_outputs).squeeze(1)  # 批量矩阵乘法 第一个维度是批量
    return out


batch_size = 10
in_fea = 15
out_fea = 5
num_experts = 3

model = MoELayer(num_experts, in_fea, out_fea)
x = torch.rand(batch_size, in_fea) # 样本:10个样本 每个样本是一个15维向量
out = model(x)
print(out.shape) # 10,5

参考

MoE讲解视频

【项目资源】:包含前端、后端、移动开发、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源,毕业设计等各种技术项目的源码。包括C++、Java、python、web、C#、EDA等项目的源码。 【适用人群】:适用于希望学习不同技术领域的初学者或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。 【项目质量】:所有源码都经过测试,可以直接运行。功能在确认正常工作后才上传。 【项目资源】:包含前端、后端、移动开发、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源,毕业设计等各种技术项目的源码。包括C++、Java、python、web、C#、EDA等项目的源码。 【适用人群】:适用于希望学习不同技术领域的初学者或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。 【项目质量】:所有源码都经过测试,可以直接运行。功能在确认正常工作后才上传。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值