数学基础

线性变换(linear transformation)

/ LIN-ee-ur trans-for-MAY-shun /

线性变换是一种「重塑空间」的手法,而且重塑得井井有条:直线仍然是直线,原点(零点)原地不动,均匀的网格线仍然均匀——它们可以被拉伸、压扁、旋转或斜切,却永远不会被弯折或撕裂。想象一张有弹性的方格纸,你可以拉它、转它、斜着推它,却不能把它揉皱。那种平滑而均匀的重塑,正是这里「线性」的含义。

每一个线性变换都能用一个矩阵来刻画,而把这个变换作用到一个向量上,无非就是用那个矩阵去乘这个向量。这正是矩阵之所以重要的深层原因:一格格数字,其实是一份「如何移动并重塑空间」的紧凑配方。两条形式化的规则把它钉死——把输入放大几倍,输出就放大同样的倍数;和的变换等于变换的和。说白了,就是各部分相加、毫无意外。

在机器学习里,神经网络的每一层,开头都先做一次线性变换:把输入乘以一个权重矩阵,来混合并重塑它们。但有一点值得记牢——无论你把多少个线性变换叠在一起,得到的也永远只是另一个线性变换。这正是为什么网络要在层与层之间插入一个非线性步骤(激活函数)。少了它,一个百层的网络就会塌缩成单层的本事,深度学习也就一点都不「深」了。

矩阵 [ [2, 0], [0, 1]] 把一切都横向拉伸到两倍宽,而高度不变——一个正方形就变成了一个扁长的矩形。矩阵 [ [0, -1], [1, 0]] 则把整个平面逆时针旋转四分之一圈。这两种情形下,原点都纹丝不动,网格线始终保持笔直且间距均匀:这正是它们之所以「线性」的缘由。

矩阵其实是个动词:[ [2,0],[0,1]] 在说「横向拉宽」,[ [0,-1],[1,0]] 在说「旋转」。同一张网格,重塑而不弯折。

严格的线性变换必须让原点固定不动;一旦再加上一个平移(偏置项),它就成了「仿射」变换,而非线性变换。深度网络之所以需要激活函数,恰恰是因为「线性叠线性」依旧只是线性——是非线性才解锁了它们的威力。

又称
线性变换線性變換linear maplinear mapping线性映射