神经网络——线性代数视角
与常规博客文章不同,本文篇幅简短——精炼而切中要点。深度学习被誉为数据分析领域的下一件大事,炒作过热导致许多人(甚至从业者)开始将其视为魔法。本文旨在夯实这些预期,剖析深度学习的本质。
本文面向已具备机器学习、深度学习和基础线性代数知识的读者。
线性代数前言
我们在学校都学过线性代数。向量、矩阵、矩阵乘法、点积等都是我们听过并学过手动计算的概念。但有多少人真正直观地理解线性代数?除了以奇怪方式在方形中书写数字并进行晦涩的乘加运算外,我们对线性代数了解多少?这正是许多人(包括笔者)的知识缺口。但如今信息触手可及,为何不以正确方式学习?
Grant Sanderson通过其知名YouTube频道3Blue1Brown提供了相关视频列表,以可视化方式清晰阐释线性代数的直观概念。强烈推荐观看该系列以建立扎实的几何解释。如需更正式的学习,可参考Gilbert Strang的课程。这位著名数学家和教育家的线性代数课程简洁而优美。
关键在于线性代数的几何直观,这对理解机器学习(尤其是深度学习)极具价值。以下为要点回顾:
- 向量是空间中的一个点
- 向量与矩阵相乘即进行线性变换,矩阵内容定义变换类型
- 根据矩阵内容,矩阵乘法可对向量实现旋转、反射、缩放、剪切等操作
实验
以简单的非线性可分分类问题为例。生成包含2个类别1000个点的螺旋数据集如下:
显然无法用直线分隔这些类别。使用神经网络对此数据进行分类可获得较高准确率。采用两个隐藏层(分别含128和2个单元)可实现95%的准确率。
现在开始有趣部分:揭开模型内部一探究竟。
决策边界
观察机器学习模型输出(尤其是分类)最常用方式是查看决策边界。线性模型具有直线决策边界,非线性模型则具有曲线边界。以下展示神经网络学习到的决策边界:
如预期所示,网络绘制了非线性决策边界。
但从线性代数几何直观角度可提供另一种视角。
向量空间扭曲
如前所述,神经网络是一系列线性变换与非线性激活函数的组合。已知神经网络最后一层仅是线性层。因此,若考虑最后一层之前的所有层,它们仅通过矩阵乘法和激活函数使数据变得线性可分。从线性代数的几何解释可知,矩阵乘法仅是向量空间的线性变换。
在分类问题中可视化此过程:下方展示原始空间中的点及网络倒数第二层的输出可视化。
可见这些点变得线性可分,最后一层(仅是线性分类器)可分离这些点。因此,隐藏层学习到的是从原始输入空间到另一空间的变换,在该空间中点变得线性可分。
通过动画(3Blue1Brown风格)直观展示此过程:
可见神经网络如何扭曲和折叠空间使输入点变得线性可分。
激活函数(本例为RELU)使这种非线性变换成为可能。若无激活函数,整体变换仍将是线性的,无法将非线性分布点转换为线性可分点。以下展示无激活函数的相同变换:
下次面试官询问为何需要激活函数时,可通过解释"激活函数引入非线性"的含义令人印象深刻。