晓查 发自 凹非寺
量子位 报道 | 公众号 QbitAI
本周GitHub官方和OpenAI联合发布了一款代码神器AI——GitHub Copilot,只需输入注释,即可自动生成代码,堪称一位“AI程序员”。真人程序们表示非常激动。
它究竟有多厉害呢?有位程序员尝试了一下平方根倒数速算法(Fast Inverse Square Root),结果出人意料。
只是打出来这四个关键词,GitHub Copilot就逐行“完美复刻”了当年那段神奇的算法。
![](http://k.sinaimg.cn/n/sinakd202173s/236/w640h396/20210703/8e89-krwipas5296669.gif/w700d1q75cms.jpg)
这是当年在游戏《雷神之锤3》(Quake 3)中使用的一段代码,用于计算归一化向量,因其算法之简洁快速而闻名,也被叫做Quake代码。
我们再对比一下这两串代码,不能说是十分相似,只能说是一模一样。
floatQ_rsqrt( float number )
{
long i;
float x2, y;
constfloat threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // evil floating point bit level hacking
i = 0x5f3759df - ( i >> 1 ); // what the fuck?
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed
return y;
}
△ 原版平方根倒数速算法
甚至GitHub Copilot连当年那句“what the fuck”的注释也用上了。
这不禁让人细思极恐:难道这不侵犯版权吗?
还真是!这位程序员发现,GitHub Copilot好像忘了开源许可证,这就尴尬了。
而Quake代码十年前就在GitHub上开源了,在Readme文档中,原作者明确表示使用的是GPL开源许可证。
GPL许可证要求:如果分发包含GPL代码的新版程序,则需要向每个人都提供免费获得的完整源代码。
所以这位程序员只好在代码前手动加入了几行注释,算是给他人的警示吧。
![](http://k.sinaimg.cn/n/sinakd202173s/236/w640h396/20210703/2cc7-krwipas5296671.gif/w700d1q75cms.jpg)
使用Copilot有抄袭风险
关于GitHub Copilot直接“抄袭”Quake代码的事情,在Hacker News论坛上引起热议。
对此,程序员表示,如果贸然使用GitHub Copilot,而忽略了代码背后开源许可证,那么你有可能会被起诉。
一家科技公司的产品安全负责人明确表示:禁止员工使用GitHub Copilot。
如果不开源的商用软件使用GitHub Copilot开发的代码,而没有按照开源许可证的要求执行,就会给公司招来法律风险。
不过,也有程序员表示,我用AI写的程序关我什么事,有责任那也是GitHub母公司微软的。
但是在GitHub Copilot下载页面中并没有相关法律风险的提示,而且GitHub还表示这个AI不是一个“背题家”,它生成的绝大多数代码都是唯一的。
在0.1%的情况下,GitHub Copilot建议可能包含一些来自训练集的逐字片段。
![](http://k.sinaimg.cn/n/sinakd202173s/262/w1010h852/20210703/2390-krwipas5296755.png/w700d1q75cms.jpg)
结果GitHub Copilot却把人家整段的代码都抄来了,而且连注释都附带上。
还有程序员表示,不用太担心。其实GitHub Copilot的这种行为,和某些程序员直接抄Stack Overflow的代码没有啥区别,因为很多Stack Overflow上的代码也没有给出许可证信息。很多直接搬运Stack Overflow代码的行为也没有被起诉。
但是谨慎起见,用GitHub Copilot还是长点心吧。
One More Thing
最后关于Quake代码这件事,还值得再说两句。
由于当年显卡等图形渲染硬件的配置较低,为了能实现更好的光照效果,必须对算法进行极致优化,而求平方根倒数是绕不开的一项运算,每秒要进行上百万次。
![](http://k.sinaimg.cn/n/sinakd202173s/344/w1080h864/20210703/760c-krwipas5296759.jpg/w700d1q75cms.jpg)
因此就有一位算法大神,通过浮点数与整型的转换,以及移位操作,成功将求平方根倒数压缩到短短几次操作。(详细原理可参照维基百科介绍)
关于这个算法究竟是谁发明的,一直众说纷纭,没有定论。但那句注释让Quake代码更加出名。
当年开发《雷神之锤3》的程序员使用了大神的算法,却没有看懂其中的精髓:“i = 0x5f3759df - ( i >> 1 ); ”这一句 ,所以只好在注释里写下了“what the fuck”。
没想到近20年后,AI还是和人一样成了复读机,只能膜拜算法大神了。(手动狗头)
参考链接:
[1]https://twitter.com/mitsuhiko/status/1410886329924194309
[2]https://news.ycombinator.com/item?id=27710287
[3]https://github.com/id-Software/Quake
[4]https://en.wikipedia.org/wiki/Fast_inverse_square_root#History
![](http://n.sinaimg.cn/finance/pc/cj/kandian/img/article_pic05.png)
4000520066 欢迎批评指正
All Rights Reserved 新浪公司 版权所有