AIをざっくり解説してみた

こんにちは、大学生プログラマーのはやはやです:relaxed:

今回は、AIを学んでみたい！という方に向けて、AIとは何か？を**ざっくり**解説していきます。

※本記事はざっくり解説するということを第一にしています。詳しい解説や正確な解説を聞きたい方には向けておりません。

# AIとは何か？

AIを理解するために普通の（？）プログラムとの違いから説明していきます。

#### 普通のプログラム
![普通のプログラム.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/d7a84fd1-ad3f-0a39-7e5d-339101a24cec.png)

普通のプログラムは、あなたが書いたコードによって、決められたことをその通りに行うものです。

犬というものはこの画像のものだ、と命令します。そうすると、コンピュータはその命令に忠実に従いますので、その画像と違うものは全て犬ではないと出力します。どうみても犬なのに！！

だから、もし犬かどうかを識別したい場合は、世の中にあるすべての犬の画像をdog1=dog.png, dog2=dog2.png, ..., dog100000000000000000000000000=dog100000000000000000000000000.png, ...と無限にコンピュータに命令を下す必要があります。いや、無理ンゴ！！


:::note
AIではない普通のプログラムというのは、あなたがこれはこうだと命令したことしかできない！
:::

#### AIプログラム
![AI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/d65d6d9e-27a7-a56b-f506-f3ce8ef6f044.png)


では、AIの場合はどうでしょうか？

AIは、あなたが命令していないことに関しても、（100%正しいわけではないものの）答えを出すことができます。

例えば、あなたがコードで、4種類の犬の画像をコンピュータに与えます。

それをもとにコンピュータは、犬とはこういうものだと、犬の特徴を学習します。

学習した犬の特徴をもとに、あなたが命令していない犬の画像に関しても（その特徴に当てはまれば）犬と判断します。

生徒にワークを与えて勉強させて、そのワークに載っていない問題も解けるようにさせるみたいなイメージです。人間の学習プロセスと同じですよね。

このように、AIはあなたが**命令していないことに関しても**コンピュータが学習することによって答えを出すことができます。

:::note
AIはあなたが命令していないことも学習によって答えを出すことができる！
:::


# AIは何を用いて学習するのか？

では、次に先ほどから何度も言っている「学習」に関してみていきましょう。先程の画像で言うと下の部分ですね。ここどうやんねん、って話です。

![AIhow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/997110ff-0669-2ecf-91f2-f51b247e944e.png)

人間がなにかを学習時、例えば、見た目や動きから「これは犬だ」と判断しますよね。

じゃあ、コンピュータの場合は？？

コンピュータ君は犬の見た目とかわからんし、どうすんねん！あいつら人間とちゃうんやぞ！！というツッコミが聞こえてきます。

コンピュータの直訳は「計算機」。人間と違って、数字で物事を判断するものです。

![Aiくんさあ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/66b93113-0605-0b42-22af-0d0eff6f8f6e.png)


なので、AIは、受け取った情報を**数学**を用いて、「これは犬だ」と判断します。

だからこそ、AIは人間が気づかないようなことを発見できたりするわけですね。
逆に人間なら簡単にわかることがわからなかったりするのですが...。

:::note
AIは、数学を用いて物事を考える！
:::

数学。。。オワタorzと思った人、ちょっと待ってー！

もちろんAIを学ぶ上で数学の知識はあったらあっただけ良いですが、いきなり数学の難しい話には飛びません！！！

あくまでこの記事は「ざっくり」ですから。

# AIに学習を始めさせる前に

AIには、人間と違って五感（感覚器）がないので、自分で情報を外界からとってくることができません。

なので、まず外界の情報をコンピュータがわかる形、例えば表などに人間の手で変える必要があります。

これを**前処理**と呼びます。

![AI前処理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/493bb0f3-dae5-fc96-6e0c-5823ca85554c.png)

# AIの学習方法

さて、ようやく本題。

AIが人間から与えられたデータをもとにどのように学習するのか？、これに関して考えていきましょう。

まずは、ものごと判断の方法って一つじゃない、ということを前提として知っておきましょう。

どう言うことかと言うと、人間でいうと、

🐕が犬かどうか判断したい→見た目で判断する
🍜が美味しいかどうか判断したい→食べてみて判断する
気温が暑いかどうか判断したい→外に出て空気に触れてみて判断する
セミの種類を判断したい→セミの鳴き声を聞いて判断する

みたいな感じです。

なにをしたいかやどんなデータがあるかによって**判断の仕方が異なります**よね。

AIも同様です。

なので、ここからは、どんなデータがあって何をしたいか？によって、分けて解説していきます。

:::note
AIの学習方法は複数存在する。AIを利用する目的に合わせて学習方法を選ぶことが大事！
:::

# 教師あり学習 :AIに正解を導かせる
正解があるものに対して、AIを使って答えを出したい！そんなふうに思うことがあると思います。ざっAIって感じです。

例えば、ある生き物が犬か猫かをAIに判断して欲しい場合を考えていきます。

犬か猫かという正解が存在する問題に対して、AIが『犬』、もしくは『猫』という答えを導き出します。
このように「正解」が存在するものに対して、行われる学習を、教師あり学習と言います。

まずは、この教師あり学習に関してみていきましょう！

#### 分類

AIは犬や猫を見た目で判断すると言うようなことはできません。

![犬か猫か.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/b1e211da-65ce-4f97-3611-8678b0242faa.png)

なので、例えば、鼻の高さや目の長さといったデータをAIに渡し、これらを数学的に処理して犬か猫かを判断します。

犬と猫のデータが下の左図のようになったとします。

![分類1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/08e66050-9035-cfab-c629-1ffc17d1a45b.png)

それを右図のように、直線を引いてあげるときれいに犬のデータと猫のデータを分けることができますね。

AIに犬のデータと猫のデータを渡して、それを直線で分けるという命令を出し、犬と猫の違いを学習させる
↓
そうすることで新しいデータが犬のエリアにあるのか、猫のエリアにあるのかで、犬か猫かという正解を導く

これが分類です。人間とは違って、あくまで数学的に犬か猫かを判断しています。

:::note
直線でエリアを分けて、あるものを分類することができる！
:::

直線だけではありません。
たとえば、下のように曲線でエリアを分けることもできます。

![iOS の画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/474b94ab-096b-7df9-e830-8f467d10e777.png)

この例の場合、直線で分けようとすると、ミス（不正解なもの）が数個出てしまっていますね。

つまり、曲線の方が良い学習のさせ方だと言えます。

直線で分けるか曲線で分けるかというような学習のさせ方を「アルゴリズム」と言います。

どのアルゴリズムを選択するかによって、ミスの少ないAIになるかミスの多いAIになるかが決まります。

:::note
学習のさせ方を「アルゴリズム」と言い、複数存在する！より良いアルゴリズムを人間が選択してあげることで、AIの正確性が向上する！
:::

アルゴリズムを考え、作り出すためには、数学・統計学の知識が必要になってきます。どういうふうに直線や曲線を引くといいのかなって考えるにはやっぱりそれなりの難しい数学や統計学の知識が必要です。。。

#### 回帰

回帰？なんじゃそれ？と思うと思います。

回帰とは、「もとの位置に戻ること」を意味します。

もとの位置というのは、今回の場合は、直線や曲線のことです。

下の左図のようなデータの集合（点のまとまり）は、右図のように直線として考えることができます。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/f765a357-5103-48e7-5d61-035d97885f9e.png)

ばらつきのあるたくさんの点をもとの綺麗な直線に戻してあげるというようなイメージです。

先程の分類と同様に直線だけではなく、曲線でも可能です。

回帰は、売り上げ予測・株価予測など今までの正解を元に、次どうなるかという正解を予測するために使われます。

AIに気温とアイスの売り上げのデータを渡して、それを直線にするという命令を出し、2つの関係を学習させる
↓
AIがその学習結果をもとに、この気温だったらこのくらいアイスが売れそうという予測される正解を導く

これが回帰です。

:::note 
データの点を直線や曲線とみなして、次どうなるかという正解を導くことができる！
:::

この回帰でも、分類と同様、どのような直線や曲線に回帰するかを考える上で数学や統計学の知識が必要になってきます。。。

# 教師なし学習 :AIに特徴を見出させる

正解がないものに対して、AIを使って分析をしたい！

そんな時に利用するのが、教師なし学習です。

正解がないので、正解を出すのが目的ではなく、特徴を見出すことが目的です。

さてさて、この教師なし学習に関してみていきましょう！

#### アソシエーション分析

アソシエーションとは**関連性**という意味です。
すなわち、アソシエーション分析とは、データから関連性という特徴を見つけ出す分析のことです。

スーパーで購入された品目の関連性をAIを使って分析し、以下の図のようになったとしましょう。

![アソシエーション.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/8b72ba43-965e-ab2c-ae0e-48ece6c99c9b.png)


この図を見ると、おむつとビールを同時に購入する人が意外と多いことがわかります。
これは、おつかいを頼まれた旦那さんが、オムツを買うついでにビールも買うと言う関連性に基づいていると推測できますが、通常ビールとオムツが関連しているとは誰も想像できませんよね。。。

このように人間では気づけないような関連性をAIを使って見つけ出すのが、アソシエーション分析というものです。

はじめに見た教師あり学習と違い、正解を導いているわけではなく、あくまでデータの特徴を見つけ出しているというのがポイントです。

:::note
教師なし学習は、特徴を見つけ出すことが目的。
アソシエーション分析を使うと、関連性という特徴を見つけ出すことができる。
:::

どう関連性を定義していくか考える上でこれまた数学や統計学の知識が必要になってきます。。。

#### クラスタリング

clusteringは「集めること」という意味で、**似たものを一つのグループにまとめる**ことを意味します。

教師あり学習の「分類」とよく似ていますが、分類が正解が決まっているのに対し、クラスタリングには正解がなく、特徴の類似性に基づいて、グループ化するだけです。このグループは犬だとか、このグループは猫だというようなラベル付けはしません。あくまで**類似性**という特徴を見つけ出すことが目的です。

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/6e3db4cf-7d18-60a2-eb46-c445a109cb83.png)

上図では、3種類にクラスタリングしていますが、アルゴリズム（AIの学習のさせ方）を変えれば、2種類や、4種類にクラスタリングすることもできます。

:::note
クラスタリングを使うと、類似性を見つけ出すことができる！
:::

クラスタリングでも、どのようにグループ分けするか？（何種類？どの範囲？）を考える上で数学や統計学の知識が必要です。。。

# オマケ
#### ニューラルネットワーク

ニューラルネットワークは、人間の脳の細胞であるニューロンに見立てて、ネットワークを形成し、情報を処理するやり方です。

たくさんの情報の処理ができるので、画像や動画などをAIに利用したり、ディープラーニング（深く学習すること）ができるようになります。

このニューラルネットワークを利用して、先程から紹介している教師あり学習や教師なし学習をより大きなデータで精度よく行うことができます。

![neural.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1912865/5bd4ac70-9643-cc89-bc81-0378f3e8935e.png)

このニューラルネットワークを理解するためには、数学（特に行列）と統計学の知識が必要です。。。

:::note
ニューラルネットワークを使うと、膨大なデータを扱かうことができる！
:::

# おわりに

いかがだったでしょうか？

AIってなんだろう？と漠然と考えていた今までと違い、AIを使うとどのようなことができるのかイメージできるようになったのではないでしょうか？

あなたは今、AIを学ぶスタート地点に立っています。AIは確かに難しいけれど、一つ一つステップアップしていけば、ある程度しっかり理解することができます。自分の理解できないことをいきなり全部理解しようとするのではなく、理解できる部分から整理して学んでいきましょう！

あなたがAIを使って、”面白いもの”を生み出すことを楽しみにしています！

読んでくれてありがとうございました！

少しでも良いなと思ったら、LGTM、ストック、コメントよろしくお願いします！

【 **紹介** 】

筆者の他の記事↓

https://qiita.com/hayahaya2/items/888d915ec6f2645e02f5

https://qiita.com/hayahaya2/items/c31299e06c73dc842df3

Twitter↓

https://twitter.com/hayahaya27