数学不好,也可以学习人工智能(六)——巧用数学符号
【AI100 导读】欢迎阅读《数学不好,也可以学好人工智能》系列的第六篇文章。如果你错过了之前的五部分,一定记得把它们找出来看一下!这篇文章作者会帮你学习数学符号,打下坚实的基础,将所有符号与现实结合在一起,并且用我们已知的事物作类比,帮助理解。
如果你阅读过本系列的前五篇文章,你一定知道学习人工智能未必需要具备太多的数学方面的知识,你可以立刻全身心地投入到实际的教程和书籍中。
然而,还是有很多学习数学符号的理由的。
也许你只是想拓展一下自己并学习新的技能?在自己的舒适区域外学些东西是保持头脑清晰的好方法。
或者你是想先阅读几篇关于 arXiv 的文章?又或许,你甚至也在想着发表一篇论文、找到一个令人兴奋的新思想,而不是等着其他人把这个观点发表在 Github 上。
要做到这一点,你需要知道如何读懂那些有趣的小符号。
也许学数学符号的最大理由是:它能够让你以简洁的方式表达复杂的想法。
如果没有数学符号,我们就需要用很多多余的页面来解释每个方程的含义。
即使拥有所有资源,面对一连串的陌生字符仍然会让我们充满压力。
不要害怕,我会帮助你。
我会告诉你,学这些符号并不像你想的那么难。但是有些东西会阻碍你前进。
首先,如果你跟我一样,像个孩子一样讨厌数学。我发现了主要原因是我的老师从来没想过回答最重要的问题。
为什么?
为什么我要做这个?它是怎样应用到我的生活中的?
他们只是在黑板上写了一堆方程式,然后让我记住它们。这对我来说并不奏效,我打赌它也不适合你。
好消息是,如果你对 AI 这个令人兴奋的领域感兴趣,这会是一个很好的答案。
现在你有理由学习它并将其应用到现实世界的问题中。原因是因为你想写一个更好的图像识别程序或界面来理解自然语言!又或许你是想有一天能写出自己的算法?
阻碍你的第二件事就是存在太多令人讨厌的解释。事实上,大部分人不擅长解释。然而又很多时候,人们要用更多的数学术语来定义当下的数学术语。这就产生了一种无限循环的误解,就像用“大象像大象”来定义大象这个词一样。很好!现在我明白了!不能这样!
通过这篇文章我会帮你打下坚实的基础,将所有符号与现实结合在一起,并且用我们已知的事物作类比,帮助理解。
我无法在短短一篇文章中向大家介绍所有的符号,所以你也可以学习一下下面这篇简洁的数学符号指南:Mathematical Notation: A Guide for Engineers and Scientists,作者是Edward R.Scheinerman。(这本书是后来才被我添加到第一篇文章《数学不好,也可以学好人工智能》里的,但是如今却成了我最常用的书籍之一,书里面到处都是标注和折页。随着我对数学学科的了解越来越多,我发现自己曾一次又一次地翻看过那本书。)
让我们开始吧!
首先,算法是什么?
它真的只是解决某个特定问题的一系列步骤。无论知道与否,你一直都在使用着算法。
如果你需要给孩子准备午餐,送他们上学,上班前干洗衣服,你已经下意识的概述了从厨房到办公室的一系列步骤。这就是算法。如果老板给你六个紧急任务,你必须找出最好的办法在一天结束前去完成它们,你可能会选择先做完一件事再去做另一件事,也有可能选择同时做两件或者三件事。这就是算法。
为什么那么重要?因为方程式也是解决问题的一系列步骤。
我们先从一些简单符号说起,然后再建立一些方程式。
数学就是事物转变的过程。既有输入也有输出。我们将某些东西插入到方程变量中,而后循环访问步骤并获得输出。电脑也是一样的工作原理。现在神经网络背后大部分不可思议的成果均来自以下三个数学分支:
线性代数
集合论
微积分
什么是集?它是事物的集合,通常用大括号或方括号扩起来。(数学符号并不总是描述事物的最佳符号):
还记得我们在第四部分看过的那篇与张量有关的文章(AI技术讲座精选:数学不好也可以学习人工智能(四)—图解张量)吗?那是一个集合。
一个集合通常由大写字母变量表示,如 A、B、V 或者 W。只要你始终如一,字母本身并不重要。
然而,对于某些重要且知名的数集,通常会用大写字母或符号等来描述,如:
∅ =一个空集(一个没有任何东西的集合)。顺便说一句,那个符号是个希腊字母“phi”。希腊字母通常会被应用到数学中。你可以在这里看到它们的大小写版本:https://en.wikipedia.org/wiki/Greek_letters_used_in_mathematics,_science,_and_engineering。
R=所有实数(实数几乎无所不在,包括整数、分数、超越数如 Pi (π)(3.14159265...),但是不包括虚数(无解方程的虚构数字)以及无穷大。
Z = 所有整数(所有整数,不包括分数,-1,-2, 0, 1, 2, 3等)。
你可以在 Math is Fun(http://www.mathsisfun.com/sets/number-types.html)这个网站上看到所有主要的保留字母的一个列表。
无论是大的集合还是小的子集,都可以包含在更大的集合中,如:
这种情况下,我们会说 Z(整数)是 R(实数)的子集。
我们可以这样写:
A 是(包含在)B 中的一个子集:
相反,B 是(或包含)A 的一个超集:
现在,为什么我会关心 B 集合是否将 A 集合完全包含在内了呢?这个问题很好。
设想一下,一个集合包含所有住在美国的人,包括他们的年龄、地址等等。现在设想另一个集合,这个集合包含所有心脏病发病率较高的人。这两个集合的交集可以告诉我们,这个国家的什么地方有更多的心脏病问题。
每个集合里面都含有元素。什么是元素?元素是相对较大的集合中的其中一部分。我们再来看下张量。
我们用小的斜体变量(如 x)表示集合的元素。用一个奇怪的像 E 的符号(但不是 E)来表示元素是集合的一部分。我们可以这样写:
它表示 x 是集合 A 的一个元素。
我们也可以这说,x 不是 A 的元素,表示如下:
这些符号理解的越好,你就越容易弄懂字符串的意思。当你看到上面的内容时,你可以说“x 不是集合 A 的元素”。如果能更好的表达你在阅读的内容,你的理解能力也会有所提升。
我们知道,列举出一个集合的所有元素是不切实际的,所以我们可以用特殊的方式表达其中一系列的元素。因此我们可以说,每次都会增加一系列的数字。我们会这样表示:
x = {1,2,3,4...n}
点只是意味着这个系列持续到 n,其中 n 代表“系列结束”的一个变量。因此,如果 n=10,则该集合包含从1到10的数字范围。如果 n=100,则表示从1到100的数字范围。
方程式的疯狂
当我们用线性代数进行转换时,集合会很有意思。你已经知道大部分的代数符号了,如“+”代表加法,“-”代表减法。
我们来看两个新的符号和一个方程。首先,符号是:
总和是什么?总和指的是一个系列中所有数字的和。假设有一个向量 A(记住一个向量是数字的单行或列),它包含:{1,2,3,4,5}。
该系列的总和是:
1 + 2 + 3 + 4 + 5 = 15
该乘积代表所有数字相乘。所以如果我们采取相同的集合 A,我们得到:
1 x 2 x 3 x 4 x 5 =120
我们可以用如下的方式来简洁的表示一个和方程:
我们怎么读呢?很简单,看下这个:
从底部开始,j 是一个变量。向右移动并将 j 插入到表达式中。最后,该系列停在顶部的数字。我们来看个例子:
如果你是程序员,你可能认为这是一个循环!让我们在 Python 中为这个方程式创建一个小功能:
def sum_x_range(x):
j = 1
output = [] # creates an empty list
for k in range(0,5): # starts a for loop
z = x**j # raises x to the power of j
j = j + 1 # raises j by 1 until it hits n which is 5
output.append[z] # append the output to a list
return sum(output) # sum all the numbers in the list
print (sum_x_range(2)) # call the function with input 2 for x
原谅我是个可怕的 Python 人,但是此处我要的是清晰明确,而不是简洁性。
**符号意味着去提高 j 的值。该函数取变量 x,我将 x 的值设为2。然后它从0经过1、2、3、4一直循环到5,随后将这些数字附加到表中,最后在该表上运行一个总和来得到答案:62。
输入矩阵
我们将 2D 张量称为矩阵。它基本上是一个电子表格,包含行和列。首先,你需要知道如何引用矩阵的不同部分。这张图是为你量身定做的:
开始我们有个矩阵 A,它用大写字母表示。
该矩阵有 m 行 n 列,因此我们称它是 m*n 矩阵,用小的斜体字母表示。
行是水平的,从左到右。(不要被尖头迷惑,它指向 i,j 不是行的方向,再次说明行是水平!)
列是竖直的,从上到下。
这种情况下,我们有 4 x5 的矩阵(又称 2D 张量),因为我们有4行和5列。
每个框都是矩阵的一个元素。元素的位置由小写斜体 a 以及行指示符 i 和列指示符 j 表示。
所以4排在顶排,第2列由(a1,2)表示。第二行是3,第一列是(a2,1)。
我们没有时间处理这里的所有类型的矩阵数学,但是让我们先看一下其中的一种类型,你可以尝试一下。
点产品是神经网络中很常见的操作,所以我们来看看操作中的点。
点,点,点
向量点积可以表示我们将一个矩阵与另一个矩阵相乘的过程。
向量点积的操作过程由点来表示。
a. b
这是两个标量的向量点积(即单个数字),它们是矩阵中的单个元素。
我们将相同大小和形状的矩阵之间的匹配元素进行相乘,然后再相加。
想看一下将一个矢量乘以另一个矢量的公式吗?
深吸气。你已经快要学会了!
现在我们已经知道这些符号了。
这是乘以两个等长向量的公式。记住第4部分《数学不好,也可以学习人工智能》(AI技术讲座精选:数学不好也可以学习人工智能(四)—图解张量)中用猫证明张量的部分,矢量是数字的单行或单列。每行或每列是矩阵中的独立向量。
基本上我们从矩阵 A 的元素1开始,并将其乘以矩阵 B 中的元素1。然后转移到用元素 A2 乘以 B2。将所有元素都按照这样的规律进行操作,直到 n 结束,然后把它们加起来(又称加在一起)。
我们来看一个操作中的视觉表征。
现在我们将这些数字插入到公式中:
这是输出矩阵中下一个数字的另一个例子。
做完所有的数学后,这就是最后的矩阵:
这些例子来自令人惊异的Math is Fun 网站(http://www.mathsisfun.com/algebra/matrix-multiplying.html)。这个网站有很多很好的例子。到目前为止,我还没找到比这个网站更好的网站。
我加入了公式以帮助你对阅读公式的理解,因为他们倾向于跳过这些,以免混淆。但是你不必再困惑了。
获取学习策略
我想在文章的最后介绍一些实用的策略,以帮助你快速的学习。
我很自信,喜欢自己教自己东西。当我有时间放松下来并进行自我探索时,我会学的更好。我最后一篇文章就是一个很好的例子,但是有些地方我必须要纠正一下。
但是这里的错误:它们是一件好事!
错误是这个过程的一部分。我们不能摆脱错误,所以只能接受。如果你在犯错误,说明你在学习。如果你没有犯错,说明你没在学习!就这么简单。
工程领域有个老笑话。
如果你想得到正确答案,不要寻求帮助。而是发布错误的答案,看看有多少工程师来纠正你。
工程师是不会让错误答案站住脚的!这是个老把戏,但是很奏效。
同样重要的是要注意,或许你不能阅读 Mathematical Notation book(http://amzn.to/2mVgWep),除非你已经阅读过我在《数学不好,也可以学习人工智能》(AI技术讲座精选:数学不好,也可以学习人工智能)中介绍的那些书籍,或者如果你有微积分、代数和几何的背景。你需要术语背景来帮助理解。但是,我建议无论如何都要阅读这本书,因为在你浏览其它书籍时,可以将它作为参考指南。
我也建议你采用缓慢一点的办法,因为这里没有比赛。你不会得到半点的分数。如果你跳过一个不明白的术语,最终还得回头看。
所以停下来,花些时间查看一下你不明白的每一个符号。这是一个缓慢而且有时令人沮丧的做法。但是随着你积累了越来越多的知识,你会学的越来越快。你会发现自己理解的术语是你从来没想过可以理解的。
此外,要知道从多个地方来查找东西。有这样一个事实,大部分人都不是好老师,他们可能理解材料,但这不意味着他们也能让其他人理解。教学是一门艺术。这就是为什么当你开始时,Math is Fun 这个网站绝对优于维基百科。维基百科是“正确的”,但很枯燥,难以理解,有时令人十分困惑。当你对此了解更多时,甚至或许你才可以对维基百科理解的更好。
记住所有的这些东西,在你的 AI 学习经历中不能误入歧途。
请务必查看本系列的其余部分。
AI技术讲座精选:数学不好,也可以学习人工智能
AI 技术讲座精选:数学不好,也可以学习人工智能(二)
AI 技术讲座精选:数学不好,也可以学习人工智能(三)
AI技术讲座精选:数学不好也可以学习人工智能(四)—图解张量
数学不好,也可以学好人工智能(五)——深度学习和卷积神经网络
本文作者 Daniel Jeffries 是一位作家、工程师和企业家,研究领域涵盖了从 Linux 到虚拟化和容器的各种技术。
本文由 AI100 编译,转载需得到本公众号同意。
编译:AI100
原文链接:https://hackernoon.com/learning-ai-if-you-suck-at-math-p6-math-notation-made-easy-1277d76a1fe5
关于AI100
AI100致力于打造人工智能技术和产业社区。为人工智能开发者提供信息和技术交流的平台;为人工智能创业者提供行业数据及智能应用的商业场景;为行业提供人工智能化的技术商业应用。请快快关注AI100吧!