2012年12月21日金曜日

多変数二次関数の平方完成

二乗誤差の最小化問題

何らかの二乗誤差を最小化する問題を取り扱っていると、次のような二次関数(二次式?適当な言葉が見つからない)に出くわすことがよくある。\(u\)は\(n\)次元のベクトルで変数ベクトル\(x\)と定数ベクトル\(c\)を含んでおり、\(n\times n\)の対称行列\(A\)には定数しか含まれていない。このとき、誤差関数\(y(x)\)の最小値は何になるのか?また、その時の変数\(x\)は何か?これらを求めるにはどうしたらよいか?

\[ y(x) = u^T A u = \left[ \begin{array}{c|c} 変数 & 定数\\ \end{array} \right] \left[ \begin{array}{c|c} 2次式の係数 & 1次式の係数\\ \hline 1次式の係数 & 定数項\\ \end{array} \right] \left[ \begin{array}{c} 変数\\ \hline 定数\\ \end{array} \right] \] \[ = \left[ \begin{array}{cc} {\bf x}^T & {\bf c}^T \end{array} \right] \left[ \begin{array}{cc} {\bf a^{(2)}} & {\bf a^{(1)}}\\ {\bf a^{(1)}}^T & {\bf a^{(0)}} \end{array} \right] \left[ \begin{array}{c} {\bf x}\\ {\bf c} \end{array} \right] \]

二次関数の平方完成

やり方は高校の時に習った二次関数の平方完成とほとんど同じである。 これを多変数関数に当てはめてみる。 手順は、まず二次の項の係数だけ残して、平方完成できたとして式を立ててみる。 次に、その平方完成した式と下の式をそれぞれ展開して、見比べてみる。

まず、平方完成できたとすると以下のような式になるはずである。

\[ y(x)=(x+d)^T a^{(2)} (x+d) + e \] \[ = x^T a^{(2)} x + 2 d^T a^{(2)} x + d^T a^{(2)} d + e \]

一方、元の式を展開すると以下のようになる。

\[ y(x) = x^T a^{(2)} x + 2 c^T a^{(1)} x + c^T a^{(0)} c \]

2つの式をよく見比べると1次の項と定数項に対して次の等式が成立する。

\[ 2 d^T a^{(2)} = 2 c^T a^{(1)} \] \[ d^T a^{(2)} d + e = c^T a^{(0)} c \]

\(d\)および\(e\)について解く。

\[ \begin{array}{ccl} d & = & {a^{(2)}}^{-1} {a^{(1)}}^T c\\ e & = & c^T a^{(0)} c - d^T a^{(2)} d\\ & = & c^T a^{(0)} c - ({a^{(2)}}^{-1} {a^{(1)}}^T c)^T a^{(2)} ({a^{(2)}}^{-1} {a^{(1)}}^T c)\\ & = & c^T a^{(0)} c - c^T {a^{(1)}} {a^{(2)}}^{-1} {a^{(1)}}^T c \end{array} \]

最小化問題の解

平方完成された式を再度見てみると、\(x+d=0\)のとき\(y(x)\)が最小値\(e\)をとる。 ということは、誤差\(y(x)\)を最小化する\(x\)は\(x=-d\)のときでありこれが最適解である。 ただし、当然上に凸の二次関数では最小値はないので、条件がある。その条件は、上式を見るとわかるように\({a^{(2)}}^{-1}\)が存在することである。さらに、下に凸でなければならないので、\)a^{(2)}\)が正定値である必要もある。