导读
自学AI的过程中,理解数学符号至关重要。它能让你用一种非常简洁的方式来表达复杂的想法。
如果你对AI这个激动人心的领域感兴趣,那么数学就是实现目标的关键工具。无论是想写出更好的图像识别程序,还是理解自然语言的交互界面,甚至有一天创造自己的算法,数学都是基础。
如果你想通过阅读arXiv等平台上的论文来自学AI,那么首先需要学会理解这些数学符号。学习数学符号最重要的原因,就是它能让你用一种非常简洁的方式来表达一个复杂的想法。没有它,解释每个方程都可能需要花费大量篇幅。
这篇文章旨在告诉你,学习这些符号并不像想象中那么难。我们将数学符号与现实世界关联起来,并使用已知的概念进行类比,帮助你脚踏实地地学习。
当然,一篇文章无法覆盖阅读论文所需的全部数学符号。因此,你可能需要一本更全面的指南作为补充,例如Edward R. Scheinerman的《Mathematical Notation: A Guide for Engineers and Scientists》。这本书可以作为你学习路上的常用参考书。
让我们开始吧:什么是算法?
算法其实就是解决特定问题的一系列步骤。无论你是否意识到,你每天都在使用算法。例如,你需要给孩子们打包午饭、送他们上学、取干洗衣物然后去上班,这一系列从厨房到办公室的步骤就构成了一个算法。
如果你的老板同时给你安排了六项工作,你需要规划在一天内完成它们的最佳顺序和方式,这同样是在设计一个算法。
这个概念为什么重要?因为一个方程也不过是解决问题的一系列步骤而已。数学就是对事物的翻译。我们有一个输入和一个输出。将一些值代入方程中的变量,遍历所有步骤,然后得到输出。计算机的工作原理也与此类似。
目前,神经网络背后的核心数学主要来自三个分支:
- 线性代数
- 集合论
- 微积分
集合与元素
集合就是一堆事物的总体,通常用花括号{ }表示。(数学界对于最佳符号表达有时也难以完全统一。)
还记得张量吗?它本质上也是一种集合(多维数组)。
集合通常用大写字母表示,例如A、B、V或W。只要你前后一致,具体使用哪个字母并不重要。
但是,一些特定的大写字母和符号被保留下来,用于表示重要且常用的数字集合:
- ∅ = 空集(集合里什么都没有)。这个符号是一个希腊字母“phi”。数学中经常使用希腊字母。
- R = 所有实数的集合。(几乎所有常见的数都是实数,包括整数、分数、超越数如π。但不包括虚数。)
- Z = 所有整数的集合。(例如 -2, -1, 0, 1, 2)
这些集合之间存在包含关系,即子集。例如,整数集Z就是实数集R的一个子集。我们可以这样表示:
- A是B的子集(A包含于B):A ⊆ B
- 相反的,B是A的超集(B包含A):B ⊇ A
为什么要在乎集合间的包含关系?这在实际应用中很有用。例如,有一个集合包含了所有美国居民的信息,另一个集合包含了心脏病高发人群的信息。这两个集合的交集,就能帮助我们分析哪些地区的人群患心脏病的风险更高。
集合中的个体称为元素。我们通常用小写斜体字母表示元素,例如x。用符号∈表示“属于”,用∉表示“不属于”。
- x ∈ A 表示“x是集合A中的一个元素”。
- x ∉ A 表示“x不是集合A中的一个元素”。
你越能理解这些符号,就越能顺畅地进行思维交流。当你看到“x ∉ A”时,能立刻说出“x不属于集合A”,就说明你已经掌握了它。
当然,列出集合的所有元素通常不现实,我们可以用特殊方式表示一个序列。例如,一个从1开始以1为步长递增的数字序列可以写成:
x = {1, 2, 3, 4, …, n}
这里的“…”表示序列持续到n结束。如果n=10,这个集合就包含从1到10的所有整数。
求和与求积符号
当我们将集合的概念引入线性代数时,事情就变得更有趣了。你已经熟悉加号(+)和减号(-)。现在介绍两个新符号:
- Σ (Sigma):表示一系列数字的和(Summation)。
- Π (Pi):表示一系列数字的积(Product)。
例如,有一个向量(一组数字)A = {1, 2, 3, 4, 5}。
- 和:1 + 2 + 3 + 4 + 5 = 15
- 积:1 × 2 × 3 × 4 × 5 = 120
我们来看一个求和符号的精简例子:
∑_{j=1}^{n} x^j
如何理解它?很简单:
- 从底部的 j=1 开始。
- 将 j 代入右边的表达式 x^j(即x的j次方)。
- 对 j=1, 2, 3, …, n 分别计算 x^j,然后将所有这些结果加起来。
- 顶部的 n 是序列的结束值。
例如,当 n=5,x=2 时:
∑_{j=1}^{5} 2^j = 2^1 + 2^2 + 2^3 + 2^4 + 2^5 = 2 + 4 + 8 + 16 + 32 = 62
如果你是一名程序员,会立刻认出这就像一个循环!我们可以用Python函数来实现它:
def sum_x_range(x, n=5):
total = 0
for j in range(1, n+1): # 从1循环到n
total += x ** j # 计算x的j次方并累加
return total
print(sum_x_range(2)) # 输出:62
走进矩阵
记住,2D张量也被称为矩阵。它基本上是一个有行和列的表格。首先,需要知道如何引用矩阵的不同部分。
首先,矩阵用大写字母表示,例如A。
矩阵有m行和n列,所以我们称之为 m × n 矩阵。行是水平的(从左到右),列是垂直的(从上到下)。
矩阵中的每个位置称为一个元素。元素的位置用小写斜体字母a加上行下标i和列下标j来表示,即 a_{i,j}。
例如,在一个矩阵中,第1行第2列的元素4可以表示为 a_{1,2};第2行第1列的元素3可以表示为 a_{2,1}。
点乘运算
点乘(Dot Product)是神经网络中非常常用的一种运算。它的符号是一个点:a · b。
对于两个向量(可以看作矩阵的一行或一列),点乘的公式如下:
a · b = ∑_{i=1}^{n} a_i * b_i
这意味着:将两个向量中对应位置的元素相乘,然后将所有乘积相加。要求两个向量长度相同(均为n)。
操作步骤如下:
- 用向量A的第一个元素乘以向量B的第一个元素。
- 用向量A的第二个元素乘以向量B的第二个元素。
- 以此类推,直到第n个元素。
- 将所有乘积相加,得到最终结果(一个标量)。
例如,向量A = [1, 3, -5],向量B = [4, -2, -1]:
A · B = (1*4) + (3*(-2)) + ((-5)*(-1)) = 4 + (-6) + 5 = 3
胜在学习策略
最后,我想分享一些能帮助你快速学习的策略。
作为一个自学者,我发现自己探索、放慢脚步时学得更好。犯错是过程的一部分,无法避免,只能拥抱。犯错意味着你在进步。没有犯错,往往也就没有真正的进步。
工程界有一个老段子:如果你想知道正确答案,不必直接求助。只要把错误答案发出来,看看有多少工程师跳出来指正你就行了!这虽然是个玩笑,但有时确实很管用。
另外几件重要的事情:
- 打好基础:如果你没有微积分、代数和几何的基本背景,直接阅读专业的数学符号指南可能会很吃力。建议先补充必要的基础知识。
- 放慢脚步:学习不是比赛!半途而废等于没有收获。如果遇到不懂的术语,不要跳过,花时间把它搞明白。这个过程可能缓慢甚至令人沮丧,但当你建立的知识体系越来越完善,学习速度就会越来越快。
- 多方查询:面对一个难以理解的概念,不要只依赖一个来源。大部分人并非天生的好老师。教学是一门艺术。有时,像“趣味数学”(Math is Fun)这样的网站比维基百科更易于入门,因为它更注重讲解的清晰性和趣味性。
将这些忠告记在心里,你的AI学习之旅将会更加顺畅!