这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

最近,开源大模型社区再次「热闹」了起来,主角是 AI 写作初创公司 HyperWrite 开发的新模型 Reflection 70B。它的底层模型建立在 Meta Llama 3.1 70B Instruct 上,并使用原始的 Llama chat 格式,确保了与现有工具和 pipeline 的兼容性。这个模型横扫了 MMLU、MATH、IFEval、GSM8K,在每项基准测试上都超过了 GPT-4o,还击败了 405B 的 Llama 3.1。凭借如此惊艳的效果,Reflection 70B 被冠以开源大模型新王

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

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

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

这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

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

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

该机构表示,Reflection Llama 3.1 70B 的 MMLU 得分仅与 Llama 3 70B 相同,并且明显低于 Llama 3.1 70B

这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

                                          图源:https://x.com/ArtificialAnlys/status/1832505338991395131

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

这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

                                    图源:https://x.com/ArtificialAnlys/status/1832457791010959539

此外,Reddit 上 LocalLLaMA 社区的一个帖子比较了 Reflection 70B 与Llama 3.1、Llama 3 权重的差异,结果显示,Reflection 模型似乎是使用了经过 LoRA 调整的 Llama 3 而不是 Llama 3.1

这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

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

from transformers 
import AutoModelForCausalLM, AutoTokenizer
import torch
import matplotlib.pyplot as plt
import seaborn as sns

base_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)

def calculate_weight_diff(base_weight, chat_weight):
    return torch.abs(base_weight - chat_weight).mean().item()

def calculate_layer_diffs(base_model, chat_model):
    layer_diffs = []
    for base_layer, chat_layer in zip(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)
    return layer_diffs

def visualize_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)

    for i, component in enumerate(layer_diffs[0].keys()):
        component_diffs = [[layer_diff[component]] for layer_diff in layer_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 Shumer 在 Hugging Face 对 Reflection 70B 配置文件名称的更改,可以看到从 Llama 3 70B Instruct 到 Llama 3.1 70B Instruct 的变化。

这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

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

这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

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

这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

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

这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

在被质疑 Reflection 70B 的基础模型可能是 Llama 3 而非 Llama 3.1 70B 时,Matt Shumer 坐不住了,现身进行了澄清,并表示是 Hugging Face 权重出现了问题

这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

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

这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

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

这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

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

这就翻车了?Reflection 70B遭质疑基模为Llama 3,作者:重新训练

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

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

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

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

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

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

参考链接:

Reflection-Llama-3.1-70B is actually Llama-3.
byu/realmaywell inLocalLLaMA

给TA打赏
共{{data.count}}人
人已打赏
应用

英伟达市值一周蒸发4060亿美元,AI时代「卖铲人」怎么就不香了?

2024-9-8 13:28:00

应用

北大王立威:理论视角看大模型,为什么AI既聪明又愚蠢 | 智者访谈

2024-9-8 13:39:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索