线性代数与张量?这本开放书籍帮你扫清通往 ML 的数学绊脚石

数学是机器学习的基础。斯坦福大学教授 Stephen Boyd 联合加州大学洛杉矶分校的 Lieven Vandenberghe 教授出版了一本基础数学书籍,从向量到最小二乘法,分三部分进行讲解并配以辅助资料。此外,这本书也是斯坦福 EE103 课程、UCLA EE133A 课程的教材,由剑桥大学出版社出版(允许网络公开)。

项目地址:https://web.stanford.edu/~boyd/vmls/

这一本书的资料还是比较齐全的,除了本身 473 页的教材,还有另一本 178 页的对应代码讲解。当然如果读者只需要了解数学部分的话,代码部分是不需要了解的。但是如果比较关注线性代数的应用,可能就需要阅读这些基础代码,并顺便学一学 Julia 语言了。最后,这一本书还提供了对应的课程 PPT,读者也可以把它们作为辅助资料。

书籍简介

这本书旨在介绍向量、矩阵和最小二乘方法等应用线性代数的基础内容,它的目标是为只有很少或根本没有线性代数基础的初学者提供入门方法,包括线性代数的基本思想以及在数据科学和机器学习等领域的应用方法。

不过读者还是需要熟悉一般的数学符号,并且在一些地方也会用到微积分,但它们并不起关键作用,因此基本上以前学过高数就差不多了。这本书包含了很多传统概率论与统计学所讨论的话题,例如使用数学模型拟合数据等,但读者不一定需要这一方面的背景知识。

这本书比一般的应用线性代数课本要有更少的数学成分,只会详细介绍基本线性代数、线性独立性等理论概念,以及 QR 因式分解这一计算工具。而这本书讨论的大多数机器学习等方面的应用只会使用一种方法,即最小二乘法及其扩展。在某种意义下,该书更强调的是应用,即依赖于少量基本数学概念和方法,而覆盖大多数应用。但是这本书所呈现的数学是完整的,因为它会仔细证明每一个数学声明。然而,与大多数介绍性的线性代数课本相比,这本书描述了许多实际应用。包括一些通常被认为是高级主题的应用,如文档分类、状态估计和投资组合优化等。

这本书并不需要任何计算机编程的知识,因此可以作为传统的教学课程,我们只需要阅读对应章节并完成一些不涉及数值计算的练习题就行了。然而,这种方法会并不能使我们完全理解这本书,同时也得不到实际锻炼,例如我们可以使用这本书的观点与方法构建一个基于数据的预测模型、增强图像数据或优化投资组合等。随着计算力的不断增长,以及 NumPy 等高效矩阵运算库的发展,这本书中的描述的方法可以轻松地应用到实践中。因此读者还可以使用 Python 等编程语言练习不同的项目而补充学习资源,只有使用真实数据搭建应用才能真切地理解理论思想。本书提供了一些需要数值计算的练习题,且数据文件与编程语言的资源都可在线获得。

这本书主要分为三部分。第一部分介绍了向量及各种向量运算和函数,例如加法、向量内积、距离和角度等。本书还展示了如何使用向量表示文档中的词数、时间序列、目标属性、产品规格、音频数据和图像等。第二部分如同前一部分重点关注矩阵的概念与应用,包括矩阵的求逆和解线性方程等。第三部分介绍了最小二乘法,它不仅展示了如何简单而自然地近似求解一个超定方程组,同时还有一些可应用到很多方法的最小二乘扩展知识。

该书还可用于自学,并辅以在线提供的资料,例如下面这份 470 页的 PPT。

地址:https://web.stanford.edu/~boyd/vmls/vmls-slides.pdf

按照设计,本书的进度会逐渐加快,也就是说第一部分和第二部分有许多细节和简单的例子,第三部分有更多高级的例子和应用。对于只有很少线性代数基础或根本没有的读者而言,课程可以侧重于第一部分和第二部分,并且仅简单了解一些更高级的应用。而熟悉背景知识的读者可以快速过一遍前面两部分,并将重点放在最后的应用部分上。

除了线性代数等数学基础,这本书还介绍了很多机器学习应用,包括比较流行的 K 均值聚类等。而这些机器学习算法主要都介绍了数学表现形式和伪算法,并不涉及具体的代码,读者可另外查看这本书的配套代码实现。这本书提供的了基于 Julia 语言的配套代码!

下面我们将简要介绍聚类这一方面课本内容与对应的 Julia 代码。聚类也就是说将同类的无监督数据聚在一起,它的目标函数可以简单地定义为各样本到对应聚类中心的距离和。如果这个距离和非常大,那么聚类的效果就不好,我们会希望通过最优化算法最小化这个距离。在这本书中,距离可以定义为:

而 K 均值聚类会更形象地利用图像展示聚类效果,下图展示了 K 均值聚类迭代一次的更新过程:

而这一更新过程会有对应的为代码:

除了这些基础内容外,这本书还会展示很多可视化内容以帮助理解理论知识,例如展示了最终聚类结果的图 4.4 和展示了损失函数下降趋势的图 4.5:

当然,K 均值聚类还提供了对应 Julia 实现,如下展示了实现该算法的代码,读者在学习这本书的同时还能顺便学学 Julia 语言。

function kmeans(X, k; maxiters = 100, tol = 1e-5)
    if ndims(X) == 2
        X = [X[:,i] for i in 1:size(X,2)]
    end;
    N = length(X)
    n = length(X[1])
    distances = zeros(N)  
    reps = [zeros(n) for j=1:k]  
    assignment = [ rand(1:k) for i in 1:N ]
    Jprevious = Inf  
    for iter = 1:maxiters
        for j = 1:k
            group = [i for i=1:N if assignment[i] == j]             
            reps[j] = sum(X[group]) / length(group);
        end;
        for i = 1:N
            (distances[i], assignment[i]) = 
                findmin([norm(X[i] - reps[j]) for j = 1:k]) 
        end;
        J = norm(distances)^2 /  N
        println("Iteration ", iter, ": Jclust = ", J, ".")
        if iter > 1 && abs(J - Jprevious) < tol * J  
            return assignment, reps
        end
        Jprevious = J
    end
end

最后,这本书的对应代码和数据都可以在 GitHub 中找到:https://github.com/VMLS-book。

入门书籍线性代数数学
6
相关数据
最小二乘法技术

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。 利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。 “最小二乘法”是对过度确定系统,即其中存在比未知数更多的方程组,以回归分析求得近似解的标准方法。在这整个解决方案中,最小二乘法演算为每一方程式的结果中,将残差平方和的总和最小化。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

目标函数技术

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

因式分解技术

在数学中,把一个数学因子(比如数字,多项式,或矩阵)分解其他数学因子的乘积。比如:整数15可以分解成两个质数3和5的乘积,一个多项式x^2 -4 可被因式分解为(x+2)(x-2)。

推荐文章
暂无评论
暂无评论~