一段时间之前,一篇给Transformer“开盒”的论文发表了,虽然很感兴趣,但最近真的是很忙,都在看另一个领域的相关论文,就一直没看。
然后据说作者之一是浙大一名大四学生,所以决定今天来看一下。
1.聊聊可解释性
(相关资料图)
既然是关于可解释性的,又要再谈点东西了。
首先,可解释性是个很复杂的东西,是分层次、分方面的。
对于神经网络,我们当然可以尝试分析每个神经元的可能作用,例如在GPT-2中,我们可以找到一个可能和输出“no”有关的神经元,但是对于三十万(以GPT-2为例,GPT-2甚至不是太大的模型)个神经元来说,我们一个个去理解是困难的,把三十万个神经元当做一个整体考虑就更麻烦了。
对于CNN的卷积核也是一样,我们也许可以分析一个(浅层)卷积核可能在做什么(例如做边缘提取),但是对于整个CNN网络很可能就无能为力。
即使是可解释性非常出色的决策树,集成为随机森林,可解释性也会快速下降。
除了整体与部分的辩证之外,可解释性还分方面。例如我们也许可以从输出结果中进行一定的解释,但是我们可能无法解释这种结果是如何从“随机”中一步步变的“专业”的。
2.Transformer的可解释性分析
Transformer的论文名是《Attention is all you need》。attention并不是Transformer发明的,Transformer只是将它从辅助放到了C位。
attention的思想其实就是显示建立输入之间的交互。例如对于“旺财是一只可爱的小狗”,我们就可以建立“旺财”和“是”“一只”...“小”“狗”的联系,很明显,“旺财”和“狗”的关系更加密切,那“旺财”和“狗”之间的分数应该会更高一些,或者说,“旺财”会更“关注”于“狗”,这就有了可解释性的基础。
但是问题也随即而来,一开始Transformer是随即初始化的,“旺财”并不知道该关注谁,所以“旺财”和“是”“一只”...“小”“狗”之间的分数基本上都是相似的,可是通过训练,“旺财”就会更加关注“狗”了,这是怎么发生的呢?
更麻烦的是,Transformer的训练方式往往都简单地显得幼稚,例如BERT的完形填空和GPT的预测下一个词(严格来讲是token)。
这里主要看一下后者。简单来说,就是让模型从“旺财”开始,一个词一个词的预测,先预测出“是”;然后句子就变成了“旺财是”,再从“旺财是”出发预测“一只”...一直到预测出完整的“旺财是一只可爱的小狗”。
整个过程中并没有谁来告诉模型怎么建立attention,结果模型不仅能学会,还能学的很好。
没错,ChatGPT就是单纯靠这种学习任务就能获得极其优异的表现的。
当然,有人会说,不是有人证明了Transformer是图灵完备的,等价或近似于图灵机吗?这不就解释了。
虽然“图灵完备”这样的名字听上去比较唬人,但是需要注意,又不是只有Transformer这一种模型是图灵完备的,非线性RNN甚至SVM这样的模型也能近似于图灵机。
但是Transformer确是这些模型中表现的很出色的一个模型,这就很有问题。
3.给单层Transformer定性
研究一般都是从简单的开始,开盒当然要先开单层Transformer。
需要说明的是,这篇论文是进行了严格的数学证明的,不过本文还是只说结论了。
作者认为,单层Transformer是一种判别式扫描算法,简单来说,attention学习过程中出现了两个倾向:
(1)频率偏差。简单来说,如果“旺财”和“狗”在数据集中经常一起出现,那么“旺财”就会更倾向于关注“狗”。(在这里偏差可以简单理解成“倾向”)
(2)判别偏差。简单来说,模型在预测的时候更关注与一些独一无二的东西,而不是一些通用的东西(例如不倾向于关注to、am之类的词)
(虽然论文和一些分析文章并没有仔细解释什么事判别式扫描算法,但简单理解就是模型会扫描之前的输入并从中决定哪些是重要的)
4.学习过程
给单层Transformer定性后,我们就要搞清楚这个过程是怎么形成的。
整个过程分为两个阶段:
(1)scan:每个词的注意力集中在一些关键词上,注意力快速变的稀疏。不过这一过程并不会持续到单纯集中在一个词上,而是集中在几个词上并达到平衡状态
(2)snap:到达一个临界点后,模型attention分布不会发生太大的改变,基本可以认为是一种冻结状态,或者说模型已经学习完成了。或者说一个人建立了某种信仰,这种信仰之后就很难再改变了
可以看到,这个过程其实类似于:
【花师小哲】当代炼金术(神经网络)前沿(23)——transformer涌现了傅里叶变换
5.说明与不足
首先,因为本文是严格的数学证明,但是我们对模型训练过程中有很多不清楚的地方,所以还是有些假设的:(1)没有位置编码;(2)长序列;(3)decoder收敛比self-attention快(因为是重点关注self-attention,要是性能提升是decoder的功劳那就麻烦了)。这里稍微放下模型架构图,这里不详细展开:
然后,本文也是存在很多不足的,例如只研究了单层Transformer(多层的状态很可能是会变的),解释的也不够彻底等。但本篇文章的研究也确实很重要,算是给Transformer的黑盒开了一个小口子吧。
期待未来更精彩的研究。