Pythonで人工知能を作ろう!KerasとTensorFlowでニューラルネットワーク構築入門
生徒
「最近よく聞く『人工知能(AI)』を自分で作ってみたいんですけど、パソコンもあまり詳しくない私にできますか?」
先生
「大丈夫ですよ!Pythonというプログラミング言語と、KerasやTensorFlowという便利な道具を使えば、初心者の方でも『ニューラルネットワーク』というAIの仕組みを構築できます。」
生徒
「ニューラルネットワーク……なんだか難しそうな名前ですね。具体的にどうやって進めればいいんでしょうか?」
先生
「まずは全体像を掴むことから始めましょう。料理のレシピを覚えるような感覚で、一歩ずつ解説していきますね!」
1. 人工知能(AI)とニューラルネットワークの基本
「人工知能(AI)」という言葉は、今やニュースやインターネットで毎日のように見かけます。その中でも、特に人間の脳の仕組みをヒントにして作られた計算モデルを「ニューラルネットワーク」と呼びます。
人間の脳には「ニューロン」と呼ばれる神経細胞が無数にあり、それらが電気信号をやり取りすることで「これはリンゴだ」「これは猫だ」といった判断をしています。コンピュータの世界でこれを再現しようとするのがニューラルネットワークの考え方です。
一見すると魔法のように思えるかもしれませんが、実は「データを入れて、計算して、答えを出す」という手順の積み重ねです。最近注目されている「ディープラーニング(深層学習)」も、このニューラルネットワークが何層も重なって、より複雑な判断ができるようになったものを指します。
[Image of artificial neural network structure]2. 強力な助っ人!TensorFlowとKerasとは?
いざ自分でニューラルネットワークを作ろうとすると、非常に複雑な数学の計算が必要になります。しかし、安心してください。世界中の優秀なエンジニアたちが、その難しい計算を自動でやってくれる「ライブラリ(便利な道具箱)」を用意してくれています。それがTensorFlow(テンソルフロー)とKeras(ケラス)です。
- TensorFlow: Googleが開発した、機械学習のための非常に強力な土台となるソフトウェアです。
- Keras: TensorFlowの上で動く、より人間にとって分かりやすい言葉で命令を出せる「操作パネル」のようなものです。
例えるなら、TensorFlowが「高機能なオーブンや調理器具がいっぱい詰まった厨房」だとすれば、Kerasは「初心者でも簡単に使える全自動調理ボタン」です。私たちはKerasを使うことで、複雑な数式を書くことなくAIを作ることができます。
3. 準備運動:Pythonとライブラリを読み込もう
プログラミングを始める際、まず最初に行うのが「道具の準備」です。Pythonという言語には、自分が使いたい道具を呼び出す「import(インポート)」という魔法の言葉があります。
ここでは、数値を扱うのが得意な「NumPy(ナンパイ)」と、AIを作る主役である「TensorFlow」を呼び出してみましょう。
import tensorflow as tf
from tensorflow import keras
import numpy as np
# バージョンを確認してみましょう
print("TensorFlowのバージョン:", tf.__version__)
このコードを実行すると、現在インストールされているTensorFlowのバージョンが表示されます。エラーが出なければ、あなたのパソコンの中にAIを作る準備が整った証拠です。
TensorFlowのバージョン: 2.15.0
4. データの準備:AIに何を教えるかを決めよう
AIに賢くなってもらうためには、「学習」が必要です。今回は一番簡単な例として、「入力された数字を2倍にして1を足す」という単純なルールをAIに学習させてみましょう。
私たちが子供のころに「1足す1は2だよ」と教わったように、AIにも「xが0のときはyは1」「xが1のときはyは3」という正解データ(教師データ)をたくさん与えてあげます。
# 学習用のデータを作成します
# x_trainが問題、y_trainが答えです
x_train = np.array([0, 1, 2, 3, 4, 5], dtype=float)
y_train = np.array([1, 3, 5, 7, 9, 11], dtype=float)
print("問題データ:", x_train)
print("正解データ:", y_train)
np.arrayというのは、数字を綺麗に並べた「配列」というものを作る命令です。プログラミング未経験の方は「数字のリストを作っているんだな」と思ってもらえれば大丈夫です。
5. モデルの形を決める:AIの設計図を描こう
次に、AIの心臓部となる「モデル」を作成します。Kerasでは「層(レイヤー)」を積み重ねることでモデルを作ります。今回は最もシンプルな「全結合層(Dense)」を1つだけ使ったモデルを作ってみましょう。
# 1層だけのシンプルなニューラルネットワークを定義
model = keras.Sequential([
keras.layers.Dense(units=1, input_shape=[1])
])
# AIの設定(コンパイル)
model.compile(optimizer='sgd', loss='mean_squared_error')
ここで出てきた難しい用語を簡単に解説します。
- Sequential(シーケンシャル): 層を順番に並べるという意味です。
- Dense(デンス): ニューロン同士が全て繋がっている、最も一般的な層のことです。
- Optimizer(オプティマイザ): どうやって間違いを修正して賢くなるかの「改善方法」です。ここでは「sgd」という定番のアルゴリズムを使っています。
- Loss(ロス): AIの出した答えと本当の正解がどれだけズレているかを示す「不正解度」です。
6. 学習開始!AIに繰り返し練習させよう
いよいよ学習(トレーニング)の時間です。AIは最初、デタラメな答えを出しますが、何度も問題を解き直すことで、徐々に正解に近づいていきます。この繰り返しの回数を「エポック(Epochs)」と呼びます。
# AIに500回繰り返し学習させます
print("学習を開始します...")
history = model.fit(x_train, y_train, epochs=500, verbose=0)
print("学習が完了しました!")
model.fitという命令が、まさに「特訓しろ!」という指示になります。epochs=500は、同じ問題を500回繰り返し練習するという意味です。人間なら飽きてしまいますが、コンピュータは文句一つ言わずに頑張ってくれます。
学習を開始します...
学習が完了しました!
7. 予測してみよう:AIの実力をテストする
学習が終わったら、AIがどれくらい賢くなったか試してみましょう。まだ教えていない「10」という数字を入れたとき、AIは正しく「21」に近い数字を答えられるでしょうか?(2倍して1を足すと21になりますね)
# 未知のデータ「10」を入れて予測させます
result = model.predict([10.0])
print("AIが予測した10の答えは:", result[0][0])
実行結果を見てみましょう。ぴったり「21.0」にならなくても、限りなく近い数字が出ていれば成功です。
AIが予測した10の答えは: 20.98543
AIは「2倍して1を足す」という数式を直接教わったわけではありません。与えられたデータから「どうやら、この数字を2倍して1を足すと正解になるらしいぞ」という法則性を見つけ出したのです。これが機械学習の凄さです。
8. 画像認識への道:MNISTデータセットとは?
先ほどは数字の計算でしたが、AIといえば「画像を見て判断する」ことを思い浮かべる人も多いでしょう。ニューラルネットワークの入門で必ずと言っていいほど登場するのが、MNIST(エムニスト)というデータセットです。
これは、0から9までの手書きの数字が画像としてたくさん集められたものです。
初心者の方が次にステップアップするなら、この「手書き数字を判別するAI」を作るのがおすすめです。Kerasにはこのデータを一行でダウンロードできる機能も備わっています。文字を認識する仕組みも、基本的には先ほどの「数値を計算して予測する」仕組みの延長線上にあります。画像もコンピュータにとっては、色の濃さを表す「数字の集まり」に過ぎないからです。
9. パソコン初心者でもできる学習のコツ
「プログラミング未経験で、パソコンもあまり得意じゃない」という方が独学を進めるのは勇気がいりますよね。でも安心してください。最近は「Google Colaboratory(グーグル・コラボラトリー)」という無料のサービスがあります。
これを使えば、自分のパソコンに難しい設定を一切することなく、インターネットブラウザ(Google Chromeなど)だけでPythonやAIのプログラムを動かすことができます。
大事なのは、最初から全てを理解しようとしないことです。「importって書けば道具が使えるんだな」「model.fitで学習するんだな」というふうに、まずは「おまじない」だと思って真似することから始めてみてください。何度もコードを書いて動かしているうちに、少しずつ「あ、こういうことか!」とパズルが繋がる瞬間がやってきます。
まとめ
今回の記事では、Python(パイソン)と強力なライブラリであるTensorFlow(テンソルフロー)、そして初心者にも優しいKeras(ケラス)を用いた人工知能(AI)開発の第一歩を解説しました。 ニューラルネットワーク(ニュウラルネットワーク)という言葉を聞くと、数学の難しい知識が必要だと身構えてしまうかもしれませんが、実際にはデータの準備、モデルの定義、学習、予測というシンプルな4ステップで構成されていることがお分かりいただけたかと思います。
重要キーワードの振り返り
SEO(エスイーオー)の観点からも、今回登場した技術用語は現代のIT業界において非常に重要なキーワードばかりです。これらを正しく理解し、適切に使いこなすことが、エンジニアとしての第一歩となります。
| 用語 | 読み方 | 役割・意味 |
|---|---|---|
| TensorFlow | テンソルフロー | Google(グーグル)が開発した機械学習の基盤となるライブラリ |
| Keras | ケラス | 直感的にニューラルネットワークを記述できる高水準API |
| Epochs | エポック | 学習データを繰り返し何回学習させるかの単位 |
| Optimizer | オプティマイザ | 誤差を最小にするために重みを調整する最適化アルゴリズム |
| Loss Function | ロスファンクション | 正解と予測値のズレを計算する損失関数(シュンシツカンスウ) |
さらに理解を深めるためのサンプルコード
記事の中で紹介したコードを少し応用して、学習の経過(履歴)を確認する方法を見てみましょう。学習がうまく進んでいるかどうかを視覚化することは、ディープラーニング(ディープラーニング)において非常に重要です。
# 学習の履歴を詳しく見てみましょう
# model.fitの戻り値であるhistoryには、学習中の損失(Loss)が記録されています。
import matplotlib.pyplot as plt
# 前のセクションで実行した学習結果のhistoryを使います
loss = history.history['loss']
epochs = range(1, len(loss) + 1)
# グラフを表示(ここでは概念的なコードとして記述します)
print("各エポックごとの損失(Loss)の値を確認します。")
for i, l in enumerate(loss):
if (i + 1) % 50 == 0:
print(f"エポック {i+1}: 損失 = {l:.4f}")
このように、Loss(ロス)の値が回数を重ねるごとに小さくなっていれば、AIが着実に賢くなっている証拠です。最初は大きな間違いをしていたAIが、500回の特訓(エポック)を経て、最終的には人間に近い判断力を手に入れるプロセスは、まさにプログラミングの醍醐味と言えるでしょう。
次のステップ:画像認識や自然言語処理へ
今回は「数値を2倍にする」という非常にシンプルなタスクでしたが、この基礎は画像認識(ガゾウニンシキ)や自然言語処理(シゼンゲンゴショリ)にもそのまま応用できます。
例えば、MNIST(エムニスト)のような手書き文字認識では、入力データが「数枚の画像データ」に変わるだけで、model.fitを使って学習させるという流れは全く同じです。
初心者の皆さんは、まずこの基本形を何度も自分の手で入力し、エラーが出たら修正するという作業を繰り返してみてください。ブラウザだけで動くGoogle Colaboratory(グーグル・コラボラトリー)を活用すれば、高価なパソコンを買わなくても今すぐAI開発を体験できます。 人工知能の構築は、もはや一部の専門家だけのものではありません。興味を持ったその瞬間が、最高のスタートタイミングです。
生徒
「先生、ありがとうございました!最初は数式とかが出てくるのかと思って怖かったですけど、意外と短いプログラムでAIが作れるんですね。」
先生
「そう言ってもらえると嬉しいです。今の時代はKeras(ケラス)のような便利な道具があるので、中身の難しい計算はコンピュータに任せて、私たちは『どういう設計図を作るか』に集中できるんですよ。」
生徒
「『エポック』っていう言葉も覚えました!500回も練習させるから、あんなに正確な答えが出せるようになるんですね。でも、予測結果がぴったり21じゃなくて、20.98…みたいに少しズレたのはどうしてですか?」
先生
「鋭い質問ですね!それは、ニューラルネットワークが『数式を解いている』のではなく、あくまでデータから『傾向を推測している』からなんです。AIにとっての正解は、絶対的な数値ではなく、限りなく誤差をゼロに近づけた結果なんですよ。」
生徒
「なるほど、確率的に『これが正解っぽいぞ』って判断しているイメージなんですね。次はもっと複雑な、写真を見分けるAIとかにも挑戦してみたいです!」
先生
「その意気です!まずはMNIST(エムニスト)という手書き文字のデータセットを使って、画像認識の基礎を学んでみましょう。基本の構造は今日やったことの延長線上にあるので、きっとスムーズに理解できるはずですよ。頑張りましょう!」