1 transformer /LLM/self attention机制回顾
真正的输出是下一个toklen的概率分布
- 每一个token embedding成一个向量
- 每一层得到新的vector sequence
- 最后一层最后一个向量unembedding
- 向量转回token
- 向量线性变换成概率分布(取每个token的概率分布)
- 红色的向量做加权求和+激活函数变成蓝色向量的一个数值(一个神经元的输出)
2 怎么知道一个神经元在做什么
- 启动——>这个神经元的输出大于0
- 但这不能断定(比如这里的说脏话)就是这个神经元导致的,只能说明有相关性,不能说明有因果性
- 这样就有一定程度的因果关系
- 什么叫移除?
- 这个神经元的输出设置成0可能对其他神经元也有影响
- 有的方法中把神经元的输出设置成平均值
- What does the Knowledge Neuron Thesis Have to do with Knowledge? 202405 arxiv
- 这是掌管单数/复数的神经元
- 抑制这个神经元,输出几率的变化
- 红色是输出概率分布有显著变化的词
- 对内容相关神经元进行抑制的时候,多数情况下,没法改变最终的输出
- 比如上图,把管复数的神经元移除后,最终还是输出these
- 因为除了这个神经元外,还有很多神经元可能都在共同管理这件事
- 抹掉单一神经元,对语言模型最终的输出多数情况下是没有影响的
2.1 一个神经元可能也会管多个事情
- 上图列举了某一个神经元会让他启动的句子,颜色更深表示更相关
- 让他启动的例子太多了根本不知道这个神经元在干什么
- 让chatgpt解释一下,发现也无法整理出在干什么
2.2 为什么么不是一个神经元负责一个任务
- 如果真是一个神经元负责一个任务,那么模型可以做的事情就很有限
- 对于llama3 8B 来说,一层的隐藏维度是4096,相当于一层中有 4096 个“神经元”在参与计算。
- 如果一个神经元负责一个任务,那么只能支持4096个任务
- 如果多个神经元组合负责一个任务,那么即使每个神经元只有启动不启动两个状态,那么也有2^4096 种可能性
- 对于llama3 8B 来说,一层的隐藏维度是4096,相当于一层中有 4096 个“神经元”在参与计算。
3 一层神经元在做什么
3.1 功能向量
- 假设每一个功能都有一组神经元的组合形成
- 比如这里,如果要拒绝请求的话,那么第一个第三个和最后一个神经元需要被激活
- 我们将这几个被激活的神经元组成的向量成为“拒绝请求”这一特定功能的功能向量
- 那么这一层输出的representation是否具备这一功能,取决于表征和“拒绝请求”这一特定功能的功能向量的接近程度
3.2 如何找这个功能向量
- 功能向量可能藏在某个实际得到的表征向量里面
- 但这个表征里面可能也有其他的内容
- 这里我们找很多不同的,LLM都会拒绝的句子
- 那么平均所有拒绝的情况,得到的就是拒绝向量+其他向量的平均
- 再找其他没有拒绝的句子,得到这些句子表征的平均值
- 这里假设拒绝句子和不拒绝句子分别收集到一大堆之后,两个”其他表征“的平均是很接近的
- 拒绝的平均-不拒绝的平均=拒绝向量
把拒绝功能向量加到表征里面,如果本来允许的向量变拒绝了,那么可能我们加进去的向量就带有拒绝的的功能
Refusal in Language Models Is Mediated by a Single Direction 202406arxiv
- 一旦把拒绝的向量加进去,就会拒绝请求
也有反向编辑,减去某个功能向量让他失去某个能力
3.3 谄媚向量
Steering Llama 2 via Contrastive Activation Addition
3.4 说真话的向量
TruthX: Alleviating Hallucinations by Editing Large Language Models in Truthful Space 202402 arxiv
3.5 找到一层神经元的所有功能向量
- 前面的功能向量都是一个一个找出来的
- 那有没有什么办法把一层所有的功能向量都找出来呢?
- 这里假设:每当这一层输出一些表征的时候,这个表征都是由功能向量组合由来的
- e 是不属于功能向量组成的那一部分
- 对于这个问题,我们首先想到的约束条件是,e1.。。en越小越好
- 但是如果只有这个条件的话,会得到一个很trival的结果,就是v1.。。vk都是单元向量,此时e1.。。。en都是零向量
- 我们希望选择的功能向量越少越好
- 也即α越小越好
- 那么loss function就多了一项
- 这个可以用SAE解决(相当于train一个SAE)
- 功能向量的数目事先就需要定
- 这里是事先定了3400万个
- 比如31164353号负责产生和金门大桥有关的东西(英语、影像、俄文、日本的内容都涵盖)
- 把1013764号从表征里面加上/剪掉,模型就会debug
- 80091号是“AI认为自己是AI的向量”这个功能表征
- 对于大部分排在前面的化学元素,基本上都有对应的功能向量
4 一群模型在做什么
- 语言模型模拟的是人类真正的语言
- 语言模型的模型是用来模拟语言模型的
Linearity of Relation Decoding in Transformer Language Models
语言模型在参数里存储了大量知识
- 可能是这样的 对主词进行处理理解,得到一个表征x(和原来语言模型是一样的)
- 根据接下来的关联性, is located in 会决定一个linear function,把x作为输入,得到输出,输出unembedding转到词汇空间后,taipei记录最高
- 也就是is located in产生向量Wl和bl
- 即使前面的"The Taipei"换了 is lcoated in 对应的linear function是一样的,只是把x换成x‘
- 如果改变了代表关系的篇次,那就相当于生成了另一个linear function
- 变成了不同的W,h
- 那语言模型的最后几个layer真的能用一个linear funtion 概括么?
- 检测faithfulnees ,看是否和真实模型有对应
- 而这边的linear function需要自己求出来
- 需要准备一些训练资料
- 输入x和y,希望得到wl和bl
- 找到Linear function后,接下来就给他没见过的测试资料,对比语言模型的输出和linear function的输出
Linearity of Relation Decoding in Transformer Language Models 202308arxiv
结论是
- 有一些relation关系非常高
- 有一些faithfulness也不是很强
4.1 模型剪枝
4.2 重新审视residual +让模型自己说出中间几层在干什么
- 如果我们把resifual network反过来看,相当于直接从输入到输出的“高速公路”,每一层类似于加了一点东西进去
- 那既然最后一层可以unembedding ,那么前面这些层能不能也unembedding,变成文字的概率分布呢?
BERT's output layer recognizes all hidden layers? Some Intriguing Phenomena and a simple way to boost BERT 2020arxkv
最后的unembedding层,接到之前的每一层
Language Models Implement Simple Word2Vec-style Vector Arithmetic
- 把冒号位置的表征输出出来,经过unembedding,看看是什么
不同的问法,机制是不一样的
4.3 每一个residual stream都有什么含义?
每一个加进入的路径(vi)进行unembedding,看看能输出什么