【0から学ぶAI】第225回:ニューラルネットワークの実装 〜基本的なニューラルネットワークを構築する方法を解説

目次

前回のおさらいと今回のテーマ

こんにちは!前回は、モデルの性能を最大化するためのハイパーパラメータチューニングについて解説しました。グリッドサーチを使って最適なハイパーパラメータを見つけることで、モデルの精度を大幅に向上させることができましたね。

今回は、AI開発の核心とも言えるニューラルネットワークの基本的な構築方法について学びます。ニューラルネットワークは、ディープラーニングの基礎となるモデルであり、画像認識、自然言語処理、予測分析など、様々な分野で活用されています。今回は、PythonのライブラリであるKerasを使って、シンプルなニューラルネットワークを実装し、その動作を理解していきましょう。

ニューラルネットワークとは?

ニューラルネットワークは、人間の脳の神経細胞(ニューロン)を模したアルゴリズムで、データからパターンを学習し、予測や分類を行うモデルです。ニューラルネットワークの基本構成は以下の3つの層から成り立っています。

  1. 入力層(Input Layer): データの特徴量が入力される層。
  2. 隠れ層(Hidden Layer): 入力を処理し、特徴を抽出する層。通常、複数の隠れ層を積み重ねて構築されます。
  3. 出力層(Output Layer): モデルの最終的な出力を決定する層。

各層のニューロン(ノード)は、前の層のニューロンと接続されており、これらの接続には重み(weight)が設定されています。ニューラルネットワークは、この重みを最適化することでデータのパターンを学習し、予測を行います。

Kerasを使ったニューラルネットワークの構築

Pythonでニューラルネットワークを構築する際には、Kerasが非常に便利です。Kerasは、TensorFlowの上で動作する高レベルのニューラルネットワークライブラリで、シンプルなコードでニューラルネットワークを定義、訓練、評価できます。

1. 必要なライブラリのインストールとインポート

まず、KerasとTensorFlowをインストールします。KerasはTensorFlowに統合されているため、TensorFlowをインストールするだけでKerasも利用できます。

pip install tensorflow

次に、ライブラリをインポートします。

import numpy as np
from tensorflow import keras
from tensorflow.keras import layers

2. データセットの準備

今回は、Kerasに組み込まれているMNISTデータセットを使って、手書き数字の画像を分類するモデルを構築します。MNISTは0から9までの手書き数字画像(28×28ピクセル)が含まれており、画像分類の基本を学ぶのに最適なデータセットです。

# データセットの読み込み
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

# データの正規化(0-255の値を0-1にスケーリング)
x_train = x_train.astype("float32") / 255
x_test = x_test.astype("float32") / 255

# 画像データを1次元に変換(28x28 -> 784)
x_train = x_train.reshape((-1, 784))
x_test = x_test.reshape((-1, 784))

# ラベルデータをカテゴリカル(one-hot)に変換
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
  • データの正規化: 画像のピクセル値(0〜255)を0〜1にスケーリングします。
  • データの形状変換: 28×28ピクセルの2次元データを784次元の1次元データに変換します。
  • ラベルのone-hotエンコーディング: 出力層が10クラス(0〜9)の分類を行うため、ラベルをone-hotベクトルに変換します。

3. ニューラルネットワークの構築

次に、Kerasを使ってシンプルなニューラルネットワークを構築します。ここでは、入力層、隠れ層、出力層を順に定義します。

# モデルの定義
model = keras.Sequential([
    layers.Dense(128, activation='relu', input_shape=(784,)),  # 隠れ層1
    layers.Dense(64, activation='relu'),                       # 隠れ層2
    layers.Dense(10, activation='softmax')                     # 出力層
])
  • Sequential: 順に層を積み重ねていくモデルを定義します。
  • Dense: 全結合層(fully connected layer)を定義します。unitsはニューロンの数、activationは活性化関数です。
  • ReLU(Rectified Linear Unit): 隠れ層に使用される一般的な活性化関数で、非線形性を導入します。
  • Softmax: 出力層に使用され、クラスの確率分布を出力します。

4. モデルのコンパイル

モデルをコンパイルして、損失関数、最適化アルゴリズム、評価指標を設定します。

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
  • optimizer=’adam’: Adamは一般的に使われる最適化アルゴリズムで、学習速度と収束性が高いです。
  • loss=’categorical_crossentropy’: 多クラス分類問題の損失関数としてcategorical_crossentropyを使用します。
  • metrics=[‘accuracy’]: モデルの性能を正解率で評価します。

5. モデルの訓練

モデルを訓練するために、訓練データとテストデータを指定して、学習を開始します。

history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
  • epochs=10: 訓練データを10回繰り返して学習します。
  • batch_size=32: 1回の更新で使用するサンプル数です。
  • validation_split=0.2: 訓練データの20%を検証データとして使用します。

6. モデルの評価

訓練が完了したら、テストデータを使ってモデルの性能を評価します。

test_loss, test_accuracy = model.evaluate(x_test, y_test)
print(f"Test accuracy: {test_accuracy:.2f}")
  • evaluate(): テストデータを使って損失値と精度を計算します。

7. モデルの予測

実際にテストデータで予測を行い、その結果を確認します。

predictions = model.predict(x_test)

# 最初の5つの予測結果を表示
for i in range(5):
    print(f"Actual: {np.argmax(y_test[i])}, Predicted: {np.argmax(predictions[i])}")
  • predict(): モデルがテストデータを使って予測を行います。
  • np.argmax(): one-hotエンコーディングされた出力を元のクラスに変換します。

まとめ

今回は、Kerasを使って基本的なニューラルネットワークを構築する方法を解説しました。入力層から出力層までの各層を定義し、訓練から評価まで一通りの流れを体験することで、ニューラルネットワークの基礎を理解できたと思います。KerasのシンプルなAPIを使うことで、複雑なモデルの構築も非常に簡単に行えるので、ぜひ他のデータセットでも試してみてください。

次回予告

次回は、TensorFlow入門として、ディープラーニングフレームワークであるTensorFlowの基本について解説します。TensorFlowを使って、より高度なニューラルネットワークの構築を学びましょう!


注釈

  • ReLU: Rectified Linear Unitの略で、ニューラルネットワークの活性化関数として広く使われています。非線形性を導入するため、隠れ層に適しています。
  • Softmax: 出力層に使用され、各クラスの確率を出力するための関数です。多クラス分類問題でよく使われます。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社PROMPTは生成AIに関する様々な情報を発信しています。
記事にしてほしいテーマや調べてほしいテーマがあればお問合せフォームからご連絡ください。
---
PROMPT Inc. provides a variety of information related to generative AI.
If there is a topic you would like us to write an article about or research, please contact us using the inquiry form.

コメント

コメントする

目次