【CNN】職人がパチンコで理解する畳み込みニューラルネットワーク【機械学習】

画像認識AIには大学レベルの数学の知識がたくさん用いられています。

線形代数学をはじめ、多次元関数の微分(偏微分)など頭が痛くなるような学問的な話が出てくるので、数学が嫌いな方にとっては最悪です。

大切なことは学問的な数学の知識を詳細に理解することではなく、それを使いこなすことだと考えます。

この記事では、僕のような職人でも理解できるように畳み込みニューラルネットワークを噛み砕いて解説しようと思います。

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


画像認識を目的としたAIモデルには大学レベルの数学が用いられています。

その為、ある程度の数学の知識を持ち合わせていないと畳み込みニューラルネットワークの説明資料を読むことすらできません。

試しに「畳み込みニューラルネットワーク わかりやすく」と検索してみてください。

検索された記事でわかりやすい記事はほとんど無く、「入力層」とか「プーリング層」とか「活性化関数」とか何言っているのかさっぱりわかりませんね。

(僕は理解できません!皆さん本当にわかりますか??)

濃淡の数値を参照して、最終的にはカメラに映ったものを0-1の確率で表示したい

【DeepLearning】画像のフィルタ処理について

画像認識AIの目的は画像に何が写っているのか分類することです。

私たちは画像に写っているものが何なのかすでに知っていますが、機械はそれを最初から判別することができません。

機械は私たちのように直感的に判断するのではなく、画像に用いられている3色(赤、青、緑)の色の濃淡を分析して数学的に確率で判断します。

つまり、画像認識AIとは画像に写っているものを確率で答えを出す機械と簡単に言い換えることができます。

ポイント

画像は3色(赤、青、緑)の255段階の濃淡で構成されているもの
画像認識AIは色の濃淡パターン(フィルタ)を参照して一番確率が大きいものを答えとする機械
ex)
鉄筋0.8
型枠0.1
犬0.05
猫0.05
→写っているものは「鉄筋」と答えを出す

畳み込み層とプーリング層で画像の特徴を抽出

【Python】カメラに映った画像をリアルタイムに物体検知する【OpenCV×YOLO】

画像認識AIは写っているものを確率で答える機械ですが、どのように確率を決めているのでしょうか?

私たちは直感的に映っているものを理解することができますが、機械は数学的に映っている物の特徴を把握する必要があります。

一般的な説明では「隠れ層」「畳み込み層」「プーリング層」「特徴量」「活性化関数」「シグモイド関数」「正規化線形関数」といった難しい言葉が出てきますが、ここではもっと簡単に理解してみようと思います。

特徴があるものを大きい数字に、特徴がないものを小さい数字とする表す関数(活性化関数)

画像認識AIは入力された画像を3色256段階の濃淡の情報を数字で受け取り、最終的には0から1の数字で出力します。

この変換に使用されるのが活性化関数といわれる複雑な関数(数字を入力したら新しい数字に変換される)です。

画像から特徴を抽出する関数は僕たちになじみのあるy=ax+bといった簡単な線形の一次方程式ではありません。

以下のような複雑な(非線形の)関数で表され、これらの関数は特徴があるものを大きい数字に、特徴がないものを小さい数字とするという特徴を持っています。

ポイント

画像認識AIは入力された画像を3色256段階の濃淡の情報を数字で受け取り、最終的には0から1の数字で確率として出力する

画像の特徴を抽出する関数は、複雑な(非線形の)関数で表される

これらの関数は特徴があるものを大きい数字に、特徴がないものを小さい数字とするという特徴を持っている

これを活性化関数という

シグモイド関数

ハイパボリックタンジェント

正規化線形関数

同じような特徴を持っているものを同種類として補正する


参考:MNISTに含まれる「手書き数字」の例※データセットの配布元: The MNIST database(Modified National Institute of Standards and Technology database)

畳み込み層で画像が持っている特徴を抽出をすることができました。

これらの特徴をもっている画像を同種類の画像として出力するために最大プーリングという処理をします。

ポイント

同じような特徴を持っているものを同種類として補正するために最大プーリングという処理がある

出力層と教師データ

DeepLearningで画像分類を学習させる

入力された画像を3色256段階の濃淡の情報は最終的に出力層に集計されます。

出力層で集計されたデータは教師データ(正解のデータ)と比較され、集計されたデータと教師データの誤差が算出されます。

画像認識AIの学習とはこの誤差を最小にする作業と言い換えることができます。

この部分を少し詳しく見ていきましょう。

ソフトマックス関数は特徴を明示しつつ確率で出力する活性化関数

上記で見てきたように、活性化関数はy=ax+bのような単純な数式(線形)ではありません。

ソフトマックス関数は値を持っている数字を指数的に増加・強調させるという特徴を持っています。

そして、強調された値を0から1の確率の数字で出力します。

ポイント

指数は入力された値を強調させる意味を持つ

0から1の値として表示することで確率として出力する

学習とは教師データとの誤差を最小にすること

画像認識AIが導き出した答えはソフトマックス関数で出力された0から1の間の数字です。

例えば、ソフトマックス関数で出力された数字が0.9であれば90%の確率と画像認識AIが答えを出したということになります。

ソフトマックス関数で出力された数字を評価する際には交差エントロピーという対数関数が使用されます。

ソフトマックス関数で出力された数字が1に近く、且つそれが教師データの答えと一致している場合、交差エントロピーの値(誤差)は小さくなります。

ポイント

画像認識AIが出した答えを評価するには交差エントロピーという関数を使用する

ソフトマックス関数で出力された数字が1に近く、且つそれが教師データの答えと一致している場合、交差エントロピーの値(誤差)は小さくなる

AIの学習とは交差エントロピー(誤差)を小さくすること

畳み込みニューラルネットワークはパチンコスロットと同じ

ここまで小難しい話をしてきましたが、これを職人が大好きなパチンコスロットで置き換えてまとめてみましょう。

畳み込みニューラルネットワークの説明は一般的には難解な数学の説明がされますが、パチンコスロットと同じと考えれば僕らには分かりやすいですね。

pythonでAIを実際に動かしてみよう!

ここまでこの記事を読むことができたら以下のPytorch公式ページをぜひ見てみてください。

プログラミング言語なので表示は英語ですが、やっていることは上記のパチンコと同じで入力された値を確率で評価しているだけです。

Pytorch公式ページ

てつまぐの画像認識AI講座では初学者でも分かりやすくPythonコードを説明していますのでぜひ活用してください。

まとめ

この記事では難解な畳み込みニューラルネットワークをパチンコに例えて解説してみました。

大学レベルの数学を真に受けるのではなく、理解するだけに留めてアウトプットに力を入れましょう。

【YOLOv5】物体検出の精度と学習結果mAPの読み方について

【YOLO】簡易アノテーションについて【物体検知】