一番分かりやすい畳み込みニューラルネットワークの解説
皆さん、こんにちは!
今年の冬、雪が少ないみたいですね。妻もスキーが思い切りできずにいます。
さてと、今日は「一番分かりやすい畳み込みニューラルネットワークの解説」をお届けしたいと思います。(約8300文字、図解43枚)
前書き
ご存知の方もいらっしゃると思いますが、今年9月から「機械学習、深層学習のハンズオン」を月一回で開催しています。
詳細は、下記のリンクをご参照ください。
そして、前回の第5回目では、畳み込みニューラルネットワークを解説しました。
この記事はハンズオンで、解説した内容をなるべく分かりやすくまとめた内容となります。
私の本の内容も参考しています。よかったら、立ち読みをしてみてください。
この記事の目標は、初心者向けで、誰でもこの記事を読めば、畳み込みニューラルネットワークの挙動、学習のメカニズムをある程度理解できて、入門できるということです。
畳み込みニューラルネットワークを理解するための前提知識としては、機械学習の基本とニューラルネットワークの理解が必要です。
その二つはそれぞれまた記事でお届けします。少し順番が逆になっていますが、ご了承ください。(2月noteを公開する予定です。)
2月3日公開しました!こちら先に読むことをお勧めします。
今回のnote記事もニューラルネットワークの学習noteも下記のマガジンの一部となります。
定期購読のマガジンですが、購読していただくと、このような記事も全部無料で閲覧するだけではなく、「川島のITスキルサロン」の会員限定Slackグループにも参加できます。
詳しくは下記のnoteをご参照ください!
さてと!今回の話を始めよう!
単純なニューラルネットワークの限界
ニューラルネットワークの学習では、MNIST手書き数字の認識などを行いました。(別途記事を発行します。)
そこで、二次元の画像をベクトルに変換して、一次元状に並べて学習モデルに入力して、学習してもらいました。
それがニューラルネットワークの性能を発揮して、学習して、推論ができましたが、本格的な画像の分類は、やはり画像の(平面上の)二次元構造を可能な限り活用したいですね。例えば、あるピクセルの上、下、左、右、さらにその周辺どういった(ピクセル)情報があるかは、人間の顔の目や鼻、口の位置のように、とても意味があります。
深層学習 / Deep Learning
深層学習、このAIがとても人気になった主役ですが、もちろんニューラルネットワークの一種です。
典型的なニューラルネットワークは、3層構造がよく挙げられ、入力層、中間層、出力層から構成されていますが、深層学習は、その層の数がさらに多くなっているということを指しています。
層の多いニューラルネットワークはDNN(Deep Neural Network)と呼ばれます。層が多いのは、数百層、数千層のものもあります。ただし、層が多ければ、多いほど良いというわけではりません。結果とコストパフォーマンスが判断の基準となります。
深層学習のネットワークモデルには様々な種類があります。
その種類は、主に、研究者が、色々試して、良い結果を出したものが多いです。
その中に、いくつか種類があります。(とはいっても、これは全てではなく、研究が進んでいくにつれ、また新しいものが出てくるかもしれません)
1)畳み込みニューラルネットワーク(Convolutional Neural Network)
2)回帰型ニューラルネットワーク(Recurrent Neural Network)
3)敵対的生成ネットワーク(Generative Adversarial Networks)
4)オートエンコーダ(Auto Encoder)
畳み込みニューラルネットワーク
これらのニューラルネットワークモデルはそれぞれの得意分野がありますが、今回詳しく説明してくのは、一番目の畳み込みニューラルネットワーク(Convolutional Neural Network)です。
CNN
畳み込みニューラルネットワークはよく略して、CNNで表現します。
上述したように、CNNはニューラルネットワークの一種です。
CNNの得意分野は画像認識(分類)です。例えば:
・犬か、猫かの分類
・手書き数字(0−9)の認識
・ペットボトルと空き缶の分類
・花の種類の分類、認識
・車と歩行者の認識
・不良品の検出
などが挙げられます。
課題1:マルバツの認識
○と×の認識課題があるとします。目的は、○か×か、コンピュータに認識してもらうことです。
畳み込みニューラルネットワークの原理に入る前に、まず一緒に考えましょう!
目で観察してみよう
○と×は何が違うのかを考えましょう!それらを見分けるためには、どんな特徴を把握すればいいですか?
下の図を見てみましょう。
赤い線と緑の線で囲むエリアに注目してください。緑のエリアのように類似している箇所があれば、赤いエリアのように、「独自」のパターンもあるようですね。
でも、誰でもこんな「綺麗な」○と×を書くとは限りません。
崩れている○と×も人生でいっぱい見てきました。笑
例えば、下の図を見てください。
人間であれば、ほとんど、左が○、右が×と分かります。しかし、コンピュータはそういうわけにはいきません。何らかのパータンを把握しないと、単純なピクセルの位置の比較だけでは、同じ「○」でも、上の○とは、完全に別物になります。
ただ、上の分析と同様に、この図でも緑のエリアのように、共通のパターンがあれば、赤いエリアのように、ちょっと「独自」っぽいパターンもありますね。何となく分かりますね。
では、これをどう生かせば、認識に役に立てるのでしょうか?
上の図のように、認識できるのではと考えます。
まず左側の入力ですが、まず○か×かは分かりません。
ただ、局所のパターンを分かれば、何となく、特徴で手掛かりを見つけるかもしれません。
上の図のように、対角線になっているパターンは○の一部かもしれません、×の一部かもしれません。これに関しても、どっちの可能性もあります。100%とは判定できません。それに対して、黒い点が集中しているパターンが×の中心にあるクロスするところではないかと考えることができて、かつ、○には、ほぼ確実にそれがないと言えますね。
こうやって、「小分け」したパターンを利用して、大体ですが、認識ができるかもしれません。
ただし、これだけでは、まだ精度が低いですね。
もう一枚を見ていきましょう!
前の処理が一つの「層」で行ったことだとしたら、もう一つの「層」を加えましょう!
上の図のように前の層から、パターンがやってきました。しかし前の層のパターンだけでは、たりません。この層でもう一回パターンを増やしましょう!
前の層から来たパターンに加えて、もう一つパータンが増えて、二つになりました。そうすると、見える部分が増えた気がします。
上から三つのパターンを見てみましょう。一番上が×の右上に見えますね。
真ん中は、○の左下に見えますね。
一番下は、これも何となくですが、バツの右上に見えますね。
こうやって、少し「自信」がつけてきましたね。なぜならば、「特徴」をより多く「見えた」からです。
「自信度」を上げるためには、もっと多くの「特徴」を見えるようにすればいいですね。それでは最後もう一枚図を見ていきましょう。
さらに「層」を増やして、前の層から来たパターンにさらに「特徴」を組み合わせると、上のはほぼ×の上の部分と断定できるぐらいです。同時に、下のパターンはほぼ○の左半分だと断定できるぐらい、「自信」があがりましたね!
実は、畳み込みニューラルネットワークもこれに似たような動きをしています。
下記の引用を見てみましょう。
こちらも顔の認識では、第2のレイヤーで顔の「部品」というパターンを「学習」で覚えるようになったのです。
その次の第3のレイヤーでは、さらに組み合わさった顔のパターンが出来上がりました。
引用先:
http://robotics.stanford.edu/~ang/papers/icml09-ConvolutionalDeepBeliefNetworks.pdf
詳細は、上記の引用先をご参照ください。
ここで判ったのは
低層から、高次の層へ行くにつれ、各フィルタがより複雑なパターンを捉えていることですね。フィルタなどについてもこれから説明します。
これから、性質が全く同じですが、課題2を見ていきましょう!
課題2を使って、畳み込みニューラルネットワークの学習を詳説してまります!
課題2:仮名(かな)の認識
ここから先は
¥ 300
Amazonギフトカード5,000円分が当たる
株式会社虹賢舎 CEO 著書:https://amzn.to/39KwlE4 技術ブログ:https://kokensha.xyz 機械学習 深層学習 Python /JS IoT Raspberry Pi ロボット TOEIC950 https://gosen.world