今年,可能是最后一届“纯人类”参赛的IMO (国际奥数竞赛)。
△参加2020年IMO的中国代表队(李金珉的官方年龄信息有误)
因为在明年,AI可能也会加入这场金牌争夺战中,成为一名“种子选手”。
这名潜入IMO赛事的AI名为Lean,由微软的研究人员开发。
目前,他们正计划让Lean参与明年的国际奥数竞赛。
也就是说,它将与世界各国的奥赛选手一起争夺IMO金牌。
其实,微软研究人员让AI参加IMO的理由,原因是它是个很好的实验工具(工具人)。
微软研究员Selsam是挑战赛IMO Grand Challenge的创始人之一,他表示,这项比赛的目的是训练一个人工智能系统,以便在世界顶级数学竞赛中赢得金牌。
因为这里不仅有数学上“最简单”的难题(连高等数学都用不上,但就是做不出来),而且还汇集了来自世界各地的顶尖高手。
如果AI能像人一样证明这些数学定理,某种程度上也能说明,让它“像人一样思考”不会太过困难。
基于这个想法,微软的研究人员从2013年开始研发Lean,希望让AI能拥有自主判断、根据假设进行演绎的能力。
也就是说,它是个旨在缩小交互式定理证明、与自动定理证明之间的差距的开源项目。
自动定理证明:对数学中提出的定理或猜想,寻找一种证明或反证的方法。系统不仅能根据假设进行演绎,还要有一定的判定技巧。
交互式定理证明:借助计算机辅助证明工具,理解检验数学定理正确性,完成数学定理的证明。
Lean已经推出了3个版本,现在的第四个版本Lean 4还在完善中,现在的逻辑系统基于依赖类型理论,已经强大到足以证明所有的常规数学定理。
也就是说,想要让它自己证明IMO中提出来的、此前“没见过的”数学问题,依旧非常困难。
目前,Lean 4还没有彻底做好准备,作者Leonardo de Moura表示,如果让它参加今年的IMO,“可能只能得0分”。
因为,Lean目前甚至无法理解某些数学问题需要涉及哪些概念,而这些概念本身又是“什么意思”。
对于不少人来说,数学十分抽象、难以学好。
事实上,AI和你的感觉一样。
一般的工程应用问题中,AI得心应手,因为在预训练阶段,算法模型已经对一类问题有所了解。
也就是说,AI现阶段能干的活仍然有限,通常要给定条件和数据,经过持续的“刷题”,才能做“更复杂的计算”。
这是一个从“1”到“2”、“3”,甚至是无穷的过程。
但数学问题的证明本质并不一样,证明一个公理,或是一个复杂的等式,需要完全“白手起家”。
证明的第一步:提出一个合理证明路径。这个从0到1的关键,目前只有人类的大脑能胜任。
绝大部分AI,很难给出证明思路的第一步。
拿一个最简单最古老的数学公理来说,公元前300年,欧几里得就证明了质数有无限多个。
而要证明这一结论,关键是要认识到,总是可以通过乘所有已知的质数并加1来找到一个新的质数。有了这个思路,接下来的证明就很简单了。
但“想到这个思路”这一行为本身,对于AI来说,难度巨大。
说回IMO,正式比赛中的3道题目,尽管不涉及微积分等高等数学,但无一不是要求选手利用中学的所有数学知识,进行巧妙的构思给出解题方法。
比如这道2005年IMO真题:
当时不同国家的参赛选手至少给出了3种不同的证明,其中被广泛认可讨论的解法,采用柯西不等式简化的思路,篇幅大概需要半页A4纸。
而另一位来自摩尔多瓦的选手,极富创造性的用两行式子完成了证明:
上面一行是“因为”,下面一行就是“所以”,其简洁、精准甚至可以说“粗暴有效”震惊全场。
精巧的思路也获得了当年的IMO特别奖。
要说明的是,IMO特别奖不看总成绩,只颁给解题方法独到的选手。
这种石破天惊的“第一步”,对于现在的AI来说,几乎是不可能做到的。
这也许就是为什么微软的研究人员设定的目标是“冲击金奖”吧。
巧的玩不转,Lean采取什么方法跟人类大脑竞争呢?
Lean和所有AI算法一样,需要“喂数据”进行训练。
目前的Lean,不但无法设计出完整的IMO题目证明过程,它甚至无法理解其中一些问题所涉及的概念。
所以,Lean的首要任务是学习更多的数学知识。
训练数据来自Mathlib的库。Mathlib是一个数学基础数据库,它几乎包含了大学二年级以下所有数学知识。
但Mathlib在中学数学上仍有一些差距,团队正在对Mathlib数据库进行补全。
掌握知识只是第一步,如何灵活运用才是关键。
团队采取的方法与象棋、围棋AI等相同——遵循决策树,直到算法找到最优解。
许多IMO题目的关键是寻找某种证明的模式。深入数学证明的底层,是一系列非常具体的、有逻辑的步骤。
研究人员尝试通过IMO题目证明的全部细节来训练Lean。
但在这种方法也有局限,每个特定的题目证明对于算法来说太“专”,下一个不同类型题目仍然不会解。
为了解决这个问题,团队需要数学家写出之前IMO题目的详细形式化证明。然后,团队提炼证明中的采用的不同策略。
接下来,Lean的任务,就是在这些策略中寻找一个 “胜利 “的组合。
这项任务实际上比描述起来困难的多,团队这样比喻它:
在围棋中,目标是找到最好的一步棋。而在数学中,目标是找到最好的一盘棋,然后在这盘棋中找到最好的一步棋。
团队说,也许到了明年,获得金牌仍然是很困难的,但至少,Lean有机会参赛了。
对此,有网友感叹AI这些年神速的进展:先是国际象棋、又是围棋……现在,AI又要来攻占国际奥赛金牌了。
但也有网友持悲观态度,认为AI现阶段只能在某些方面趋近人类的水平。
目前AI的算法,都是建立在人类认知基础上的……所以像(证明数学定理)这样特殊的任务,我持消极态度,毕竟世界上只有少部分人能提供帮助。
这个问题出乎意料的难以解释透彻。数学家在尝试解决新问题时,大脑的活动是难以描述的,更不要说落实在算法上。
尽管已经有AI团队朝数学思想的深层迈出了一步,但是从他们采取的策略来看,仍然是学习过往思路,选择成功率最高的“排列组合”。
这样的AI算法,要在创造力和突破性上超越人类,“火候”还差得远。
而隔壁的GPT,也在数学证明方向上取得了初步成果。
最近,OpenAI推出了用于数学问题的GPT-f,利用基于Transformer语言模型的生成能力进行自动定理证明。
由GPT-f发现的23个简短证明已被Metamath主库接收,这也是首次AI的数学证明获得业内认可。
道翰天琼CiGril认知智能机器人API用户需要按步骤获取基本信息:
在平台注册账号登录平台,进入后台管理页面,创建应用,然后查看应用,查看应用相关信息。在应用信息页面,找到appid,appkey秘钥等信息,然后写接口代码接入机器人应用。请求地址:http://www.weilaitec.com/cigirlrobot.cgr
请求方式:post
请求参数:
参数
类型
默认值
描述
userid
String
无
平台注册账号
appid
String
无
平台创建的应用id
key
String
无
平台应用生成的秘钥
msg
String
""
用户端消息内容
ip
String
""
客户端ip要求唯一性,无ip等可以用QQ账号,微信账号,手机MAC地址等代替。
接口连接示例:http://www.weilaitec.com/cigirlrobot.cgr?key=UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV&msg=你好&ip=119.25.36.48&userid=jackli&appid=52454214552 注意事项:参数名称都要小写,五个参数不能遗漏,参数名称都要写对,且各个参数的值不能为空字符串。否则无法请求成功。userid,appid,key三个参数要到平台注册登录创建应用之后,然后查看应用详情就可以看到。userid就是平台注册账号。
示例代码JAVA:
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class apitest { /** * Get请求,获得返回数据 * @param urlStr * @return */ private static String opUrl(String urlStr) { URL url = null; HttpURLConnection conn = null; InputStream is = null; ByteArrayOutputStream baos = null; try { url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(5 * 10000); conn.setConnectTimeout(5 * 10000); conn.setRequestMethod("POST"); if (conn.getResponseCode() == 200) { is = conn.getInputStream(); baos = new ByteArrayOutputStream(); int len = -1; byte[] buf = new byte[128]; while ((len = is.read(buf)) != -1) { baos.write(buf, 0, len); } baos.flush(); String result = baos.toString(); return result; } else { throw new Exception("服务器连接错误!"); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (is != null) is.close(); } catch (IOException e) { e.printStackTrace(); } try { if (baos != null) baos.close(); } catch (IOException e) { e.printStackTrace(); } conn.disconnect(); } return ""; } public static void main(String args []){ //msg参数就是传输过去的对话内容。 System.out.println(opUrl("http://www.weilaitec.com/cigirlrobot.cgr?key=UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV&msg=你好&ip=119.25.36.48&userid=jackli&appid=52454214552")); } }