人工知能・機械学習・深層学習 それぞれの違いをわかりやすく解説!


人工知能、機械学習、深層学習について
- 何が違うの?
- どんな関係性なの?
- 何を勉強すればいいの?
という疑問があると思います。
この記事では、このような疑問について詳しく解説していこうと思います。
人工知能(AI)とは
人工知能は、ここ最近で急速に発展を遂げてきています。
英語では“Artificial Intelligence”です。
直訳すれば「人工的な知能」ってそのままですけど、この頭文字をとってAIと呼ばれるわけですね。
少し堅苦しく言うと、人工知能とは、コンピュータを使って計算をすることで知能を表現しようとする計算機科学の分野などと言われます。
要は何かっていうと、人間のような知能を持ったコンピュータを作ろうっていう分野です。
それを実現するための手法に機械学習というものがあります。
機械学習とは
機械学習とは、人工知能の中での「人間と同様の学習能力を持たせる」という課題を解決する技術・手法です。
要は、人間が学習するように、機械にも「学習という能力」を持たせよう!っていう人工知能の作り方です。
まず人工知能と機械学習はカテゴリが違うということを理解しましょう。
というのも、人工知能は「分野」などを指すのであり、機械学習はそれを実現するための「手法」なのです。
ちなみに英語で書くと“machine learning”で「機械 学習」となるので、その名の通りなのがわかります。
その中の手法の一つで深層学習というものがあります。
深層学習とは
深層学習とは、機械学習の手法の一つです。
こちらは“deep learning”と言われますね。
これも機械学習と同じで手法ですが、さらに機械学習の中の技術ということですね。
関係は後程また解説します。
どういう手法かというと、生物の神経系を模倣した構造を使った機械学習の手法になります。
生物の神経系のイメージ画像がこれです。

生物の神経系の神経細胞について、ある一定以上の強度の信号をもらうと自らも信号を発するという特徴があります。
詳しい話は生物学にGOなのですが、この構造を使って機械学習を行おうと考えたのです。
そして、このような特徴を持った生物の神経系の構造を模倣したのが(人工)ニューラルネットワークです。

この図は生物の神経系の簡略化したイメージです。
これが俗に人工ニューラルネットワークと呼ばれます。
このモデルでは4つの層(入力層と二つの中間層と出力層)があるように見えます。
中間層の層の数はもっと増やすことができます。
これがどんどん増えていって深い層構造になるのが深層学習と呼ばれる所以です。
深層学習のモデルはよくこのような棒(エッジ)でつながれた丸(ノード)を使って表現されます。
深層学習とは機械学習の一部の手法であって、上の図のような生物の神経系をもとに作られたデータ構造を用いた手法だということです。
ざっくりと意味がつかめたでしょうか?
人工知能と機械学習と深層学習の関係性
3つの単語のざっくりとした説明を終えたところで、関係性というところに着目してみましょう。
これら3つの単語は以下のような関係があります。

- 人工知能を実現するためにとられる手法の一つが機械学習
- 機械学習の手法の一つで、生物の神経系を模した構造を使った手法が深層学習
そもそも比べるものじゃない、土俵が違うというわけですね。
ただこの説明だとまだ具体的な想像ができないレベルだと思います。
なので最後に、プログラミング言語「Python」を用いて機械学習を実装して図に示します。
Pythonで機械学習(線形回帰)を実装
最後にちょっとした技術的な話をします。
少し難しい話になるので、「Pythonわからないよー」って方は図だけでも見ていってください。
私が一番わかりやすいと思った方の動画を参考にさせていただきます。
まずは、以下の必要なライブラリをインポートします。
- 科学計算ライブラリ
- グラフの描画用ライブラリ
- 線形回帰モデル
- 多項式回帰用ライブラリ
#必要なライブラリをインポート
import numpy as np
import matplotlib.pyplot as plt
#多項式回帰用のライブラリをインポート
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
必要なライブラリをインポートしたところで、今回使う2次元データを定義します。
使うのは、三角関数のsinを用いたサインカーブにノイズを少し乗っけたデータ20個を使います。
#2次元データ(X, y)を定義 → サインカーブにノイズが乗ったもの
data_size = 20
X = np.linspace(0, 1, data_size)
noise = np.random.uniform(low=-1.0, high=1.0, size=data_size) * 0.2
y = np.sin(2.0 * np.pi * X) + noise
#データを描画
plt.scatter(X, y)
plt.show()
そのデータがこちらです。

なんとなくサインカーブが見えますがノイズが乗ってしまっていますね。
現実世界のデータはこのように何かしらの要因でノイズ乗っています。
このデータだけからどのような法則があるかを見極めてみましょう。
今回は「どうやら3次関数で描けるのではないか」という予想の元、3次関数のモデルを作り学習をしてみましょう。
#3次関数モデル用に成形
poly = PolynomialFeatures(degree=3)
poly.fit(X.reshape(-1, 1))
X_poly_3 = poly.transform(X.reshape(-1, 1))
#X軸 0から1までを1000分割し3次関数用に成形
X_line = np.linspace(0, 1, 1000)
X_line_poly_3 = poly.fit_transform(X_line.reshape(-1, 1))
#3次関数モデルでデータを学習
lin_reg_3 = LinearRegression().fit(X_poly_3, y)
#データ、ノイズが乗る前のサインカーブ(赤)、学習したモデル(青)を描画し比較
plt.scatter(X, y)
plt.plot(X_line, np.sin(2.0 * np.pi * X_line), 'red')
plt.plot(X_line, lin_reg_3.predict(X_line_poly_3), 'blue')
plt.show()
ノイズが乗る前のサインカーブ(赤)と学習したモデル(青)はこのようになります。

案外きれいにマッチしていますね。
ここで使われた手法が機械学習です。
もっと言えば、線形回帰、重回帰分析、多項式回帰などのように呼ばれる手法です。
コードだけを見ると「難しそう…」と思う方もいれば「案外簡単?」と思う方もいるでしょう。
実際の理論は難しいと感じる人が多いと思います。
ですが、Pythonは「○○の手法で機械学習したい!」って思ったときその開発キットが用意されている、こんなイメージなので、実際の仕組みや理論を学習しなくても使えることには使えるのです。
ここが大学数学を学ぶ必要があるかないかの違いです。
