tiknovel.com tiknovel

AI

当前位置:首页 > 技术圈 > AI

数学天才陶哲轩点破天机:不懂数学别想靠ChatGPT飞升!

数学天才陶哲轩点破天机:不懂数学别想靠ChatGPT飞升!

使用ChatGPT一年半了,陶哲轩的感想如何?

最近,一直冲锋在探索AI辅助研究功能前线的数学大神陶哲轩,总结了ChatGPT对自己数学研究过程的帮助。

有趣的是,他发现AI辅助在数学方面的用处倒是有限,但它大大提升的,是自己在次要任务上的能力,比如编码和制作图表。

图片

所以说,想要搞好数学研究,还是需要扎实的数学基础,纯靠AI是没用的。

图片

数学不好的人,其实AI的帮助可能也没那么大

陶哲轩表示,使用#Python的matplotlib.pyplot库的一个额外收获是,自己现在可以相对轻松地创建定性图表,来说明更多非正式关系了。

在以前,他只能用文字或者草草绘制的手写草图来表达这种非正式关系。

为此,陶哲轩发现了一个有效的工作流:向ChatGPT请求一个简化示例的代码,然后自己调整和修改代码,直到输出符合预期为止。

比如,通过下面这几轮对话,在几分钟内他就得到了自己想要的图表。

图片

最后陶哲轩总结道,AI辅助在自己主要研究的数学领域倒是用处有限,但它大大提高了自己在编码、制作图表这类次要任务中的能力,同时也将自己在一般任务中的能力,提升到了至少是初学者的水平。

同时他也点出,在自己看来,对于那些精通编程但并不那么精通数学的人来说,AI辅助可能就不会起到这么大的作用。

陶哲轩和ChatGPT的对话,具体如下——

图片

https://chatgpt.com/share/064ae58d-7400-4589-a027-d66a8a8a236e

陶哲轩问:「在Python中,我知道如何使用pyplot软件包制作图形的单个图像。有什么方法可以让我用Python制作多个图形的幻灯片或其他动画图像吗?比如,制作一个幻灯片,展示函数$x$, $x^2$, $x^3$, $x^4$对于$x \in [0,1]$的图形。」

图片

ChatGPT回答说:「是的,你可以使用matplotlib包中的matplotlib.animation模块,在Python中创建多个图形的幻灯片或动画图像。 」

图片

接下来,ChatGPT就给出了创建该函数动画的具体步骤,详细给出了代码——

1. Install matplotlib if you haven't already:

pip install matplotlib

2. Use the following code to create an animation:

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.animation as animation

# Define the range for xx = np.linspace(0, 1, 400)

# Define the functionsfunctions = [lambda x: x, lambda x: x**2, lambda x: x**3, lambda x: x**4]

# Create a figure and axisfig, ax = plt.subplots()line, = ax.plot(x, functions[0](x))

# Set axis labels and titleax.set_xlabel('x')ax.set_ylabel('f(x)')ax.set_title('Animated Functions')

# Initialize the animation functiondef init():line.set_ydata([np.nan] * len(x))return line,

# Update the animation functiondef update(frame):line.set_ydata(functions[frame](x))ax.set_title(f'Function: $x^{frame+1}$')return line,

# Create the animationani = animation.FuncAnimation(fig, update, frames=len(functions), init_func=init, blit=True, repeat=True, interval=1000)

# Save the animation as a gifani.save('animated_functions.gif', writer='imagemagick')

plt.show()

同时, ChatGPT还给出了相应解释:首先要导入必要模块,比如导入numpy进行数值运算,导入pyplot进行绘图,导入animation创建动画。

然后需要定义x的范围,创建一个从0到1的数组x,包含400个点。

接着需要定义函数、创建图形和坐标轴、初始化动画函数等等。

图片

ChatGPT给出的答案很好,但每个动画中只能显示一个函数。

为了达到目的,陶哲轩进一步提问道:「如果我想让每个动画显示两个函数呢?例如,第一帧显示$x$和$x^2$,第二帧显示$x^2$和$x^3$,第三帧显示$x^3$和$x^4$。」

图片

ChatGPT表示:「要在动画的每一帧显示两个函数,可以修改代码,为每一帧绘制两条线。」

图片

接下来,ChatGPT还是给出了详细的代码。

1. Install matplotlib if you haven't already:

pip install matplotlib

2. Use the following code to create the animation with two functions per frame:

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.animation as animation

# Define the range for xx = np.linspace(0, 1, 400)

# Define the functionsfunctions = [lambda x: x, lambda x: x**2, lambda x: x**3, lambda x: x**4]

# Create a figure and axisfig, ax = plt.subplots()line1, = ax.plot(x, functions[0](x), label='$x$')line2, = ax.plot(x, functions[1](x), label='$x^2$')

# Set axis labels and titleax.set_xlabel('x')ax.set_ylabel('f(x)')ax.legend()ax.set_title('Animated Functions')

# Initialize the animation functiondef init():line1.set_ydata([np.nan] * len(x))line2.set_ydata([np.nan] * len(x))return line1, line2

# Update the animation functiondef update(frame):line1.set_ydata(functions[frame](x))line2.set_ydata(functions[frame+1](x))ax.legend([f'$x^{frame+1}$', f'$x^{frame+2}$'])return line1, line2

# Create the animationani = animation.FuncAnimation(fig, update, frames=len(functions)-1, init_func=init, blit=True, repeat=True, interval=1000)

# Save the animation as a gifani.save('animated_double_functions.gif', writer='imagemagick')

plt.show()

随后ChatGPT照例给出了详细解释:为了在「0,1」的区间上创建($x$和$x^2$,$x^2$和$x^3$,$x^3$和$x^4$)的函数,需要定义x的范围、定义函数、创建图形和坐标轴、初始化动画函数等。

图片

陶哲轩表示:「这样就差不多可以了,但图例似乎无法随动画更新,它会停留在x^3和 x^4。有没有办法在每一帧都更新图例?」

图片

针对这个问题,ChatGPT给出了对策,就是通过清除现有图例并创建新的图例,来更新每一帧的图例。

图片

随后,ChatGPT贴心地给出了可以正确更新图例的修改后的代码。

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.animation as animation

# Define the range for xx = np.linspace(0, 1, 400)

# Define the functionsfunctions = [lambda x: x, lambda x: x**2, lambda x: x**3, lambda x: x**4]

# Create a figure and axisfig, ax = plt.subplots()line1, = ax.plot(x, functions[0](x), label='$x$')line2, = ax.plot(x, functions[1](x), label='$x^2$')

# Set axis labels and titleax.set_xlabel('x')ax.set_ylabel('f(x)')ax.set_title('Animated Functions')

# Initialize the animation functiondef init():line1.set_ydata([np.nan] * len(x))line2.set_ydata([np.nan] * len(x))return line1, line2

# Update the animation functiondef update(frame):line1.set_ydata(functions[frame](x))line2.set_ydata(functions[frame+1](x))ax.legend([f'$x^{frame+1}$', f'$x^{frame+2}$'])return line1, line2

# Create the animationani = animation.FuncAnimation(fig, update, frames=len(functions)-1, init_func=init, blit=True, repeat=True, interval=1000)

# Save the animation as a gifani.save('animated_double_functions.gif', writer='imagemagick')

plt.show()

ChatGPT解释道:更新函数中的ax.legend()调用,就可以清除现有图例,并且使用每帧的新标签进行更新了。这样就可以确保,图例反映的是当前显示函数的功能。

图片

陶哲轩继续提问——

「我想让Python绘制一个用数字描述,但用字符串标注的函数图。例如,我想绘制这样一幅图:横轴上标有『今天』、『下周』和『明年』,分别代表x=1、x=2和x=3的位置,纵轴上标有『初级』、『中级』和『专家』,分别代表y=1、y=4和y=9的位置(因此纵向标签的间距并不相等),要绘制的图形是抛物线y=x^2的图形。如何绘制?」

图片

ChatGPT回答:「要绘制横轴和纵轴用字符串标注但与特定数值相对应的图表,可以使用matplotlib库并自定义刻度标签。」

图片

1. Install matplotlib if you haven't already:

pip install matplotlib

2. Use the following code to create the plot:

import numpy as npimport matplotlib.pyplot as plt

# Define the numerical values for the x and y positionsx_values = [1, 2, 3]y_values = [1, 4, 9]

# Define the corresponding string labels for x and y axesx_labels = ["Today", "Next week", "Next year"]y_labels = ["Beginner", "Intermediate", "Expert"]

# Define the function to be plotted (y = x^2)x = np.linspace(1, 3, 100)y = x**2

# Create a figure and axisfig, ax = plt.subplots()

# Plot the functionax.plot(x, y, label='$y=x^2$')

# Set the x and y axis labelsax.set_xlabel('Time')ax.set_ylabel('Level')

# Set the x and y axis tick positions and labelsax.set_xticks(x_values)ax.set_xticklabels(x_labels)ax.set_yticks(y_values)ax.set_yticklabels(y_labels)

# Add a legendax.legend()

# Set the titleax.set_title('Parabola $y=x^2$ with Custom Axis Labels')

# Display the plotplt.show()

并且给出了相应解释。

图片

至此,陶哲轩的问题就被ChatGPT完美解决了

网友:图表存在「幻觉」

在陶哲轩的评论区,有网友指出了此图的准确性有问题:两条线之间的山谷意味着什么?那里的相对位移应该更大才对。

图片

在他看来,用手绘涂鸦来表达这类非正式想法是比较合适的,可以让形式与内容相匹配,避免了使用和标准化这些AI工具过程中的缺点。

图片

对于这名网友的「找茬」,陶哲轩进行了详尽的回复。

他解释道,如果自己想要传达复杂关系的图像,手绘图是很不方便的,一方面原因是自己不擅长手绘,另一方面,也是因为无法很轻松地编辑出一个草图,让它部分地传达自己的想法。

而借助Python,自己就可以轻松地循环,进行十几次尝试,然后找到一个能捕捉到自己想要的细微差别的方法了。

例如,他确实有意让初级领域和次级领域之间的山谷在AI的帮助下获得更高的推动力(这个山谷代表着两个相邻的领域)。

在陶哲轩看来,纯数学是自己的主要领域,而计算机编程是次要技能;自己对于设置和安装机器学习软件包并没有直接经验,但后者与这两个专业相邻,所以他会把它放在这个图的中间位置。

而对于图表不够精确这个问题,陶哲轩解释道,数轴上没有数字标签,应该就已经意味着这是一张非正式图像。

或者,他建议我们可以创建其他信号,来更加强调图形的非正式性,比如让线条更厚、更模糊,同时选择不那么「专业」的字体。

这些在Python中是很容易做到的,但如果要手工完成,就只能重绘图像了。

ChatGPT 陶哲轩

评论排行榜