こんにちは､ ディープラーニングの講座にようこそ｡
前回のチュートリアルで､ 畳み込みニューラルネットワークがどのようなものかを知りましたが､
今日はステップ1の畳み込みに飛び込みます｡
これが畳み込み関数ですね｡
私たちは数学を避け､ 直感的に理解することを心がけていますが､ この公式はとてもシンプルなので､
紹介せずにはいられませんでした｡
畳み込みは基本的に2つの関数の複合積分であり､ 一方の関数が他方の関数をどのように修正するか､ あるいは他方の関数の形状をどのように修正するかを示すものである｡
そして､ 信号処理や電気工学､ 信号処理が必要な職業に就いている人なら､ 必ずと言っていいほどコンボリューション関数に出会ったことがあるのではないでしょうか｡
今､ かなり人気がありますね｡
もう一度､ 数学を軽くするか､ 分けて考えるか｡
また､ 畳み込みニューラルネットワークの背後にある数学に触れたい方は､ 中国の南京大学の教授であるJanson
Wuの「Introduction to Convolutional Neural Networks」を追加で読むとよいでしょう｡
この論文は文字通り数日前､ 5､ 6日前に発表されたもので､ 特に初心者の方､ 畳み込みニューラルネットワークを知ろうとする方に向けられています｡
だから､ そこにある数学はアクセスしやすいものでなければならない｡
実際にジョンソン・ウー教授にメールしてみたところ､ そうですね､ 複雑なものを初めて見る人にもわかるように落とし込むことが全体の目標だとおっしゃっていました｡
また､ ホームページで資料が公開されているとのこと｡
URLの最後の2つの部分を削除して､ その部分にスラッシュWJ Xのようにアクセスすると､ そこが彼のホームページで､
さらに追加のチュートリアルや論文として発表されていない資料が見つかりますが､
彼はそれらをチュートリアルに使っているので､ 役に立つかもしれません｡
畳み込みニューラルネットワークの背後にある数学に触れ､ その分野の基礎を固めたい方は､
このあたりをご覧ください｡
でも､ これから移動して､ コンボリューションの話をするんだ｡
では､ 直感的に畳み込みとは何だろうか｡
左側には､ 先ほど説明したように入力画像があります｡
そんな感じで､ 画像は1と0だけで､ シンプルに見ていくことにします｡
そして､ そこにスマイリーフェイスがあるのがお分かりいただけると思います｡
続いて､ 特徴検出器です｡
つまり､ 特徴検出器は3×3の行列である｡
3×3でなければならないのでしょうか？
いいえ､ そんなことはありません｡
アレックス・ネットは7×7で､ 他の有名なものは5×5のフィーチャーディテクターを使っているようです｡
異なる場合もありますが､ 通常は3×3であることがわかり､ 3×3にする理由があります｡
そこで､ 3×3の特徴検出器を持つという慣習にこだわります｡
また､ 特徴検出器は､ 特徴検出器と呼ばれることもあります｡
あるいは､ カーネルと呼ばれることもあれば､ フィルターと呼ばれることもあるでしょう｡
そこで､ この講座では､ フィルタと特徴検出器のどちらかを使い分けることにします｡
ただ､ そういう名前がついていることと､ 畳み込み演算は､ 前やここの式で見たように､ 丸に×印で示されることだけは覚えておいてください｡
何が起こるかは直感的なレベルで､ すべて､ あるいは数学ではなく､ 背景で実際に起こっていることで考えるだけです｡
この特徴検出器やフィルターを､ 左の写真のように画像に貼り付けます｡
例えば､ この場合､ 左上隅をカバーすると､ 左上隅には9ピクセルがあるわけです｡
そして､ 基本的には各値に各値を掛けていく｡
だから､ それぞれの価値観｡
つまり､ 左上の値で上のゼロ､ それから基本的にポジション番号1､ ポジション番号1で1､ 数字で1ポジション､
ゼロでゼロ1､ ゼロ2で102､ といった具合になります｡
つまり､ これらの行列を要素ごとに掛け合わせ､ その結果を足し合わせるだけです｡
この場合､ 何も一致しないわけです｡
つまり､ 常にゼロバイゼロのゼロバイワンのどちらかなんです｡
だから結果はゼロ｡
ここでは､ そのうちのひとつ､ 左のものがマッチングしたことがわかります｡
そのため､ ここに1枚を用意しました｡
何もマッチングしない､ 何もマッチングしない､ 何もマッチングしない｡
そして､ 次の行に進みます｡
このフィルター全体を動かすステップをストライドと呼びます｡
そこで､ ここでは1ピクセルのストライドを確保しています｡
右下はストライドとマッチングしていますが､ 真ん中の下はここでマッチング､
右上は1マッチング､ そして何もマッチングしていない状態です｡
ストライドは1本｡
ストライドを変えてもいいし､ 1本にしても2本にしても､ 3本にしてもいい｡
が好きなら何でもいい｡
結局､ うまくいくのはたいてい2なんです｡
だから､ みんなそこにこだわっているんですね｡
そして､ このチュートリアルの最後に､ ストライドが何であるかについて説明します｡
だから､ ここで私たちはマッチングしているのです｡
だから､ ここをひたすら進むんです｡
2つがマッチしているから2があるのがわかる､ などなど｡
そして､ そこに行く｡
もうひとつ､ マッチングしたものがあるんです｡
これでよしとしよう｡
そして､ 完成したのです｡
それがどうした？
私たちは何を作ってきたのか？
そうですね｡
ここで重要なことが2つあります｡
右の画像はフィーチャーマップと呼ばれるものです｡
また､ いくつかの用語があります｡
また､ 時に制御された機能と呼ぶこともできます｡
だから､ 何かにコンボリューション演算オペレータを適用したとき､ それはコンボリューションになるのではなく､ インボルブになるのです｡
そうそう､ 時々､ 好きだ､ と間違った言い方で自分でも思うことがありますが､ 正しい言い方です｡
関与しているのは､ ある種古い機能というか､ アクティベーションマップとも言えますね｡
でも､ この講座ではフィーチャーマップと呼ぶことにしているので､ どれでもいいんです｡
そして､ 私たちはここで何をしたのか？
さて､ ご覧の通り､ 画像のサイズを小さくしました｡
それが1番です｡
そして､ 入力画像と特徴量検出と歩幅について､ これが重要なことを言いたかったんですね｡
ストライドが1だと少し縮小して見えますが､ ストライドが1､ 2だともっと縮小して見えます｡
そのため､ 特徴マップはさらに小さくなります｡ この畳み込みステップ全体の特徴検出器の非常に重要な機能は､
画像を小さくすることです｡
なりますし｡
このように､ 7×7の画像を想像すると､ 彼はまさに里親のような存在でしょう｡
でも､ ちゃんとした写真があったらと想像してみてください｡
あるいは､ 256×256ピクセルの画像のようなものです｡
256の2乗とか､ 300×300ピクセルのような膨大なピクセル数です｡
だから､ GB256と混同しないように｡
サイズとピクセル数で300×300の画像があるとします｡
そうすると､ 300の2乗の画素数があるわけですから､ ものすごい数です｡
そのため､ 特徴検出器は画像サイズを小さくすることになるので､ ストライドが2であることが実は有利なのです｡
しかし､ そうなると､ 特徴量検出器を適用する際に､ 情報を失っているのか､ それとも､ 情報を失っていないのか､ という問題が出てきます｡
もちろん､ 結果として得られる行列の値が少なくなるため､ 失う情報もある｡
しかし同時に､ 特徴検出器の目的は､ ある特徴､ つまり画像のある部分を一体として検出することです｡
それで､ 例えば､ 特徴検出器にあるパターンが付いているように考えると､ そのパターンが一致したときに､
フィーチャーマップの中で一番大きな数字になるわけです｡
実は､ 今簡略化した例では､ フィーチャーが一致したときが最も高い数字になる｡
その通りです｡
そして､ その4番がフィーチャーマップにあるのがおわかりいただけると思います｡
まさにその通りです｡
だから､ こっちを見れば､ まさにこの機能検出器があるわけで､ その中で4つだけ完璧にマッチしているわけですから｡
だから､ こっちのこの部分が見えると思います｡
そこで､ このセクションの一番最初に説明したように､ ここで機能が検出されました｡
その機能こそが､ 私たちのものの見方であり､ 認識の仕方なのです｡
私たちは､ 画像や実生活で目にするものを､ いわば1画素単位で見ているわけではありません｡
一枚一枚見ているわけではありません｡
鼻､ 帽子､ 羽､ 目の下やチーターの目の下にある小さな黒いマークでチーターとヒョウを見分けたり､
電車の形を見分けたりするのです｡
新幹線と普通の電車のように､ 区別することはありません｡
だから､ すべてを見るわけではありません｡
私たちは特徴に注目し､ それを保全するためにフィーチャーマップを活用しています｡
実際､ 不要なものをすべて取り除くことができるのです｡ 人間であっても､
1秒間にギガバイト､ いやテラバイト級の情報が目に入るわけですが､
それでも処理できるのは､ 不要なものを取り除いているからなのです｡
重要な機能だけに絞る｡
フィーチャーは私たちにとって重要なものであり､ まさにフィーチャーマップはその役割を担っているのです｡
さて､ 次に入力画像と特徴マップを作成します｡
では､ フロントはというと､ 先ほど作成したものです｡
でも､ それならどうして､ たくさんあるのに､ 複数のフィーチャーマップを作るのかというと､ 異なるフィルターを使うからですよね｡
これもまた､ 多くの情報を保存するための方法です｡
つまり､ 1つの特徴マップだけでなく､ 特定の特徴を探し､ そして基本的にはネットワークが学習を通して､
これはこのセクションの最後で説明しますが､ 学習を通して､
どの特徴が特定のタイプや特定のカテゴリにとって重要かを決定し､ それを探すのです｡
そのため､ さまざまなフィルターが用意されています｡ フィルターについてはこれから説明しますが､ 基本的にはこれらのフィルターを適用することになります｡
そこで､ このフィーチャーマップを得るために､ 先ほどのようなフィルタを適用したのです｡
しかし､ このフィーチャーマップを得るために､ 別のフィルターを適用する､
といった具合に｡
そして､ 基本的にはこのようなフィーチャーマップを作成するだけです｡
だから､ 個人的にはフィルターよりも特徴検出器という言葉の方がしっくりくるんです｡
ここで､ 特徴検出器と呼ばれるフィルターがあることを思い出してください｡
まあ､ 実際には､ 特徴量検出器という言葉の方が適していると思いますが｡
その理由は､ そういう目的だからです｡
そうですね｡
私たちは､ 自分のイメージをフィルターにかけるだけではいけないと思っています｡
しかし､ それは全体が同じでも､ 用語の問題で同じなのです｡
しかし､ 基本的には特徴を検出したいのです｡
わかりました｡
このレイヤーの中で､ 私たちはこの特徴マップを獲得するつもりです｡ この特徴マップの中で､ ある特徴が画像のどこにあるか､
他のある特徴がどこにあるか､ ある特定の特徴がどこにあるか､ 私たちは検出しました｡
この特徴マップでは､ ある他の特徴が画像上のどの位置にあるかを検出しています｡
だから､ そういうことだったんです｡
そして､ いくつかの例を見てみましょう｡
これはIngeborgのドキュメントですが､ ペイントのような無料のツールで､ 画像を調整したり､
画像に手を加えたりするのに使うことができます｡
しかし､ 基本的に彼らのドキュメントには貴重な例があり､ ここではタージマハルの写真があり､ どのフィルターを適用するかを選択することができます｡
このプログラムをダウンロードして､ そこに写真をアップロードすると､ 実際にコンボリューション・マトリクスを起動して､
フィルターを適用することができます｡ これらのこと､ コンボリューション・マトリクスは､ 実際に画像処理やデザインなどに応用されていることがわかります｡
では､ どんなものが出てくるのか､ 見てみましょう｡
このフィルターを真ん中の5つ､ マイナス1､ マイナス1､ マイナス1､ マイナス1と適用すると､ 画像がシャープになるのがわかると思います｡
そうそう､ だからこれは､ 考えてみればとても直感的なことなんです｡
つまり､ 5がフィルターや特徴検出器の中央にあるメインピクセルで､ マイナス1､
マイナス1､ マイナス1は､ 直感的な意味で､ その周りのピクセルを減らすような感じです｡
そして､ ぼかす｡
つまり､ 基本的には､ 中央の1つのピクセルの周りのすべてのピクセルに等しい重要性を与えることになります｡
そのため､ それらを組み合わせて､ 手元がぼやけるのです｡
ここで､ マイナス1と1､ そしてゼロになるのがわかりますよね？
そこで､ 真ん中のメインのピクセルを削除して､ このピクセルだけをマイナス1にしておくと､
エッジが出ます｡
そして､ これはちょっと仕組みがわかりにくいんです｡
直感的に考えるだけでは､ たぶん難しいような｡
エッジディテクトライト
だから､ こっちの方が意味があるんだろうね｡
真ん中をとって､ 真ん中を減らして､ 真ん中の画素の強さがたぶん好きなんでしょうね｡
そして､ そういうものを探して､ 周りのものの力を高めていくんです｡
そこにあるものがあるわけですね｡
そうですね｡
それで､ エッジ検出ができるようになり､ そこで得たものを見て､ 別のものをボスにすることができるのです｡
つまり､ ここで重要なのは､ 非対称であることで､ 画像も非対称になるのがわかると思います｡
だから､ 「ここがマイナスで､ ここがプラス」というように､ 自分に向かって突出しているような感じがするんですね｡
繰り返しになりますが､ これは非常に専門的な話になってしまいますが､ 少なくとも直感的に理解することはできますので､
もう一度ざっと見てみましょう｡
シャープ､ ぼかし､ エッジ強調､ エッジ検出､ エンボスなどがあります｡
このように､ これらは同じ画像の素晴らしい例ですが､ 特徴マップを取得しているので､ 異なる特徴検出器を用いて同じ画像の異なる特徴マップを取得しています｡
そのため､ この画像にはたくさんのバージョンがあり､ それぞれで特定のものを検出しようとしました｡ これらの用語は､
ボスのように､ おそらく畳み込みニューラルネットワークの観点からは適用できないことを除いて､
私たちには適用できません｡
でも､ エッジ検出､ 大事ですよね｡
エッジを検出し､ エッジを強調したいのですが､ おそらくぼかしシャープにはならないでしょう｡
ですから､ 私たちのようなタイプの仕事には､ エッジが最も重要なのでしょう｡
また､ コンピュータのように理解するという点では､ 何が重要で何が重要でないかを､ 神経回路網が自ら判断してくれるでしょう｡
そしてそれは､ おそらく人間の目には認識できないでしょう｡
その特徴の意味を理解することはできませんが コンピューターが決定します
これがニューラルネットワークの美点です 多くの異なるものを処理でき 直感も働かず 理解することができます
なぜどの特徴が重要なのかを理解するのか その説明がなくてもです 名前があるかないか
それは人工ニューラルネットワークには無関係の問題です｡
そして､ 私のお気に入りは､ Geoffrey Hintonの写真をこのフィルターに通した画像です｡
わかりました｡
ということで､ 今日のチュートリアルは終わりです｡
畳み込みについて楽しく学んでいただけたでしょうか？
コンボリューションの主な目的は､
特徴検出器を使って画像内の特徴を見つけ､
それを特徴マップに入れることです｡
同時に､ ニューラルネットワークがある画像やクラスを認識するために検出し使用する特徴は､
ほとんどの場合､ 人間にとって何の意味も持ちませんが､ それでも機能することを理解することが重要です｡
そして､ それがコンボリューション（畳み込み）です｡
そして､ 赤道直下でお会いできるのを楽しみにしています｡
それまでは､ ディープラーニングを楽しんでください｡