Not All Language Model Features Are Linear

本文挑战了线性表示假说,研究发现GPT-2和Mistral 7B等大型语言模型中存在不可约的多维特征,如循环表示,这些特征在特定任务中扮演关键角色。通过稀疏自动编码器,揭示了模型表示的复杂性和多维性质,为进一步理解语言模型的底层算法迈出重要一步。

本文是LLM系列文章,针对《Not All Language Model Features Are Linear》的翻译。

摘要

最近的工作提出了线性表示假说:语言模型通过操纵激活空间中概念(“特征”)的一维表示来进行计算。相反,我们探讨了一些语言模型表示是否可能是内在的多维的。我们首先对不可约多维特征进行严格定义,基于它们是否可以分解为独立的或不同时出现的低维特征。受这些定义的启发,我们设计了一种可扩展的方法,该方法使用稀疏自动编码器来自动查找GPT-2和Mistral 7B中的多维特征。这些自动发现的特征包括引人注目的可解释的例子,例如代表一周中的几天和一年中的几个月的循环特征。我们确定了一些任务,在这些任务中,这些精确的循环用于解决涉及一周中几天和一年中几个月的模运算的计算问题。最后,我们通过对Mistral 7B和Llama 3 8B的干预实验提供了证据,证明这些循环特征确实是这些任务中的基本计算单元,并且我们通过将这些任务的隐藏状态分解为可解释的组件来找到进一步的循环表示。

1 引言

2 相关工作

3 定义和理论

4 稀疏自动编码器查找多维特征

5 大型语言模型中的循环表示

6 讨论

我们的工作对简单的一维线性表示假设提出了一个重要的改进。虽然之前的工作已经令人信服地表明了一维特征的存在,但我们发现了不可分离和不可约的多维表示的证据,这要求我们将特征的概念推广到更高的维度。幸运的是,我们发现现有的特征提取方法,如稀疏自动编码器,可以很容易地应用于发现多维表示。尽管多维表

VoxtralForConditionalGeneration( (audio_tower): VoxtralEncoder( (conv1): Conv1d(128, 1280, kernel_size=(3,), stride=(1,), padding=(1,)) (conv2): Conv1d(1280, 1280, kernel_size=(3,), stride=(2,), padding=(1,)) (embed_positions): Embedding(1500, 1280) (layers): ModuleList( (0-31): 32 x VoxtralEncoderLayer( (self_attn): VoxtralAttention( (k_proj): Linear(in_features=1280, out_features=1280, bias=False) (v_proj): Linear(in_features=1280, out_features=1280, bias=True) (q_proj): Linear(in_features=1280, out_features=1280, bias=True) (out_proj): Linear(in_features=1280, out_features=1280, bias=True) ) (self_attn_layer_norm): LayerNorm((1280,), eps=1e-05, elementwise_affine=True) (activation_fn): GELUActivation() (fc1): Linear(in_features=1280, out_features=5120, bias=True) (fc2): Linear(in_features=5120, out_features=1280, bias=True) (final_layer_norm): LayerNorm((1280,), eps=1e-05, elementwise_affine=True) ) ) (layer_norm): LayerNorm((1280,), eps=1e-05, elementwise_affine=True) (avg_pooler): AvgPool1d(kernel_size=(2,), stride=(2,), padding=(0,)) ) (language_model): LlamaForCausalLM( (model): LlamaModel( (embed_tokens): Embedding(131072, 5120) (layers): ModuleList( (0-39): 40 x LlamaDecoderLayer( (self_attn): LlamaAttention( (q_proj): Linear(in_features=5120, out_features=4096, bias=False) (k_proj): Linear(in_features=5120, out_features=1024, bias=False) (v_proj): Linear(in_features=5120, out_features=1024, bias=False) (o_proj): Linear(in_features=4096, out_features=5120, bias=False) ) (mlp): LlamaMLP( (gate_proj): Linear(in_features=5120, out_features=32768, bias=False) (up_proj): Linear(in_features=5120, out_features=32768, bias=False) (down_proj): Linear(in_features=32768, out_features=5120, bias=False) (act_fn): SiLU() ) (input_layernorm): LlamaRMSNorm((5120,), eps=1e-05) (post_attention_layernorm): LlamaRMSNorm((5120,), eps=1e-05) ) ) (norm): LlamaRMSNorm((5120,), eps=1e-05) (rotary_emb): LlamaRotaryEmbedding() ) (lm_head): Linear(in_features=5120, out_features=131072, bias=False) ) (multi_modal_projector): VoxtralMultiModalProjector( (linear_1): Linear(in_features=5120, out_features=5120, bias=False) (act): GELUActivation() (linear_2): Linear(in_features=5120, out_features=5120, bias=False) ) ) 模型架构如上,devide_map如下: OrderedDict([('audio_tower', 2), ('language_model.model.embed_tokens', 2), ('language_model.model.layers.0', 2), ('language_model.model.layers.1', 2), ('language_model.model.layers.2', 2), ('language_model.model.layers.3', 2), ('language_model.model.layers.4', 2), ('language_model.model.layers.5', 2), ('language_model.model.layers.6', 2), ('language_model.model.layers.7', 2), ('language_model.model.layers.8', 2), ('language_model.model.layers.9', 2), ('language_model.model.layers.10', 2), ('language_model.model.layers.11', 2), ('language_model.model.layers.12', 2), ('language_model.model.layers.13', 2), ('language_model.model.layers.14', 2), ('language_model.model.layers.15', 2), ('language_model.model.layers.16', 2), ('language_model.model.layers.17', 2), ('language_model.model.layers.18', 2), ('language_model.model.layers.19', 2), ('language_model.model.layers.20', 2), ('language_model.model.layers.21', 2), ('language_model.model.layers.22', 2), ('language_model.model.layers.23', 2), ('language_model.model.layers.24', 2), ('language_model.model.layers.25.self_attn', 2), ('language_model.model.layers.25.input_layernorm', 5), ('language_model.model.layers.25.post_attention_layernorm', 5), ('language_model.model.layers.26', 5), ('language_model.model.layers.27', 5), ('language_model.model.layers.28', 5), ('language_model.model.layers.29', 5), ('language_model.model.layers.30', 5), ('language_model.model.layers.31', 5), ('language_model.model.layers.32', 5), ('language_model.model.layers.33', 5), ('language_model.model.layers.34', 5), ('language_model.model.layers.35', 5), ('language_model.model.layers.36', 5), ('language_model.model.layers.37', 5), ('language_model.model.layers.38', 5), ('language_model.model.layers.39', 5), ('language_model.model.norm', 5), ('language_model.model.rotary_emb', 5), ('language_model.lm_head', 5), ('multi_modal_projector', 5), ('language_model.model.layers.25.mlp', 5)]) 运行报错,分析一下
07-26
在当前的研究中,语言模型引导的可解释视频动作推理(Language model guided interpretable video action reasoning)是一个具有前沿性和重要意义的领域。从相关的研究主题来看,像“通过多模式多级transformer进行基于语言的视频编辑(M3L)”这类研究,体现了语言在视频相关处理中的应用,虽然其聚焦于视频编辑,但多模式的思路可以为视频动作推理提供一些启示。多模式多级transformer或许可以在结合语言信息和视频信息上发挥作用,用于对视频动作进行理解和推理,因为在处理视频时,语言能够提供更多语义层面的引导,帮助模型更好地解读视频中的动作。 而“将预训练语言编码器集成到自动驾驶轨迹预测模型中”的研究,反映出语言编码器在模型中的应用方式。在视频动作推理中,也可以借鉴这种将语言编码器集成到推理模型的思路,通过语言模型的引导来提高视频动作推理的可解释性。语言编码器可以将文本描述转化为模型能够处理的特征,结合视频的视觉特征,使得模型在推理视频动作时能够有更丰富的信息,并且在推理过程中能够基于语言信息给出更具可解释性的结果。 例如,在一个视频中,当出现人物的一系列动作时,语言模型可以根据预先设定的语义规则和上下文信息,对这些动作进行描述和解释,引导推理模型对动作的意图和后续发展进行合理的推理。同时,这种结合也有助于在推理结果出现偏差时,根据语言信息进行调整和修正,提高推理的准确性和可靠性。 ```python # 这里简单模拟一个结合语言信息和视频特征进行动作推理的伪代码示例 import torch import torch.nn as nn # 假设的视频特征提取器 class VideoFeatureExtractor(nn.Module): def __init__(self): super(VideoFeatureExtractor, self).__init__() # 定义视频特征提取的层 self.conv = nn.Conv2d(3, 64, kernel_size=3) def forward(self, video_frames): return self.conv(video_frames) # 假设的语言编码器 class LanguageEncoder(nn.Module): def __init__(self): super(LanguageEncoder, self).__init__() # 定义语言编码的层 self.embedding = nn.Embedding(1000, 128) self.gru = nn.GRU(128, 128) def forward(self, text_input): embedded = self.embedding(text_input) output, _ = self.gru(embedded) return output # 结合视频特征和语言特征的动作推理模型 class ActionReasoningModel(nn.Module): def __init__(self): super(ActionReasoningModel, self).__init__() self.video_extractor = VideoFeatureExtractor() self.language_encoder = LanguageEncoder() self.fc = nn.Linear(64 + 128, 10) # 假设输出10种动作类别 def forward(self, video_frames, text_input): video_features = self.video_extractor(video_frames) language_features = self.language_encoder(text_input) combined_features = torch.cat((video_features.view(-1, 64), language_features.view(-1, 128)), dim=1) output = self.fc(combined_features) return output ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UnknownBody

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值