人工知能(AI)とは何か?わかりやすく解説!
こんにちは!
現役Webエンジニアの今井(@ima_maru)です。
今回は、人工知能(AI)についての記事になります。
この人工知能について理解することは、今後生きていくうえでほぼ必須と言っても良いでしょう。
「ものすごく恐ろしい何か」「何でもできるロボット」「意思を持ったコンピューター」のようなイメージを抱いている方も、この記事を見ることで人工知能とは何なのかについて適切に理解ができるようになると思います。
- 人工知能の概要
- 人工知能の簡単な仕組み
- 人工知能と関連するワードについて
- 人工知能を学ぶ方法
- Pythonによる機械学習(線形回帰)の実装【プログラム】
少し長くなりますので、目次などを活用していただければと思います。
それでは見ていきましょう。
人工知能(AI)とは?誤解を生みやすいので注意!
人工知能(AI:Artificial Intelligence)とは、コンピュータの計算によって知能を表現しようとする計算機科学の分野、また、知能を持ったコンピューターシステムのことを指します。
ただ注意していただきたいのが、専門家の中でも人工知能(AI)という言葉の定義は異なる部分が多くあることです。
そのため、人工知能の定義は若干あやふやであるということを覚えておきましょう。
英語では「Artificial Intelligence」と書き、この頭文字をとって「AI」と呼ばれています。
人工知能(AI)の「知能」とは何?
人工知能とは、「知能を持ったコンピューターシステム」とも言えますが、この「知能」とは一体何なのでしょうか?
知能(ちのう)は、論理的に考える、計画を立てる、問題解決する、抽象的に考える、考えを把握する、言語機能、学習機能などさまざまな知的活動を含む心の特性のことである。知能は、しばしば幅広い概念も含めて捉えられるが、心理学領域では一般に、創造性、性格、知恵などとは分けて考えられている。
知能 - Wikipedia
一般的には、人間が行っているように「考える」「認識する」「学ぶ」といったようなことを可能にする機能のことを指していますね。
例えば、以下のようなAI技術も知能が関わっているということです。
AI技術 | 概要 |
---|---|
画像認識 | 何を見ているのか認識する |
音声認識 | 発せられた言葉を認識する |
ゲームAI | ゲームにおいて勝率の高い行動を考える |
こんな風に、「考える」「認識する」「学ぶ」といったような機能(≒知能)をコンピューターの計算によって実現したものを人工知能と呼んでいます。
人工知能(AI)は意思を持っているのか?
人工知能には、「強いAI」「弱いAI」という分類があります。
これは、「AIが真の意味で意思を持っているのか?」ということについての分類です。
- 強いAI:意思を持ったAI
- 弱いAI:意思を持たないAI
強いAIのは「ドラえもん」や「鉄腕アトム」などを想像してもらえるとわかりやすいと思いますが、現在はまだ意思を持ったAI(=強いAI)の開発ができていません。
そのようなことについて知りたい方は、以下の2~3分程度で読める記事で詳しく解説していますので是非ご覧ください。
人工知能(AI)にできないことはあるのか?
最近では、人間にしかできないと思われていたことが人工知能によって実現してきています。例えば、
- 言葉を認識する
- 会話をする
- 曲を作る
- 絵を描く
- 障害物をよけながら走行する
そんな人工知能に対して、「人工知能にできないことってあるの?」という疑問を持つ方もいるでしょう。
そのことについて詳しく書いた記事がありますので、興味がある方はご覧ください。
人工知能(AI)が人間を超える日が来るのか?
人工知能の技術は目まぐるしく進化・発展を遂げていて、このままいくと「人間の知能を超える日が来るのではないか?」ということも言われています。
そういったこともあり、人工知能に対して以下のような不安感を覚えるのではないでしょうか?
- AIが人間を支配するのではないか?
- AIと人間は共存できるのか?
- AIが人間の知能を超える日はいつ?
これについては、専門家でも意見が分かれているのでどうなるかはわかりません。
これらについては、以下の記事で詳しく解説しているので、興味がある方はぜひご覧ください。
人工知能(AI)の仕組み
人工知能を正しく理解するためには、人工知能の仕組みを理解しなくてはなりません。
ですが、数学的根拠までは説明しきれないので、あくまで人工知能の大枠(何をやっているのか)を理解していただこうと思います。
基本的に人工知能は、与えられた入力に対してある出力を計算するプログラムだと思ってよいです。
そのため、この「入力」と「出力」、そして「入力から出力を計算する処理」が理解できれば、人工知能が何をやっているのかを理解できるはずです。
「入力」と「出力」とは?
人工知能において非常に大切な考え方として「入力」と「出力」があります。
人間は「リンゴの絵」を見せられたら「これはリンゴだ」と答えることができますね。
この時に見せる「リンゴの絵」が入力で、「これはリンゴだ」というのが出力になります。
「リンゴの絵」を入力したら「これはリンゴだ」という出力(返答)が返ってきたということですね。
人工知能においても、基本的にこの考えがベースとなっています。
AI技術 | 入力 | 出力 |
---|---|---|
画像認識 | 画像データ(各pixelの画素値) | 認識されたもの |
音声認識 | 音声データ(音声波形) | 言葉や単語等 |
この考えが分かれば、「どうやって出力って計算されているんだろう?」と思うはずです。
その「出力をどのようにして計算するか?」というのが人工知能の核となってきます。
人工知能の核は「入力から出力を計算する処理」
入力から出力を計算する処理は様々な手法がありますが、ここでは有名な手法としてニューラルネットワークを用いた計算方法を挙げましょう。
ニューラルネットワークとは、以下のような構造をした計算モデルです。
構造としては、入力値が複雑に計算され最終的に出力値が決まるというようになっています。
結局何をやっているかというと、数値の計算を大量に行っているだけです。
つまりはこういうことです。
- 入力値が入力される
- 入力値をもとに大量の計算がされる
- 出力値が決まる
そしてこの計算こそが知能の役割を担っているのです。
もちろんテキトーに計算を行うだけでは意味のある出力値は出ません。
逆に、意味のある出力値を出すように計算の仕方を調整していくということをします。
それこそが「学習」です。
人工知能(AI)の学習
人工知能の基本は入力から出力を計算するプログラムだということが分かったところで、「どんな計算を行えばよいのか?」という疑問が残ります。
実は、現在主流の機械学習と呼ばれる手法を用いると、「コンピューター自身が計算の仕方を学習する」ということが可能になります。
誤解を生まないように厳密にいうと、計算モデルの枠組みや構造は人間が決めて、その枠組みの中でコンピューターが学習をするということです。
ちょっと難しい話をすると、入力値から算出される出力値の誤差をもとに、誤差が小さくなるような調整を行います。
その理論には偏微分といった数学的知識が必要になったりするので少し難しいと思います。
もう少し詳しく人工知能の仕組みを理解したいという方は、難しい内容となっていますが、以下のニューラルネットワークの構造や仕組みについて書いた記事を読んでみてください。
人工知能(AI)と関連するワード
ここからは、人工知能と非常に関わりの強いワードについて紹介していきます。
機械学習
機械学習とは、機械に人間と同様の学習能力を持たせるという、人工知能を実現するための手法の1つです。
「人間が学習するように、コンピュータにも学習してもらおう!」ってことですね。この手法が現在一番注目されています。
詳しく知りたい方は以下の記事をどうぞ。
ニューラルネットワーク
ニューラルネットワークとは、脳の神経細胞(ニューロン)とそのつながりを数式的なモデルで表現したものと言われます。
人間の脳の構造からヒントを得た構造・学習モデルみたいなものです。
ディープラーニング(深層学習)
ディープラーニング(深層学習)とは、多層ニューラルネットワークを用いた機械学習のことです。
マシンパワーの向上とともに非常に高い性能を発揮してきていて、今注目の手法です。
ディープラーニングについては、近々詳しく解説した記事を上げる予定です。
教師あり学習・教師なし学習
教師あり学習と教師なし学習は、どちらも代表的な機械学習の手法です。
教師データがある学習を行うか行わないかの違いです。
強化学習
強化学習とは、試行錯誤を通じて「価値を最大化するような行動」を学習するという機械学習の手法の1つです。
教師あり学習・教師なし学習と少し異なる学習方法で、ゲームAIや自動運転などに活用されています。
自然言語処理(NLP)
自然言語処理(NLP)とは、自然言語(人間が普段読み書きしている言語)をコンピューターに処理させることを指します。
例えば、Googleの音声検索機能で「OK Google 今日の天気は?」と聞くと、「東京は、今日は25℃で曇りでしょう、」といったような返答が返ってきますよね。
この音声をテキストデータに変換する処理や、変換されたテキストデータの意味を理解する処理などが自然言語処理の代表例です。
シンギュラリティ
シンギュラリティ(技術的特異点)とは、人工知能が人間の知能を超えるときのことを指します。
2045年にシンギュラリティが来ると予想されていて、来た場合には人間の生活が大きく変わるといわれています。
Python
人工知能の話題の中でよく出てくるワード「Python」は、世界的に人気のプログラミング言語の1つで、人工知能の開発でよく用いられる言語です。
また、Webアプリ開発にも使われていたりと、人工知能以外でも活躍できるプログラミング言語です。
人工知能(AI)を学ぶには?
人工知能について「単純に知識として知りたい・理解したい」のであれば、インターネットの情報を読み漁れば十分です。
さらに深く理解したい場合は、人工知能に関する書籍を読むと良いでしょう。
また、「実際に人工知能の技術を活用したい・開発したい」というような場合は、AIプログラミングを学ぶと良いでしょう。
YouTubeやオンライン学習サービスなどを使った独学も可能です。
お金に余裕があるのであれば、Aidemy Premium Planというプログラミングスクールがおすすめです。
\ 無料のオンライン相談会あり!/
Pythonで機械学習(線形回帰)を実装
最後に機械学習の入り口として、ちょっとした技術的な話をします。
少し難しい話になるので、「Pythonわからないよー」って方は図だけでも見ていってください。
私が一番わかりやすいと思った方の動画を参考にさせていただきます。
ここでは「ノイズの乗ったデータからノイズを除去したデータを予想する」ということを、機械学習の中でも簡単な手法「線形回帰」を用いて行います。
まずは、以下の必要なライブラリをインポートします。
- Numpy:科学計算ライブラリ
- Matplotlib:グラフの描画用ライブラリ
- LinearRegression:線形回帰モデル
- PolynomialFeatures:多項式回帰用ライブラリ
#必要なライブラリをインポート
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()
学習した結果、ノイズが乗る前のサインカーブ(赤)と学習したモデル(青)はこのようになりました。
案外きれいにマッチしていますね。
ここで使われた手法が機械学習です。
もっと言えば、線形回帰、重回帰分析、多項式回帰などのように呼ばれる手法です。
これは機械学習の初歩の初歩ですが、立派な機械学習の一種です。
言ってしまえば、このような数値計算がもっともっと複雑化したものが人工知能のプログラムになるわけです。