アメリカの大学で奮闘中

アメリカの大学でプログラミングを学ぶべくコンピューターサイエンス学部に留学したものの挫折し数学科に転部した著者が、自分の挫折ポイントを踏まえて数学、プログラミング、アルゴリズムついてできる限り分かりやすく解説してみるブログ。*できる限り記事の内容は技術的な間違いをしないように気をつけていますが、もし間違いがあれば教えていただけると助かります。

機械学習、初学者必見!深層学習のアルゴリズムのイメージを書いてみた

機械学習、初学者の方へ

 

最初から複雑なモデルを作れるだけのプログラミングと数式の理解はハードルが高く難易度ががります。ですが簡単に何かおーっとなるようなAIモデルを作りたい

 

そんな人にGoogleのTeachable Machineはおすすめです。

 

Teachable MachineとはChatGPTに聞くと以下のような回答を頂きました。

Teachable Machineは、Googleが提供するオンラインツールです。このツールは、機械学習を使用してユーザーがカスタムモデルを作成し、それを教えることができるように設計されています。ユーザーは、ビデオ、音声、または画像を使用して、機械学習モデルをトレーニングすることができます。

 

Teachable Machineは、機械学習の基本的な概念を理解していないユーザーにもアクセスしやすくするために開発されました。コーディングやデータサイエンスの知識がなくても、ビジュアルなインターフェースを通じて簡単にモデルを作成し、トレーニングすることができます。

要は知識のない人でもWEBでビジュアルで簡単に画像や音声の機械学習モデルを作れるというものです。

 

詳しい作り方はこの記事などを参考にされてはいかがでしょうか?

https://www.itmedia.co.jp/news/articles/2209/16/news038.html

 

この記事ではそこで使われる知識を紹介できればと思います。

 

機械学習とは

そもそもですが、機械学習とはめっちゃ簡単に言うと1000組のデータと予測したい物の答え(家賃を予測するAIの場合、データ:物件の広さ、答え:家賃 とか)を与えて、決められた数式の形を前提に最適な数式を探し出す物です。

 

例えば

y= ax+bを数式の形として与えた場合、データをxに入れてyの値を出した時、そのすべてのyとすべてのデータが最も近くなるaとbのを何100回、何1000回も計算して探すことです。

 

この数式の形の一つがニューラルネットワークで、ニューラルネットワークの中である条件を満たすものを深層学習(ディープラーニング)と言います。

 

アルゴリズムについて

おそらくTeachable Machineには深層学習(ディープラーニング)が使われていると思われます。

その深層学習について厳密性は省き、めちゃくちゃ簡単に説明できればと思います。

深層学習のイメージは以下になります。

 

入力層にデータが入り、→の方向に数が渡されていき出力層の分類する数分あるノード(丸の箱)にそれぞれの確率が入ります。

 

ポイント1

→はただ前のノードから次のノードに数字を渡すだけでなく、重り(通常wと書かれる)をかけた値を渡します。このw(矢印分存在)がy=ax+bのaとb、すなわり学習して適切な値を探すものになります。

 

ポイント2

グレーの⚪️の中には活性化関数と呼ばれるものが入っており、すべての矢印から送られてきた数の和をそのまま次のノードに送るわけではなく、すべての矢印から送られてきた数の和に活性化関数に通した数を次のノードに渡します。

活性化関数にはReLU関数、Sigmoid関数などがあります。

なぜ活性化関数をかける理由は今後の記事で書きたいと思いますが、一言で言うと、数式(数理モデル)が重りの掛け算とノードでの足し算でできた単調なものにしないことで柔軟なモデルを作るためです。

深層学習の解説図

イメージのための簡単な例

例として飲み物の特徴から飲み物の種類を判定する深層学習があったとします。(画像の分類は深層学習のイメージを掴んでもらった後に書いてます。)

種類(出力)は[オレンジジュース, コーヒー, 水]として、特徴(入力)は[にがさ、水っぽさ、甘さ]とします。

 

 

深層学習では左の入力と呼ばれるところから[にがさ、水っぽさ、甘さ]のそれぞれの数字を受け取り矢印の先になるノードに数字が送られます。ただ矢印は送る時に重りと呼ばれる数をかけてノードに送ります。

 

この場合、にがさ:73、水っぽさ:16、甘さ:11の数字が入ったことになります。(答えの分類はコーヒーが正解です。)

なのでAのノード(箱)には

それぞれの入力層の数字にそれぞれの重り(矢印の横に書いた数字)がかけられてAに入ります

なのでA = 73×0.1+16×0.5+11×0.3 = 18.6がが入ります。

 

こんな感じで下のノードにも数字が入ります。

ノード内には活性化関数と呼ばれる関数が入っておりノードの値を関数に入れてノードの値を新しくします。

 

そして、ノード(Aとか)が活性化関数で出力した新しい値を次の右のノード達に重りをかけて渡します。

 

これを出力層にたどり着くまで繰り返します

 

 

出力層に以下のような結果が出たとします。

[水:0.79,コーヒー:0.11,オレンジジュース:0.10]

分類結果は水になっています。これは正解のコーヒーとは異なります。

 

機械学習はこの違いをもとに重りを修正して新しくモデルを作ります。

これを繰り返しできた正答率の高いモデルを採用します。

 

画像処理の場合

画像処理の場合入力層に画像を入れるだけです。

 

実は画像はめちゃくちゃ小さな単色の正方形の集合でできており、入力層はそれぞれの一つの小さな正方形を入れます。ただ注意点はコンピューターは数字しか処理できないので(red, green, blue)を数字で表した数で正方形を表現して入れます。(今後もそちらもブログで書ければと思います。)

 

ここが深層学習の難しいところであり、面白いところなのですが、入力層に何を入れてもよく出力層に何を出してもよくて、ただ入力層から受けたデータを正しい答えを出す確率が高い数式を出すのが深層学習になります。