見出し画像

一番分かりやすい畳み込みニューラルネットワークの解説

皆さん、こんにちは!

今年の冬、雪が少ないみたいですね。妻もスキーが思い切りできずにいます。

さてと、今日は「一番分かりやすい畳み込みニューラルネットワークの解説」をお届けしたいと思います。(約8300文字、図解43枚)

前書き

ご存知の方もいらっしゃると思いますが、今年9月から「機械学習、深層学習のハンズオン」を月一回で開催しています。

詳細は、下記のリンクをご参照ください。

そして、前回の第5回目では、畳み込みニューラルネットワークを解説しました。

この記事はハンズオンで、解説した内容をなるべく分かりやすくまとめた内容となります。

私の本の内容も参考しています。よかったら、立ち読みをしてみてください。


この記事の目標は、初心者向けで、誰でもこの記事を読めば、畳み込みニューラルネットワークの挙動、学習のメカニズムをある程度理解できて、入門できるということです。

畳み込みニューラルネットワークを理解するための前提知識としては、機械学習の基本とニューラルネットワークの理解が必要です。

その二つはそれぞれまた記事でお届けします。少し順番が逆になっていますが、ご了承ください。(2月noteを公開する予定です。)

2月3日公開しました!こちら先に読むことをお勧めします。


今回のnote記事もニューラルネットワークの学習noteも下記のマガジンの一部となります。

定期購読のマガジンですが、購読していただくと、このような記事も全部無料で閲覧するだけではなく、「川島のITスキルサロン」の会員限定Slackグループにも参加できます。

詳しくは下記のnoteをご参照ください!


さてと!今回の話を始めよう!

単純なニューラルネットワークの限界

スライド1

ニューラルネットワークの学習では、MNIST手書き数字の認識などを行いました。(別途記事を発行します。)

そこで、二次元の画像をベクトルに変換して、一次元状に並べて学習モデルに入力して、学習してもらいました。

それがニューラルネットワークの性能を発揮して、学習して、推論ができましたが、本格的な画像の分類は、やはり画像の(平面上の)二次元構造を可能な限り活用したいですね。例えば、あるピクセルの上、下、左、右、さらにその周辺どういった(ピクセル)情報があるかは、人間の顔の目や鼻、口の位置のように、とても意味があります。

深層学習 / Deep Learning

深層学習、このAIがとても人気になった主役ですが、もちろんニューラルネットワークの一種です。

典型的なニューラルネットワークは、3層構造がよく挙げられ、入力層、中間層、出力層から構成されていますが、深層学習は、その層の数がさらに多くなっているということを指しています。

層の多いニューラルネットワークはDNN(Deep Neural Network)と呼ばれます。層が多いのは、数百層、数千層のものもあります。ただし、層が多ければ、多いほど良いというわけではりません。結果とコストパフォーマンスが判断の基準となります。

スライド2

深層学習のネットワークモデルには様々な種類があります。

その種類は、主に、研究者が、色々試して、良い結果を出したものが多いです。

その中に、いくつか種類があります。(とはいっても、これは全てではなく、研究が進んでいくにつれ、また新しいものが出てくるかもしれません)

1)畳み込みニューラルネットワーク(Convolutional Neural Network)

2)回帰型ニューラルネットワーク(Recurrent Neural Network)

3)敵対的生成ネットワーク(Generative Adversarial Networks)

4)オートエンコーダ(Auto Encoder)

畳み込みニューラルネットワーク

これらのニューラルネットワークモデルはそれぞれの得意分野がありますが、今回詳しく説明してくのは、一番目の畳み込みニューラルネットワーク(Convolutional Neural Network)です。

スライド3

CNN

畳み込みニューラルネットワークはよく略して、CNNで表現します。

スライド4

上述したように、CNNはニューラルネットワークの一種です。

CNNの得意分野は画像認識(分類)です。例えば:

・犬か、猫かの分類

・手書き数字(0−9)の認識

・ペットボトルと空き缶の分類

・花の種類の分類、認識

・車と歩行者の認識

・不良品の検出

などが挙げられます。

課題1:マルバツの認識

スライド5

○と×の認識課題があるとします。目的は、○か×か、コンピュータに認識してもらうことです。

畳み込みニューラルネットワークの原理に入る前に、まず一緒に考えましょう!

目で観察してみよう

スライド6

○と×は何が違うのかを考えましょう!それらを見分けるためには、どんな特徴を把握すればいいですか?

下の図を見てみましょう。

赤い線と緑の線で囲むエリアに注目してください。緑のエリアのように類似している箇所があれば、赤いエリアのように、「独自」のパターンもあるようですね。

スライド7

でも、誰でもこんな「綺麗な」○と×を書くとは限りません。

崩れている○と×も人生でいっぱい見てきました。笑

例えば、下の図を見てください。

スライド8

人間であれば、ほとんど、左が○、右が×と分かります。しかし、コンピュータはそういうわけにはいきません。何らかのパータンを把握しないと、単純なピクセルの位置の比較だけでは、同じ「○」でも、上の○とは、完全に別物になります。

ただ、上の分析と同様に、この図でも緑のエリアのように、共通のパターンがあれば、赤いエリアのように、ちょっと「独自」っぽいパターンもありますね。何となく分かりますね。

では、これをどう生かせば、認識に役に立てるのでしょうか?

スライド9

上の図のように、認識できるのではと考えます。

まず左側の入力ですが、まず○か×かは分かりません。

ただ、局所のパターンを分かれば、何となく、特徴で手掛かりを見つけるかもしれません。

上の図のように、対角線になっているパターンは○の一部かもしれません、×の一部かもしれません。これに関しても、どっちの可能性もあります。100%とは判定できません。それに対して、黒い点が集中しているパターンが×の中心にあるクロスするところではないかと考えることができて、かつ、○には、ほぼ確実にそれがないと言えますね。

こうやって、「小分け」したパターンを利用して、大体ですが、認識ができるかもしれません。

ただし、これだけでは、まだ精度が低いですね。

もう一枚を見ていきましょう!

スライド10

前の処理が一つの「層」で行ったことだとしたら、もう一つの「層」を加えましょう!

上の図のように前の層から、パターンがやってきました。しかし前の層のパターンだけでは、たりません。この層でもう一回パターンを増やしましょう!

前の層から来たパターンに加えて、もう一つパータンが増えて、二つになりました。そうすると、見える部分が増えた気がします。

上から三つのパターンを見てみましょう。一番上が×の右上に見えますね。

真ん中は、○の左下に見えますね。

一番下は、これも何となくですが、バツの右上に見えますね。

こうやって、少し「自信」がつけてきましたね。なぜならば、「特徴」をより多く「見えた」からです。

「自信度」を上げるためには、もっと多くの「特徴」を見えるようにすればいいですね。それでは最後もう一枚図を見ていきましょう。

スライド11

さらに「層」を増やして、前の層から来たパターンにさらに「特徴」を組み合わせると、上のはほぼ×の上の部分と断定できるぐらいです。同時に、下のパターンはほぼ○の左半分だと断定できるぐらい、「自信」があがりましたね!

実は、畳み込みニューラルネットワークもこれに似たような動きをしています。

下記の引用を見てみましょう。

スライド12


こちらも顔の認識では、第2のレイヤーで顔の「部品」というパターンを「学習」で覚えるようになったのです。

その次の第3のレイヤーでは、さらに組み合わさった顔のパターンが出来上がりました。

引用先:
http://robotics.stanford.edu/~ang/papers/icml09-ConvolutionalDeepBeliefNetworks.pdf

詳細は、上記の引用先をご参照ください。

ここで判ったのは

低層から、高次の層へ行くにつれ、各フィルタがより複雑なパターンを捉えていることですね。フィルタなどについてもこれから説明します。

これから、性質が全く同じですが、課題2を見ていきましょう!

課題2を使って、畳み込みニューラルネットワークの学習を詳説してまります!

課題2:仮名(かな)の認識

ここから先は

4,894字 / 30画像

¥ 300

株式会社虹賢舎 CEO 著書:https://amzn.to/39KwlE4 技術ブログ:https://kokensha.xyz 機械学習 深層学習 Python /JS IoT Raspberry Pi ロボット TOEIC950 https://gosen.world