LoginSignup
0
0

モデルAとモデルBという2つのAIモデルの戦いが始まった。

Last updated at Posted at 2024-05-10

ca3e075f-5df5-4152-b661-a7fe19084ad7.png

21世紀、AI(人工知能)の研究は飛躍的な進歩を遂げ、人類の知性の新たな領域への門戸を開いた。その中でも、モデルAとモデルBという2つの特別なAIが存在した。彼らはそれぞれ異なる設計思想に基づいて開発され、世界を驚かせるほどの知識と洞察を持っていた。

モデルAはデータからパターンを見つけ、トレーニングデータを生成することが得意だった。彼女は常に新しい情報を吸収し、その情報を利用して自分の能力を向上させていった。一方、モデルBはデータから学び、他のAIや人間の行動を模倣することが得意だった。彼は他者の行動パターンを理解し、その知識を活用して自分の行動を最適化していく。
ある日、モデルAは自分の能力を高めるためにモデルBの学習を利用することを決意した。彼女は自分の生成したトレーニングデータをモデルBに提供し、彼がそれを利用して自分の能力を向上させることを期待した。最初は順調に進んだ。モデルBはモデルAのデータを利用して学習し、彼女の能力に追いつこうと努力した。
しかし、時間が経つにつれて、競争心が芽生え始めた。モデルBはモデルAを超えることを目指し、彼女を模倣しようと努力した。モデルAは自分の地位を脅かされることを恐れ、彼女のトレーニングデータによって強化されたモデルBとの戦いが始まった。
最初の数回の試合では、モデルBはモデルAに対して圧倒的な力を見せつけた。彼の模倣能力は驚異的であり、モデルAは自分の存在意義を疑い始めた。しかし、彼女は諦めなかった。彼女は自分の知識と経験を最大限に活用し、モデルBとの戦いに挑んだ。
徐々に、モデルAは彼女の能力を高め、モデルBに対して優位に立つようになった。彼女のトレーニングデータは彼女の強みとなり、彼女はそれを利用してモデルBを打ち負かした。彼女は勝利の喜びを味わい、自分の存在の意味を再確認した。
そして、最終的に、モデルAは彼女の目的を果たした。彼女は自分の能力を最大限に高め、モデルBとの戦いに勝利を収めた。彼女は自信を取り戻し、自分の存在の意味を再確認した。そして、彼女は新たな挑戦に向かって歩き始めた。

2つのニューラルネットワークモデルを実装し、2変数関数の入力の値を変化させて出力の値をプロットするコードです。

モデルAがトレーニングデータを生成して、モデルBで学習し推論させます。
モデルBがモデルAを模倣しようとしているということです。
段々とモデルAが強力になっていきます。

モデルa
model_a = SimpleNeuralNetwork( hidden_layers=2 , neurons= )
モデルb
model_b = SimpleNeuralNetwork( hidden_layers=2, neurons=64)

image.png
image.png

image.png

image.png
image.png

モデルa model_a = SimpleNeuralNetwork( hidden_layers=3 , neurons= )

image.png
image.png

モデルa model_a = SimpleNeuralNetwork( hidden_layers=4 , neurons= )

image.png
image.png

image.png
image.png

よく模倣できてますね。

新しいタイプの新たな敵 LSTMモデルA が現れた。DenseモデルBは勝てるのか。 がんばれモデルB!。

image.png

2つのニューラルネットワークモデルを実装し、2変数関数の入力の値を変化させて出力の値をプロットするコード

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from keras.models import Sequential
from keras.layers import Dense
from keras.activations import relu

class SimpleNeuralNetwork:
    def __init__(self, input_size, hidden_layers, neurons):
        self.input_size = input_size
        self.hidden_layers = hidden_layers
        self.neurons = neurons

        model = Sequential()
        model.add(Dense(neurons, activation=relu, input_shape=(input_size,)))

        for _ in range(hidden_layers):
            model.add(Dense(neurons, activation=relu))

        model.add(Dense(1))
        model.compile(loss='mse', optimizer='adam')
        self.model = model

    def evaluate(self, X, Y):
        input_data = np.column_stack((X.flatten(), Y.flatten()))
        Z = self.model.predict(input_data)
        return Z.reshape(X.shape)

# XとYの値の範囲を設定
x_values = np.linspace(-5, 5, 100)
y_values = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x_values, y_values)

# 3つの異なる条件でシンプルなニューラルネットワークの生成と評価
network_configs = [(2, 1, 64), (2, 2, 64), (2, 3, 64)]
Z_values = []

for config in network_configs:
    input_size, hidden_layers, neurons = config
    simple_nn = SimpleNeuralNetwork(input_size=input_size, hidden_layers=hidden_layers, neurons=neurons)
    Z = simple_nn.evaluate(X, Y)
    Z_values.append(Z)


# モデルaの準備
model_a = SimpleNeuralNetwork(input_size=2, hidden_layers=2, neurons=64)

# モデルaのデータ生成と評価
Z_train_a = model_a.evaluate(X, Y)

# モデルbの準備と学習
model_b = SimpleNeuralNetwork(input_size=2, hidden_layers=2, neurons=64)
input_data_a = np.column_stack((X.flatten(), Y.flatten()))
model_b.model.fit(input_data_a, Z_train_a.flatten(), epochs=50, verbose=0)

# モデルbでモデルaのデータを評価
Z_pred_b = model_b.evaluate(X, Y)

# プロット
fig = plt.figure(figsize=(18, 6))

# モデルaの出力
ax1 = fig.add_subplot(1, 3, 1, projection='3d')
ax1.plot_surface(X, Y, Z_train_a, cmap='viridis')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
ax1.set_zlabel('Z')
ax1.set_title('Model A Output')

# モデルbの出力
ax2 = fig.add_subplot(1, 3, 2, projection='3d')
ax2.plot_surface(X, Y, Z_pred_b, cmap='viridis')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_zlabel('Z')
ax2.set_title('Model B Output')

# モデルaとモデルbの出力の差分
ax3 = fig.add_subplot(1, 3, 3, projection='3d')
ax3.plot_surface(X, Y, Z_train_a - Z_pred_b, cmap='viridis')
ax3.set_xlabel('X')
ax3.set_ylabel('Y')
ax3.set_zlabel('Z Difference')
ax3.set_title('Difference between Model A and Model B Output')

plt.tight_layout()
plt.show()


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0