从哪里来一直是一个好问题
如何理解一个问题
在 ChatGPT 出来后,那篇 Attention 的文章就一直非常火,也很早就读了,原理和做法倒是懂了,但一直有个疑问,就这东西是人们如何想出来的?为什么 attention 是这样的?因为并没有 NLP 以及机器学习方面的背景,所以一直比较好奇。最近看到一篇文章,一下子就理解,attention 并不是天上下来的,他有自己的演化路径,而顺着这个演化路径,相关想法也是非常直观的。
话要从 GPT 类模型解决的问题说起,也就是他们的主要原理,都是从一段文字预测下一个字(本来是 token,简单点就算做字吧)。第一个非常直观的方法就是 HMM 这一套,通过无数的预料来做统计,然后根据统计的概率还选择词,例如“马路上过去了一辆…”,大部分人都会填“车”而不是“船”。这个统计可以是分段的词,通常叫做 N-gram, N 就表示前 N 个字,最简但的就是看前面一个字,预测下一个,当然这样非常不准,因为各种语料五花八门。但如果 N 太多,则计算量又非常大,早期一般是 3-gram, 4-gram 这样。
这时,第二个问题出现了,出现同义词怎么办?例如“马路上过去了一辆…”, 车固然是可以,如果下面是“轿车”,“拖拉机”等呢?所以还需要知道一些雷士同义词,这时候的解决方案是“词向量”,即将一个词表达为一个向量,相近的向量,计算一个余弦角度,越相似则角度越小。词向量也需要通过训练构建,通过统计手段,不论是做前馈网络还是其他,将相似的概念放到一起。
到这里,似乎问题完美解决了,或起码都有方案了。但新问题来了,对于 N-gram,一旦确定 N, 则网络构成基本就定了,例如都是根据 5 个字预测后一个,没办法根据 6 个字预测后一个,但人们可不是这么说话的,因此 RNN 以及 LTSM 类方法又出来了,主要是记忆之前的信息,RNN 是增加一个隐藏层,LTSM 则是将前面的信息做一个压缩,也是通过隐藏状态来传递和理解。不仅是隐藏状态传递,该把什么放到隐藏状态中去,也可以通过学习得到。
LTSM 接着优化,就到 Transformer 了,主要是效率问题,当对话长了之后,看远处的信息需要层层传递,然后计算顺序必须一个字一个字来。所以一个显然的想法是,有没有一个办法能够并行的计算所有词的信息,并且保持自相关特性,这个思路过去,很显然就是 Transformer 了,至于 QKV 矩阵,位置编码等细节,都是在这个思想上的技术处理。
顺便说一句,之前有个测试 AI 的 winograd 指代消解测试,当时还在学校时,有一次审稿见到了这个挑战,作者呼吁用其来替代图灵测试。印象中似乎前面的模型对这个挑战处理起来都非常不好,直到 Transformer 架构的出现,GPT 基本上攻克了这个问题。
原因往往不在结果附近
从 Transformer 的演变,很容易就理解了这个结构具体是如何出现的,各个原理是什么。还有很多其他生活中的问题,也需要了解历史,经济,文化等变迁才能明白。
国庆假期去了香港澳门,发现可以使用微信来乘坐当地公交车,比较有意思的是他们有个“同行码”,一个乘车码可以添加三个同行码,为同行人刷吗乘车,能很方便的解决同行儿童,老人的乘车问题。但奇怪的是内地就没有,同样是支付宝和微信,国内也有老人小孩这些没支付宝账号的人群,结果就没这个码。在 AI 上咨询过后,背后也有很多有意思的细节,其一对港澳来说,只是单一城市的接入,并且这两个城市本身就是旅游大城,从游客出发,只要交通部门政策支持就很容易做到,而大陆城市众多,标准不同,各自分散,接码都很麻烦,更别说同行;其次,也有历史原因,大陆基本上在 2018 年就爆发二维码扫描的乘车系统,那时设计上就是为了单人设计的,甚至逐步需要实名制,需要绑定,校验等等,再加上之前疫情时候一人一码都深入人心了,在此基础上修改成本巨大,涉及到很多系统性工作。而港澳基本上是2020年之后才开始设计这套系统,加上旅游逻辑等,从头开始专门做,设计和是现成本低很多,所以就导致了现在的结果。
其他类似的问题也包括,港澳的老式门头,双层巴士等,都有很多历史,经济,文化的原因,偶尔想想这些也非常有意思。
很多问题都是,在当下看似乎非常“蠢”,但放到特定的历史进程中去,会发现是很多成本和妥协的产物,包括之前提到的中国和美国的卡车,尖头和平头的差异等等。
最近又看到一本有意思的书,通过地理来理解历史,例如看射雕时候的疑惑,为什么那时襄阳城那么重要?有零星了解一些情况,但比较干巴,结合地图来理解就更加顺利了。等读完来写笔记吧。