仿射变换和线性变换有什么区别吗?

人工智能 神经网络 术语 火炬 线性代数
2021-11-15 16:26:30

考虑PyTorch 文档的简单自定义模块中的以下语句

首先,让我们看一下 PyTorch 的线性模块的更简单的自定义版本。该模块对其输入应用仿射变换。

由于该段落说的是PyTorch 的线性模块,我猜仿射变换只不过是线性变换。

认为x=[x1,x2,x3,,xn]是一个输入,然后线性变换xa.x+b, 在哪里abn实数的维向量。和点(.) 代表点积。

仿射变换和线性变换一样吗?如果是,那么为什么使用名称仿射它是否涵盖了比线性变换更多或更少的东西?

2个回答

在线性代数中线性变换(又名线性映射或线性变换)f:VW是满足以下两个条件的函数

  1. f(u+v)=f(u)+f(v)(加性)
  2. f(αu)=αf(u)(标量乘法),

在哪里

  • uv向量(即向量空间的元素,也可以是R[证明],一些功能空间等)
  • α是一个标量(例如,它可以是一个实数,但不一定)
  • VW是向量空间(例如R或者R2)

因此,任何满足这两个条件的函数都是线性变换。

欧几里得几何中g(x)=ax+b仿射变换,一般不是线性代数中定义的线性变换。您可以轻松地证明仿射变换不是线性变换。例如,让a=1b=2, 做g对于任何标量,满足上述第二个条件α? 不,例如,让α=3, 然后g(3x=y)=y+2=3x+23g(x)=3(x+2)=3x+6.

然而,在神经网络的上下文中,当人们使用形容词“线性”时,他们通常指的是一条线。例如,在线性回归中,您可以有一个偏差(b在仿射变换中g上面),这会使函数不是线性变换,但我们仍然称它为线性回归,因为我们将一条线(因此称为线ar 回归)拟合到数据中。

所以,不,仿射变换不是线性代数中定义的线性变换,但所有线性变换都是仿射的。然而,在机器学习中,人们经常用形容词linear来指代直线模型,一般用仿射变换的函数来表示。这个答案中,我也谈到了这个问题。

事实上,您始终可以将仿射变换表示为线性变换(更方便,因为它只是一个矩阵/点积)。

例如,给定一个输入x=[x1,...,xn], 一些权重a=[a1,a2,...,an]和偏见bR,可以表示仿射运算y=ax+b作为 :

y=a~x~, 和a~=[a1,...,an,b]x~=[x1,...,xn,1]线性运算)

当您的仿射变换是一个函数时f:RpRqy=f(x)=Ax+b,您可以使用相同的技巧(通过在权重矩阵的右端添加带有偏差的列A),所以你得到:y=A~x~

我在这个视频中找到了一个例子,Andrew Ng 使用这个技巧进行简单的线性回归。