ベクトルと行列の微分 第4章 前処理 Python機械学習プログラミング

 

今回は、行列で微分することについて考える。ベクトルの微分は、行列の次元が低い晩だと思えばよい。

 

行列を1つの変数で微分

 \frac{d A}{d x}

などの場合は、各要素をxで微分していけばよい。 \frac{d A}{d x}  i, j要素を \frac{d A}{d x}_{ij} とすると、

 \frac{d A}{d x}_{ij} = \frac{d a_ij}{d x}_{ij}

ベクトルをベクトルで微分の定義

 \frac{d\vec{y}}{d\vec{x}} = \begin{pmatrix} \frac{d y_1}{d x_1}\  \frac{d y_2}{d x_1}\ \cdots \frac{y_n}{x_1} \\ \vdots \  \vdots \ \ddots  \\  \frac{d y_1}{d x_m}\ \cdots \ \ \frac{d y_n}{d x_m} \end{pmatrix}

  \frac{d\vec{y}}{d\vec{x}}_{ij} =  \frac{d\vec{y_j}}{d\vec{x_i}}

行列をベクトルで微分

行列のベクトルでの微分は、 A = {\vec{a_1}, \vec{a_2}, \cdots, \vec{a_n}}

微分と考える。

 \frac{d A\vec{x}}{d \vec{x}}

を考える。

 (A\vec{x})_i= \sum_j a_ij\vec{x}_j

よって、

 \frac{\partial A\vec{x}}{\partial \vec{x}} = \begin{pmatrix}\frac{\partial \sum_j a_{0j}\vec{x}_j }{\partial x_0}\ \frac{d \sum_j a_{1j}\vec{x}_j }{\partial x_0} \ \cdots \frac{\partial \sum_j a_{nj}\vec{x}_j }{\partial x_0}\\ \frac{\partial \sum_j a_{0j}\vec{x}_j }{\partial x_1}\ \frac{\partial \sum_j a_{1j}\vec{x}_j }{\partial x_1} \ \cdots \frac{\partial \sum_j a_{nj}\vec{x}_j }{\partial x_1} \\\vdots \ \ddots \ \vdots \\ \frac{\partial \sum_j a_{0j}\vec{x}_j }{\partial x_n}\ \frac{\partial \sum_j a_{1j}\vec{x}_j }{\partial x_n} \cdots \  \frac{\partial \sum_j a_{nj}\vec{x}_j }{\partial x_n}\end{pmatrix}   = \begin{pmatrix} a_{00} \ a_{10} \ \cdots \\ a_{01} \ a_{11} \ \cdots\\ \vdots \ \vdots \ddots \ \vdots \\ a_{0n}\cdots a_{nn}\end{pmatrix}  = A^T

 

L2正則化の時に必要な公式の証明

主成分分析の時に必要な公式の証明

 

本題に入っていくが、

 

 \frac{\partial (\vec{\omega}^TS\vec{\omega})}{\partial{\vec{\omega}}} 

ここで、

(\vec{\omega}^TS)_j = \sum_i \omega_i s_{ij}

(\vec{\omega}^TS) \vec{\omega} =\sum_j (\sum_i \omega_i s_{ij} )\omega_j   

 ( \frac{\partial (\vec{\omega}^TS\vec{\omega})}{\partial{\vec{\omega}}})_k = \frac{\sum_j (\sum_i \omega_i s_{ij} )\omega_j}{\partial \omega_k} = \frac{\sum_j (\sum_i \omega_i s_{ij} )\omega_j}{\partial \omega_k}  =( \sum (s_{kj} + s_{jk}) w_j) = ((S + S^T)\omega)_j \therefore 2S\vec{\omega}

最後から2番目のイコールは、要素ごとに積の微分は、考えると分かる。

 最後は、S が対象行列のことをつかった。

 \frac{\partial \vec{w}^T\vec{w}}{\partial \vec{w}} = 2\vec{w}

 \frac{\partial \vec{w}^T \vec{w}}{\vec{w}}

 \vec{w}^T\vec{w} = \sum_i w_i^2

(\frac{\partial \vec{w}^T \vec{w}}{\vec{w}} )_k= \frac{\partial\sum_i w_i^2}{\partial w_k} = 2w_k

よって、

 \frac{\partial \vec{w}^T \vec{w}}{\vec{w}} = 2\vec{w}

 

 

 

 

参考図書一覧↓

yosuke-programing.hatenadiary.com

 

Python機械学習プログラミングの他の記事はこちら↓

yosuke-programing.hatenadiary.com

 Amazonはこちら↓

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)