AI for Science怎么学?
📖 本文档为「机器学习+材料化学:从入门到上手|AI4S怎么学」课程教学文档
本教程可在 Bohrium Notebook 上直接运行。在本教程的最后,你可以点击界面上方按钮 开始连接,选择 bohrium-notebook 镜像及任意节点配置,稍等片刻即可运行。
“AI for Science(AI4S)怎么学”,这是一个好问题。
问这个问题,不如问另一个问题:“这么多东西,真学的过来吗?”
随着AI技术体系的快速发展和广泛应用,AI4S的内涵也在深刻变化中——正如本课程内容本身,如果你把文档和Bohrium Notebook中的内容当作静态的知识,甚至像过去那样,下载下来、打印下来,那么你会发现:
- 静态的知识“跑不起来”,进而难以让你按着自己的想法“玩”和“用”;
- 很快,一些内容就过时了——所谓“过时”,是指当你准备用这些内容解决问题时,最佳的解决方案已经变了。
知识体系的变化如此之快,以至于驾驭它们的最佳方式已经不再是片刻不停地学每个具体的知识点。
那么,AI for Science到底该怎么学?
这里可以有很多从底层逻辑到工具体系的长篇大论,但是,在接下来半个小时里,我们不妨像一位智者学习,看看他怎么建议。
关于Roald Hoffmann
Hoffmann教授于1937年出生于波兰(今乌克兰)佐洛乔夫,幸免于二战,1949年移居美国,并在哥伦比亚大学和哈佛大学化学专业学习,1962年获博士学位。自1965年以来,Hoffmann教授一直在康奈尔大学任教,他现在是人文文学的Frank H. T. Rhodes教授。他曾获得专业领域内包括1981年的诺贝尔化学奖(与福井谦一共同获得)在内的许多荣誉。
在康奈尔大学,Hoffmann教授有一半的时间来教授化学导论课。同时,Hoffmann教授也是一位自1990年以来就广泛播出的电视课程“化学世界”的主持人。
作为一名作家,Hoffmann教授在科学、诗歌和哲学之间开辟了一片天地,写了许多散文、五本纪实文学著作和三部戏剧,并且出版了七本诗集,其中包括在马德里和莫斯科出版的西班牙语-英语双语版和俄语-英语双语版。
Roald Hoffmann 的一次讲座
2022年7月26日,由北京科学智能研究院(AI for Science Institute)主办的AI for Science系列学术讲座带来了由诺贝尔化学奖得主Roald Hoffmann教授主讲的主题为主题为「SIMULATION VS UNDERSTANDING: A TENSION, AND NOT JUST IN OUR PROFESSION」的报告。强烈推荐同学们观看整个报告。
诺贝尔化学家被计算机击败的过程
在报告中,Hoffmann分享了自己的亲身经历,讲述作为一个传统计算化学工作者被超级计算机所击败时候的感受。
Hoffmann曾与优秀的物理学家Ashcroft合作通过设计H配位数以及主族元素/过渡金属元素/镧系元素参杂来实现Si更好的导电性甚至超导性,他凭借自己作为化学家的经验和直觉设计出了一个结构,却在一年后被计算机所设计出来的结构击败了。无论是随机搜索算法、基因算法、模拟退火算法或者最小跳动算法,所有算法预测出的构型都优于Hoffmann根据化学直觉提出的——由计算机设计出来的结构有更低的焓,具有更低能量更稳定的结构。
面对被计算机打败的现实,Hoffmann的第一反应是做了如下解释:虽然是电脑发现了能量更低的稳定结构,但是人类在两个结构中都看到了八个带有电子空缺位的、双电子的、三中心的键。这个发现虽然对于计算机计算没有意义,但是对人类有重要意义:看到了结构和成键之间的联系。同时虽然计算机计算的更快,并且成功找到了更好的结构,但是计算机没有关于化学和物理任何知识的“理解”。
这里Hoffmann提到了一个已经存在很久的关于AI智力的讨论。Hoffmann举了“中文房间争论”(The Chinese Room Argument)、AlphaGo击败世界顶尖围棋选手、量子计算的将为科学界带来的改变这三个例子。Hoffmann提出,从这些例子来看,程序工作的核心不是为了得到解释,而是得到答案。写代码并且调试代码反而会阻碍思考这里是否有一个科学解释。在不远的将来,机器学习和神经网络等发展将在计算精度、效率、成本的方面会媲美目前最好的量子化学工具。然而数据导向的量化科学家群体将会面临一个尴尬的难题:
“他们的方程能否继续为进一步提升的神经网络的表现而提供可信赖的训练数据,还是会让他们步入超市收银员、出租车司机的后尘?”
插播一条
Hey,大家好!今天我想向大家介绍一篇近期的工作:将材料结构搜索提速数十倍|CALYPSO-SaaS发布上线至Bohrium®云平台。我们团队在材料科学领域取得了重要进展!通过我们的研究,将材料结构搜索速度提升数十倍,并将CALYPSO-SaaS发布至Bohrium®云平台,实现了高效率的材料结构预测。喜欢科学研究的朋友们快来围观吧!详情请戳此链接:将材料结构搜索提速数十倍。别忘了给我们点赞哦!👍
Roald Hoffmann的五点建议
在Hoffmann看来,使用大数据进行“模拟”有着势不可挡的发展前景。在一些领域深受欢迎的,例如音乐偏好预测、面部和指纹识别、自动驾驶等;但是在另一些领域使用大数据进行“模拟”不可避免地会引起一些伦理道德问题,比如保险公司是否有权利去利用你的DNA信息确定保险的条款等。伦理道德与科学和技术一样,是人类社会发明重要组成部分。并且伦理道德和法律的发展是落后于技术发展的。这意味着我们势必会被改变,而我们又应该如何生存在这个时代?
在AI的浪潮下,我们该如何在这个时代保持人性?Hoffmann给了他认为让“理解”和“模拟”共存的方案:
- Let experiment lead you: Experiment brings us together.
- Move up one meta-level, to the relationship of things/facts/molecules to each other.
- Play. If you have a reliable tool, play with it, try out things. To build understandings.
- Teach. Don't allow anyone to escape teaching.
- Ask why.
让我们通过Borhium Chat(bohrium-chat.dp.tech) 实践一下上面的建议!
问题一:我想在一个jupyter notebook中以风趣又不失优雅的方式做个小广告,链接到我们近期的一个工作,并用一些卡片之类的效果。请给我写出相应的markdown。近期工作链接:https://mp.weixin.qq.com/s/C9rDYwLMvOF5DPbJYqaAFQ; 近期工作标题:“将材料结构搜索提速数十倍|CALYPSO-SaaS发布上线至Bohrium®云平台”
这个问题的回答就是我们上面的插播。
问题二:请问“理解”与“模拟”的区别是什么?为什么我们又需要实验?
答:“理解”和“模拟”的主要区别在于,前者是通过概念、规律、理论等方式对某个现象或过程的本质进行分析和解释,后者则是通过建立数学模型或计算机程序等方式,对某个现象或过程进行仿真、预测或优化。简单来说,“理解”是为了知其然,而“模拟”则是为了知其所以然。
尽管理论或模拟可以提供对现象或过程的深刻认识,但是在实践中,由于存在环境和参数的影响,模型的简化和不确定性等因素,理论和模拟的结果并不总是准确的。因此,我们需要实验来验证和修改理论和模拟的结果。实验可以提供直接的观测结果,从而更好地了解实际情况,并帮助提高理论和模拟的准确性和可靠性。同时,在实验中还可以探索未知的现象和问题,为建立新的理论和模型提供基础。因此,综合理论、模拟和实验三种方式,可以获得更深入、更准确、更全面的认识和控制现象或过程的能力。
问题三:请问AI for Science是什么?如何学它?又如何教它?
答:AI for Science是指利用人工智能技术进行科研探索和创新的一种发展趋势。AI for Science的应用范围非常广泛,包括材料、化学、生物、医学、物理等领域。
要学习AI for Science,需要具备一定的数学、计算机和科学相关的基础知识。推荐的学习路线是:首先学习机器学习和深度学习的基础理论和应用,然后深入学习科学领域的知识和数据处理技术,最后学习如何将AI技术应用到科学研究中,例如材料结构预测和反应机理分析等。
在教授AI for Science方面,需要具备对相关领域的深入了解,并掌握基于AI技术的算法和模型。同时,需要熟悉科学研究流程,能够将AI技术与实验或模拟相结合,以解决具体的科学问题。在教授AI for Science时还需要强调模型的限制和不确定性,教授如何评估模型的准确性和可靠性,以及如何解释模型的预测结果和认识局限性。
问题四:你只说了学习和教授AI for Science需要什么,但我想问的是“How”。How to teach, and how to learn, AI for Science?
好的,让我进一步解答你的问题。
如何学习AI for Science:
了解基础知识。首先需要了解数据科学和机器学习的基础知识,例如统计学、线性代数和数据结构。了解这些基础知识有助于你理解AI算法的原理和定义。有很多在线课程和资源可以帮助你学习这些基础知识,例如Coursera、Udacity和edX等。
掌握程序设计和编程。学习一些常见程序语言(例如Python、R、C++和Java)是非常重要的,因为AI算法需要写程序才能进行训练和预测。你可以通过MOOCs(例如Coursera和edX)来学习这些程序语言的入门课程。
深入学习AI方法。了解一些AI算法的实现和应用是非常关键的,如神经网络、决策树、随机森林等。此外,了解AI在各个领域的应用也可以帮助你更好地理解AI的强大力量,并为你的学习和创新工作提供更好的框架。
实践,实践,实践。实践是学习AI for Science的最佳方法。你需要掌握基本的AI算法和工具,然后找到充满挑战和实践的项目来实践和应用你的知识和技能。例如,你可以通过Kaggle和DataCamp等在线社区参加一些数据科学和机器学习竞赛,或者亲自开发项目来提高你的AI技能。
如何教授AI for Science:
制定教学计划。在设计所需的课程之前,了解基础知识是至关重要的。在制定计划时,请考虑设计有效的教学方法和工具,以便让学生尽可能多地了解AI的方法和应用。
创造互动式/富有挑战的学习环境。学习AI的最佳途径是在实践中学习,而互动式学习和富于挑战的环境可以激励学生积极地参与课堂环节。设计一些交互式的程序示例和案例,让学生尝试自己实现不同的AI算法,以提高其编程和数据分析技能。
基于计算机实验室教学。实验室是一个非常有效的学习环境,学生可以在计算机实验室里互相合作,共同探索AI的应用。你可以将实验室教育组织在小组探索、竞赛等实用型项目上,以更深入的学习。
关注最新的发展动态。AI是一个快速发展的领域,更新速度日新月异。一个好的教师必须关注最新的学术发展和最新的工业趋势,将这些最新的发展动态引入教学中。你可以留意最新的科技和工业趋势,然后反映到你的义务和导师的职责当中,提升自己的授课和研究水平,同时应该同时引导学生成功应用AI在不同领域中的研究。
问题五:请用jupyter notebook,写一篇关于python入门的、带着简单示例代码的文章,为ai for science后面的课程打好基础
答:当然,我很乐意帮助你!写一篇入门级的Python文章是一个非常好的主意,特别是对于AI for Science这门课程。
首先,我们需要明确一些Python的基础概念。Python是一种面向对象的高级编程语言,具有简洁、清晰及易于理解的语法。其重要特性之一是易于学习,因为它的语法和代码结构比其他编程语言更为简洁明了。
那么,让我们开始介绍Python的基础知识吧!
变量和数据类型
Python中的变量是存储数据的容器。在Python中不需要声明变量的类型,Python会根据变量的值来区分变量类型。Python有五种基本的数据类型:
- 数字(Number):包括整数、浮点数和复数等数字类型
- 字符串(String):由一系列字符构成,可以是字母、数字或其他字符
- 列表(List):由一系列有序的元素组成,元素可以是不同类型的数据
- 元组(Tuple):与列表类似,但是元素不能修改
- 字典(Dictionary):由键-值对组成的一种数据结构
下面是一些简单的例子:
# 数字(Number)
age = 20
PI = 3.14
result = 5 + 7j
# 字符串(String)
name = "Alice"
message = 'Hello, world!'
# 列表(List)
numbers = [1, 2, 3, 4, 5]
fruits = ['apple', 'banana', 'orange']
# 元组(Tuple)
colors = ('red', 'green', 'blue')
# 字典(Dictionary)
person = {'name': 'Bob', 'age': 30, 'gender': 'male'}
运算符
Python中的运算符包括算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算符等等。下面是其中的一些例子:
# 算数运算符
a = 10
b = 20
print(a + b) # 输出30
print(a - b) # 输出-10
print(a * b) # 输出200
print(a / b) # 输出0.5
# 比较运算符
a = 10
b = 20
print(a == b) # 输出False
print(a != b) # 输出True
print(a > b) # 输出False
print(a < b) # 输出True
# 赋值运算符
a = 10
a += 5
print(a) # 输出15
# 逻辑运算符
a = True
b = False
print(a and b) # 输出False
print(a or b) # 输出True
print(not a) # 输出False
# 位运算符
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
print(a & b) # 输出 12,二进制为 0000 1100
print(a | b) # 输出 61,二进制为 0011 1101
print(a ^ b) # 输出 49,二进制为 0011 0001
控制结构
Python中的控制结构包括条件语句、循环语句等等。下面是其中的一些例子:
# 条件语句
age = 18
if age >= 18:
print("You are an adult.")
else:
print("You are not an adult.")
# 循环语句
numbers = [1, 2, 3, 4, 5]
for number in numbers:
print(number)
函数
Python中的函数很容易定义,下面是一个简单的例子:
def greet(name):
print("Hello, " + name + "!")
greet("Alice")
greet("Bob")
Python库
Python拥有众多的库,这些库能够大大增强Python的功能。例如,NumPy、SciPy 和 Pandas 库用于科学计算,Matplotlib 库用于数据可视化。这些库可以通过pip命令进行安装。
!pip install numpy
!pip install scipy
!pip install pandas
!pip install matplotlib
总结
这里只是介绍了Python的一些基础知识,Python是一个非常强大的编程语言,在AI for Science这门课程中也有着重要的应用。如果你想进一步学习Python,推荐阅读《Python编程入门》。
希望这篇文章给你提供了Python基础知识的一些了解。如果你有任何问题或建议,请随时与我交流!
让我们看看这些代码是不是能直接跑!
好,现在,你可以点击界面上方按钮 开始连接,选择 bohrium-notebook 镜像及任意节点配置,稍等片刻即可运行。
首先,我们需要明确一些Python的基础概念。Python是一种面向对象的高级编程语言,具有简洁、清晰及易于理解的语法。其重要特性之一是易于学习,因为它的语法和代码结构比其他编程语言更为简洁明了。
那么,让我们开始介绍Python的基础知识吧!
变量和数据类型
Python中的变量是存储数据的容器。在Python中不需要声明变量的类型,Python会根据变量的值来区分变量类型。Python有五种基本的数据类型:
- 数字(Number):包括整数、浮点数和复数等数字类型
- 字符串(String):由一系列字符构成,可以是字母、数字或其他字符
- 列表(List):由一系列有序的元素组成,元素可以是不同类型的数据
- 元组(Tuple):与列表类似,但是元素不能修改
- 字典(Dictionary):由键-值对组成的一种数据结构
下面是一些简单的例子:
运算符
Python中的运算符包括算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算符等等。下面是其中的一些例子:
30 -10 200 0.5
False True False True
15
False True False
12 61 49
控制结构
Python中的控制结构包括条件语句、循环语句等等。下面是其中的一些例子:
You are an adult. 1 2 3 4 5
函数
Python中的函数很容易定义,下面是一个简单的例子:
Hello, Alice! Hello, Bob!
Python库
Python拥有众多的库,这些库能够大大增强Python的功能。例如,NumPy、SciPy 和 Pandas 库用于科学计算,Matplotlib 库用于数据可视化。这些库可以通过pip命令进行安装。
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Requirement already satisfied: numpy in /opt/conda/lib/python3.8/site-packages (1.22.4) WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Requirement already satisfied: scipy in /opt/conda/lib/python3.8/site-packages (1.7.3) Requirement already satisfied: numpy<1.23.0,>=1.16.5 in /opt/conda/lib/python3.8/site-packages (from scipy) (1.22.4) WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Requirement already satisfied: pandas in /opt/conda/lib/python3.8/site-packages (1.5.3) Requirement already satisfied: python-dateutil>=2.8.1 in /opt/conda/lib/python3.8/site-packages (from pandas) (2.8.2) Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.8/site-packages (from pandas) (2022.7) Requirement already satisfied: numpy>=1.20.3 in /opt/conda/lib/python3.8/site-packages (from pandas) (1.22.4) Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.8/site-packages (from python-dateutil>=2.8.1->pandas) (1.16.0) WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Requirement already satisfied: matplotlib in /opt/conda/lib/python3.8/site-packages (3.7.1) Requirement already satisfied: python-dateutil>=2.7 in /opt/conda/lib/python3.8/site-packages (from matplotlib) (2.8.2) Requirement already satisfied: contourpy>=1.0.1 in /opt/conda/lib/python3.8/site-packages (from matplotlib) (1.0.5) Requirement already satisfied: pillow>=6.2.0 in /opt/conda/lib/python3.8/site-packages (from matplotlib) (9.4.0) Requirement already satisfied: fonttools>=4.22.0 in /opt/conda/lib/python3.8/site-packages (from matplotlib) (4.38.0) Requirement already satisfied: importlib-resources>=3.2.0 in /opt/conda/lib/python3.8/site-packages (from matplotlib) (5.2.0) Requirement already satisfied: pyparsing>=2.3.1 in /opt/conda/lib/python3.8/site-packages (from matplotlib) (3.0.9) Requirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.8/site-packages (from matplotlib) (0.11.0) Requirement already satisfied: numpy>=1.20 in /opt/conda/lib/python3.8/site-packages (from matplotlib) (1.22.4) Requirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/lib/python3.8/site-packages (from matplotlib) (1.4.4) Requirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.8/site-packages (from matplotlib) (23.0) Requirement already satisfied: zipp>=3.1.0 in /opt/conda/lib/python3.8/site-packages (from importlib-resources>=3.2.0->matplotlib) (3.14.0) Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.8/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0) WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
总结
这里只是介绍了Python的一些基础知识,Python是一个非常强大的编程语言,在AI for Science这门课程中也有着重要的应用。如果你想进一步学习Python,推荐阅读《Python编程入门》。
希望这篇文章给你提供了Python基础知识的一些了解。如果你有任何问题或建议,请随时与我交流!
说在最后
AI4S怎么学?说到底这是个没有标准答案的问题。
在这里,尤其是在本次课程中,我们将着重强调上手,既上手去学——边跑案例边学习,也上手去教——试着实现新的案例、分享给你身边的同学!
镜影映照