李宏毅genai笔记:LLM内部机制

发布于:2025-07-07 ⋅ 阅读:(28) ⋅ 点赞:(0)

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 种可能性

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,看看能输出什么