开源大模型新王 Reflection70B 横空出世,性能惊艳超越 GPT-4o 和 Llama3.1

aixo 2024-09-09 10:47:14
大模型 2024-09-09 10:47:14

最近,开源大模型社区再次「热闹」了起来,主角是 AI 写作初创公司 开发的新模型。

它的底层模型建立在 Meta .170B 上,并使用原始的 Llama chat 格式,确保了与现有工具和 的兼容性。

这个模型横扫了 MMLU、MATH、、GSM8K,在每项基准测试上都超过了 GPT-4o,还击败了405B 的 .1。

凭借如此惊艳的效果,被冠以开源大模型新王。该模型更是由两位开发者( CEO Matt 和 AI 创始人 Sahil )花了3周完成,效率可谓惊人。

能不能经受住社区的考验呢?今天 AI 模型独立分析机构 进行了独立评估测试,结果有点出乎意料。

该机构表示, .170B 的 MMLU 得分仅与 相同,并且明显低于 .170B。

图源:

还有科学推理与知识(GPQA)和定量推理(MATH)基准测试的结果,同样不如 .170B。

图源:

此外, 上 社区的一个帖子比较了 与.1、权重的差异,结果显示, 模型似乎是使用了经过 LoRA 调整的 而不是 .1。

贴主还提供了以上模型权重比较结果的代码来源。

fromtransformersimportAutoModelForCausalLM,AutoTokenizerimporttorchimportmatplotlib.pyplotaspltimportseabornassnsbase_model_name="meta-llama/Meta-Llama-3-70B-Instruct"chat_model_name="mattshumer/Reflection-Llama-3.1-70B"base_model=AutoModelForCausalLM.from_pretrained(base_model_name,torch_dtype=torch.bfloat16)chat_model=AutoModelForCausalLM.from_pretrained(chat_model_name,torch_dtype=torch.bfloat16)defcalculate_weight_diff(base_weight,chat_weight):returntorch.abs(base_weight-chat_weight).mean().item()defcalculate_layer_diffs(base_model,chat_model):layer_diffs=[]forbase_layer,chat_layerinzip(base_model.model.layers,chat_model.model.layers):layer_diff={'input_layernorm':calculate_weight_diff(base_layer.input_layernorm.weight,chat_layer.input_layernorm.weight),#'mlp_down_proj':calculate_weight_diff(base_layer.mlp.down_proj.weight,chat_layer.mlp.down_proj.weight),#'mlp_gate_proj':calculate_weight_diff(base_layer.mlp.gate_proj.weight,chat_layer.mlp.gate_proj.weight),#'mlp_up_proj':calculate_weight_diff(base_layer.mlp.up_proj.weight,chat_layer.mlp.up_proj.weight),'post_attention_layernorm':calculate_weight_diff(base_layer.post_attention_layernorm.weight,chat_layer.post_attention_layernorm.weight),'self_attn_q_proj':calculate_weight_diff(base_layer.self_attn.q_proj.weight,chat_layer.self_attn.q_proj.weight),'self_attn_k_proj':calculate_weight_diff(base_layer.self_attn.k_proj.weight,chat_layer.self_attn.k_proj.weight),'self_attn_v_proj':calculate_weight_diff(base_layer.self_attn.v_proj.weight,chat_layer.self_attn.v_proj.weight),'self_attn_o_proj':calculate_weight_diff(base_layer.self_attn.o_proj.weight,chat_layer.self_attn.o_proj.weight)}layer_diffs.append(layer_diff)returnlayer_diffsdefvisualize_layer_diffs(layer_diffs):num_layers=len(layer_diffs)num_components=len(layer_diffs[0])fig,axs=plt.subplots(1,num_components,figsize=(24,8))fig.suptitle(f"{base_model_name}<>{chat_model_name}",fontsize=16)fori,componentinenumerate(layer_diffs[0].keys()):component_diffs=[[layer_diff[component]]forlayer_diffinlayer_diffs]sns.heatmap(component_diffs,annot=True,fmt=".6f",cmap="YlGnBu",ax=axs[i],cbar_kws={"shrink":0.8})axs[i].set_title(component)axs[i].set_xlabel("Layer")axs[i].set_ylabel("Difference")axs[i].set_xticks([])axs[i].set_yticks(range(num_layers))axs[i].set_yticklabels(range(num_layers))axs[i].invert_yaxis()plt.tight_layout()plt.show()layer_diffs=calculate_layer_diffs(base_model,chat_model)visualize_layer_diffs(layer_diffs)

还有人贴出了 Matt 在 Face 对 配置文件名称的更改,可以看到从 到 .170B 的变化。

这样的事实摆在眼前,似乎让人不得不信。各路网友也开始发声附和,有人表示自己从一开始就怀疑它是 ,当用德语问模型一些事情时,它却用英语回答。这种行为对于 非常常见。

还有人奇怪为什么 模型一开始就得到了如此多的炒作和关注,毕竟第一个谈论它是「顶级开源模型」的人是开发者本人(Matt)。而且更确切地说,模型是微调的。

更有人开始质疑开发者(Matt),认为他只是这家公司()的利益相关者,试图通过炒作来增加价值,实际上却对这项技术一无所知。

在被质疑 的基础模型可能是 而非 .170B 时,Matt 坐不住了,现身进行了澄清,并表示是 Face 权重出现了问题。

就在几个小时前,Matt 称已经重新上传了权重,但仍然存在问题。同时他们开始重新训练模型并上传,从而消除任何可能出现的问题,应该很快就会完成。

当被问到为何需要重新训练时,Matt 表示本不需要这样做,但已经尝试了所有方法。无论做什么, Face 上 模型都会出现问题,导致离预期中的性能差得远。

当然 Matt 还面临更多质疑,比如对 的投资情况、为什么 Face 上的基础模型为 而不是 .1以及基准中有关 的问题。

Matt 一一进行了解释。(以下标引用)

1. 我是一个超级小的投资者(1000美元),只是一次支持性的投资,因为我认为 Sahil 很棒。

2. 至于为什么基础模型是 ,我们不知道。这就是为什么我们从头开始再训练,应该很快完成。

3. 那些尝试了 并拥有早期访问权限的用户获得了与托管 API 截然不同的体验,我们需要弄清楚这一点。

4. 不确定什么是 ,但我们检查了污染,将在下周与405B(或更早)一起发布数据集,到时候可以查看。

至于重新训练后的 表现如何?我们拭目以待。