陶哲軒點(diǎn)破「天機(jī)」:不懂?dāng)?shù)學(xué)別想靠ChatGPT飛升!
相信很多大家對(duì)陶哲軒點(diǎn)破「天機(jī)」:不懂?dāng)?shù)學(xué)別想靠ChatGPT飛升!還不知道吧,今天菲菲就帶你們一起去了解一下~.~!
【新智元導(dǎo)讀】沖鋒在AI輔助數(shù)學(xué)研究第一線的陶哲軒,近日又有「神總結(jié)」:ChatGPT提升的,是我們?cè)诰幋a、圖表等次要任務(wù)上的能力;而真要搞好數(shù)學(xué)研究,基礎(chǔ)不扎實(shí)的話,AI也是沒用的。
使用ChatGPT一年半了,陶哲軒的感想如何?
最近,一直沖鋒在探索AI輔助研究功能前線的數(shù)學(xué)大神陶哲軒,總結(jié)了ChatGPT對(duì)自己數(shù)學(xué)研究過程的幫助。
有趣的是,他發(fā)現(xiàn)AI輔助在數(shù)學(xué)方面的用處倒是有限,但它大大提升的,是自己在次要任務(wù)上的能力,比如編碼和制作圖表。
所以說,想要搞好數(shù)學(xué)研究,還是需要扎實(shí)的數(shù)學(xué)基礎(chǔ),純靠AI是沒用的。
數(shù)學(xué)不好的人,其實(shí)AI的幫助可能也沒那么大
陶哲軒表示,使用#Python的matplotlib.pyplot庫的一個(gè)額外收獲是,自己現(xiàn)在可以相對(duì)輕松地創(chuàng)建定性圖表,來說明更多非正式關(guān)系了。
在以前,他只能用文字或者草草繪制的手寫草圖來表達(dá)這種非正式關(guān)系。
為此,陶哲軒發(fā)現(xiàn)了一個(gè)有效的工作流:向ChatGPT請(qǐng)求一個(gè)簡(jiǎn)化示例的代碼,然后自己調(diào)整和修改代碼,直到輸出符合預(yù)期為止。
比如,通過下面這幾輪對(duì)話,在幾分鐘內(nèi)他就得到了自己想要的圖表。
最后陶哲軒總結(jié)道,AI輔助在自己主要研究的數(shù)學(xué)領(lǐng)域倒是用處有限,但它大大提高了自己在編碼、制作圖表這類次要任務(wù)中的能力,同時(shí)也將自己在一般任務(wù)中的能力,提升到了至少是初學(xué)者的水平。
同時(shí)他也點(diǎn)出,在自己看來,對(duì)于那些精通編程但并不那么精通數(shù)學(xué)的人來說,AI輔助可能就不會(huì)起到這么大的作用。
陶哲軒和ChatGPT的對(duì)話,具體如下——
https://chatgpt.com/share/064ae58d-7400-4589-a027-d66a8a8a236e
陶哲軒問:「在Python中,我知道如何使用pyplot軟件包制作圖形的單個(gè)圖像。有什么方法可以讓我用Python制作多個(gè)圖形的幻燈片或其他動(dòng)畫圖像嗎?比如,制作一個(gè)幻燈片,展示函數(shù)$x$, $x^2$, $x^3$, $x^4$對(duì)于$x \in [0,1]$的圖形?!?/p>
ChatGPT回答說:「是的,你可以使用matplotlib包中的matplotlib.animation模塊,在Python中創(chuàng)建多個(gè)圖形的幻燈片或動(dòng)畫圖像?!?/p>
接下來,ChatGPT就給出了創(chuàng)建該函數(shù)動(dòng)畫的具體步驟,詳細(xì)給出了代碼——
1. Install matplotlib if you haven't already:
pipinstallmatplotlib
2. Use the following code to create an animation:
importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.animationasanimation#Definetherangeforxx=np.linspace(0,1,400)#Definethefunctionsfunctions=[lambdax:x,lambdax:x**2,lambdax:x**3,lambdax:x**4]#Createafigureandaxisfig,ax=plt.subplots()line,=ax.plot(x,functions[0](x))#Setaxislabelsandtitleax.set_xlabel('x')ax.set_ylabel('f(x)')ax.set_title('AnimatedFunctions')#Initializetheanimationfunctiondefinit():line.set_ydata([np.nan]*len(x))returnline,#Updatetheanimationfunctiondefupdate(frame):line.set_ydata(functions[frame](x))ax.set_title(f'Function:$x^{frame+1}$')returnline,#Createtheanimationani=animation.FuncAnimation(fig,update,frames=len(functions),init_func=init,blit=True,repeat=True,interval=1000)#Savetheanimationasagifani.save('animated_functions.gif',writer='imagemagick')plt.show()
同時(shí), ChatGPT還給出了相應(yīng)解釋:首先要導(dǎo)入必要模塊,比如導(dǎo)入numpy進(jìn)行數(shù)值運(yùn)算,導(dǎo)入pyplot進(jìn)行繪圖,導(dǎo)入animation創(chuàng)建動(dòng)畫。
然后需要定義x的范圍,創(chuàng)建一個(gè)從0到1的數(shù)組x,包含400個(gè)點(diǎn)。
接著需要定義函數(shù)、創(chuàng)建圖形和坐標(biāo)軸、初始化動(dòng)畫函數(shù)等等。
ChatGPT給出的答案很好,但每個(gè)動(dòng)畫中只能顯示一個(gè)函數(shù)。
為了達(dá)到目的,陶哲軒進(jìn)一步提問道:「如果我想讓每個(gè)動(dòng)畫顯示兩個(gè)函數(shù)呢?例如,第一幀顯示$x$和$x^2$,第二幀顯示$x^2$和$x^3$,第三幀顯示$x^3$和$x^4$?!?/p>
ChatGPT表示:「要在動(dòng)畫的每一幀顯示兩個(gè)函數(shù),可以修改代碼,為每一幀繪制兩條線?!?/p>
接下來,ChatGPT還是給出了詳細(xì)的代碼。
1. Installmatplotlibif you haven't already:
pipinstallmatplotlib
2. Use the following code to create the animation with two functions per frame:
importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.animationasanimation#Definetherangeforxx=np.linspace(0,1,400)#Definethefunctionsfunctions=[lambdax:x,lambdax:x**2,lambdax:x**3,lambdax:x**4]#Createafigureandaxisfig,ax=plt.subplots()line1,=ax.plot(x,functions[0](x),label='$x$')line2,=ax.plot(x,functions[1](x),label='$x^2$')#Setaxislabelsandtitleax.set_xlabel('x')ax.set_ylabel('f(x)')ax.legend()ax.set_title('AnimatedFunctions')#Initializetheanimationfunctiondefinit():line1.set_ydata([np.nan]*len(x))line2.set_ydata([np.nan]*len(x))returnline1,line2#Updatetheanimationfunctiondefupdate(frame):line1.set_ydata(functions[frame](x))line2.set_ydata(functions[frame+1](x))ax.legend([f'$x^{frame+1}$',f'$x^{frame+2}$'])returnline1,line2#Createtheanimationani=animation.FuncAnimation(fig,update,frames=len(functions)-1,init_func=init,blit=True,repeat=True,interval=1000)#Savetheanimationasagifani.save('animated_double_functions.gif',writer='imagemagick')plt.show()
隨后ChatGPT照例給出了詳細(xì)解釋:為了在「0,1」的區(qū)間上創(chuàng)建($x$和$x^2$,$x^2$和$x^3$,$x^3$和$x^4$)的函數(shù),需要定義x的范圍、定義函數(shù)、創(chuàng)建圖形和坐標(biāo)軸、初始化動(dòng)畫函數(shù)等。
陶哲軒表示:「這樣就差不多可以了,但圖例似乎無法隨動(dòng)畫更新,它會(huì)停留在x^3和 x^4。有沒有辦法在每一幀都更新圖例?」
針對(duì)這個(gè)問題,ChatGPT給出了對(duì)策,就是通過清除現(xiàn)有圖例并創(chuàng)建新的圖例,來更新每一幀的圖例。
隨后,ChatGPT貼心地給出了可以正確更新圖例的修改后的代碼。
importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.animationasanimation#Definetherangeforxx=np.linspace(0,1,400)#Definethefunctionsfunctions=[lambdax:x,lambdax:x**2,lambdax:x**3,lambdax:x**4]#Createafigureandaxisfig,ax=plt.subplots()line1,=ax.plot(x,functions[0](x),label='$x$')line2,=ax.plot(x,functions[1](x),label='$x^2$')#Setaxislabelsandtitleax.set_xlabel('x')ax.set_ylabel('f(x)')ax.set_title('AnimatedFunctions')#Initializetheanimationfunctiondefinit():line1.set_ydata([np.nan]*len(x))line2.set_ydata([np.nan]*len(x))returnline1,line2#Updatetheanimationfunctiondefupdate(frame):line1.set_ydata(functions[frame](x))line2.set_ydata(functions[frame+1](x))ax.legend([f'$x^{frame+1}$',f'$x^{frame+2}$'])returnline1,line2#Createtheanimationani=animation.FuncAnimation(fig,update,frames=len(functions)-1,init_func=init,blit=True,repeat=True,interval=1000)#Savetheanimationasagifani.save('animated_double_functions.gif',writer='imagemagick')plt.show()
ChatGPT解釋道:更新函數(shù)中的ax.legend()調(diào)用,就可以清除現(xiàn)有圖例,并且使用每幀的新標(biāo)簽進(jìn)行更新了。這樣就可以確保,圖例反映的是當(dāng)前顯示函數(shù)的功能。
陶哲軒繼續(xù)提問——
「我想讓Python繪制一個(gè)用數(shù)字描述,但用字符串標(biāo)注的函數(shù)圖。例如,我想繪制這樣一幅圖:橫軸上標(biāo)有『今天』、『下周』和『明年』,分別代表x=1、x=2和x=3的位置,縱軸上標(biāo)有『初級(jí)』、『中級(jí)』和『專家』,分別代表y=1、y=4和y=9的位置(因此縱向標(biāo)簽的間距并不相等),要繪制的圖形是拋物線y=x^2的圖形。如何繪制?」
ChatGPT回答:「要繪制橫軸和縱軸用字符串標(biāo)注但與特定數(shù)值相對(duì)應(yīng)的圖表,可以使用matplotlib庫并自定義刻度標(biāo)簽?!?/p>
1. Installmatplotlibif you haven't already:
pipinstallmatplotlib
2. Use the following code to create the plot:
importnumpyasnpimportmatplotlib.pyplotasplt#Definethenumericalvaluesforthexandypositionsx_values=[1,2,3]y_values=[1,4,9]#Definethecorrespondingstringlabelsforxandyaxesx_labels=["Today","Nextweek","Nextyear"]y_labels=["Beginner","Intermediate","Expert"]#Definethefunctiontobeplotted(y=x^2)x=np.linspace(1,3,100)y=x**2#Createafigureandaxisfig,ax=plt.subplots()#Plotthefunctionax.plot(x,y,label='$y=x^2$')#Setthexandyaxislabelsax.set_xlabel('Time')ax.set_ylabel('Level')#Setthexandyaxistickpositionsandlabelsax.set_xticks(x_values)ax.set_xticklabels(x_labels)ax.set_yticks(y_values)ax.set_yticklabels(y_labels)#Addalegendax.legend()#Setthetitleax.set_title('Parabola$y=x^2$withCustomAxisLabels')#Displaytheplotplt.show()
并且給出了相應(yīng)解釋。
至此,陶哲軒的問題就被ChatGPT完美解決了。
網(wǎng)友:圖表存在「幻覺」
在陶哲軒的評(píng)論區(qū),有網(wǎng)友指出了此圖的準(zhǔn)確性有問題:兩條線之間的山谷意味著什么?那里的相對(duì)位移應(yīng)該更大才對(duì)。
在他看來,用手繪涂鴉來表達(dá)這類非正式想法是比較合適的,可以讓形式與內(nèi)容相匹配,避免了使用和標(biāo)準(zhǔn)化這些AI工具過程中的缺點(diǎn)。
對(duì)于這名網(wǎng)友的「找茬」,陶哲軒進(jìn)行了詳盡的回復(fù)。
他解釋道,如果自己想要傳達(dá)復(fù)雜關(guān)系的圖像,手繪圖是很不方便的,一方面原因是自己不擅長(zhǎng)手繪,另一方面,也是因?yàn)闊o法很輕松地編輯出一個(gè)草圖,讓它部分地傳達(dá)自己的想法。
而借助Python,自己就可以輕松地循環(huán),進(jìn)行十幾次嘗試,然后找到一個(gè)能捕捉到自己想要的細(xì)微差別的方法了。
例如,他確實(shí)有意讓初級(jí)領(lǐng)域和次級(jí)領(lǐng)域之間的山谷在AI的幫助下獲得更高的推動(dòng)力(這個(gè)山谷代表著兩個(gè)相鄰的領(lǐng)域)。
在陶哲軒看來,純數(shù)學(xué)是自己的主要領(lǐng)域,而計(jì)算機(jī)編程是次要技能;自己對(duì)于設(shè)置和安裝機(jī)器學(xué)習(xí)軟件包并沒有直接經(jīng)驗(yàn),但后者與這兩個(gè)專業(yè)相鄰,所以他會(huì)把它放在這個(gè)圖的中間位置。
而對(duì)于圖表不夠精確這個(gè)問題,陶哲軒解釋道,數(shù)軸上沒有數(shù)字標(biāo)簽,應(yīng)該就已經(jīng)意味著這是一張非正式圖像。
或者,他建議我們可以創(chuàng)建其他信號(hào),來更加強(qiáng)調(diào)圖形的非正式性,比如讓線條更厚、更模糊,同時(shí)選擇不那么「專業(yè)」的字體。
這些在Python中是很容易做到的,但如果要手工完成,就只能重繪圖像了。
同時(shí),針對(duì)這位網(wǎng)友的建議,陶哲軒也表示,在使用ChatGPT/Python之前,自己的確也提前手繪了草圖。
隨后,陶哲軒又在圖表上進(jìn)行了一些調(diào)整,添加了一些不建議使用AI輔助的情況:在幾乎沒有先驗(yàn)知識(shí)的情況下嘗試用AI處理中等難度的任務(wù),或者在只有中等先驗(yàn)知識(shí)的情況下嘗試處理專家難度的任務(wù)。
陶哲軒表示,在這種特殊情況下,此類更新在手繪圖像上是可行的,并且只需要添加新繪圖就可以了,而不是刪除或修改現(xiàn)有繪圖。
但他強(qiáng)調(diào),對(duì)于許多其他類型的修訂,使用手繪圖像作為主圖像來源會(huì)很不方便。
「資深用戶」陶哲軒
其實(shí)早在2023年3月,陶哲軒就開始探索如何將AI加入到自己的工作流里了。
起初,陶哲軒想讓ChatGPT根據(jù)他的描述直接得到「Kummer定理」這個(gè)名字。不過,AI給出的結(jié)果卻是一個(gè)Legendre公式。好在,后續(xù)可以根據(jù)這個(gè)線索,通過傳統(tǒng)搜索引擎輕松找到答案。
據(jù)此,陶哲軒認(rèn)為,AI在數(shù)學(xué)中的作用是提供一個(gè)初步解答,然后可以通過更傳統(tǒng)的方法進(jìn)行細(xì)化。
接下來,陶哲軒從原理上對(duì)比了傳統(tǒng)計(jì)算機(jī)軟件工具和AI工具,發(fā)現(xiàn)二者的工作流極為不同。
例如,對(duì)于傳統(tǒng)的LaTeX到PDF編譯器來說,只要輸入的代碼正確,那么一定可以得到一份完美的PDF。但如果輸入的代碼有格式錯(cuò)誤,結(jié)果要么是編譯錯(cuò)誤,要么是一份嚴(yán)重混亂的PDF。
而AI LaTeX編譯器則可以更加優(yōu)雅地處理噪聲或格式錯(cuò)誤的輸入,但它不能以「一鍵完成」的方式使用,而是需要進(jìn)行大量的互動(dòng)。
隨后,在大量的嘗試中,陶哲軒又發(fā)現(xiàn)了一些ChatGPT在處理數(shù)學(xué)問題時(shí)的小亮點(diǎn)。
比如,一旦AI「學(xué)會(huì)」了用戶的需求,用戶就可以用最少的解釋或預(yù)格式化來提供進(jìn)一步的數(shù)據(jù),而AI依然可以推斷出一個(gè)令人滿意的輸出。
例如,在隨后的此類請(qǐng)求中,即使輸入不是MathSciNet格式,AI仍然能夠繼續(xù)我在附加請(qǐng)求中隱含引入的參考命名約定。
總的來說,這些AI工具并不能幫助直接攻克未解的數(shù)學(xué)問題,但它們?cè)诟鞣N相關(guān)的任務(wù)中相當(dāng)有用,盡管之后常常需要一些手動(dòng)調(diào)整。
2023年4月,在經(jīng)過一段時(shí)間的使用之后,陶哲軒針對(duì)AI和人類(主要是自己)各自的優(yōu)勢(shì)進(jìn)行了一波總結(jié)。
1. 對(duì)于每天都要做的任務(wù),陶哲軒已經(jīng)掌握了足夠的技術(shù)來優(yōu)化工作流。在這方面,AI工具的幫助不大。最明顯的就是在研究數(shù)學(xué),同時(shí)也包括他已經(jīng)極為熟練的郵件撰寫。
2. 對(duì)于有一些專業(yè)知識(shí)但很少實(shí)踐的任務(wù),AI工具是有幫助的。比如創(chuàng)建初稿或者提供靈感,然后陶哲軒自己再去進(jìn)行驗(yàn)證和完善。這一類的例子包括數(shù)據(jù)處理、翻譯成外語,或以很少使用的格式編寫文本(比如,公開演講、規(guī)則文件等)。
3. 對(duì)于幾乎沒有專業(yè)知識(shí)且不需要極高質(zhì)量和可靠輸出的任務(wù),也可以詢問AI工具,并或多或少地聽從它的建議。在這里,AI的功能相當(dāng)于一個(gè)操作更簡(jiǎn)便的搜索引擎。
4. 對(duì)于沒有專業(yè)知識(shí)但需要質(zhì)量和可靠性的任務(wù),就必須咨詢?nèi)祟悓<伊恕R粋€(gè)例子是修理復(fù)雜、昂貴且精密的設(shè)備。
比如,第二類任務(wù):
陶哲軒讓GPT用LaTeX輸出流程圖后,得到了下面這張圖片。
可以看到,這張流程圖還比較粗糙,不過對(duì)于熟練使用LaTeX的陶哲軒來說,只需簡(jiǎn)單修改一下,即可得到下面這個(gè)成品。
再比如,第三類任務(wù):
陶哲軒讓GPT把自己之前的帖子總結(jié)為流程圖,結(jié)果如下。
2023年9月,陶哲軒對(duì)ChatGPT的探索,已經(jīng)深入到用它來寫代碼了。
作為實(shí)驗(yàn),他要求ChatGPT寫一段Python代碼,為每個(gè)自然數(shù)n計(jì)算1,...,n的最長(zhǎng)子序列的長(zhǎng)度??(??) ,其中歐拉全能函數(shù)?不遞減。
很快,AI便生成了一段極其巧妙的代碼。雖然還存在一些偏差,但距離最終答案已經(jīng)非常接近了。
隨后,陶哲軒基于這段初始代碼作為起點(diǎn),手動(dòng)生成了自己想要的代碼,這大概節(jié)省了他半個(gè)小時(shí)的工作量。
因?yàn)镃hatGPT給出的結(jié)果非常好,陶哲軒表示,自己以后還會(huì)經(jīng)常使用它,為類似的計(jì)算提供初始代碼。
一看陶哲軒對(duì)AI的嘗試已經(jīng)來到了代碼領(lǐng)域,坐不住的網(wǎng)友們便給他安利一波AI加持的VSCode。
對(duì)此,陶哲軒本人十分「聽勸」,竟然放下了自己已經(jīng)用了近10年的TeXnicCenter+MiKTeX,立刻將工作流升級(jí)到了VSCode+TeX Live+LaTeX workshop+GitHub C opilot。
在初次嘗試中,他主要用的是很基礎(chǔ)的代碼片段功能(code snippets feature)——
通過輸入觸發(fā)詞(比如「cor」),并按下Tab鍵來創(chuàng)建整個(gè)推論環(huán)境(corollary environment),非常節(jié)省時(shí)間。
就在不到一個(gè)月之后,陶哲軒表示,他已經(jīng)在用Github C opilot為自己的博客文章撰寫提供助力了。
比如在下面這個(gè)例子中,陶哲軒將一個(gè)積分分成三部分,并描述了如何估計(jì)第一部分,隨后C opilot正確地給出了剩下兩部分的估計(jì)方法。
他預(yù)計(jì),在最終的成稿中,大約有十幾句來自C opilot的建議會(huì)以某種形式呈現(xiàn)出來。
隨著AI自身的進(jìn)化,以及愈發(fā)熟練的掌握,陶哲軒發(fā)現(xiàn)AI已經(jīng)不再局限于外圍的任務(wù),而是可以涉足數(shù)學(xué)領(lǐng)域本身了。
比如,在使用Lean進(jìn)行自然數(shù)游戲研究時(shí),他便通過GPT-4的輔助得到了關(guān)于有限多個(gè)實(shí)變量不等式理論的成果。
并且,隨著關(guān)卡變得越來越難,GPT的作用也越加能夠凸顯出來。
而在這波體驗(yàn)之后,大神本人也算是徹底「入坑」了。
幾天之后,又是一大波心得總結(jié):
- Github C opilot在完成簡(jiǎn)短論證時(shí)非常有用,盡管它的較長(zhǎng)建議通常是錯(cuò)誤的。但即使是錯(cuò)誤的建議也能幫助我學(xué)到正確的語法。
- GPT-4在澄清Lean語法的細(xì)微差別并提供我用數(shù)學(xué)英語解釋的步驟的Lean翻譯建議方面有一定幫助。然而,它似乎更受Lean3語法和最佳實(shí)踐的影響,而不是Lean4。
終于,在經(jīng)過差不多100個(gè)小時(shí)的努力之后,陶哲軒用Lean4完成了Maclaurin型不等式論文的形式化。
大神畢竟是大神,陶哲軒很快又再一次跑通了用AI工具輔助數(shù)學(xué)研究——形式化多項(xiàng)式Freiman-Ruzsa猜想的證明,大獲成功。
以上就是關(guān)于【陶哲軒點(diǎn)破「天機(jī)」:不懂?dāng)?shù)學(xué)別想靠ChatGPT飛升!】的相關(guān)內(nèi)容,希望對(duì)大家有幫助!