线性代数视角下的神经网络技术解析

本文从线性代数角度深入解析神经网络的工作原理,通过几何直观展示矩阵变换如何实现空间扭曲,使非线性可分数据变得线性可分,并详细阐述激活函数在引入非线性中的关键作用。

神经网络——线性代数视角

与常规博客文章不同,本文将简短精悍、直击要点。深度学习被誉为数据分析领域的下一件大事,但其炒作过度导致许多人(甚至从业者)开始将其视为魔法。本文旨在夯实这些期望,剖析深度学习的本质。

本文面向已对机器学习、深度学习和基础线性代数有所了解的读者。

线性代数——前言

我们在学校都学过线性代数。向量、矩阵、矩阵乘法、点积等都是我们听过并学会手动计算的术语。但有多少人真正直观地理解线性代数?除了以奇怪方式在方形中书写数字以及执行晦涩的乘法和加法外,我们对线性代数了解多少?这正是包括我在内的许多人欠缺之处。

Grant Sanderson 通过其著名的 YouTube 频道 3blue1brown 提供了一个播放列表,以视觉方式清晰阐述线性代数的直观理解。强烈推荐观看该播放列表以获得扎实的几何解释。如需更正式的学习,可参考 Gilbert Strang 的课程。这位著名数学家和教育家提供了一个优美而简短的线性代数课程。

关键在于线性代数的几何直观,这在理解机器学习特别是深度学习时无比珍贵。以下简要总结几点作为复习:

  • 向量是空间中的一个点。
  • 当向量与矩阵相乘时,我们进行线性变换,矩阵内容定义了所执行的变换。
  • 根据矩阵内容,矩阵乘法对向量执行旋转、反射、缩放、剪切等操作。

实验

现在以一个简单的分类问题为例,该问题非线性可分。我们可以合成生成一个螺旋数据集,如下所示,包含 2 个类和 1000 个点。

一个合成的螺旋数据集

线性线无法分离这些类别,对吗?训练神经网络以较高准确度对此数据进行分类相当简单。我们仅使用两个隐藏层,分别具有 128 和 2 个单元,即可完成任务,并获得 95% 的准确率。

现在,有趣的部分开始了。让我们打开引擎盖,看看发生了什么。

决策边界

查看任何机器学习模型输出(尤其是分类)的最流行方式之一是观察决策边界。线性模型将具有直线决策边界,非线性模型将具有曲线边界。让我们看看神经网络学到的决策边界。

决策边界——神经网络

看起来我们的网络如预期绘制了非线性决策边界。

但还有另一种方式可以观察所发生的情况,这涉及线性代数的几何直观。

向量空间的扭曲

如前所述,神经网络是一系列线性变换,中间穿插非线性。我们知道神经网络的最后一层只是一个线性层,对吗?因此,如果我们考虑最后一层之前的所有层,它们所做的只是应用矩阵乘法和激活函数,以便数据对最后一层变得线性可分。从线性代数的几何解释中,我们知道矩阵乘法只是向量空间的线性变换。

现在让我们在正在处理的分类问题中可视化这一点。下面我们可视化了原始空间中的点,然后可视化了网络的倒数第二层输出。

我们可以看到点不是线性可分的,而最后一层(仅是一个线性分类器)可以分离这些点。因此,隐藏层学到的是从原始输入空间到另一个空间的变换,在该空间中点线性可分。

让我们也看看这个过程的动画(3blue1brown 风格),因为没有什么比视频更能具体建立直观理解。

我们可以看到神经网络如何扭曲和折叠空间,使输入点变得线性可分。

这是通过激活函数(本例中为 RELU)实现的,它使这种非线性变换成为可能。如果没有激活函数,总变换仍然是线性的,无法将非线性分布的点解析为线性可分的点。让我们看看没有激活函数的相同变换。

下次面试官问你为什么需要激活函数时,通过解释“激活函数引入非线性”的含义来震撼他们。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计