再谈最小平方问题
有了矩阵求导工具后,我们可以寻找最小化损失函数的参数值的闭式解(closed-form solution)。首先我们先把这个损失函数表达成向量的形式。
把每个训练样本放在矩阵一行,可以得到一个(m imes n) 设计矩阵(X) (design matrix) ,即
[X=left[
egin{array}{c}{
-left(x^{(1)}
ight)^{T}-} \
{-left(x^{(2)}
ight)^{T}-} \
{vdots} \
{-left(x^{(m)}
ight)^{T}-}
end{array}
ight]
]
$vec{y} $ 是一个$m $ 维的列向量,包含对应的标签,
[vec{y}=left[egin{array}{c}{y^{(1)}} \ {vdots} \ {y^{(m)}}end{array}
ight]
]
因此,有,
[egin{aligned} X heta-vec{y} &=
left[egin{array}{c}{left(x^{(1)}
ight)^{T} heta} \ {vdots} \ {left(x^{(m)}
ight)^{T} heta}end{array}
ight]-left[egin{array}{c}{y^{(1)}} \ {vdots} \ {y^{(m)}}end{array}
ight] \
&=left[egin{array}{c}{h_{ heta}left(x^{(1)}
ight)-y^{(1)}} \ {vdots} \ {h_{ heta}left(x^{(m)}
ight)-y^{(m)}}end{array}
ight] end{aligned}
]
我们先把均方误差损失函数(J( heta)=frac{1}{2} sum_{i=1}^{m}left(h_{ heta}left(x^{(i)} ight)-y^{(i)} ight)^{2}) 表达成向量的形式,有,
[egin{aligned} frac{1}{2}(X heta-vec{y})^{T}(X heta-vec{y}) &=frac{1}{2} sum_{i=1}^{m}left(h_{ heta}left(x^{(i)}
ight)-y^{(i)}
ight)^{2} \ &=
J( heta)
end{aligned}
]
可以看到这个损失函数其实是关于向量参数( heta) 的矩阵函数。利用之前矩阵求导的两条性质,
[egin{equation}
egin{aligned}
abla_{A^{T}} f(A) &=left(
abla_{A} f(A)
ight)^{T} \
abla_{A} operatorname{tr}A B A^{T} C &=C A B+C^{T} A B^{T} \
end{aligned}
end{equation}
]
我们可以有,
[egin{equation}
egin{aligned}
abla_{A^{T}} operatorname{tr}A B A^{T} C &= B^{T}A^{T}C^{T}+BA^{T}C \ end{aligned}end{equation}
]
接下来对损失函数关于参数向量( heta) 求导我们有,
[egin{aligned}
abla_{ heta} J( heta) &=
abla_{ heta} frac{1}{2}(X heta-vec{y})^{T}(X heta-vec{y}) \
&=frac{1}{2}
abla_{ heta}left( heta^{T} X^{T} X heta- heta^{T} X^{T} vec{y}-vec{y}^{T} X heta+vec{y}^{T} vec{y}
ight) \
&=frac{1}{2}
abla_{ heta} operatorname{tr}left( heta^{T} X^{T} X heta- heta^{T} X^{T} vec{y}-vec{y}^{T} X heta+vec{y}^{T} vec{y}
ight) \
&=frac{1}{2}
abla_{ heta}left(operatorname{tr} heta^{T} (X^{T} X) heta I-2 operatorname{tr} vec{y}^{T} X heta
ight) \ &=frac{1}{2}left(X^{T} X heta+X^{T} X heta-2 X^{T} vec{y}
ight) \
&=X^{T} X heta-X^{T} vec{y}
end{aligned}
]
第三个等式用到一个标量的迹就是它本身。第五个等式前半部分用到了上面的性质$ abla_{A^{T}} operatorname{tr}A B A^{T} C = B{T}A{T}C{T}+BA{T}C $ ,而后半部分用到$ abla_{A}operatorname{tr}A B =B^{T} $ 。
我们令这个导数等于零,就得到正规方程(normal equations),
[egin{equation}egin{aligned}
X^{T} X heta=X^{T} vec{y}
end{aligned}end{equation}
]
最后可以得到参数的闭式解,
[egin{equation}egin{aligned}
heta=(X^{T} X)^{-1}X^{T} vec{y}
end{aligned}end{equation}
]
打完,收工。