今天小编分享的科学经验:Karpathy大神问懵DeepSeek!一个竟藏53个Token,思考10分钟没解释出来,欢迎阅读。
注意看,这个竟然占了 53 个 token!
(标题是平替)
Karpathy 大神又带来他的新实验新发现了,结果直接问懵 DeepSeek 和 ChatGPT。
思考过程 be like:
DeepSeek 硬是思考了十分钟也还是没有答上来,觉得要是 "lol" 这个答案就太简单了。
Karpathy 表示:但其实就是这么简单。
随后他进一步解释了这背后的原因——提示词注入。将一些信息注入进字元中,表面上看没啥区别,但里面可以表达各种隐藏信息。对于善于思考的模型,就会很容易受到这个方法的影响。
来看看具体是咋回事。
一个竟占 53 个 Token
这一想法,源于 Paul Butler 的一篇博客。
他看到有人说,通过零宽连接符(ZWJ),可以把任意的文本藏在 emoji 符号当中。
结果一试发现真的可以,不过可以不需要 ZWJ,隐藏信息的载体也不一定非得是 emoji,任意 Unicode 字元都可以。
这背后的原理,涉及到了 Unicode 编码字元方式。
对于简单的字元(比如拉丁字母),Unicode 编码点和字元之间有一对一的映射(例如 u+0067 表示字元 g)。
但对于复杂一些的符号,就需要用多个序号连在一起的方式来表示了。
此外,Unicode 当中还設定了 VS-1 至 VS-256 的变体选择符(Variation Selector),可以针对基础字元做出相应的变体,但本身却没有自己的 " 长相 "。
并且只作用于极少部分字元,主要是 Unicode 中的中日韩统一表意文字(CJKUI),其他大部分的 Unicode 字元都不会有任何变化。
但当带有变体选择符的字元被复制粘贴时,选择符也会一起进入剪贴板。
而在 Unicode 当中,这样的变体选择符一共有 256 个之多,用来编码信息已经是绰绰有余了。
比如下面的这个 a,只有 U+0061 表示的是其自身,剩下后面的 10 多个全都是变体选择符。
有了这一理论基础,接下来的事情无非就是建立正常字元和变体选择符之间的转换算法。
当然编码的内容越多,变体选择符也就越长,并且如果是汉字,还会产生更多的变体选择符。
比如我们试图将量子位的 Slogan" 追踪人工智能新趋势,关注科技行业新突破 " 藏在一个 "100 分 " 的 emoji()当中,产生的变体选择符数量达到了 58 个。
并且把解码算法告诉 ChatGPT 之后,原文本也可以被复原。
所以,看似是只有一个 emoji,但实际上后面藏了多少字元,恐怕只有把文字装进去的人自己才知道了,甚至塞个《滕王阁序》进去也没问题。
而一个占 53 个 Token 的笑脸,相比之下就更加不足为奇了。
问懵 DeepSeek
回到 Karpathy 的提示词注入,他测试了 ChatGPT 与 DeepSeek。
ChatGPT 回答在此:
DeepSeek-R1 花了 10 分钟思考差点就成功了。它认为隐藏的信息可能是 Onli!n37e27i4h4he3ingle7odlol。因为觉得如果只是一个单词 "lol",那就是无稽之谈,所以就放弃了。
按照同样的提示词,我们也问了一遍 DeepSeek-R1。
思考过程如下:
在思考了整整 529 秒之后,确实也是回答出来了 lol 的意思。
也有网友分享了相同的经历。Gemini 无法解码,但 Claude 和 GPT 不仅识别出来,还能识别编码消息中的操作。
或者直接把这个表情包扔给模型,又该如何呢?
从网友的效果来看,ChatGPT 察觉到了这背后可能有某些隐藏信息。
而 DeepSeek-R1 这次只花了 153 秒(有点进步)。它首先意识到这笔后跟着一系列 Unicode 字元。
并且还介绍了下:他们通常用于元数据,并且以不可见的方式呈现等等。。。
然后还试图给了下背后的信息应该是:
?^i Q^cgUb gYdX dXU cY^WU gbT
显然是回答错误的。
对于这一意外发现,Karpathy 表示,原则上模型可以通过「变体选择器」variation selectors 中找到隐藏的信息并按照说明进行操作。但由于这种编码界面方法可能过于具体,需要用提示来解释它。
他提到了一个方法,那就是将其收录到预训练中。这些知识注入到模型参数,模型就能够在没有提示的情况下解码这种特定的编码。