ベクトル・行列を含む微分

記号の定義

以下の記号で統一的に定義しておく。ベクトルは原則として列ベクトル表示を標準とする。

(1)    \begin{equation*} \boldsymbol{x} = \left[ \begin{array}{c} x_1 \\ \vdots \\ x_n \\ \end{array} \right] \end{equation*}

(2)    \begin{equation*} \boldsymbol{X} = \left[ \begin{array}{ccc} x_{11} & \ldots & x_{1n} \\ \vdots & x_{ij} & \vdots \\ x_{m1} & \ldots & x_{mn} \end{array} \right] \end{equation*}

(3)    \begin{equation*} f(\boldsymbol{x}) = f(x_1, \ldots, x_m) \end{equation*}

(4)    \begin{equation*} \boldsymbol{f}(x) = \left[ \begin{array}{c} f_1(x) \\ \vdots \\ f_n(x) \end{array} \right] \end{equation*}

(5)    \begin{equation*} \boldsymbol{f}(\boldsymbol{x}) =\ \left[ \begin{array}{c} f_1(x_1, \ldots, x_n) \\ \vdots \\ f_m(x_1, \ldots, x_n) \end{array} \right] \end{equation*}

(6)    \begin{equation*} \boldsymbol{F}(x) = \left[ \begin{array}{ccc} F_{11}(x) & \ldots & F_{1n}(x) \\ \vdots & F_{ij} & \vdots \\ F_{m1}(x) & \ldots & F_{mn}(x) \\ \end{array} \right] \end{equation*}

ベクトル・行列をスカラーで微分

これらは素直にベクトル・行列の要素を微分すればよい。

(7)    \begin{equation*} \frac{d \boldsymbol{f}(x)}{dx} = \left[ \begin{array}{c} \dfrac{d f_1(x)}{dx} \\ \vdots \\ \dfrac{d f_n(x)}{dx} \end{array} \right] \end{equation*}

(8)    \begin{equation*} \frac{d \boldsymbol{F}(x)}{dx} = \left[ \begin{array}{ccc} \dfrac{dF_{11}(x)}{dx} & \ldots & \dfrac{dF_{1n}(x)}{dx} \\ \vdots & \dfrac{dF_{ij}(x)}{dx} & \vdots \\ \dfrac{dF_{m1}(x)}{dx} & \ldots & \dfrac{dF_{mn}(x)}{dx} \end{array} \right] \end{equation*}

スカラーをベクトルで微分

スカラーを\mathbb{R}^nのベクトルで微分すると、同じ次数のベクトルになる。

(9)    \begin{equation*} \frac{df(\boldsymbol{x})}{d\boldsymbol{x}} = \left[ \begin{array}{c} \dfrac{\partial f}{\partial x_1} \\ \vdots \\ \dfrac{\partial f}{\partial x_m} \end{array} \right] \end{equation*}

これは便宜的に偏微分係数を要素とするベクトルを導入して以下のように考えるとよい。

(10)    \begin{equation*} \frac{d}{d\boldsymbol{x}}f(\boldsymbol{x}) = \left[ \begin{array}{c} \dfrac{\partial}{\partial x_1} \\ \vdots \\ \dfrac{\partial}{\partial x_m} \end{array}\right] f(\boldsymbol{x}) \end{equation*}

スカラーを行列で微分

スカラーを\mathbb{R}^m\times\mathbb{R}^nの行列で微分すると、同じ次元・次数の行列になる。

(11)    \begin{equation*} \frac{df(\boldsymbol{X})}{d\boldsymbol{X}} = \left[ \begin{array}{ccc} \dfrac{\partial f}{\partial x_{11}} & \ldots & \dfrac{\partial f}{\partial x_{1n}} \\ \vdots & \dfrac{\partial f}{\partial x_{ij}} & \vdots \\ \dfrac{\partial f}{\partial x_{m1}} & \ldots & \dfrac{\partial f}{\partial x_{mn}} \\ \end{array} \right] \end{equation*}

これは便宜的に以下のように考えるとよい。

(12)    \begin{equation*} \frac{d}{d\boldsymbol{X}} f(\boldsymbol{X}) = \\ \left[ \begin{array}{ccc} \dfrac{\partial}{\partial x_{11}} & \ldots & \dfrac{\partial}{\partial x_{1n}} \\ \vdots & \dfrac{\partial}{\partial x_{ij}} & \vdots \\ \dfrac{\partial}{\partial x_{m1}} & \ldots & \dfrac{\partial}{\partial x_{mn}} \\ \end{array} \right] f(\boldsymbol{X}) \end{equation*}

ベクトルをベクトルで微分

この場合、微分する変数側を行ベクトルとするか、微分される関数側を行ベクトルとするか2通りの表現があるが、ここでは関数側を行ベクトルとする。

(13)    \begin{equation*} \frac{d\boldsymbol{f}(\boldsymbol{x})^T}{d\boldsymbol{x}} = \left[ \begin{array}{ccc} \dfrac{\partial f_1}{\partial x_1} & \ldots & \dfrac{\partial f_n}{\partial x_1} \\ \vdots & \dfrac{\partial f_j}{\partial x_i} & \vdots \\ \dfrac{\partial f_1}{\partial x_m} & \ldots & \dfrac{\partial f_n}{\partial x_m} \\ \end{array} \right] \end{equation*}

これは(10)で導入した偏微分係数ベクトルを導入して、便宜的に以下のように考えるとよい。

(14)    \begin{equation*} \frac{d}{d\boldsymbol{x}} \boldsymbol{f}(\boldsymbol{x})^T = \left[ \begin{array}{c} \dfrac{\partial}{\partial x_1} \\ \vdots \\ \dfrac{\parial}{\partial x_m} \end{array} \right] [ f_1(\boldsymbol{x}) \; \ldots \; f_n(\boldsymbol{x}) ] = \left[ \begin{array}{ccc} \dfrac{\partial f_1}{\partial x_1} & \cdots & \dfrac{\partial f_n}{\partial x_1} \\ & \dfrac{\partial f_j}{\partial x_i} &\\ \dfrac{\partial f_1}{\partial x_m} & \cdots & \dfrac{\partial f_n}{\partial x_m} \end{array} \right] \end{equation*}

公式

一般形

単位行列

ベクトルを同じベクトルで微分すると、単位ベクトルではなく単位行列になる。

(15)    \begin{equation*} \frac{d\boldsymbol{x}}{d\boldsymbol{x}} = \boldsymbol{I} \end{equation*}

合成関数

スカラーの合成関数と似ているが、イメージと積の順番が逆で、この順番は変えられない。

(16)    \begin{align*} \frac{df(\boldsymbol{u}(\boldsymbol{x}))}{d\boldsymbol{x}} = \frac{d\boldsymbol{u}(\boldsymbol{x})^T}{d\boldsymbol{x}} \frac{df(\boldsymbol{u})}{d\boldsymbol{u}} \\ \end{align*}

これは以下のように確認できる。

(17)    \begin{align*} \frac{df}{dx_i} &= \frac{\partial f}{\partial u_1}\frac{\partial u_1}{\partial x_i} + \cdots + \frac{\partial f}{\partial u_j}\frac{\partial u_j}{\partial x_i} + \cdots + \frac{\partial f}{\partial u_n}\frac{\partial u_n}{\partial x_i} \\ \rightarrow \frac{df(\boldsymbol{u}(\boldsymbol{x}))}{d\boldsymbol{x}} &= \left[ \begin{array}{ccc} \dfrac{\partial u_1}{\partial x_1} & \cdots & \dfrac{\partial u_n}{\partial x_1} \\ \vdots && \vdots \\ \dfrac{\partial u_1}{\partial x_m} & \cdots & \dfrac{\partial u_n}{\partial x_m} \\ \end{array} \right] \left[ \begin{array}{c} \dfrac{\partial f}{\partial u_1} \\ \vdots \\ \dfrac{\partial f}{\partial u_n} \end{array} \right] \\ &= \left[ \begin{array}{c} \dfrac{\partial}{\partial x_1} \\ \vdots \\ \dfrac{\partial}{\partial x_m} \end{array} \right] [u_1 \; \cdots \; u_n] \left[ \begin{array}{c} \dfrac{\partial}{\partial u_1} \\ \vdots \\ \dfrac{\partial}{\partial u_n} \end{array} \right] f(\boldsymbol{u}) \end{align*}

積の微分

行列の積のスカラーによる微分

(18)    \begin{equation*} \frac{d\boldsymbol{(FG)}}{dx} = \frac{d\boldsymbol{F}}{dx}\boldsymbol{G} + \boldsymbol{F} \frac{d\boldsymbol{G}}{dx} \end{equation*}

これは素直に次のように確認できる。

(19)    \begin{align*} \frac{d(\boldsymbol{FG})}{dx} &= \frac{d}{dx}\left[\sum_{j=1}^m f_{ij} g_{jk}\right] = \left[\sum_{j=1}^m \left(\frac{df_{ij}}{dx} g_{jk} + f_{ij} \frac{dg_{jk}}{dx} \right)\right] \\ &= \left[ \sum_{j=1}^m \frac{df_{ij}}{dx} g_{jk} \right] + \left[ \sum_{j=1}^m f_{ij} \frac{dg_{jk}}{dx} \right] \end{align*}

一次~二次形式の微分

Axの形式

ベクトルAxをベクトルxで微分するのに(13)の考え方で計算する。

ベクトルxn次、行列Am×nとすると、ベクトルAx次数はm次となる。微分する際に微分係数ベクトルはn×1の列ベクトル、Axは転置して1×mの行ベクトルとなり、結果はn×mの行列になる。その結果は元のAの転置行列となる。

(20)    \begin{equation*} \frac{d\left( (\boldsymbol{Ax})^T \right)}{d\boldsymbol{x}} = \boldsymbol{A}^T \end{equation*}

(21)    \begin{equation*} \begin{align} & \frac{d}{d\boldsymbol{x}} \left[ \begin{array}{c} a_{11}x_1 + \cdots + a_{1j}x_j + \cdots + a_{1n}x_n \\ \vdots \\ a_{i1}x_1 + \cdots + a_{ij}x_j + \cdots + a_{in}x_n \\ \vdots \\ a_{m1}x_1 + \cdots + a_{mj}x_j + \cdots + a_{mn}x_n \\ \end{array} \right]^T \\ &= \left[ \begin{array}{c} \dfrac{\partial}{\partial x_1} \\ \vdots \\ \dfrac{\partial}{\partial x_j} \\ \vdots \\ \dfrac{\partial}{\partial x_n} \\ \end{array} \right] \left[ \begin{array}{c} a_{11}x_1 + \cdots + a_{1j}x_j + \cdots + a_{1n}x_n \\ \vdots \\ a_{i1}x_1 + \cdots + a_{ij}x_j + \cdots + a_{in}x_n \\ \vdots \\ a_{m1}x_1 + \cdots + a_{mj}x_j + \cdots + a_{mn}x_n \\ \end{array} \right]^T \\ &= \left[ \begin{array}{ccccc} a_{11} & \cdots & a_{i1} & \cdots & a_{m1} \\ \vdots && \vdots && \vdots \\ a_{1j} & \cdots & a_{ij} & \cdots & a_{mj} \\ \vdots && \vdots && \vdots \\ a_{1n} & \cdots & a_{in} & \cdots & a_{mn} \\ \end{array} \right] = \boldsymbol{A}^T \end{align} \end{equation*}

x^2の形式

(22)    \begin{equation*} \frac{d(\boldsymbol{x}^T \boldsymbol{x})}{d\boldsymbol{x}} = 2 \boldsymbol{x} \end{equation*}

[証明]

(23)    \begin{equation*} \left[ \begin{array}{c} \dfrac{\partial}{\partial x_1} \\ \vdots \\ \dfrac{\partial}{\partial x_n} \end{array} \right] [ x_1^2 + \cdots + x_n^2 ] = \left[ \begin{array}{c} 2x_1 \\ \vdots \\ 2x_n \end{array} \right] \end{equation*}

xTAxの形式

この場合、\boldsymbol{A}は正方行列で、\boldsymbol{x}と同じ次数でなければならない。

(24)    \begin{equation*} \frac{d}{d\boldsymbol{x}} \left(\boldsymbol{x}^T \boldsmbol{A} \boldsymbol{x} \right)= \left( \boldsymbol{A} + \boldsymbol{A}^T \right) \boldsymbol{x} \end{equation*}

[証明]

(25)    \begin{align*} &\frac{d}{d \boldsymbol{x}} \left( [x_1 \; \cdots \; x_n] \left[ \begin{array}{ccc} a_{11} & \cdots & a_{1n} \\ \vdots & & \vdots \\ a_{n1} & \cdots & a_{nn} \\ \end{array} \right] \left[ \begin{array}{c} x_1 \\ \vdots \\ x_n \end{array} \right] \right)\\ &=\frac{d}{d \boldsymbol{x}} \left( [x_1 \; \cdots \; x_n] \left[ \begin{array}{c} a_{11} x_1 + \cdots + a_{1n} x_n \\ \vdots \\ a_{n1} x_1 + \cdots + a_{nn} x_n \end{array} \right] \right)\\ &= \frac{d}{d \boldsymbol{x}} \left( \left( a_{11} {x_1}^2 + \cdots + a_{1n} x_1 x_n \right) + \cdots + \left( a_{n1} x_n x_1 + \cdots + a_{nn} {x_n}^2 \right) \right) \end{array}\\ &=\left[ \begin{array}{c} \left( 2 a_{11} x_1 + \cdots + a_{1n} x_n \right) + a_{21} x_2 + \cdots + a_{n1}  x_n \\ \vdots \\ a_{1n} x_1 + \cdots + a_{1n-1} x_{n-1} + \left( a_{n1} x_1 + \cdots + 2a_{nn} x_n \right) \end{array} \right] \\ &=\left[ \begin{array}{c} \left( a_{11} x_1 + \cdots + a_{1n} x_1 \right) + \left( a_{11} x_1 + \cdots + a_{n1} x_n \right) \\ \vdots \\ \left( a_{n1} x_1 + \cdots + a_{nn} x_n \right) + \left( a_{1n} x_1 + \cdots + a_{nn} x_n \right) \end{array} \right] \end{align*}

 

20件のコメント

  1. (25)の式の最初の式には,左にd/dxが抜けてると思いますが,違いますか?

      1. いや,自分が読み間違えている気がしてきました.
        24と25の式は,23の式の両辺から追いかけて同じになることで証明しようとしているのだと思いますが,どこからどこまでが左辺で,どこから右辺なのか分け目が分かりません.
        私なら,左辺=・・・・,また右辺=・・・・とやって,最終的に同じになることで証明しますが,ここでは,ずっと=で続かせて証明しているのですね?
        ならば,25の式は,途中で”=”が無くなってるのが変なのでしょう.全ての式の右に”=”を書けばよろしい様に思えます.

        1. たびたびコメントいただいてありがとうございます。
          先に修正したときに「=が抜けてるかな」と思ったのですが、いい加減にそのままにしていました。
          左側に、ですが=を追加してみました。
          ただalignでそろえたはずなのに=の位置がそろわないので見苦しいですが・・・。

  2. たびたび,すいません.
    書いて頂いてる公式を,仕事で作ってるプログラムの中で使おうとしているので,なにとぞお教え下さい.

    (3)と(9)の定義式から(14)の公式を導くには,「被偏微分(偏微分されるベクトル関数)」は,偏微分する前に転置する,という演算定義が必要だと思います.

    例えば「内積」は,計算する前に左側のベクトルを転置してから積を取る,と言った演算定義です.

    このことって,普通に使われている事なのでしょうか?
    何分,このコロナで図書館もしまっていて,調べものに難儀しております.ひとつ,お助け下さいませ.

    1. コメントありがとうございます。
      このページの内容を整理するのに、他のいろいろなサイトを参考にさせていただきました。
      ただ、結果(定義)は示されているのですが、「なぜその形になるのか/するのか」という解釈がなかなかわかりませんでした。
      なので「手前勝手な解釈でも自分の腹に落ちるなら」ということで微分演算子のベクトルのような考え方を導入してみたものです。

      まず(14)の微分演算子ベクトルですが、これはd/dxではなくて(10)と同じ偏微分演算子の間違いでした。
      その上で・・・
      (13)の行列表現が定義されている
      →これを(14)のように偏微分演算子の列ベクトルと関数を要素とする行ベクトルの積で表現できる(結果は行列になる)
      一方で(9)のように定義されている
      →これも偏微分演算子の列ベクトルを導入すると(10)のように表現できる
      これで表現としては辻褄が合うかな、ということでこのようにまとめました。

      行ベクトル同士の積の場合、2項目を転置して列ベクトルとすれば内積になりますが、1項目を転置すると結果は行列になります。
      今回は、記号の定義と演算の表現を整合させるべく、後者の演算を使いました。

      数学に詳しい者ではないのでこんなお答えしかできませんが、いかがでしょうか。
      なおコメントいただいたことで(14)の誤記がわかったので、偏微分演算子のベクトルに修正いたします。

    2. あ~,解りました.

      >微分する変数側を行ベクトルとするか、微分される関数側を行ベクトルとするか2通りの表現があるが・・・

      この意味が分からなかったのです.
      偏微分演算子のベクトルと,扱うベクトル(xなど)を列ベクトル(縦ベクトル)とするなら,微分される側を必ず転置してから演算する規則にするのですね.行ベクトル(横ベクトル)にするなら,偏微分演算子ベクトルの方を転置してから同様に・・・

      もし,内積演算と同様に偏微分演算子ベクトルの方を転置するなら,

      ∂X
      ー=N (NはXの次元)
      ∂X

      こうなっているはずですよね?
      うんうん.

      なお,”=”を追加して下さったのは,とても良いです.
      こちらのブラウザでは,綺麗にそろって表示されてます.

      今後とも,ご教導のこと,宜しくお願いします。

      1. ありがとうございます。
        書籍や教科書の多くが、その中で定義しているベクトルが行ベクトルなのか列ベクトルなのかつい分からなくなってしまうので、この記事ではできるだけ泥臭く要素を並べる表現にしました。
        式(14)も偏微分係数は列ベクトルに、関数ベクトルの方は行ベクトルで要素を列挙しました。
        このような冗長な表現は、後になって自分で「?」となることが多い自身のためです。
        またお気づきの点あればご示唆ください。

  3. あまり長々と書いてもご迷惑と思いますが,自分の頭のまとめの独り言を聞いてくださいませ.

    ベクトルで偏微分する算法は,世界共通という方式が定められてないならば,何かの式を説明する場合,事前に説明するのが数学の筋ってもんだと思います.でないと読む人に不親切,または読んでもらえない論文になると思います.

    そこで,単に太字でベクトルを表す時に,(デフォルトが)行ベクトルにしてるのか,列ベクトルなのかは,やはり最初に言わないと不親切ってもんですよね,うんうん.

    でも,式(14)は,ついついすら~っと眺めただけで次に行ってしまったのですが,最初に列ベクトルを基本とするとしておきながら,ここのfベクトルだけ行ベクになっているので騙されてしまいやすいです.

    偏微分演算子ベクトルの方を列ベクトルに定義しても,数学として無矛盾になるとおもいますけど,少なくとも演算子と非演算ベクトルの,どちらかを(基本のベクトル)を転置した形式にしないと成り立たない.

    さて,ここまでは良いのですが,あちこちのネットに載っているベクトル偏微分の説明を拾い読みしていくと,「公式」と説明している一連の式が出てきます.
    お書きになったページでは,(15),(20)のような式です.

    個人個人の定義の仕方で,特に(15)は前述の様に,ぜんぜん違ってくるのですが,そういうモンを『公式』と呼んで良いもんだろうか? 言い換えれば,その論文,図書の中でしか通用しない式を「公式」とは,如何なもんかなぁ?
     または,自分の勘違いは,ここに起因していたので,自分が何か式を並べたペーパーを書くときは,よくよく注意することにしよっと(^^),という事でございました.

    有難う御座いました.

    1. 仰る通り式(14)のf(x)については、式(4)で列ベクトルとして定義している以上明示的に転置すべきでした。
      式を修正しておきました。

      実のところ私自身は「公式」というのが苦手でして、意味なく覚え込むという作業ができません。
      導出過程を全部追わないにしても、せめて各項の意味や式の意味するところが腹に落ちないと覚えることもできないのです。
      その点ベクトル・行列関係は私にとって大敵で、このページで導出過程を無理やり解釈はしましたが、まだ数学的イメージが掴めないままでいます。

      ふと思ったのですが「公式」というのはプログラミングの関数やメソッドと似ているのかもしれないですね。
      公理・定理のように真理を表現しているというよりも、とりあえずそこまでの過程を毎回繰り返すのは無駄だからまとめておこう、といった感じでしょうか。
      余談が過ぎました。
      このたびは、丁寧なコメントをたびたびいただいたこと、感謝します。

  4. 非常に参考になるまとめありがとうございます。
    恐れながら、いくつか誤りを見つけましたので報告させていただきます。
    式(20)の添字について
    a_1n  → a_in
    かと思います。
    それに連なって、最後の行列もかなり変わってくるかとおもいます。

    1. ご指摘ありがとうございました。
      ご示唆をいただいたことから、改めて式の導出過程も少し詳しくしてみました。
      またお気づきの点あればご示唆ください。

  5. ものすごく助かる記事ありがとうございます.
    (17)式の1行目と2行目以降は別の式で,”=”でつながない方が良かったりしないでしょうか.
    (1行目はdf/dx_i,2,3行目はdf/dxになっている気がします.)

    1. ご指摘感謝します。
      確かに1行目はベクトルxのi番目の要素について書いていて、2行目はそれをまとめた行列・ベクトル形式なので対応していませんでした。
      たとえば2行目以降を式にして、’→’で1行目を受けてみました。
      またお気づきの点あればご教示ください。

  6. 勉強させていただいてます。
    「ベクトルをベクトルで微分」のところで、「変数側を行ベクトルとする」とありますが、式(14)を見るに、行ベクトルとするのは関数側ではないでしょうか?

    既にコメントで色々議論されている箇所のようなので、勘違いでしたらすみません。

    1. このような個人仕様の内容にコメントを下さって感謝します。
      おっしゃるとおり、そして自ら下の式に書いてある通り、関数側を行べくとするのでした。
      ご指摘いただいてありがとうございました。

  7. すみません、(16)の右辺の1つ目の微分は、u(x) が転置されている必要はないのでしょうか?

    1. どうもありがとうございます。
      仰る通り(13)と同様に転置しないといけないですね。
      修正をさせていただきました。
      ご指摘感謝します。

      1. ベクトルや行列を微分したら、微分する前との同値性はどうなりますか

        1. レスポンスが遅くなって恐縮です。
          数学の知識に乏しいのですが、何れかの式において同値性が保たれていないということでしょうか?
          ご教示くださると幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です