こんにちは､ ディープラーニングの講座にようこそ｡
ソフトマックとクロスエントロピー関数について語る追加チュートリアルです｡
このセクションのメインである畳み込みニューラルネットワークについて説明している部分をすべて見てもらうためには､
100％必要なことではありません｡
しかし同時に､ あなたの知識やスキルのバッグに加えるには良いものだとも思ったのです｡
では､ これらの機能を掘り下げてみましょう｡
まず最初に､ このセクションのメインパートで構築した畳み込みニューラルネットワークがあり､ 最後に0に対する確率をいくつかポップアウトしています｡
犬1匹で95円､ 0円｡ 055､
猫で5％です｡
左の写真を入力とすると､ これは列車が実施された後です｡
これは実際に動いていて､ ある画像を分類しているところです｡
ここで疑問なのは､ なぜこの2つの値が足されて1つになるのか､ ということです｡
というのも､ 私たちが人工ニューラルネットワークについて学んできた限りでは､
この2つの最終ニューロンが互いにつながっているということはないのです｡
では､ それぞれがどのような値を知っているのか､ もう一方の値はどうなっているのか､ そして､
その値を足して1にすることをどのように知るのでしょうか｡
しかし､ 古典的なニューラルネットワークでは､ そうではありません｡
そして､ この状況を打開するために､ ソフトマックス関数と呼ばれる特殊な関数を導入しているのです｡
だから普通なら､ 犬や猫の神経細胞は何らかの実数値を持っているはずだ｡
Bである必要はない､ 足して1である必要もない｡
しかし､ その後に､ 上の方に書いてあるソフトマックス関数を適用すると､ これらの値が0と1の間になり､
足し算が1になるのです｡
Wikipediaを引用すると､ ソースマックス関数または正規化指数関数とは､ 任意の実数値からなるk次元のベクトルを､
0から1の範囲で足すと1になるk次元のベクトルに､ 引用符なしで押し込むロジスティック関数の一般化である､
とある｡
つまり､ 基本的には私たちが望む通りの働きをしてくれるのです｡
これらの値が0と1の間になるようにし､ 足し算が1になるようにします｡
そして､ その方法がこれであることが可能であるということです｡
それは､ こちらの下の方に､ 和算があるのがわかるからでしょうか｡
だから､ 指数をとってZのべき乗にして足し算をする｡
つまり､ Z 1はすべてのクラス､ これらの値すべてにおいて2なのです｡
これが正常化です｡
ソフトマックス機能はそういうものなんですね｡
犬と猫というクラスがあったとして､ 犬のクラスの確率が80％で､
猫のクラスの確率が45％だったら､ どんなにおかしいか､
ということです｡
そうだろ？
そんなんじゃ意味がないんです｡
したがって､ このオフマックス関数を導入すると､ 畳み込みニューラルネットワークでは､
ほとんどの場合､ このようなことが起こります｡
さて､ もうひとつは､ ソフトマックス関数とクロスエントロピー関数と呼ばれるものが密接に関係していることです｡
そして､ それは私たちにとって非常に便利なものです｡
では､ まず計算式を見てみましょう｡
クロスエントロピー関数はこのようなものです｡
実は違う計算をすることになるんです｡
今回はこのクロスエントリーの表現を使っていますが､ 結果は基本的に同じです｡
これは､ とにかく計算が楽なんです｡
そして､ これは画面上に数式が表示されるだけで､ 今とは全く関係ないと思われるかもしれませんが､
このセクションの最後に､ さらにお勧めの本があります｡
だから､ もし今､ 数学の説明がなかったら､ みたいな感じで､ 拾えなくても心配しないでください｡
しかし､ ここで重要なのは､ クロスエントロピーとは何かということです｡
まあ､ クロスエントロピー関数ですね｡
以前､ 人工ニューラルネットワークで､ 平均二乗誤差関数という関数がありましたが､ これはネットワークの性能を評価するためのコスト関数として使われていたのを覚えていますか？
そして､ ネットワークパフォーマンスを最適化するために､ MSIを最小化することが目標でした｡
まあ､ それが私たちのコスト関数だったわけです｡
また､ 畳み込みニューラルネットワークでは､ まだMSIを使うことができますが､ ソフトマックス関数を適用した後の畳み込みニューラルネットワークでは､
クロスエントロピー関数がより良い選択肢であることがわかりました｡
そして､ 畳み込みニューラルネットワークでは､ クロスエントロピー関数を適用すると､ コストはもうコスト関数と呼ばず､
損失関数と呼ばれ､ 非常によく似ています｡
ちょっとした用語の違いで､ 意味するところが少し違うような気がします｡
でも､ 私たちの目的からすると､ ほとんど同じことですし｡
損失関数は､ ネットワークのパフォーマンスを最大化するために最小化したいものです｡
では､ この機能をどのように応用できるのか､ 簡単な例を見てみましょう｡
例えば､ 犬の画像をネットワークに登録したとします｡
犬の予測値は0である｡ 9 と､ これはトレーニング中の話です｡
だから､ 私たちは､ 犬というラベルを知っているのです｡
だから､ 予測値は0である｡ 9.
猫の予測値は0である｡ 1.
それから､ ここにはラベルがあります｡
だから､ これは訓練だから犬だとわかるし､ 犬は1､ 猫は0です｡
それで､ この場合､ 使う必要があります｡
これらの数値をクロスエントロピーの計算式に突っ込んでみてください｡
では､ どのようにするかというと､ 左側の値が変数に行くのですか？
Q 右側の対数の下にあるのがPで､ 右側の値はPに入ります｡ ですから､ どれがどこに入るかを覚えておくことが重要です｡
もし間違えると､ ゼロの値から対数を取ったり､ 1の値から対数ermを取ったりしたくないですからね｡
だから､ それらを正しい場所に差し込んで､ 基本的にそれを足すだけでいいんです｡
クロスエントリーはそういう仕組みなんですね｡
そして､ 実際にこの関数を応用した具体的なステップバイステップの例を見てみましょう｡
そうすれば､ クロスエントロピーの意味がもっと理解できるようになるはずです｡
このチュートリアルでの私の目標は､
クロスエントロピーをもっと身近に感じてもらうことなのです｡
そうですね｡
怖いけど､ そうでもない
そこがポイントです｡
だから､ 怖くないということを知るために､ 応用して行きましょう｡
そこで､ ニューラルネットです｡
また､ なぜこのようなことをするのか､ なぜさまざまなクラス関数を見るのか､ その理由も説明します｡
つまり､ ニューラルネットワーク1､ ニューラルネットワーク2､ 2つのニューラルネットワークがあるとします｡
そして､ 犬の画像を渡すと､ これは犬で､ 猫ではないことがわかります｡
そして､ もうひとつの猫のイメージ......今度は動物のイメージです｡
しかも､ 犬ではなく猫です｡
そして､ ここには奇妙な姿の動物がいる｡ よく見ると､ 実は猫ではなく犬である｡
そこで､ 私たちのニューラルネットワークがどうであったかを確認したいのです｡
最初のケースでは､ ニューラルネットワーク1が90％犬10％猫で予測されます｡
正解です｡
2番目のニューラルネットワークは､ 60%犬40%猫で､ やはり正解でした｡
もっと悪いけど正しい｡
第二の選択肢 第一ニューラルネットワーク 10%猫犬 90%猫 正しい｡
しかも､ 犬3割､ 猫7割の2人分しかないんでしょ？
もっと悪いけど､ それでも正しい｡
そして最後に､ ニューラルネットワーク1が画像3のニューラルネットワーク1 40%で入っています｡
犬60%猫不正解のニューラルネットワーク2番10%犬90%猫不正解と悪化｡
つまり､ 最後の1枚ではどちらのネットワークも間違っていたにもかかわらず､ 3枚の画像を通して､ ニューラルネットワーク1がニューラルネットワーク2を上回っていたということが重要なのです｡
この場合､ ニューラルネットワークが犬に与える確率が10％であるのに対して､ 40％の確率で犬に与えるという､ 非常に高い確率のものでした｡
つまり､ ニューラルネットワーク1とニューラルネットワーク2を比較すると､ ニューラルネットワーク1が全面的に勝っているわけです｡
次に､ これまで述べてきたような､ パフォーマンスを測定するための機能を見ていきます｡
そこで､ これらを表にまとめてみましょう｡
そこで､ ニューラルネットワーク1があります｡
行番号がありますから､ それが画像番号になります｡
そして､ 画像1については､ 予測通り､ 犬90％､ 猫10％となっていますね｡
これがハット変数で､ 次に実際の値があるわけですね｡
だから
ドッグコレクト
猫 不正解｡
画像番号2も同じ､ 画像番号3も同じ､ ニューラルネットワーク番号2も同じです｡
つまり､ 最初の画像では犬60％､ 猫40％､ それが予測されたわけです｡
正解は､ 猫ではなく犬､ など｡
それでは､ 実際にどのようなエラーが出るのか見てみましょう｡
では､ どのような誤差を計算すれば､ ネットワークの性能を推定し､ 監視することができるのでしょうか｡
つまり､ エラーの1つは分類エラーと呼ばれるもので､ これは基本的に､ 正しく理解できたか､ できなかったかを問うだけのものです｡
確率はともかく､ 当たったのか､ 当たらなかったのか､ それだけです｡
つまり､ どちらのニューラルネットワークでも､ それぞれ､ 1つくらいは取れたということです｡
これだけ間違っているのだ｡
つまり､ 3つのうち1つは間違っていたわけです｡
つまり､ ニューラルネットワーク1のエラーレートは33％､ ニューラルネットワーク2のエラーレートは33％である｡
そして､ 基本的にこの観点からは､ どちらのニューラルネットワークも同じレベルのパフォーマンスを発揮するわけです｡
しかし､ それが事実でないことは分かっています｡
ニューラルネットワーク1が､ ニューラルネットワーク2を上回っていることは分かっている｡
そのため､ 特にバックプロパゲーションの平均二乗誤差が異なる目的では､ 分類誤差は良い指標とは言えません｡
ちなみに､ この計算はエクセルでやったんですよ｡
ただ､ 退屈させたくなかったんです｡
でも､ 紙やエクセルに座ってやるだけでも全然いいんですよ｡
これらは非常にわかりやすい計算です｡
基本的には二乗誤差の和をとり､ 観測値全体の平均をとればよいのです｡
といったところでしょうか｡
ニューラルネットワークの方は､ 25％ということですね｡
ニューラルネットワークの場合は､ 2つで71％です｡
エラー率｡
だから､ 見ての通り､ こちらの方が精度が高い｡
ニューラルネットワーク1は､ ニューラルネットワーク2よりもエラーレートがずっと低いということを教えてくれているのです｡ そして､ 再びクロスエントロピーが発生します｡
公式を見ました｡
計算することもできます｡
これは､ 実は平均二乗誤差よりもさらに簡単に計算できる｡
クロスエラークロスエントロピーの場合､ ニューラルネットワーク1と1では38%になります｡ 06 ニューラルネットワーク2用
そうやって見てみると､ ちょっと結果が違うのがわかると思います｡
平均二乗誤差とクロスエントロピーを比較したとき､ なぜ平均二乗誤差ではなくクロスエントロピーを使うのかという疑問は､
単に吐き出される数値のようなものだけではありません｡
この計算は､ 「これは全部できるんだ」ということを示すためのものです｡
紙の上でやればいいんです｡
これは､ あまり激しい数学ではないんです｡
これらは､ かなり､ シンプルでわかりやすいものです｡
しかし､ 「なぜ､ 平均二乗誤差ではなく､ 平均クロスエントロピーを使うのか？
とても､ いい質問だと思います｡
よくぞ聞いてくれました｡
その答えは､ 平均二乗誤差よりもクロスエントロピーの方が優れている点がいくつかあるようなのですが､ それは自明ではありません｡
そこで､ 2つほど紹介しますが､ さらに詳しい情報を得ることができる場所をお知らせします｡
その1つは､ 例えば逆伝播の一番最初の段階だと､ 出力値がとてもとてもとてもとても小さいんです｡
だから､ 実際に欲しい値よりずっと小さいんです｡
そうすると､ 最初のうちは勾配降下法の勾配が非常に低くなってしまい､ 十分な効果が得られないのです｡
そうすると､ ニューラルネットワークが実際に何かを始めて､ 動き回り､ 重みを調整して､
正しい方向に動き始めることは非常に難しくなります｡
しかし､ クロスエントロピーを使うと､ 対数を用いているため､ ネットワークが小さな誤差を評価し､
それに対して何かをするのに役立ちます｡
こんなふうに考えています｡
もう一度言いますが､ これは非常に直感的なアプローチです｡
数学とリンクしているので､ 数学を通してこれらのことをより詳細に導き出すことができますが､
非常に直感的なアプローチです｡
例えば､ あなたの好きなもの､ 欲しいものが､ 1つだとします｡
そして今､ あなたは1/1000000のところにいますよね？
A 0. 000001.
そして､ 次は100万分の1から1000分の1まで成果を上げるのです｡
また､ 二乗誤差を計算する場合､ 一方を他方から引くだけ､ つまり基本的にはそれぞれのケースで二乗誤差を計算し､
あるケースと他のケースを比較すると､ 二乗誤差があることがわかると思います｡
そんなに変わらなかったんですね｡
平均二乗誤差を見ると､ そんなにネットワークは改善されていないんですね｡
しかし､ クロスエントロピーを見ると､ 対数をとって､ 一方を他方で割って比較しているので､
実際にネットワークが大幅に改善されていることがわかります｡ したがって､ 平均二乗誤差が100万分の1から1000分の1に跳ね上がることは､
非常に少ないことがわかります｡
それは取るに足らないもので､ 勾配を高めるプロセスや逆伝播を正しい方向に導くものではありません｡
正しい方向に導いてはくれますが､ それは非常にゆっくりとしたガイダンスのようなものでしょう｡
パワーが足りなくなる｡
しかし､ クロスエントロピーを用いれば､ 絶対値で見ればほんのわずかな変化でも､
相対値で見れば大きな改善であり､ 正しい方向に進んでいると理解することができるのです｡
その調子で行きましょう｡
つまり､ クロスエントロピーは､ ニューラルネットワークが正しい状態､ 最適な状態になるのを助けてくれるのです｡
ニューラルネットワークが最適な状態になるためのより良い方法なのです｡
しかし､ これはクロスエントロピーが分類にのみ好ましい方法である場合にのみ機能することを心に留めておいてください｡
ですから､ 人工ニューラルネットワークのような回帰の話であれば､
むしろ私や二乗誤差の方がいいわけです｡
一方､ クロスエントロピーは分類に適しており､ これもソフトマック関数を使用していることと関係があります｡
それを直感的に説明したようなものですね｡
そのあたりをもう少し詳しく知りたい方におすすめです｡
なぜ､ 平均二乗誤差ではなく､ クロスエントロピーを使うのか？
Geoffrey Hinton氏のGoogle Videoにsoft max output functionと呼ばれるものがあり､ それを解説しています｡
とても良いですね｡
そして､ ディープラーニングの名付け親ということで､ とにかく誰が一番うまく説明できるかということです｡
ちなみに､ ジェフリー・ヒントン氏のビデオはどれも金字塔です｡
彼は､ 説明する才能がものすごくあるんです｡
とにかく､ ソフトマックスとクロスエントロピーの比較です｡
ここで何が起こっているのか､ 直感的に理解してもらえたと思いますが､ もっと重要なことは､ クロスエントロピーという言葉に振り回されないことです｡
なぜなら､ アドロンは実践的なチュートリアルでこのことに触れるからです｡
そして､ そのための準備も万全にしたいと思いました｡
これは損失関数を計算する別の方法で､ ネットワークを最適化する別の方法です｡
これは分類問題､ つまり畳み込みニューラルネットワークに特化したもので､ ソフトマックス関数と一緒に使うことができるのです｡
クロスエントロピーを軽く紹介したい方､ クロスエントロピーにもう少し興味がある方は､ 追加でお読みください｡
もちろん､ Rob de Pietroの「A Friendly Introduction to Cross Entropy Loss」という記事も参考になります｡
2016年 以下､ リンク先です｡
とても､ 素敵です｡
とても柔らかい｡
何もない？
いいえ､ 違います｡
超複雑計算｡
良い例えは良い例です｡
自動車に例えて､ 情報とかビットとか制限の話をするんですね｡
また､ これをどのようにエンコードするのでしょうか？
それをどのようにエンコードするのか？
それはそれは､ 良い記事を拝見させていただきました｡
そして､ クロス・エントロピーの概要もしっかりお伝えします｡
入門編ということで､ ここにあるような重い計算をしたい場合は､ How to implement
a Neural Networkの記事かブログをご覧ください｡
Intermezzo 2 Intermezzoとは､ 中間的なもので､
劇場で第一部と第二部の間に休憩があるようなものです｡
だから､ 彼はすべての段階を踏んでから､ 「ああ､ 最初にこれを説明しないといけないんだ」と言うんです｡
そうそう､ だから「インテルメッツォ」なんですね｡
それ以外の理由は､ 私が理解する限りではありません｡
記事は同じくピーター・ロリンズ2016年｡
つまり､ どちらもごく最近のことなのです｡
クロスエントロピー､ ソフトマックス､ クロスエントロピーの背後にある数学について知りたい場合は､
この記事をご覧ください｡
そうそう､ そうなんです｡
それがこの2人のすべてです｡
さらに分かりやすく説明できたと思いますので､ 頑張ってください｡
実践的なチュートリアルを楽しみながら､ It's it's going to be fun.
また今度､ お会いしましょう｡
それまでは､ ディープラーニングを楽しんでください｡