chakokuのブログ(rev4)

テック・コミック・ごくまれにチャリ

ゼロから作るDeep Learningを購入

DeepLearningがいろんなところで取り上げられていて、よく講習会等にも参加した。DeepLearningのフレームワークとして、Caffe、TensorFlow、Chainer等があって、それぞれの使い方もいろんなサイトで紹介されているし、情報処理学会セミナーでも、あれをこう使ってどうやってたらこうなったという話を聞いた。いろんなセミナーで説明を聞いても、半分ぐらいしかわからなかった。どうやったらできましたというネットワークの実装結果は聞くとまぁそれとなくわかるけど、もし自分で実装するならどうする?と考えると、なぜそれを選ぶべきなのか?が分からなかった。何層にするのか、プーリング層をどうやって選択するのかとか、どんなアルゴリズムを使うのかとか、、
分からない理由を考えると、理由の一つは、最適なネットワーク構成を決めるのは試行錯誤の結果であって、設計で決まるものではなさそうだという点。もう一つの理由は、それぞれの理論が自分はいまいち分かっていなくて、根本原理が分からないからどうやって使い分けるのがいいのかも分からないということ。そんな中、フルスクラッチでDeepLearningを作りましょうという本が出て、結構評判が良いので買ってみた。

パラパラっと読んだだけですが、、この本の構成とポイントは以下

少しずつ読んでいますが、この本で偏微分というのがやっと理解できました。偏微分は2変数の微分で、1変数を固定するということまでは分かっていましたが、Matplotlibでの立体グラフが掲載され、XYZ空間での傾きなのだということが分かりました(50になってやっと理解)。
一方、計算グラフも正方向は分かるけど、逆方向はなぜ微分なのかが分からず。。逆方向は逆関数ではないのか!?(逆方向は本質的に微分と等しいのか、それとも、逆方向は微分と定義しているのか、どっちなのか分からない)。。今悩み中

とにかくこの本を全部読んで全部実装すれば俺ディープラーニングが作れると信じてもうちょっと勉強を続ける予定でございます。

■追記(161015)
下記の計算グラフの微積分をちょっと読んで理解したのは、、「ゼロから作る」で言及している、計算グラフの微分(5.2.1計算グラフの逆伝播(P129))とは、計算グラフの計算式に微分を適用したらどういう事実が得られるか、もしくは、どういう使い道があるか?という説明であって、計算グラフを逆向きに辿ること自体が偏微分に一致するというわけではないということ。分かってみれば当たり前と言えば当たり前で、、関数を逆に辿って得られるのは逆関数であって、偏微分ではない。。

■ご参考URL
計算グラフについて詳細に説明しているサイト
計算グラフの微積分:バックプロパゲーションを理解する(postd様)
http://postd.cc/2015-08-backprop/
これをしっかり読めば、逆方向は偏微分というのが理解できるかも!?

金沢工業大学偏微分のページ
http://w3e.kanazawa-it.ac.jp/math/category/bibun/henbibun/henkan-tex.cgi?target=/math/category/bibun/henbibun/index.html

■TT(仮)氏からのコメント追加(2016/10/22)

知人のTT(仮)氏から本文へのコメント(補足説明)をもらったので参考になるようこちらに転記します。
〜〜ここから〜〜
(その1)
> 偏微分は2変数の微分で、1変数を固定するということまでは分かっていましたが、

・「2変数の微分」というのは正確では無くて、多変数ですね。極端に言えば10000変数でも可能ですよ。
・「1変数を固定する」というよりは、「着目している1変数以外の全変数を固定する」という訳で。
着目している変数1個のみが変化した場合の微分係数ということで。

(その2)
> XYZ空間での傾きなのだということが分かりました

w = f(x,y,z) という3変数のスカラー関数があったとして、 (x,y,z,w) の4次元空間に存在する wという曲面上で、(図に描けませんが)
∂f/∂x は、xのみが変化した場合、xの変化する方向に沿った方向の微分係数(傾き)
∂f/∂y は、yのみが変化した場合、yの変化する方向に沿った方向の微分係数(傾き)
∂f/∂z は、zのみが変化した場合、zの変化する方向に沿った方向の微分係数(傾き)

で、普通は(?)、それぞれの傾き具合は相互に独立で異なっています。
そのため、曲面wのある点(x,y,z)での傾きとしては
∇f = [∂f/∂x, ∂f/∂y, ∂f/∂z]
というベクトルで表されます。これが勾配ベクトルですね。

ーーーーーーーー

変数を3個にしてしまったために、4次元空間になって 図で描けない例ですみません。

んで、maximaを使ってグラフを描いてみました。
z = x^2-y^2
の2変数のスカラー関数ですが、この曲面上で黄色と赤色の線が クロスしている点(の近傍)で考えると
xのみ変化した場合:zの値は黄色線に沿って変化する
yのみ変化した場合:zの値は赤色線に沿って変化する
という訳で、クロスしている点における各偏微分(偏微分係数)の値は
∂z/∂x :黄色線の方向に一致した接線の傾き
∂z/∂y :赤色線の方向に一致した接線の傾き
となります。図から明らかなように、それぞれの接線の傾きの大きさは異なっていて 1個(1種類)の傾きの値としては表現できません。 なので、通常は
∇z = [∂z/∂x, ∂z/∂y]
のように、2種類(2方向)の傾きを表している偏導関数の組み(ベクトル)として表現しています。これを勾配ベクトルと呼びます。 (超いいかげんな説明ですみません)
〜〜ここまで〜〜
詳細な説明ありがとうございます。染み込むのに時間かかりますが、概念的には理解しました。
で、、普通に学ぶ、dy/dxという微分は、変数が一つの偏微分と解釈してもいいのでしょうか??
dx と∂xは、本質的に違うものなのかどうか。。dxからみて、∂xは上位概念と理解してOK??
日本語で喋らず、定理で証明して確認しろよ。。とか!?