学好线性代数矩阵论需要的不是逻辑思维,而是“内存”。本篇整理几个内存消耗大的公式,方便速查。
(a)
我一般喜欢举一个具体的实例,类似数学归纳法,总是从n = 1开始。这里可以用3×3的矩阵。
首先矩阵×向量有一种内存小的记法:
上式a是A的列向量, 是向量 x 的元素(标量)。
式(a)的左边
上式乘积的对角元素为
式(a)的右边
得证。
是正定矩阵,其中 为可逆矩阵(nonsingular,行列式!=0),即存在 。
观察上述矩阵,只有对角线的元素是平方和,其他元素正负未知。那么正定矩阵的定义是神马?对于任意非零向量 ,
那么,
以上,我们接触了两个内存容易溢出的矩阵知识点,1是trace,2是二次型。下面开始看矩阵求导。
关于矩阵导数的几个定义
1、向量y对向量x的导数。若
:
where y is an m-element vector, and x is an n-element vector. The symbol
上式矩阵还称为线性变换 的Jacobian matrix。
以上常用于求解Ax = b的问题。
2、矩阵A对标量变量 的导数
3、标量L对矩阵W的导数,定义为,常应用于神经网络损失函数对系数矩阵的导数。
一般数学定义强记硬背是必须的,理解随意。
举几个例子,二维的高斯函数
或写成顺眼的形式
梯度函数 ,同样看我们熟悉的三维情形 ,其梯度为
即函数在x方向上和y方向上的梯度分量,总梯度向量叠加即可:
下面记几个公式
let y is m×1, x is n×1, A is m×n,
then
(公式1)
证明:
it follows that
for all i = 1, 2, ..., m, j = 1, 2, ..., n. Hence
得证。
y is m×1, x is n×1, A is m×n, z is l×1,
Suppose that x is a function of the vector z, while A is independent of z. then
(公式2)
证明
for all i = 1, 2, ... , m, it follows that
右边是 的元素(i, j)。那么,求导的链式法则在这里也apply,
根据定义1, 是n×l矩阵, 是m×l矩阵。
标量 定义为
式中 b 为m×1, x 为n×1, A 为 m×n, 有
(公式3.1)
and
(公式3.2)
证明
根据公式(1),设 ,公式3.1得证。
另一方面,标量的转置是标量本身,
又根据公式(1),公式3.2得证。
标量 可以由二次型得出
where x is n×1, and A is n×n, then
(公式4)
证明:
由定义
即二次型遍历了矩阵所有元素,而元素的加权是下标对应的 ,那么对元素 求导
对于k = 1, 2, ... , n,
quod erat demonstrandum.
求导综合算例
证明最小二乘解,A is m×n, x is n×1, b is m×1,
Proof:
上式中间两项相等(一个标量),那么求导得
(*)
上式等于0,得到
两边转置得
得证。漏了一点, 的二阶导数须才是最小值。那么式(*)的导数为(转置求导后再转置回来) 是正定矩阵。
矩阵不是终点,张量才是。张量无疑需要更大的内存。无论是矩阵还是张量,有一类向量化操作(vectorization) , defining
with , ,and writing the problem in the form ,where is given by