trsing’s diary

勉強、読んだ本、仕事で調べたこととかのメモ。

PRML 5.4.3~5.4.6

5.4.3 ヘッセ行列の逆行列

外積による近似を用いた場合にヘッセ行列の逆行列の近似を逐次的に計算する手順

  1. 初期値H_{0}=\alpha Iを選ぶ
  2. b_{L+1}\equiv \nabla_{w}a_{L+1}を算出する
  3. H_{L+1}を算出する(5.89)
  4. L+1=Nとなるまで2,3を繰り返す

H+\alpha I逆行列を見つけることになる

導出
外積を(5.86)と表記すると、 $$ H_{N+1}=\sum_{n=1}^{N}b_{n}b_{n}^{T}+b_{N+1}b_{N+1}^{T}=H_{N}+b_{N+1}b_{N+1}^{T} $$ これに対して行列の恒等式(5.88)を利用すると(5.89)。

5.4.4 有限幅の差分による近似

1階微分のように(5.69)有限幅の差分による近似と同じ方法で導出すると(5.90) 残留誤差はO(\epsilon^{2})、計算量はO(W^{3})

誤差関数の1階微分に中心差分を応用すると(5.91)。 計算量はO(W^{2})

(5.90)について $$ \frac{\partial }{\partial w_{ji}}\frac{\partial E}{\partial w_{lk}} =\frac{1}{2\epsilon}(E(w_{lk}+\epsilon)-E(w_{lk}-\epsilon))\\= \frac{1}{2\epsilon}\left( \frac{E(w_{ji}+\epsilon,w_{lk}+\epsilon)-E(w_{ji}+\epsilon,w_{lk}-\epsilon)}{2\epsilon}- \frac{E(w_{ji}-\epsilon,w_{lk}+\epsilon)-E(w_{ji}-\epsilon,w_{lk}-\epsilon)}{2\epsilon} \right)\\= \frac{1}{4\epsilon^{2}}\left( E(w_{ji}+\epsilon,w_{lk}+\epsilon)-E(w_{ji}+\epsilon,w_{lk}-\epsilon)- E(w_{ji}-\epsilon,w_{lk}+\epsilon)+E(w_{ji}-\epsilon,w_{lk}-\epsilon) \right) $$

5.4.5 ヘッセ行列の厳密な評価

逆伝播のテクニックの拡張を利用して任意のフィードフォワード構造を持つネットワークのヘッセ行列を厳密に求めることができる。 ネットワークの出力の関数として表すことができる微分可能な誤差関数、 微分可能な活性化関数を持つネットワーク、 にも適応できる。 計算量はO(W^{2})

(5.55),(5.56)に注意して計算する f:id:trsing:20190203155551j:plain

(5.93)について f:id:trsing:20190203155603j:plain

(5.94)について f:id:trsing:20190203155612j:plain

(5.95)について f:id:trsing:20190203155624j:plain

5.4.6 ヘッセ行列の積の高速な計算

必要となるのはヘッセ行列自体ではなく、Hとあるベクトルvの積。 v^{T}Hを計算量O(W)で評価できるアプローチを示す。

方法
\nabla E を評価するための標準的な順伝播と逆伝播の方程式を書き下し、 これに微分演算子v^{T}\nablaを作用させるとv^{T}Hを評価するための方程式の集合を得ることができる。

例) 2層ネットワーク、線形出力ユニット、二乗和誤差関数 の場合。

  1. 順伝播方程式に微分演算子を作用させる
    順伝播方程式は(5.98),(5.99),(5.100)。 これにv^{T}\nabla (以下\mathcal{R}\{\}と表記)を作用させると (5.101),(5.102),(5.103)を得る。

  2. 逆伝播方程式に微分演算子を作用させる
    逆伝播の式は(5.104),(5.105)。 これに\mathcal{R}\{\}を作用させると (5.106),(5.107)を得る。

  3. v^{T}Hの要素を得る
    誤差の1階微分は(5.108),(5.109)。 これに\mathcal{R}\{\}を作用させるとv^{T}Hの要素による式 (5.108),(5.109)を得る。

途中の式とか f:id:trsing:20190203215008j:plain

PRML 5.4~5.4.2

5.4 ヘッセ行列

目的:この節ではヘッセ行列の評価について記述する。

ニューラルコンピューティングにおいてヘッセ行列は重要な役割を持つ。役割は本文にあるとおり。

ヘッセ行列の各要素は誤差の重みに関する2階微分(5.78)。 すべての重みパラメータとバイアスパラメータを一つのベクトルwの要素w_{i}と考えるとEwで2回微分したものがヘッセ行列Hの成分H_{ij}をなすため便利。

逆伝播テクニックの拡張によりヘッセ行列を直接計算できる。どれだけ効率的に評価できるのかが重要。

5.4.1 対角近似

目的:逆行列を簡単に求めるために対角行列で近似する。

理由:ヘッセ行列の応用のいくつかにおいて、ヘッセ行列の逆行列が必要となる。

誤差関数E=\sum_{n}E_{n}について考察する。 E_{n}のヘッセ行列の対角要素は(5.79)。 右辺の2階微分を求めると(5.80)。2階微分の非対角項を無視すると(5.81)。 (5.81)の計算量はO(W)。 (5.80)の計算量はO(W^{2})

注意点:実際のヘッセ行列は非対角であることが多い(無視した項の影響が大きい)ため、計算の利便性のためだけにこの対角近似を使うのは注意

(5.79)について $$ \frac{\partial^{2} E_{n}}{\partial w_{ji}^{2}}= \frac{\partial }{\partial w_{ji}} \left(\frac{\partial E_{n}}{\partial a_{j}} \frac{\partial a_{j}}{\partial w_{ji}}\right)= \frac{\partial }{\partial a_{j}} \left(\frac{\partial E_{n}}{\partial a_{j}} z_{i}\right)\frac{\partial a_{j}}{\partial w_{ji}}\\= \frac{\partial }{\partial a_{j}} \left(\frac{\partial E_{n}}{\partial a_{j}} z_{i}\right) z_{i}= \frac{\partial^{2} E_{n}}{\partial a_{j}^{2}} z_{i}^{2} $$

(5.80)について $$ \frac{\partial^{2} E_{n}}{\partial a_{j}^{2}}= \frac{\partial }{\partial a_{j}} \left( h'(a_{j})\sum_{k}w_{kj}\frac{\partial E_{n}}{\partial a_{k}} \right)= h''(a_{j})\sum_{k}w_{kj}\frac{\partial E_{n}}{\partial a_{k}}+ h'(a_{j})\sum_{k}w_{kj}\frac{\partial}{\partial a_{j}}\frac{\partial E_{n}}{\partial a_{k}}\\= h''(a_{j})\sum_{k}w_{kj}\frac{\partial E_{n}}{\partial a_{k}}+ h'(a_{j})\sum_{k}w_{kj}\frac{\partial}{\partial a_{k}}\frac{\partial E_{n}}{\partial a_{j}}\\= h''(a_{j})\sum_{k}w_{kj}\frac{\partial E_{n}}{\partial a_{k}}+ h'(a_{j})\sum_{k}w_{kj}\frac{\partial}{\partial a_{k}} h'(a_{j})\sum_{k'}w_{k'j}\frac{\partial E_{n}}{\partial a_{k'}}\\= h''(a_{j})\sum_{k}w_{kj}\frac{\partial E_{n}}{\partial a_{k}}+ h'(a_{j})^{2}\sum_{k}\sum_{k'}w_{kj}w_{k'j}\frac{\partial^{2} E_{n}}{\partial a_{k} \partial a_{k'}} $$

5.4.2 外積による近似

二乗和誤差関数(5.82)を用いた場合、ヘッセ行列を(5.83)と書くことができる。適切に訓練されたネットワークであれば第2項を無視することができ、(5.84)と近似できる(Levenberg-Marquardt近似あるいは外積による近似)。\nabla yの計算量はO(W)で、行列の各要素はO(W^{2})

注意点:通常は第2項を無視できない。

出力ユニットの活性化関数にロジスティックシグモイド関数、誤差関数に交差エントロピー誤差関数を用いた場合、相当する近似は(5.85)。

(5.83)について f:id:trsing:20190202133829j:plain

光古戦場EX+用編成

光古戦場EX+用編成(1T1550万ダメ)

ジョブ:メカニック
EXアビ:ミスト
コンパニオン:エナジーマニューバ、アタックチップx2、タンクチップx2
f:id:trsing:20190201124658j:plain

リミボ

弱体成功率、奥義ダメージ、ダメージ上限、チェインバースト
f:id:trsing:20190201124447j:plain

キャラ

最終ソーン、クラリス、フェリ、サポに光シルヴァ
f:id:trsing:20190201125031j:plain

装備

f:id:trsing:20190201124155p:plain

f:id:trsing:20190201124118p:plain

ダメ

8ぽち(主人公1,2,4(ミスト)、ソーン2,3、クラリス1,2、フェリ2)1召喚
f:id:trsing:20190201125708j:plain

結局テンプレ編成になった…

PRML 5章演習問題 5.14,5.15

演習5.14

E_{n}(w)をある点w=\hat{w_{ji}}テイラー展開すると $$ E_{n}(w)\simeq E_{n}(\hat{w_{ji}})+(w-\hat{w_{ji}})^{T}E'(\hat{w_{ji}})+\frac{1}{2}(w-\hat{w_{ji}})^{T}E''(\hat{w_{ji}})(w-\hat{w_{ji}})+O(|w-\hat{w_{ji}}|^{3}) $$ w=\hat{w_{ji}}+\epsilon (w_{ji}成分のみ\epsilonだけ変動)とすると $$ E_{n}(\hat{w_{ji}}+\epsilon)\simeq E_{n}(\hat{w_{ji}})+\epsilon E'(\hat{w_{ji}})+\frac{1}{2}\epsilon^{2}E''(\hat{w_{ji}})+O(\epsilon^{3}) $$ よって $$ \frac{E_{n}(\hat{w_{ji}}+\epsilon)-E_{n}(\hat{w_{ji}}-\epsilon)}{2\epsilon}= \frac{1}{2\epsilon} (E_{n}(\hat{w_{ji}})+\epsilon E'(\hat{w_{ji}})+\frac{1}{2}\epsilon^{2}E''(\hat{w_{ji}})+O(\epsilon^{3})\\ \hspace{130pt}- (E_{n}(\hat{w_{ji}})-\epsilon E'(\hat{w_{ji}})+\frac{1}{2}\epsilon^{2}E''(\hat{w_{ji}})+O(\epsilon^{3})))\\= \frac{1}{2\epsilon} (2\epsilon E'(\hat{w_{ji}})+O(\epsilon^{3}))\\= E'(\hat{w_{ji}})+O(\epsilon^{2}) $$

演習5.15

次のようなネットワークを考える f:id:trsing:20190129231819j:plain ヤコビ行列は $$ J_{k'i'}=\frac{\partial y_{k'}}{\partial x_{i'}} $$ x_{i'}が変化するとa_{l}まで伝播するので $$ J_{k'i'}=\frac{\partial y_{k'}}{\partial x_{i'}}=\sum_{l} \frac{\partial y_{k'}}{\partial a_{l}}\frac{\partial a_{l}}{\partial x_{i'}} $$ \frac{\partial y_{k'}}{\partial a_{l}}は、各出力ユニットが個々にシグモイド活性化関数を持つ場合には(5.75)、ソフトマックス関数を持つ場合には(5.76)となる。

x_{i'}が変化するとa_{m}まで伝播するので $$ \frac{\partial a_{l}}{\partial x_{i'}}=\sum_{m}\frac{\partial a_{l}}{\partial a_{m}}\frac{\partial a_{m}}{\partial x_{i'}} $$ a_{l}=\sum_{m}w_{lm}z_{m},\,z_{m}=h(a_{m})より $$ \frac{\partial a_{l}}{\partial a_{m}}=w_{lm}h'(a_{m}) $$ \frac{\partial a_{m}}{\partial x_{i'}}は…と同様にしていくと $$ \frac{\partial a_{j}}{\partial x_{i'}}=\frac{\partial \sum_{i}w_{ji}x_{i}}{\partial x_{i'}}=w_{ji'} $$ ここから開始して計算できる。

PRML 5.3.2~5.3.4

5.3.2 単純な例

誤差逆伝播の例を示す。
・2層ネットワーク(図5.1)
・2乗和誤差関数(5.61)
・出力ユニットは線形活性化関数
・隠れユニットはシグモイド活性化関数(5.58)
シグモイド関数微分は(5.60)。演習5.8参照

1.順伝播を実行する。(5.62)(5.63)(5.64)
2.出力ユニットの\delta_{k}を計算する。(5.65)
3.逆伝播により隠れユニットの\deltaを得る。(5.66)
4.誤差関数の各重みに関する微分を評価する。(5.67)

5.3.3 逆伝播の効率

目的:逆伝播法を用いて誤差関数を一度評価するのに必要な計算量を求める。

結果:O(W)

詳細

逆伝播法の最も重要な側面の1つは計算上の効率の良さ。 誤差関数の微分を評価するのに必要な計算量を確認する。
※ネットワークの重みとバイアスの総計をWとする。

順伝播の計算量

(5.48)と(5.49)だが、重み数がユニット数よりもはるかに多いのが一般的なので、(5.48)の和の評価に関するものが大部分となる。すべてのユニットで(5.48)をとると重み数だけ評価するため計算量はO(W)

図1を考えるとユニット数はM+1+K。重み数は(D+1)M+(M+1)K

逆伝播の計算量

(5.56)。これも和の評価が大部分となる。入力と第1層間の重み数はないが、計算量はO(W)。 ※出力ユニット分(5.54)はK<<W

誤差関数の微分の計算量

(5.53)。これが重み数だけあるため計算量はO(W)

よって逆伝播法を用いて誤差関数を評価する場合計算量はO(W)+O(W)+O(W)=O(W)

逆伝播法以外のアプローチ

有限差の差分による近似(5.68)。誤差はO(\epsilon)。 精度がいる場合は中心差分(5.69)を用いれば良い。誤差O(\epsilon^{2})。ただし計算量は(5.68)のおおよそ倍。

順伝播(E_{n}(w_{ji}+\epsilon))でO(W)。 これを重み数だけ計算するため計算量は全体でWO(W)=O(W^{2}

5.3.2 ヤコビ行列

目的:逆伝播のテクニックをヤコビ行列の評価に応用する。

結果:(5.73)と(5.74)。 各出力ユニットが個々にシグモイド活性化関数を持つ場合は(5.75)、ソフトマックス関数を持つ場合は(5.76)。

詳細
ヤコビ行列について

たくさんの異なるモジュールで構成されたシステムにおいて、例えば図5.8において誤差関数E微分は(5.71)となりヤコビ行列が現れる。

ヤコビ行列がわかっていれば入力に任意の既知の誤差\Delta x_{i}がある場合、出力誤差への寄与\Delta y_{k}を評価することができる(5.72)。一般に、ヤコビ行列は定数ではなく用いた入力ベクトルに依存するため、新しい入力ベクトルに対してヤコビ行列そのものを再評価する必要がある。

逆伝播を応用した評価方法

隠れユニット2層の3層ネットワークのx_{i}からy_{k}までの流れはたぶん次図みたいな感じ。 f:id:trsing:20190127201447j:plain

要素J_{jk}について考えると(5.73)となる。
※(5.48)により\frac{\partial a_{j}}{\partial x_{i}}=w_{ji}

\frac{\partial y_{k}}{\partial a_{j}}は(5.74)となる。
※(5.48),(5.49)により 
\frac{\partial a_{l}}{\partial a_{j}}=
\sum_{i} w_{li} \frac{\partial h(a_{i})}{\partial a_{j}}=
w_{lj} h'(a_{j})

この逆伝播は出力ユニットから始まり、そこでの微分は出力ユニットの活性化関数の関数形式を直接微分をして求める。

ユニットが個々にシグモイド化関数を持つ場合y_{k}=\sigma(a_{k})より(5.75)。

ソフトマックス関数を持つ場合には y_{k}=\frac{\exp(a_{k})}{\exp(a_l)} より(5.76)。
\delta_{kl}クロネッカーのデルタであることに注意

ヤコビ行列を評価する手続き

  1. 入力をネットワークに入れて順伝播させてすべての隠れユニットと出力ユニットの出力を得る。
  2. \frac{\partial y_{k}}{\partial a_{l}}を求める。
  3. 再帰的な関係式(5.74)を用いてネットワーク内のすべての隠れユニットを逆伝播させる。
  4. (5.73)を用いて入力への逆伝播を行う。
  5. kを変更しながら2~4を繰り返す。

※2~4でヤコビ行列のk行が求まる

今年の目標

すでに1月後半と今更?という時期ですが。
年末年始は忙しかったのです。実家に顔出して艦これJazzフェス行って艦これイベントして(掘り完了ならず)古戦場と大忙しだったのです…。

艦これJazzフェス大変良かったですね。交通宿泊飲食費含めて6万近くかかったけど実質タダに感じましたはアレ。JazzにタップダンスにMCに和太鼓に瑞雲に陸戦型フィギュア選手にバレエにToshlにサックスに海月夜に二期にと情報量多すぎて消化しきれずしばらくは「すごい・・・」しか言えませんでした。語彙完全死亡。また行きたい。円盤出してー

というわけで以下今年の目標。

PRML上下巻読破

今の調子でまとめながらちょっとずつ。時間はかかるけど読むだけよりははるかに理解できてる気がしますので。たぶん。別に仕事で使うわけでもなく完全に趣味なので好きなペースでれるのが良いですね。

積み本消化

一杯残ってますね。増えますし。ツイッタなどでよさげな人が好さげな本をお勧めしてるとつい。主に電子書籍版があるのでスペースを取らないのが良いですがちょっと寂しさもある。

積み本一覧

  • ファスト&スロー
  • 人生は、運よりも実力よりも「勘違いさせる力」で決まっている

認知を扱ったもの好きですね。影響力の武器とか。

  • エンジニアを説明上手にする本

資料作成とかある程度時間を取って練れるものだとかなりましなのですが基本的に説明下手なんですよね。特に口頭だとかなりひどくなりがち。

確率はもうちょっとやっていきたい。

業務では改造が多いので範囲が狭く、つまみ食いになりがち。いろいろやっていきたい。

  • 最速でおしゃれに見せる方法

そろそろ人並みの格好を…。今は地味目の二色刷りで生きてます。

  • 「キャラの背景」描き方教室

今年こそ少しくらいお絵かきできるようになりたいですね。

筋トレ

去年の2月から自重トレ開始しました。そろそろ一年。この調子で続けてこー。

何か作る

ソフト。仕事だと範囲狭いし。仕事じゃなくても入門書読んでちょっと触って終わりということが多いのですよね。何か作りたいというのはあってもこれを作りたいというのがない。何がいいかな?何らかのWebサービスVRやりたいなあ。

お絵かき

今年こそ少しくらいお絵かきを・・・と毎年のように言ってます。

転職

これも毎年のように言ってる気がしますが。
2年ほど前に2,3年という条件で異動になりましたが戻れる見込み全くなし。この件含め会社側の不誠実な態度には心底嫌気がさしてます。

ソフトを軽視する姿勢だしこの会社だからこそ得られるってものが技術的にはもうないのですよね…。

PRML 5.3~5.3.1

5.3 誤差逆伝播

本節での目標:フィードフォワードニューラルネットワークについて誤差関数E(w)の勾配を効率よく評価するテクニック(誤差逆伝播)を見つけること。

ほとんどの訓練アルゴリズムでは誤差関数を最小化するための反復手続きがある。次の2つの手続きを繰り返す

  1. 誤差関数の重みに関する微分を評価
  2. 微分を用いて重みの調整量を計算

逆伝播テクニック:微分の評価において計算論的に効率な方法を提供。多層パーセプトロンだけでなく、ほかの種類のネットワーク、二乗和誤差以外の誤差関数にも応用可能。ヤコビ行列やヘッセ行列のようなほかの微分の評価にも用いることができる。

微分を用いて重みを調整する最も単純なテクニックは勾配降下法が関係している。単純な勾配降下法よりも強力な最適化のスキームが存在し、使用することができる。

5.3.1 誤差関数微分の評価

次の条件のネットワークについての逆伝播アルゴリズムを導出する。

逆伝播アルゴリズム:p.246上部の誤差逆伝播のとこ

導出

誤差関数を訓練集合の各データに対応する誤差関数の項の和(5.44)として表すことができるものが対象。また、出力ユニットは正準連結関数を活性化関数に用いているとする。

一般のフィードフォワードネットワークについて考える。あるユニットjへの入力側と繋がっているユニットをi。すると、a_{j}は(5.48)となる。また、出力側と繋がっているユニットをkとする。図5.7を参照。

E_{n}(w)の重みw_{ji}に関する微分の評価を考える。w_{ji}からネットワークへの出力へはa_{j}を通してのみなので偏微分の連鎖法則により(5.50)となる。また、(5.48)より(5.52)なのでE_{n}(w)w_{ji}に関する微分は(5.53)とかける。

\delta_{j}を求める。
ユニットjが出力ユニットの場合:正準連結関数を活性化関数に用いているので(5.54)となる。

隠れユニットの場合:a_{j}からネットワークへの出力は出力側の接続a_{k}を通してなので(5.55)となる。
ここで、 $$ \frac{\partial E_{n}}{\partial a_{k}}=\delta_{k}\\ \frac{\partial a_{k}}{\partial a_{j}}=\frac{\partial \sum_{i}w_{ki}z_{i}}{\partial z_{j}}\frac{\partial z_{j}}{\partial a_{j}}=w_{kj}\frac{\partial h(a_{j})}{\partial a_{j}}=w_{kj}h'(a_{j}) $$ より(5.56)。

出力側の\deltaがわかれば\delta_{j}を求めることができる。(5.54)より出力ユニットの\deltaを求めることが出きるため、出力ユニットから入力側に向かって計算していく(逆伝播)。