compileについて調査してみた。(初心者がChatGPTを使ってAIを作って研究してみた)

ChatGTP-AI研究開発

はじめに

前回に引き続きAIの勉強していきます。今回はコンパイルについて調べていきます。コンパイルは作成したモデルの重み(ニューロン同士の結合の強さ)を調整していくための計算方法などの設定になってます。

モデルの重みを調整するためには最適な条件を探るための計算手順(アルゴリズム)と計算した結果と正解のデータを比較する方法、そしてその結果を評価する方法があるみたいです。

これらについて調べていきます。

compileについて

まず、ChatGPTで聞いたコード全体です。

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

# MNISTデータセットの読み込み
(X_train, y_train), (X_test, y_test) = mnist.load_data()

# データの前処理
X_train = X_train.reshape((X_train.shape[0], -1)).astype('float32') / 255
X_test = X_test.reshape((X_test.shape[0], -1)).astype('float32') / 255
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

# モデルの構築
model = Sequential([
    Dense(128, activation='relu', input_shape=(784,)),
    Dense(64, activation='relu'),
    Dense(10, activation='softmax')
])

# モデルのコンパイル
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# モデルのトレーニング
model.fit(X_train, y_train, epochs=10, batch_size=32)

# テストデータでモデルを評価
loss, accuracy = model.evaluate(X_test, y_test)
print(f"Loss: {loss}, Accuracy: {accuracy}")

今回取り上げるのは

# モデルのコンパイル
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

modelは前回作成したモデルになります。そこにcompileというメソッドを付け加えることでコンパイルしているようです。

コンパイルとは

コンパイルというのはコンピューター用語(?)で人が作成したコードなどをコンピューターが理解し実行できるように変換することをいいます。

おそらく、今回の場合はニューロンや活性化関数(モデル)が人が作成したものでそれらをコンピューターで計算するために変換しているのだと思われます。(合っているのかな…)
コードの方に戻りましょう。

compileの中身

compileの関数の中身は3つに分かれており、

optimizer : 最適化アルゴリズム

loss : 損失関数

metrics : 評価関数

になっているようです。

それぞれについて詳しく説明されているHPやブログがありましたので、掲載。

optimizerはこちら

lossはこちら

metricsはこちら

これらを読んでまとめてみますと、

optimizerで計算して、lossで正解と予測の差を求めて、metricsでそれくらい差が縮まっているか確認する。その差が小さければ精度が高くなるとことのようです。

私の中のイメージは以下のような図になるのかと思います。

最後に

すべて重要だと思うのですが、中でもlossが重要そうです。lossは損失関数と言われているようですが、目的関数ともいわれているようです。

目的関数というのは目的に合うようにコンピューターが計算する関数になります。

我々人間も目的に向かって行動した方がモチベーション維持ができると思いますので、目的の設定は重要だと思います。

なので、目的関数の設定が重要だと考えられます。

今後の研究開発にはlossもしっかり見ていきたいと思います。

個人的にはoptimizerにも興味がありますので今後も調査していきたいと思います。

コメント

タイトルとURLをコピーしました