0 前提及说明
在机器学习算法学习过程中,理论推导每当涉及到矩阵求导时,以往都是不求甚解,为更加深入理解算法,特此在这里整理近日的学习心得。下面进入正题。
前提:若 x x 为向量,则默认 x x 为列向量, xT x T 为行向量,即我们默认使用列向量。
1 矩阵求导类型
根据 Y Y 与的不同类型(标量(Scalar)、向量(Vector)、矩阵(Matrix)给出下表:
类型 | 标量 y y | 向量 | 矩阵 Y Y |
---|---|---|---|
标量 x x | ∂y∂x ∂ y ∂ x | ∂Y∂x ∂ Y ∂ x | |
向量 x x | ∂y∂x ∂ y ∂ x | ∂y∂x ∂ y ∂ x | |
矩阵 X X | ∂y∂X ∂ y ∂ X |
2 布局的约定(Layout Conventions)
矩阵求导本质上还是多元变量的微积分问题,只不过应用在了矩阵空间上,有两种约定(即布局):分子布局,分母布局。两种约定的求导结果有互为转置的关系,即约定不同,求导规则和结果都不同。
- 分子布局(Numerator Layout):即根据列向量 y y 和行向量 xT x T (即与x相反)布局,这有时被称为雅可比公式。
- 分母布局(Denominator Layout):即根据行向量 yT y T 和列向量 x x (即与y相反)布局,这有时被称为Hessian公式。一些作者将这种布局称为梯度,区别于雅可比矩阵(分子布局),即它的转置。下面给出维基百科关于两种布局的举例。
2.1 分子布局
- 标量/行向量: ∂y∂xT=[∂y∂x1∂y∂x2⋯∂y∂xn]⟹ ∂ y ∂ x T = [ ∂ y ∂ x 1 ∂ y ∂ x 2 ⋯ ∂ y ∂ x n ] ⟹ 行向量
- 列向量/标量: ∂y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢∂y1∂x∂y2∂x⋮∂yn∂x⎤⎦⎥⎥⎥⎥⎥⎥⎥⟹ ∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋮ ∂ y n ∂ x ] ⟹ 列向量
- 列向量/行向量: ∂y∂xT=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢∂y1∂x1∂y2∂x1⋮∂yn∂x1∂y1∂x2∂y2∂x2⋮∂yn∂x2⋯⋯⋱⋯∂y1∂xn∂y2∂xn⋮∂yn∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⟹m×n ∂ y ∂ x T = [ ∂ y 1 ∂ x 1 ∂ y 1 ∂ x 2 ⋯ ∂ y 1 ∂ x n ∂ y 2 ∂ x 1 ∂ y 2 ∂ x 2 ⋯ ∂ y 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ y n ∂ x 1 ∂ y n ∂ x 2 ⋯ ∂ y n ∂ x n ] ⟹ m × n 的矩阵( y y 为 m m 维,为 n n 维),矩阵的行按行向量展开,矩阵的列按列向量展开
- 标量/矩阵(维 ): ∂y∂X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢∂y∂x11∂y∂x12⋮∂y∂x1q∂y∂x21∂y∂x22⋮∂y∂x2q⋯⋯⋱⋯∂y∂xp1∂y∂xp2⋮∂y∂xpq⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⟹q×p ∂ y ∂ X = [ ∂ y ∂ x 11 ∂ y ∂ x 21 ⋯ ∂ y ∂ x p 1 ∂ y ∂ x 12 ∂ y ∂ x 22 ⋯ ∂ y ∂ x p 2 ⋮ ⋮ ⋱ ⋮ ∂ y ∂ x 1 q ∂ y ∂ x 2 q ⋯ ∂ y ∂ x p q ] ⟹ q × p 维矩阵,相当先转置,再对应元素求导。
- 矩阵( m×n m × n )/标量(仅分子布局): ∂Y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢∂y11∂x∂y21∂x⋮∂ym1∂x∂y12∂x∂y22∂x⋮∂ym2∂x⋯⋯⋱⋯∂y1n∂x∂y2n∂x⋮∂ymn∂x⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⟹m×n ∂ Y ∂ x = [ ∂ y 11 ∂ x ∂ y 12 ∂ x ⋯ ∂ y 1 n ∂ x ∂ y 21 ∂ x ∂ y 22 ∂ x ⋯ ∂ y 2 n ∂ x ⋮ ⋮ ⋱ ⋮ ∂ y m 1 ∂ x ∂ y m 2 ∂ x ⋯ ∂ y m n ∂ x ] ⟹ m × n 维矩阵
2.2 分母布局
- 标量/列向量: ∂y∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢∂y∂x1∂y∂x2⋮∂y∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⟹ ∂ y ∂ x = [ ∂ y ∂ x 1 ∂ y ∂ x 2 ⋮ ∂ y ∂ x n ] ⟹ 列向量
- 行向量/标量: ∂yT∂x=[∂y1∂x∂y2∂x⋯∂ym∂x]⟹ ∂ y T ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋯ ∂ y m ∂ x ] ⟹ 行向量
- 行向量/列向量: ∂yT∂x=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢∂y1∂x1∂y1∂x2⋮∂y1∂xn∂y2∂x1∂y2∂x2⋮∂y2∂xn⋯⋯⋱⋯∂ym∂x1∂ym∂x1⋮∂ym∂xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⟹n×m ∂ y T ∂ x = [ ∂ y 1 ∂ x 1 ∂ y 2 ∂ x 1 ⋯ ∂ y m ∂ x 1 ∂ y 1 ∂ x 2 ∂ y 2 ∂ x 2 ⋯ ∂ y m ∂ x 1 ⋮ ⋮ ⋱ ⋮ ∂ y 1 ∂ x n ∂ y 2 ∂ x n ⋯ ∂ y m ∂ x n ] ⟹ n × m 的矩阵( y y 为 m m 维,为 n n 维),矩阵的行按行向量展开,矩阵的列按列向量展开
- 标量/矩阵(维 ): ∂y∂X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢∂y∂x11∂y∂x21⋮∂y∂xp1∂y∂x12∂y∂x22⋮∂y∂xp2⋯⋯⋱⋯∂y∂x1q∂y∂x2q⋮∂y∂xpq⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⟹p×q ∂ y ∂ X = [ ∂ y ∂ x 11 ∂ y ∂ x 12 ⋯ ∂ y ∂ x 1 q ∂ y ∂ x 21 ∂ y ∂ x 22 ⋯ ∂ y ∂ x 2 q ⋮ ⋮ ⋱ ⋮ ∂ y ∂ x p 1 ∂ y ∂ x p 2 ⋯ ∂ y ∂ x p q ] ⟹ p × q 维矩阵,对应元素直接求导即可。
2.3 总结归纳
类型 | 标量 y y | 向量( m m 维) | 矩阵( m×n m × n 维) |
---|---|---|---|
标量 x x | 标量 |
∂y∂x
∂
y
∂
x
分子布局: m m 维列向量 分母布局:行向量 |
∂Y∂x
∂
Y
∂
x
(
m×n
m
×
n
维) 仅分子类型 |
向量 x x ( n n 维) | 分子布局: n n 维行向量 分母布局:维列向量 |
∂y∂x
∂
y
∂
x
分子布局: m×n m × n 维矩阵 分母布局: n×m n × m 维矩阵 | |
矩阵 X X ( p×q p × q 维) |
∂y∂X
∂
y
∂
X
分子布局: q×p q × p 维矩阵 分母布局: p×q p × q 维矩阵 |
3 常用公式
以下公式来源于维基百科,在此仅给出本人在学习过程中涉及到到的求导公式,随着不断学习会加以更新,链式法则与普通实数运算基本一致。
3.1 向量对向量求导
条件 | 表达式 | 分子布局 y y 和 xT x T | 分母布局 x x 和 yT y T |
a a 不是 x x 的函数 | ∂a∂x= ∂ a ∂ x = | 0 0 | |
∂x∂x= ∂ x ∂ x = | E E | ||
A A 不是 x x 的函数 | ∂Ax∂x= ∂ A x ∂ x = | A A | AT A T |
∂xTA∂x= ∂ x T A ∂ x = | AT A T | A A |
3.2 标量对向量求导
条件 | 表达式 | 分子布局 y y 和 xT x T | 分母布局 x x 和 yT y T |
a a 不是的函数 | ∂a∂x= ∂ a ∂ x = | 0T 0 T | 0 0 |
A A 不是 x x 的函数 | ∂xTAx∂x= ∂ x T A x ∂ x = | xT(A+AT) x T ( A + A T ) | (A+AT)x ( A + A T ) x |
A A 不是 x x 的函数, A A 为实对称矩阵 | ∂xTAx∂x= ∂ x T A x ∂ x = | 2xTA 2 x T A | 2Ax 2 A x |
4 矩阵求导实践之线性回归
4.1 线性回归回顾
对于线性回归我们一般假设 p(y|x;θ) p ( y | x ; θ ) ~ N(μ,σ2) N ( μ , σ 2 ) ,由广义线性模型得到假设函数 hθ(x)=θTx⇔hθ(X)=Xθ h θ ( x ) = θ T x ⇔ h θ ( X ) = X θ ,再由最大似然估计方法得到等价的极小值损失函数
首先将损失函数写为矩阵形式: J(θ)=12(Xθ−y)T(Xθ−y) J ( θ ) = 1 2 ( X θ − y ) T ( X θ − y ) ,下面对 J(θ) J ( θ ) 进行矩阵求导。
4.2 最小二乘法推导
- 注意: XTX X T X 为实对称矩阵; θ为列向量 θ 为 列 向 量 ,因此求导依据分子布局
由此可求得驻点 θ=(XTX)−1XTy θ = ( X T X ) − 1 X T y ,即最小二乘法表达式。
4.3 线性回归梯度下降推导
由4.2可得损失函数的导数 ∇θ(J(θ))=XT(Xθ−y) ∇ θ ( J ( θ ) ) = X T ( X θ − y ) ,因此可得每轮迭代的梯度表达式 θ=θ−αXT(Xθ−y)⇔θj=θj−α∂∂θjJ(θ)=[y(i)−hθ(x(i))]xj(i) θ = θ − α X T ( X θ − y ) ⇔ θ j = θ j − α ∂ ∂ θ j J ( θ ) = [ y ( i ) − h θ ( x ( i ) ) ] x j ( i )
参考文献
- Andrew ng的机器学习讲义
- 维基百科
感谢阅读,敬请斧正!