こんにちは､ ディープラーニングの講座にようこそ｡
今日のチュートリアルでは､ 勾配降下法について説明します｡
前回学んだのは､ ニューラルネットワークが学習するために必要なのは､ 逆伝播であるということです｡
そして､ このとき､ y hatとyの誤差､ 差または2乗和がニューラルネットワークに逆伝播され､
それに応じて重みが調整される｡
それを見て､ 今日はこのウェイトがどのように調整されているのかを具体的に学びます｡
では､ 見てみましょう｡
これは､ パーセプトロン､ つまり単層のフィードフォワード・ニューラルネットワークの非常にシンプルなバージョンです｡
このように､ 入力値があり､ 重みがあり､ 活性化関数が適用される､ という一連のプロセスを見ることができるのです｡
ホワイトハットを取得した上で､ 実際の値と比較するのです｡
コスト関数を計算する｡
では､ どうすればコスト関数を最小化できるのだろうか｡
どうしたらいいのでしょうか？
そのための1つの方法として､ さまざまな重みの候補をすべて取り出して､ どれが最も効果的かを検討するブルートフォース・アプローチがあります｡
そして何をするかというと､ 例えば1000個の重みで試して､ モデルを作ってみるのです｡
コスト関数はこんな感じになりますね｡
そして､ これはY軸にコスト関数､ つまり縦軸をとったグラフです｡
横軸はyハットで､ 式はyハットからyの2乗を引いたものですから､ コスト関数はこんな感じでしょうか｡
そして､ 基本的に一番いいのはこっちだと思うんです｡
とてもシンプルで､ 直感的なアプローチですね｡
なぜ､ このブルートフォース方式を行わないのか？
1000種類のコスト､ 1000種類のパラメータ､ 重みのインプットを試して､ どれが一番うまくいくかを見ればいいじゃないですか｡
そうすれば､ ベストな1台が見つかるはずです｡
まあ､ 最適化する方法が1つだけなら､ これでもいいかもしれませんね｡
しかし､ 重みの数を増やし､ ネットワークのシナプスの数を増やすと､ 次元の呪いに直面することになる｡
それで､ 次元の呪いとは何でしょうか？
このことを説明するには､ 実例を見るのが一番です｡
ニューラルネットワークがどのように機能するかについて話したときの例ですが､ 不動産評価のためにニューラルネットワークを構築したり､
実行したりしたときのことを思い出してください｡
もう鍛え上げられたらこんな感じなんですね｡
まあ､ 以前から訓練されていないときは､ 以前から訓練されているんですけどね｡
重みのどれかがわかっている､ 実際のニューラルネットワークはこのようになっています｡
そうですね､ さまざまなシナプスの可能性があるわけですが､ それでもウェイトをトレーニングしていかなければなりません｡
そしてここでは､ 最初に5個を4回､ さらに隠れ層から出力層まで5個､ 合計25個の重みが設定されています｡
そして､ 25個のウェイトをブルートフォース（総当り）することが可能かどうか､ 見てみましょう｡
これは非常にシンプルなニューラルネットワークで､ とてもシンプルです｡
隠れ層は1つだけ｡
そして､ このサイズのニューラルネットワークを､ どうやってブルートフォースで突破するのか？
では､ 簡単な数学の計算をしてみましょう｡
25個のウェイトを用意しています｡
つまり､ すべての重さについて試す組み合わせが1000通りあるとすると､
組み合わせの総数は1000の25乗､ あるいは1000の10乗､ あるいは75乗となります｡
では､ 2016年6月現在､ 世界最速のスーパーコンピュータにタイトルライトするサンウェイを見てみましょう｡
この問題に対して､ どのようにアプローチするのでしょうか｡
そうですね｡
だから､ 何らかの方法で光に結びつけると､ このようになります｡
このスーパーコンピュータ1台のために､ 巨大なビルが建っているようなものです｡
そして､ 最速のスーパーコンピューターとしてギネス世界記録を取得しました｡
今現在､ 世界最速のスーパーコンピューターです｡
そして､ Sunway Tiger Lightは93ペタFLOPSの速度で動作させることができます｡
フロップとはfloating operation per secondの略で､ 1秒間に93乗×10乗の15回の浮動小数点演算を行うことができる｡
それくらい､ 比較にならないほどの速さなのです｡
今の平均的なコンピューターは､ 数ギガフロップ強といったところでしょうか｡
だから､ サンウェイ・トワイライトよりもずっと低いレンジのようなものです｡
つまり､ サンウェイ・トワイライトはテクノロジーの最前線にいるわけです｡
そして､ 仮に1フロップでニューラルネットワークの1つのテスト､ 1つの組み合わせを行うことができるとしましょう､
基本的には1回の浮動小数点演算で｡
それは無理な話です｡
ニューラルネットワークの1つの重みを試すのに複数の浮動小数点演算が必要なため､ 実用的ではありません｡
でも､ let'sでも先手を打ちましょう｡
仮に理想的な状態でできるとしましょう｡
それを1回のフローティング操作で行うことができる｡
1回のフローティング動作で1回のテストが可能です｡
つまり､ そのネットワークをブルートフォースで突破するためのテストをすべて実行するには､ 75の10乗÷93倍､
10〜バー､ 15秒の時間が必要なのです｡
つまり､ 1かおよそ10の58秒乗で､ 10の50年乗と同じということです｡
これは大きな数字です｡
それは､ 宇宙が存在するよりも長い時間です｡
そしてそれは､ 単純にこの数字が巨大であるということでは絶対にないでしょう｡
ただ､ 私たちの最適化にはまったく通用しないことは確かです｡
そうそう､ そうなんです｡
これはダメなんです｡
世界最速のスーパーコンピューター「サンウェイ」のタイトルライトでも｡
だから､ 別の方法を考えなければならない｡
どうやって最適な重さを探すのか？
ところで､ この私たちのニューラルネットワークは､ とてもシンプルなものでした｡
ニューラルネットワークがこんな感じだとしたらどうでしょう？
あるいはそれ以上のことも､ そう､ まったく起こらないんです､ 絶対に｡
そこで､ これから見ていくのは､ 勾配降下法という方法です｡
と､ もうお聞きになったかもしれませんね｡
そうでない場合は､ 今すぐ原因を突き止めます｡
これでコスト関数ができたわけですが､ 次はこの関数をより速く求めるための里親を見つける方法を見ていきましょう｡
最高の選択肢です｡
では､ どこかから始めるとしましょうか｡
どこかで始めなければならない｡
そこで､ 左上の点から始めて､ その点でのコスト関数の角度を見ます｡
だから､ 基本的にグラデーションと呼ばれるのは､ 微分しなければならないからです｡
数式を見るつもりはない｡
次回の講義の最後に､ 副読本のヒントを提供する予定です｡
しかし､ 基本的には微分して､ その特定の点での傾きを求め､ 傾きが正か負かを調べればいいのです｡
傾きが負の場合は､ このケースのように､ 下り坂になることを意味します｡
つまり､ 右は下り坂､ 左は上り坂ということです｡
そして､ そこから右に行く必要があるということです｡
基本的には､ 下り坂を進む必要があるので､ そのつもりで｡
部屋は一歩を踏み出す､ か｡
ボールは再び転がり落ちる｡
同じことです｡
傾きを計算するのです｡
今度は傾斜が正で､ 右が上り坂､ 左が下り坂なので､ 左に行く必要があり､
ボールを転がすと下り坂､ また傾斜を計算して､ ボールを右に転がすと下り坂になります｡
これでよしとしよう｡
つまり､ 簡単に言えば､ コスト関数を最小化する最適なウェイト､ 最適な状況を見つける方法です｡
もちろん､ ボールのようになるわけではありません｡
転がりながらだとジグザグになりますが､ ボールが転がっていると思えば覚えやすいし､
楽しいですよ｡
でも実際は､ そう､ 一歩一歩近づいていくような感じなんですね｡
だから､ ジグザグ型の方法になるんです｡
そうですね｡
また､ それ以外にもさまざまな要素があります｡
例えば､ 「なぜ下がるのか」というようなことです｡
なぜ､ 線上に消えるようなことはないのでしょうか？
だから､ この中から飛び出して､ 下ではなく上に行ったりしていたかもしれない｡
つまり､ 微調整が可能なパラメータなのです｡
また､ その詳細については､ どこで確認できるかを記載します｡
そしてさらに､ これを実用化しつつ､ 最もシンプルな直感的アプローチで実現します｡
これが現状です｡
何千何万､ 何百万､ 何十億､ 何千何億という組み合わせをブルートフォースでこなすのではなく､
どの方向に進むべきかを理解するだけで､ 底上げができるのです｡
どこに何があるのか､ どの方向に傾斜しているのか､ 毎回シンプルに確認することができるのです｡
丘の上に立っていると想像して､ どっちに下っていると感じるか､ どっちに下っていても､
その道を歩き続けるんだ｡
そうやって50歩進んで､ また評価をして､ どっちに進んでいるのか､ という感じですね｡
下向きはこっち｡
では､ 50歩以内を目安にしてください｡
そうやって40歩ずつ､ 近づくにつれてどんどん少なくなっていくんです｡
そこで､ 2次元空間に勾配降下を適用した例を紹介します｡
一次元的な例だったんですね｡
ここでは､ 勾配降下のための2次元空間を用意した｡
見ての通り､ 最小値に近づいています｡ コスト関数の最小値に向かって降下していくので､
勾配降下法とも呼ばれます｡
そして最後に､ 3次元で適用したグラディエントディセントを紹介します｡
このような感じです｡
二次元に投影すると､ 最小値にジグザグに入り込んでいるのがわかります｡
それでは､ どうぞ｡
以上､ 勾配降下法でした｡ チュートリアルでは､ このチュートリアルの続きとして､ 確率的勾配降下法についてお話したいと思いますので､
よろしくお願いします｡
というわけで､ 次回はディープラーニングをお楽しみください｡