decoder-only类型
LLaMA(Large Language Model AI)在4月18日公布旗下最大模型LLAMA3,参数高达4000亿。目前meta已经开源了80亿和700亿版本模型,主要升级是多模态、长文本方面工作。
模型特点:采用标准的decoder-only,tokennizer的分词表128k,24K的GPU集群,15T的公开数据,非英占5%,包括30种语言。训练数据增加7倍,代码量增加2倍。
个人理解:按照Sacling low的研究,当参数一定条件下,增加数据量可以明显提示模型的表达能力。并且研究发展在一定条件下增加数据比增加参数在知识表示方面效果更加显著。当然在Scaling low研究中openai和google的观点从文献上看是对立的,这种对立统一或者帮助我们在设计模型时给出一个指导,数据不足可以通过参加参数提升效果,数据充足情况下可以通过模型学习SFT,LORA、MOE三种学习范式提升效果。
请注意,具体的技术细节、性能指标和应用场景可能会随着模型版本的更新而变化。此外,对于每个版本的详细优缺点,通常需要通过实际的基准测试和使用体验来确定。如果需要最新和最详细的信息,建议查阅官方发布的技术文档或相关的研究论文。
也有将MoE作为一个独立的层[2],将多个MoE结构堆叠在另一个网络中,一个MoE层的输出作为下一层MoE层的输入,其输出作为另一个下一层的输入,其具体过程如下图所示:
MoE代码实现
MoE,即Mixture of Experts它允许模型在不同的任务和数据集上进行训练和微调。MoE结构是一种将多个专家网络结合起来,以便处理各种输入的技术。每个专家网络可以专门处理一种类型的任务或数据,而主网络则负责将输入分配给最合适的专家网络。MoE结构的代码简化的MoE结构的概念性伪代码示例原理:
```python
import torch
import torch.nn as nn
class Expert(nn.Module):
def __init__(self, size):
super(Expert, self).__init__()
self.fc = nn.Linear(size, size)
def forward(self, x):
return self.fc(x)
class MixtureOfExperts(nn.Module):
def __init__(self, size, num_experts, top_k_experts):
super(MixtureOfExperts, self).__init__()
self.experts = nn.ModuleList(Expert(size) for _ in range(num_experts))
self.top_k_experts = top_k_experts
def forward(self, x):
# 假设x是我们的输入,我们将其分发到不同的专家
expert_outputs = [expert(x) for expert in self.experts]
# 选择top-k专家的输出
top_k_indices = torch.topk(expert_outputs, self.top_k_experts, dim=0)[1]
# 将选择的专家输出合并起来
selected_expert_outputs = [torch.index_select(expert_output, 0, top_k_indices) for expert_output, expert in zip(expert_outputs, self.experts)]
# 将所有选定的专家输出相加
combined_output = torch.stack(selected_expert_outputs).sum(0)
return combined_output
# 假设我们的输入大小为256,我们有5个专家,并且我们选择top-2专家
model = MixtureOfExperts(256, 5, 2)
# 假设输入数据batch的大小为32
input_data = torch.randn(32, 256)
# 前向传播
output_data = model(input_data)
MoE类型
MoE类型