兰 亭 墨 苑
期货 · 量化 · AI · 终身学习
首页
归档
编辑文章
标题 *
URL 别名 *
内容 *
(支持 Markdown 格式)
随着ImageNet大赛的持续推动,在空间问题上神经网络开始大杀四方,CNN和ReNet的架构越来越稳定了,人们不断的优化算法,堆叠算力,但很少人会挑战“卷积”这个核心范式。但是在序列问题上,却还处于众说纷纭的混乱时期。在这个领域里面,语言学家,统计学家和计算学者们战作一团,他们连语言世界的本质是什么,还没有吵清楚。在我们进入这个纷乱的话题之前,我们有必要补充一下背景知识,这个知识点非常重要,它可以说是整个序列问题计算的基石。所有序列问题领域的纷争,都是围绕着它展开的。 1、马尔可夫性:序列预测的筑基 马尔可夫性这个概念最早由俄国数学家安德烈·马尔可夫 (Andrey Markov) 在20世纪初提出的。我们在学习概率的时候,通常都会用抛硬币作为例子来引出独立事件这个概念,在马尔可夫所处的时代,概率论主要关注的就是这种独立事件。计算这些事件发生的概率相对简单,只需要将各自的概率相乘。然而,马尔可夫认识到,现实世界中很多现象并非如此简单,许多事件的发生是相互关联、相互依赖的。例如,文本中一个词的出现往往与它前面的词有关;物理系统中粒子在某一时刻的状态依赖于前一时刻的状态;天气变化也不是完全随机和独立的。他需要一种数学工具来描述和分析这种依赖关系。 安德烈·马尔可夫 (Andrey Markov) 所以,马尔可夫从一本普希金的诗集开始了他的研究。他对普希金的诗歌《叶甫盖尼·奥涅金》中的字母序列进行统计分析。他计算了在一个辅音后出现辅音或元音的概率,以及在一个元音后出现辅音或元音的概率。他发现这些概率是相对稳定的,并且后一个字母出现的概率确实与前一个字母有关。诸位看到这里是不是觉得有些眼熟,大语言模型的预测下一个Token的行为和当年马尔可夫在诗集里面的规律有着重叠之处。大语言模型的本质是一种序列预测,而马尔可夫和他的研究开启了序列预测建模的大门。 那么什么是马尔可夫性呢?马尔可夫观察到,虽然很多序列事件是依赖的,但这种依赖往往不是无限追溯到历史的开端。通常,当前事件最直接地受到紧邻的过去事件的影响,而更久远的过去事件的影响则可能变得微弱或无关紧要。他假设存在一种特殊的依赖关系,即未来的状态仅取决于当前状态,而与更早的历史状态无关。这就是马尔可夫性的核心思想——无记忆性或短期记忆性。他认为这种简化的依赖模型能够捕捉很多实际序列的关键特征,而这种依赖模型的特性就被他定义为马尔可夫性。我们生活中遇到的最常见的具备马尔可夫性的例子是大富翁游戏,你的棋子的下一步只依赖于当前棋子的位置和骰子掷出的随机点数。 序列问题的核心争执的核心就是马尔可夫性。当然,争论的不是这个世界是不是具有马尔可夫性,这么复杂的世界怎么可能每一步单纯的只由上一步的状态决定呢?大家争论的焦点是:到底能不能将非马尔可夫性的问题,转成马尔可夫性,从而能够让它更好的计算。 首先站出来反对的当然是符号主义,乔姆斯基这个规则派大佬在本体论上就是不认可的。他认为语言是一棵树,而不是马尔可夫性所描述的一条一维链条,想把这颗有着无尽的枝杈的大树分解成链条,其结果就是混乱,再也无法拼回那颗完整的树。 统计学家立马站出来反对,他们用一个非常经典的例子来打脸。这个例子是: “研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这句话后,才发这现里的字全是乱的。” 这种汉字乱序效应,在其他语言中依然存在。如果单纯用符号主义的语法来分析,得到的结果基本上会是Syntax Error(语法错误)。但是无论是人,还是统计学家的N-Gram,都是可以识别理解的。这个例子证明,人类语言之所以高效,是因为我们容忍错误。我们在进行高维的语义“脑补”,而不是进行低维的字符“对齐”。 这种对符号主义脆性 (Brittleness)的质疑,随着日本五代机项目FGCS的破产,掀起了统计学派的技术浪潮。乔姆斯基的学术堡垒,就是在那次浪潮中被摧毁的。如果说贾里尼克那句特别诛心的“开除语言学家”言论,是工业界彻底宣判符号主义死刑的开始,那统计学家乔治·博克斯的傲娇之语:“所有模型都是错的,但有些是有用的”则是开启了N-gram的大时代。 2、N-gram的权倾朝野时代 N-gram的来历,并非草莽。它第一次出现的地方,是在一篇距今近八十年的论文上。这篇论文被认为是人类科技史上最重要的论文之一,它就是香农(Claude Shannon)的《通信的数学理论》。 香农(Claude Shannon) 1948年,香农在贝尔实验室工作。当时他研究文字的目标不是为了做自然语言处理”,也不是为了造聊天机器人,他的目标是“压缩”。香农想搞清楚一个核心问题:如果我把英文压缩到极限,还能剩多少信息? 为了衡量这个“信息量”(即著名的信息熵),他需要建立一个数学模型来模拟英语的生成过程。他借用了马尔可夫的概念,但是他把马尔可夫的数学公式,变成了一个“掷骰子查字典”的游戏。 第一关、猴子打字式的零阶近似 (Zero-order)。 这一关的规则是,假设所有字母(A-Z 和空格)出现的概率完全相等。那就拿一个 27面的骰子,扔出什么点数就输出什么字母。在这个规则下的结果是: XFOML RXKHJFFJUZ LPWCFWKCYJ FFJEYVKCQSGHYD QPAAMKBZAACIBZLHJQD 这种情况下,完全是乱码,不包含任何信息,熵最大。 第二关、只有频率没有顺序的一阶近似 (First-order) 这一关的规则是,按照英文字母在真实世界中出现的频率来进行随机,比如E 出现的概率最高,Z 最低。具体的操作方法是,找一本英文书,随机翻开一页,闭着眼瞎指一个字母,抄下来。重复这个过程。在第二关,我们得到的结果是: OCRO HLI RGWR NMIELWIS EU LL NBNESEBYA TH EEI ALHENHTTPA OOBTTVA 这次的结果看起来稍微有点像“外星语”了,元音和辅音的比例开始正常,但还是没法正常阅读。 第三关、引入马尔可夫性的二阶近似 (Second-order / Digram) 这一关的规则就是马尔可夫性,下一个字母取决于前一个字母。具体的操作还是继续翻书,假设刚开始的字母是T,然后翻开书,随便找到一个T,记住它的前一个字母H,再翻开书,找到H,这样不断重复,我们得到的结果是: ON IE ANTSOUTINYS ARE T INCTORE ST BE S DEAMY ACHIN D ILONASIVE TUCOOWE AT 奇迹出现了。虽然单词是错的,但此时的发音结构已经非常像英语了。这证明了英语的局部结构是可以通过 2-gram捕捉的。 最后一关、二阶单词近似 香农不想玩字母了,他决定玩单词。这直接打开了统计学派处理语言的大门。规则和第三关一样,只不过是把字母换成了单词。这次生成的内容,被当作历史名句,记录在了计算机发展的史书中。 THE HEAD AND IN FRONTAL ATTACK ON AN ENGLISH WRITER THAT THE CHARACTER OF THIS POINT IS THEREFORE ANOTHER METHOD FOR THE LETTERS THAT THE TIME OF WHO EVER TOLD THE PROBLEM FOR AN UNEXPECTED. 这是第一个通过计算直接生成的,虽然无意义,但是人类却可以读懂的文字。当香农在纸上写下这句话时,现代自然语言处理的“统计学派”实际上就诞生了。这个实验向世界证明了:你不需要理解语言的意义,只需要统计语言的概率,就能生成高度逼真的文本。这是统计学派的基础,也是贾里尼克攻破乔姆斯基城池最核心的助力,N-gram就是在香农的手工纸笔的实验下产生了。 现在我们使用的N-gram,已经步入了计算机时代,是一门高科技数数。想知道“今天”后面接“天气”的概率?那就去数一下语料库里“今天 天气”出现的次数,除以“今天”出现的总次数。既然是数数,核心技术就是如何处理“没见过的词组”。我们先来看看N-gram是怎么组织和管理这个高科技数数工作的。 N-gram将每个词视为一个独立的、不可分割的符号,存储词的最核心的部分是一个常被称为 V的词汇表,这个词汇表当时使用的是One-hot 编码。这种编码方式会这样工作,“猫”是 [0, 0, 1, 0...],“狗”是 [0, 0, 0, 1...],在数学上,这两个向量是正交的,距离无限远,毫无关系 。这导致模型无法捕捉到语义相似性。模型认为 "猫" 和 "狗" 之间的关系,与 "猫" 和 "喜欢" 之间的关系是一样的(都是零相似度)。随着语料库的增大,词汇表 V 会急剧膨胀,可能达到数十万甚至数百万,而且这使得 One-hot 向量变得极其稀疏(大部分是 0)且维度极高。为了维护词汇库,需要大量的内存开销。 再来看看N-gram是怎么处理未知词汇(OOV)的。N-gram简单粗暴的将它们统一替换为 <UNK> 符号,如果在一个句子里面出现两个不同的未知词汇,在模型看来,它们是一个词。这种处理方式导致模型在处理包含新词的句子时,性能会大大降低。所以当时的NLP 是一门“没有语义的算术课”,不仅笨,而且遇到新词就死。从这个角度来看,乔姆斯基对于输给N-gram有着那么大的怨念是可以理解的。 在当时的那种情况下,战胜的N-gram获得了大量的资源,所以它也在不断的给自己打补丁。利用平滑技术等工程手段,能减少新词带来的影响。并且这种概率计算的速度很快,即使是在一个很大的词汇表之下,性能也丝毫不减。它非常适合当时的实时应用,如语音识别和在线拼写检查,特别是以词汇为核心的英语语言环境下,还是非常实用的。 终结了N-gram的,是个骑墙派。他认可马尔可夫性是“计算”的救星,却是“智能”的枷锁。所以他的想法是,在有限的算力的基础之上,尽可能的突破计算的枷锁。查字典,摇骰子这件事儿,实在是有点Low。这个人,就是三巨头之一的本吉奥。在帮着辛顿和杨立昆打了多年的辅助以后,本吉奥这个擅长使用庄周的选手,终于也开始上单了。 3、NPLM:本吉奥的上单之旅 本吉奥想彻底推翻N-gram的“统计暴政”。他在贝尔实验室期间的经验给了他跨界的灵感:“既然 N-gram 的问题是词之间没有联系,那为什么我不把词变成连续的向量,用神经网络来拟合这个概率呢?”这个想法,在当时很少人会想得到,因为在当时的环境下NLP 圈子不信神经网络,神经网络圈子觉得 NLP 词汇量太大。只有拥有跨界经验的本吉奥,才敢于做这样大胆的尝试。 2003年,本吉奥发表了名为《A Neural Probabilistic Language Model》的论文,这篇论文是现代自然语言处理的“圣经”级文献。它不仅解决了困扰统计学派几十年的“维度灾难”,更重要的是,它从本质上改变了机器理解语言的方式:从“离散的符号匹配”变成了“连续的向量计算”。 几乎所有的语言学家,都有一个非常顽固的认知,那就是语言是离散的。的确如果从形式上看,语言学家的坚持是正确的。但是本吉奥的视角不是形式,而是意义。本吉奥认为,从意义上来看,语言应该是连续的,因为意义是连续的。所以,本吉奥的目标是,为语言寻找一种连续的表达方式。 在N-gram的离散语言世界观里,每一个词都是一个独立的孤岛。猫和狗、以及宇宙是三个不同的词,所以这三个词之间的差别也是一样的,丝毫不会考虑在某些维度的分类上,猫和狗是近似的,而它们和宇宙是不相似的。虽然N-gram也把这些词都数字化了,但那只是ID,为了查询方便,没有其他的任何意义。 本吉奥对这种方式表示深深的怀疑。他本认为语义空间应该是个柔软的曲面,但是统计学派的这种处理方式,把语义空间弄成了一块硬邦邦的木板。这块没有任何弹性的木板,也就失去了泛化能力,只要有新的没有见过的组合出现,N-gram处理起来就会非常的吃力。 本吉奥的的这个怀疑,最早可以追溯到20世纪80年代,PDP小组时期,辛顿发表的一篇论文 《Learning Distributed Representations of Concepts》。在这篇论文里面,辛顿设计了一个简单的神经网络来学习“家谱关系”(比如:A 是 B 的父亲)。辛顿发现,为了解决这个问题,网络自动将每个人名(如 Christopher, Penelope)映射成了一组由神经元激活模式组成的向量。比如,网络可能用第 1 个神经元表示“性别”,第 2 个神经元表示“辈分”。本吉奥敏锐地意识到:辛顿在小规模“家谱”上做的事,如果放大到整个“自然语言”上,不就能解决 N-gram 的维度灾难了吗? 所以,本吉奥意识到,一个概念(比如“猫”)应该由一组数字(不同维度)共同定义。维度 1 可能代表“有毛”,维度 2 可能代表“体积小”,维度 3 可能代表“可爱”。所以“猫”是 [0.9, 0.2, 0.8]。这种和One-hot的局部表征相比,把概念拆分的更加的原子化,所以这种分布式表征,是一种分辨率更高的编码方式。 他的这个分布式表征的想法,在哲学、数学和生物学上都得到了一定程度上的支撑。 在哲学上,维特根斯坦定会为他击节叫好。早期语言学,甚至维特根斯坦本人早期都认为,每一个词都对应世界上的一个绝对对象。但是在后期,维特根斯坦指出,不存在一个词的“绝对本质”。他拿我们常见的“游戏”这个词来举例说明。有些游戏有输赢(球赛),有些没有(丢手绢);有些有运气(麻将),有些纯靠技术(象棋)。并没有一个本质特征是所有“游戏”都共有的。它们之所以都叫“游戏”,是因为它们之间有着重叠的、交织的相似性网络,就好像像家族成员长得像,但没有一张完全一样的脸。而这种相似性,在神经网络里,就可以用本吉奥的分布式表征来表达。 在数学上,分布式表征也表现出来了更加简洁的特征。如果我们想表达N 个不同的概念,局部表征需要 N 个神经元,效率极低。分布式表征只需要 \log_2 N 个神经元。因为 k 个神经元通过不同的开/关组合,可以表示 2^k 个概念。 在生物学上,也有着相应的证明。在神经科学中,一直有一个争论:大脑里是否有一个专门的神经元,只在看到你祖母时才放电?这叫“祖母细胞”假说。这个假说在PDP小组讨论时,遇到了很强力的抨击。他们认为这个模型的荒谬之处在于: 脆弱性: 如果你脑子里真的只有一个神经元负责认“祖母”,那一旦这个神经元死了(大脑每天都在死神经元),你是不是就永远不认识祖母了?这不符合生物鲁棒性。 组合爆炸: 世界上有无穷无尽的物体和组合(穿红衣服的祖母、侧脸的祖母)。如果每个状态都要一个专门细胞,脑细胞根本不够用。 静默问题: 如果那个细胞只在看到祖母时才亮,那它一辈子 99.999% 的时间都在闲着,这太浪费了。 所以,在PDP小组乃至大部分学者的共识是,大脑使用的是分布式表征,使用一群神经元共同编码。但是这个群的范围是什么,大家并没有细想,暂且认为是全体神经元参与。后续这件事情在癫痫患者的治疗上,产生了令人惊奇的反转,辛顿等人支持的“完全分布式”理论似乎被打脸了。 研究人员发现,在给病人看了几百张不同照片后,他们在一位患者的大脑中,他们找到了一个神经元,表现出了极端的选择性。当给病人看美剧《老友记》主演 珍妮弗·安妮斯顿的照片时,这个神经元疯狂放电。不管她是长发、短发,还是和布拉德·皮特的合影,这个神经元都亮。甚至只给她看写着 "安妮斯顿" 名字的字条,这个神经元也亮!但是,给它看其他明星(如茱莉亚·罗伯茨)、建筑、动物,这个神经元完全没反应。随后,他们在其他病人脑中发现了 “哈莉·贝瑞细胞”、“比尔·克林顿细胞”,甚至 “悉尼歌剧院细胞”。 这个发现震惊了世界。它证明了神经元是具备“高度选择性”的。但是经过实验人员的精细实验,他们发现负责认出安妮斯顿的可能是一小群神经元。所以这个理论被修正为:大脑既不是完全的“分布式”(所有细胞都参与),也不是极端的“祖母式”(只有一个细胞参与)。大脑走的是中间路线:稀疏分布。但不管是完全分布式还是稀疏的,大脑绝对不是一个词一个词存储概念的。 这三个领域得出的结论,都在支持着本吉奥的想法。本吉奥相信,词语也能像图像一样,用向量来表示,用神经网络提取出来抽象的特征,用分布式的方式将语义存进神经网络的权重里。CNN的卷积核是图像的特征提取器,存储在权重中,NLP的权重矩阵也应该能起到类似的作用,来进行语义提取。 本吉奥是这样验证自己的构想的。 他首先设计了一个巨大的矩阵 C ,作为查找表。这个表假定有17000个词,每一个词有30个维度,那么这个矩阵的尺寸就是 17000 \times 30 。但是这里面的数字全是随机生成的乱序,不存在任何意义。 然后他给这个网络分配了一个任务,预测下一个词。是的,在此他吸取了N-gram的经验。在这一层面上,他是认可香农的思路的。他使用了一个叫做布朗语料库的小数据集,这个数据集里面都是类似这样的一些原始文本: the fulton county grand jury said friday an investigation 本吉奥把数据集变成这样的训练数据,喂给模型。 时间步 (Time Step) 输入 目标 样本 1 the, fulton, county grand 样本 2 fulton, county, grand jury 样本 3 county, grand, jury said 样本 4 grand, jury, said friday ... ... ... 样本 X said friday an investigation 模型在一开始是处于混乱状态的,它接受到第一个样本后,从巨大矩阵 C 中,查到了这三个词的向量,它们可能分别为: V_{the} = [0.1, -0.9, 0.3, ...] ; V_{fulton} = [-0.5, 0.2, 0.1, ...] ; V_{county} = [0.8, -0.1, -0.4, ...] 这里面的数字目前没有任何意义,纯乱填的。 模型把这三个向量头尾相连,拼成一个90个数字的一维数组 x_1 - x_{90} ,然后送给隐藏层运算。隐藏层本吉奥选了一个常用的激活函数, h = \tanh(W \cdot x + b) 。此时因为 W 这个权重矩阵也是瞎写的,所以 h 基本上也是乱来的。 输出层最后用了Softmax把最后乱猜的结果转换成概率,并输出。没错,输出层最后输出的是词表中的17000个词的每一个的概率。因为是乱猜的,所以真正的答案grand的概率可能只有 0.0001,输出猜的下一个词是apple,因为它的概率最高0.05(也是蒙的)。 下面的环节就是论功行赏,错了吃巴掌,用损失函数来计算误差。这就是反向传播开始工作了,输出层首先被骂:把apple的分降低,把grand的分拉起来。然后输出层开始骂隐藏层矩阵 W :“你提取的是什么破特征?下次看到 fulton 和 couty 在一起,你要激活‘法律/行政’相关的神经元!” 然后误差信号会传到词向量矩阵 C 。它对刚才用到的那三个向量 V_{the}, V_{fulton}, V_{county} 进行了微创手术。它对conty说:“嘿,兄弟。刚才你在输入里。但我预测错了。为了让下次预测出grand,你需要移动一下你的坐标。”这个移动可能是前两个维度做了一些微调,所以在这第一个样本之后,V_{county} 从 [0.8, -0.1, ...] 变成了 [0.81, -0.09, ...] 。经过这样的千万次拉扯,这个神经网络训练完成了。 这个网络结构,现在被称为前馈神经网络,它是所有复杂架构的地基。 前馈神经网络(FNN) 当这个网络完成训练之后,他把训练好的那个巨大的矩阵 C 拿了出来分析了一下,他看到了神奇的现象: 语义聚类: 所有的“星期”(Monday, Tuesday...)聚成了一团。 语法聚类: 所有的“动词过去式”(walked, ran...)聚成了一团。 几何关系: 甚至出现了 King - Man + Woman \approx Queen 的迹象 这部分验证了他的构想,他又开始加强了测试的难度,把一些训练集中从未出现的话放入了测试集中。模型居然表现出了惊人的泛化能力。泛化的定义是从已知推导未知。模型通过训练,能得出猫和狗很像的结论,然后在训练的语料中,模型如果学会了:“猫可以在卧室走动”的知识,那测试集里如果出现:“狗可以在卧室“这样的句子,模型会把后面一句补上”走动“这个词。 到此为止,本吉奥的构想完全得到了验证。语言可以是连续的,神经网络是可以把连续化的语言的语义特征像提取图像特征一样提取出来的。只不过这个特征被分开保留在了两个地方,那个巨大的查找表 C 里面,存的是词本身的静态属性,权重矩阵里面,存储了词的语法和语义规则。 这就是本吉奥为神经网络作出的最大贡献之一:词嵌入 (Word Embeddings)。他设计的网络神经概率语言模型 (Neural Probabilistic Language Model, NPLM),定义了后来 20 年语言模型的基本范式。 本吉奥还证明了,通过训练神经网络来预测下一个词,词与词之间的“语义关系”会自动作为副产品涌现出来,而这种理解语义的方式,可能是最适合计算机这种硅基智能的。 十年后的2013年,Google 的 Mikolov 简化了本吉奥的 NPLM,搞出了 Word2Vec,彻底引爆了 NLP。它也是 BERT/GPT 的祖先。现在的 ChatGPT,本质上依然是一个预测下一个词的模型,依然第一层是 Embedding,最后一层是 Softmax。本吉奥在 2003 年画出的这张图纸,至今仍然是 LLM 的核心骨架。 但是世界对于先知永远是残酷的。本吉奥的NPLM还需要坐上十年的冷板凳,等Mikolov找到层序方法把Softmax算法优化完善,等Alex神来之笔用GPU强化矩阵运算,也在等真正的大规模数据集的到来(小规模数据集上神经网络过拟合严重,对比N-gram优势不大)。但是,就是这一抹微光,划破了漆黑的长夜,神经网络的黎明就要来了。我们很快就要目睹,像ImageNet那样的双雄会战,在序列预测领域发生了。在符号主义和统计学派白马非马的争议中,最终是神经网络这个中间派笑到了最后。
配图 (可多选)
选择新图片文件或拖拽到此处
标签
更新文章
删除文章