デジタル化が加速したschool【紙芝居】

### 【はじめに】
社会の複雑化・高度化、そしてAIによる知識のコモディティ化が進む中で、いま求められているのは、道具を使いこなして課題を解決できる人材です。
同時に、教育のデジタル化に対応し、コミュニケーション能力を育む力も重要になっています。では、それをどう育てていけばよいのでしょうか？
そのヒントは「モデルベース」でシチュエーションを再現しながら、実践的に学んでいくアプローチにあります。

ここから“紙芝居”形式でソリューションストーリーが展開します。
こうした形式が苦手な方は、そっとブラウザを閉じていただいても大丈夫です。

### 【紙芝居スタート】

先生：「チームミーティングを開始します！リソース状況と役割を確認し、提案に向けたアウトプットを最終確認してください。本日のミッションは、課題解決トータルソリューションの提示です！」

生徒たち：「はい！ヒアリング内容をもとに、業務プロセス全体を見通した提案を準備します！」

先生：「田中くん、資料出せる？パワポの最新版、関数モデルにAIロジック載せたやつ。お客様に“使える提案”って思ってもらえるかがポイントだからね。」

田中：
「本提案では、インプットとアウトプットの関係を視覚化し、関数ベースでの入出力設計を行っています。
加えて、成果創出に直結するゲイン設計を採用し、AIには重みとバイアスで調整可能なニューラルネットワーク型関数モデルを使用しています。
さらに、活性化関数を組み込むことで、AIとの効果的なコミュニケーションを促進します。」

説明に使用されるPythonコード
```python
import numpy as np
import matplotlib.pyplot as plt

# ① 出力電圧 = K × 入力電圧（フィードバックゲインKを計算）

# 入力電圧 (0から10Vまで)
input_voltage = np.linspace(0, 10, 100)

# フィードバックゲイン K = A / (1 + βA)
A = 1000000
beta = 0.5
K = A / (1 + beta * A)

# 出力電圧 = K × 入力電圧
output_voltage = K * input_voltage

# KをdBで表示
K_dB = 20 * np.log10(K)

# プロット
plt.figure(figsize=(10,6))
plt.plot(input_voltage, output_voltage, label=f'Output Voltage = {K} * Input Voltage', color='b')
plt.title(f'Output Voltage vs Input Voltage (K = {K}, {K_dB:.2f} dB)')
plt.xlabel('Input Voltage (V)')
plt.ylabel('Output Voltage (V)')
plt.grid(True)
plt.legend()
plt.show()

# ② 目的関数 = 重み × 特徴量入力 + バイアス（プロット）

# 重みとバイアスを定義
weights = np.array([1, 2, -0.5])  # 3つの特徴量に対する重み
bias = 1  # バイアス

# 特徴量入力 (例: 3つの特徴量)
feature_input = np.linspace(0, 10, 100)

# 目的関数
output_function = weights[0] * feature_input + bias

# プロット
plt.figure(figsize=(10,6))
plt.plot(feature_input, output_function, label='Objective Function')
plt.title('Objective Function vs Feature Input')
plt.xlabel('Feature Input')
plt.ylabel('Objective Function')
plt.legend()
plt.grid(True)
plt.show()

# ③ ニューラルネットワークと活性化関数、自動微分とバックプロパゲーション

import torch
import torch.nn as nn
import torch.optim as optim

# シンプルなニューラルネットワークを定義
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(3, 5)  # 3入力、5ノード
        self.fc2 = nn.Linear(5, 1)  # 5ノードから1出力
        self.activation = nn.ReLU()  # ReLU活性化関数

    def forward(self, x):
        x = self.fc1(x)
        x = self.activation(x)
        x = self.fc2(x)
        return x

# 入力データとターゲット
input_data = torch.tensor([[1.0, 2.0, 3.0]], requires_grad=True)  # 1つのサンプル
target = torch.tensor([[10.0]])

# モデル、損失関数、オプティマイザーを定義
model = SimpleNN()
criterion = nn.MSELoss()  # 平均二乗誤差
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 学習ループ（バックプロパゲーション）
epochs = 1000
for epoch in range(epochs):
    optimizer.zero_grad()  # 勾配の初期化

    # 順伝播
    output = model(input_data)

    # 損失計算
    loss = criterion(output, target)

    # 逆伝播
    loss.backward()

    # パラメータの更新
    optimizer.step()

    # 途中経過表示
    if epoch % 100 == 0:
        print(f'Epoch [{epoch}/{epochs}], Loss: {loss.item():.4f}')

# 最終結果
print(f'Final output: {output.item():.4f}')
print(f'Final model parameters: {list(model.parameters())}')

```
(提案終了)

先生：「良い提案です！ただ、活性化関数がどのようにAIコミュニケーションを加速させるのか、もう少し具体的な説明を加えるとさらに説得力が増します。例えばどのような場面で効果的なのかを触れてみてください。」

### まとめ
いかがでしたか？デジタルコミュニケーションやAIが進みすぎて、もし学校がそんなふうになったら…ちょっと考えるだけで嫌ですね。今日は少し冷笑っぽくなってしまったかもしれません。それでは、また。