Karpathy后悔:2015年就看到语言模型的潜力,却搞了多年强化学习

B站影视 2024-11-20 11:13 1

摘要:上个周末,OpenAI创始成员、研究科学家、原特斯拉前AI高级总监、AI领域的大神Andrej Karpathy一直在后悔。后悔自己没有早点带领OpenAI开创大模型时代。

耽误业界好多年?

「这是有史以来最大、最令人困惑的研究生涯错误,」Andrej Karpathy感叹道。

上个周末,OpenAI创始成员、研究科学家、原特斯拉前AI高级总监、AI领域的大神Andrej Karpathy一直在后悔。后悔自己没有早点带领OpenAI开创大模型时代。

是怎么一回事?看起来Karpathy认为当年早已认识到自回归语言模型的强大潜力,但却在很长一段时间里「误入歧途」,随大溜一起搞强化学习。

2013年的Atari RL论文被认为是深度强化学习的开山之作:一个通用学习算法就发现了Breakout和许多其他游戏的最佳策略,看起来,在很多任务上我们只需要对其进行足够的改进和扩展,就可以构建出强大的AI模型了。

我们也还记得,在Karpathy跳槽去到特斯拉一年后,2018年OpenAI推出了OpenAI Five,利用强化学习的方法在Dota 2游戏上开始与职业选手过招。

在2019年,OpenAI的研究者还训练神经网络,利用一只类人机械手来玩魔方,表明强化学习工具不仅仅可以处理虚拟任务,而且还能够解决需要高度灵活性的真实世界问题。

这个时候OpenAI在另一边已经推出「迄今为止最大模型」GPT-2了,强化学习的盛世,似乎很快就被后来兴起的大语言模型(LLM)所覆盖。

Karpathy还提到:「Yann LeCun当时就不太看好强化学习,他一遍又一遍地谈论『蛋糕』,而强化学习(RL)只是蛋糕顶部最后一颗樱桃,表征学习是蛋糕主体,监督学习是锦上添花。至少在今天看来,他在概念上是完全正确的(预训练 = 蛋糕主体,监督微调(SFT)= 糖衣,RLHF = 樱桃,即基本的ChatGPT训练pipeline)。这很有趣,因为今天他仍然不太看好LLM。」

说了这么多,如今已是「事后诸葛亮」了,当初明明看好却没把握住,看起来比当初根本没想过这回事还让人懊恼。

让我们看看Karpathy那篇预言了如今大模型时代的文章,说了些什么。

Andrej Karpathy当初是怎么看好的

其实关于RNN,Karpathy早在15年就已经注意到了。为此他还专门写了一篇名为《RNN的不合理有效性》文章。

文章深入探讨了循环神经网络(RNN)的潜力与实际应用。文中提到了几个实验示例,包括使用RNN来生成类似莎士比亚作品的文本,以及模拟编程代码和数学公式的生成。

Karpathy用简单易懂的语言介绍了RNN。RNN是一种能够处理序列数据的神经网络,它通过其循环连接能够记住之前的信息,这对于时间序列数据或任何序列数据的处理尤为关键。

Karpathy描述了使用RNN进行图像描述任务的初次尝试,并分享了这一过程中的神奇体验。他回忆称,在使用RNN进行训练后不久,即使是随意选择的超参数配置下,他的模型开始生成看起来非常不错的图像描述,这些描述接近于有意义。这种简单模型与所获得的结果质量之间的比例,有时会远远超出预期,这让人感到惊讶。

当时的普遍看法认为RNN难以训练,但Karpathy后来的经验却让他得出了相反的结论。随着时间的推移,Karpathy频繁地训练RNN,并多次见证了它们的强大和稳健,尽管如此,这些网络产生的有趣输出仍然让他感到新奇和有趣。

关于如何利用RNN逐字符生成文本的介绍,引发了对「这怎么可能?」这一问题的思考。

事实上,众所周知,RNN是图灵完备的,因为它们可以模拟任意程序(具有适当的权重)。但与神经网络的通用近似定理类似,你不应该对此进行过多的解读。

如果训练普通神经网络是对函数的优化,那么训练循环网络就是对程序的优化。

接下来,Karpathy在博客中讲解了RNN的基本工作原理,并通过一个具体的字符级语言模型应用来说明其实际操作过程。

具体而言,Karpathy为RNN提供一大段文本,并要求它根据前面的字符序列对序列中下一个字符的概率分布进行建模。这样,就可以一次一个字符地生成新文本。

假设词汇表为hello, 这段训练数据可以被拆分为4个独立的训练样本:

基于h预测e的概率应该较高。基于he预测l的概率应该较高。基于hel预测l的概率应该较高。基于hell预测o的概率应该较高。

每个字符会被编码为一个向量,采用1-of-k编码,即向量中只有一个位置为1,其余位置为0,然后使用step函数将它们逐个输入到RNN。接着会观察到一个4维输出向量序列(每个字符一维),并将其解释为RNN当前分配给序列中下一个字符的置信度。

接下来可以看到RNN的训练过程及其背后的逻辑:

在第一个step中,RNN看到字符h后,预测下一个字符的概率分布如下:

h的置信度为1.0e的置信度为2.2l的置信度为-3.0o的置信度为4.1

但根据训练数据hello,正确的下一个字符应该是e。因此,需要提高e的置信度(绿色表示),同时降低其他字符的置信度(红色表示)。

在这过程中,每个step都有一个期望的目标字符。目标是让网络对正确字符的置信度更高,而对错误字符的置信度更低。因此需要反向传播算法计算每个权重的梯度。

根据梯度调整RNN的权重(参数),让正确字符的置信度提高(例如e的置信度从2.2提高到2.3)。错误字符的置信度则会相应降低。

这一过程会重复多次,直到模型收敛。收敛后,RNN的预测会与训练数据更加一致,即每一步都能够正确预测下一个字符。

为了进一步说明,出于教学目的,Karpathy还用Python/numpy编写了一个最小的字符级RNN语言模型。代码大约只有100行。感兴趣的读者可以参考:

项目链接:https://gist.github.com/karpathy/d4dee566867f8291f086

更进一步的,Karpathy 在这篇博客中还列举了 5 个其他示例展示。所有示例字符模型都是在 Github 上发布的代码进行训练的。

项目链接:https://github.com/karpathy/char-rnn

我们以「莎士比亚」这个示例为例。

Karpathy希望探索RNN是否能够学习并生成具有更多结构和风格的文本内容。为此,他下载了莎士比亚的所有作品,并将它们合并成一个4.4 MB的文件,用作训练数据。

接着,Karpathy使用了一个包含3层RNN的模型,每层有512个隐藏节点,训练这个模型耗费了数小时。最后,模型生成了一些文本样本,包括角色名字和内容对话,有时还能生成较长的独白片段。

不过,从结果来看,尽管生成的文本看起来像莎士比亚的作品,但仍有一定的差异。Karpathy认为这些生成结果表现出了模型的能力和局限性,同时也展现了RNN在字符级语言建模上的潜力。

Karpathy还列举了如何生成婴儿名字这种有趣的示例,感兴趣的读者可以参考原博客了解更多内容。

随后的故事我们都知道了,2017年谷歌发布了Transformer论文,提出了自注意力机制。在这个基础上,人们逐步探索出大模型的Scaling Laws,将AI技术向通用化快速延伸,直到今天。

既然连Andrej Karpathy这样的AI大佬也在研究方向上「走过弯路」,我们是不是也该回看一下过去?

参考链接:

--机器之心

来源:Future远见

相关推荐