问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

大模型的可视化——探索大模型“黑盒”

创作时间:
作者:
@小白创作中心

大模型的可视化——探索大模型“黑盒”

引用
CSDN
1.
https://blog.csdn.net/qq_63708623/article/details/144867565

目录
一、前言
二、Transformer Decoder
模型结构
输入输出的处理方式
注意力矩阵
三、Qwen2.5
四、可视化

一、前言

在深度学习和人工智能领域,大模型(如GPT、BERT等)已经成为了推动技术革新和应用的核心。然而,随着这些模型的不断增大,如何理解和调试这些复杂的模型成为了一个亟待解决的挑战。尽管这些大模型通常拥有出色的预测能力,但它们常常被视为“黑盒”,即我们很难直接理解它们是如何做出决策的。因此,大模型的可视化成为了一个极为重要的研究方向,旨在帮助我们洞察模型内部的机制、提高模型的可解释性、并优化其性能。

本文将以Qwen2.5模型为例,实现大模型的可视化。Qwen2.5为因果语言模型 (Causal Language Models),也被称为自回归语言模型 (Autoregressive Language Models) 或仅解码器语言模型 (Decoder-only Language Models) ,是一种机器学习模型,旨在根据序列中的前导token预测下一个token。换句话说,它使用之前生成的token作为上下文,一次生成一个token的文本。“因果”方面指的是模型在预测下一个token时只考虑过去的上下文(即已生成的token),而不考虑任何未来的token。因果语言模型被广泛用于涉及文本补全和生成的各种自然语言处理任务。它们在生成连贯且具有上下文关联性的文本方面尤其成功,这使得它们成为现代自然语言理解和生成系统的基础。方便起见,选用最小的Qwen2.5-0.5B模型进行可视化。小编电脑显卡为RTX3060,显存6G。经过实测可无压力运行Qwen2.5-0.5B模型。

GitHub地址:GitHub - QwenLM/Qwen2.5: Qwen2.5 is the large language model series developed by Qwen team, Alibaba Cloud.
https://github.com/QwenLM/Qwen2.5

Hugging Face地址:Qwen/Qwen2.5-0.5B · Hugging Face
https://huggingface.co/Qwen/Qwen2.5-0.5B

官方文档:Qwen
https://qwen.readthedocs.io/zh-cn/latest/index.html

二、Transformer Decoder

模型结构

自回归语言模型是通过Transformer Decoder实现的,标准的Transformer Decoder框架如下图(红色部分),对于Decoder-only的自回归模型,不需要交叉注意力机制(下图蓝色部分)与编码器做特征交互:

因此,对于Decoder-only模型,实际结构为:

输入输出的处理方式

训练好的自回归语言生成模型具有强大的语言生成功能,语言生成的原理就是给定某个字或词语,模型将会根据前面所有的内容,生成后续文本。

我们将输入中的一个时刻称为1个token,token是指对一段文本或语言数据进行处理时的基本单元。token可以是一个字、可以是一个词、可以是一个标点、可以是一个标识符。例如:

  • "我爱机器学习。"
  • 可被分解成5个tokens:["我", "爱", "机器", "学习", "。"]

token的分解方式因不同模型、不同词表、不同规则而异。

1.根据给定token预测下一个token

例如,给定“今天”,模型会根据输入“今天”输出一个能使语句连贯的概率分布,我们取概率最大的词语,假设这个概率最大的输出是“天气”,我们就实现了一个词语的生成。

2.根据给定token生成一句话

给定“今天”,模型会输出下一个词的概率分布,假设我们取概率最大的“天气”(PS:取概率最大的词为贪婪搜索,实际上这里还有更好的取值方式,例如集束搜索,后续再做讨论)。当我们获取到下一个词语后,我们将“今天”、“天气”一起输入到模型中,模型会输出接下来词语的概率分布,我们依然选择概率最大的词语“真不错”。最后将“今天”、“天气”、“真不错”输入至模型中,模型认为这句话讲完了,就会输出一个用于结束的标识符“”。我们可以在程序中判断是否生成了“”,用于跳出循环结束生成。

注意力矩阵

注意力机制是深度学习领域中一个重要的概念,它模拟了人类在处理信息时能够聚焦于当前任务最相关部分的能力。在深度学习模型中,注意力机制允许模型在处理序列数据时动态地分配不同的关注度,从而捕捉到数据中的关键信息。

注意力的计算公式为:

其中,最重要的是

计算形成的注意力矩阵,这实际上是计算Q中的每个token与K中的每个token之间的相似度,通过对注意力矩阵进行可视化,我们可以发现一些特征学习的规律 。

Decoder中最终要的结构为多头自注意力(Masked Multi-Head Attention),多头自注意力机制是自注意力的一个扩展,它将上述过程复制多次(即“头”),每个头学习到的表示略有不同,然后将这些表示拼接起来,进一步增强了模型捕捉复杂关系的能力。

三、Qwen2.5

Qwen2.5-0.5B模型对标准的Decoder-only结构进行了改进,如下图。Qwen2.5-0.5B由一个改进的Transformer Decoder结构组成,堆叠24层。首先通过Embedding,将词语转化为连续的向量,随后通过RMSNorm对特征进行归一化,接下来对特征进行自注意力机制特征提取,进行残差连接后继续进行归一化,再用多层感知机(MLP)处理特征,最后再进行一次残差连接。最后,使用全连接层处理得到的特征,输出概率分布。

Qwen2.5-0.5B模型的对话模板如下:


<|im_start|>{{role}}
{{content}}<|im_end|>  

role表示角色,常见角色有三个:

  • 系统:system。能够指导模型执行特定操作或生成具有特定特性的文本,例如改变语气、风格或内容。内容默认为 “You are Qwen, created by Alibaba Cloud. You are a helpful assistant.” 。
  • 用户:user。用户输入。
  • AI:assistant。大模型给出的回复。

content表示角色的消息内容。下面为一个完整示例:


<|im_start|>system
You are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>
<|im_start|>user
你好<|im_end|>
<|im_start|>assistant
你好!很高兴为您服务。有什么我可以帮助您的吗?<|im_end|>
<|im_start|>user
你是谁<|im_end|>
<|im_start|>assistant
我是阿里云推出的一种超大规模语言模型,我叫通义千问。我的目标是通过理解和生成人类的语言,为用户提供智能、准确的答案和信息。我会不断学习和进步,以更好地服务于用户。如果您有任何问题或需要帮助,请随时告诉我,我会尽力提供支持。<|im_end|>
<|im_start|>assistant

对模板进行分词:


['<|im_start|>', 'system', '\n', 'You', ' are', ' Q', 'wen', ',', ' created', ' by', ' Alibaba', ' Cloud', '.', ' You', ' are', ' a', ' helpful', ' assistant', '.', '<|im_end|>', '\n', '<|im_start|>', 'user', '\n', '你好', '<|im_end|>', '\n', '<|im_start|>', 'assistant', '\n', '你好', '!', '很高兴', '为您', '服务', '。', '有什么', '我可以', '帮助', '您的', '吗', '?', '<|im_end|>', '\n', '<|im_start|>', 'user', '\n', '你是', '谁', '<|im_end|>', '\n', '<|im_start|>', 'assistant', '\n', '我是', '阿里', '云', '推出', '的一种', '超', '大规模', '语言', '模型', ',', '我', '叫', '通', '义', '千', '问', '。', '我的', '目标', '是', '通过', '理解和', '生成', '人类', '的语言', ',', '为', '用户提供', '智能', '、', '准确', '的答案', '和', '信息', '。', '我会', '不断', '学习', '和', '进步', ',', '以', '更好地', '服务于', '用户', '。', '如果您', '有任何', '问题', '或', '需要', '帮助', ',请', '随时', '告诉我', ',', '我会', '尽力', '提供', '支持', '。', '<|im_end|>', '\n', '<|im_start|>', 'assistant', '\n']  

分词后的序列,是模型中真正输入的序列,模型的输入为每个词在词表中对应的索引。从模板中我们可以看出,模板已经预定义了下一轮对话的开头:“<|im_start|>assistant\n”。模型将会参照所有的历史对话,继续生成后续的内容,直至模型产生“<|im_end|>”,则此轮对话结束。

四、可视化

为了实现注意力的可视化,使用一段简单的对话作为测试。对话如下:


用户:你好
大模型:你好/!/很高兴/为您/服务/。/有什么/我可以/帮助/您的/吗/?  

为了方便观察,将大模型生成的token以“/”进行分割,以便观察模型每时刻的输入输出。

Qwen2.5-0.5B模型每一层注意力中,共有14个头。当模型输出第一个token“你好”时,对第一层decoder中注意力的14个头进行了注意力矩阵的可视化展示,如下图所示:

放大其中几张图,如下所示:

在注意力的可视化中,横坐标表示这个token与之前token的相关性,例如在下图的一个注意力头中,“你好”这个token与“Cloud”、“helpful”、“assistant”这三个词具有一定的相关性。而当用户输入“你好”时,大模型需要根据自己的身份做出响应,而“Cloud”、“helpful”、“assistant”等词语就能很好的表示出大模型的身份。

而纵坐标表示,某一token在哪些词语的注意力计算重参与了作用。在下图中我们可以发现“\n”、“,”、“.”等token在注意力图中呈竖直的分布,说明此注意力头更多关注分割符等特征,这些特征在语义的停顿、分割等问题中起到了重要的作用。

同时,为了探究不同层级注意力的不同,在输出“<| im_end|>”时,还对最后一层的注意力进行可视化,如下图所示:

放大其中几张图,如下所示:

在最后一层的注意力中,我们发现,竖状的注意力更多。也就是说,深层的decoder更加关注某一token在哪些词语的注意力计算重参与了作用。此外,我们发现注意力变得更加均匀,很少出现在某一点上注意力格外突出的情况,这也给深层decoder的解释问题上带来了困难。

类似地,在卷积神经网络中,深层次的特征图同样难以解释,这也正是深度学习面临痛点之一,即可解释性较差。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号