ディープラーニングのシステムとプログラミング
ディープラーニングのプログラミングとシステム制作に必要な知識とスキルを身につけるために、以下の7つの目標を設定します。
- Pythonプログラミング: ディープラーニングのモデル構築やデータ前処理に必要なPythonの基本文法とライブラリの使用方法を学び、実践的なプログラミングスキルを習得します。
- ディープラーニングの基礎と機械学習の実践: ニューラルネットワークの仕組み、損失関数、最適化手法、学習と検証、過学習対策などのディープラーニングの基礎理論を学びます。scikit-learnなどのライブラリを活用し、機械学習の実践スキルを身につけます。
- ディープラーニングフレームワーク: PyTorchを使用して、ディープラーニングモデルの定義、学習、検証、予測までの一連の流れを習得します。ニューラルネットワークの構築と利用方法を実践的に学びます。
- データセット: 大規模データの前処理、画像データの拡張、アノテーションなどのデータ処理スキルを学びます。データローダーの実装、データの可視化、物体検出やセグメンテーションなどのタスクに適したデータセット(COCO, Cityscapesなど)の活用方法を習得します。
- ハイパーパラメータ調整と性能評価: ニューラルネットワークの層の数、ユニット数、学習率などのハイパーパラメータの調整方法を学び、性能改善のための実践スキルを身につけます。
- 応用スキル: 再学習、転移学習、半教師あり学習、ドメイン適応などの発展的な学習手法を理解します。GANによる画像生成、Transformerを使った自然言語処理、拡散モデル、物体検出やセグメンテーションの応用例を通して、具体的なアプリケーション開発スキルを習得します。
- 研究スキル: 先行研究の調査方法と論文読解力を身につけ、最新の技術動向をキャッチアップできる能力を養います。
これらの目標を達成するために、体験的な学習、体系的な知識習得、実践的な演習を組み合わせた授業を行います。さらに、授業で学んだ内容を発展させるために、以下の自主的な取り組みを推奨します。
- アクティブ・ラーニング: 自分で調査、試行、実験、考察を行い、能動的に学習を深める。
- コードの改善: プログラムを自作する.そして、必要に応じて、ChatGPTなどのツールも活用して、プログラムのリファクタリングや改善を行う。
- 成果の公開: GitHubなどのプラットフォームで、作成したプログラムを公開し、フィードバックを得る。
- 継続的学習: 最新の技術動向を常にリサーチし、学び続ける姿勢を持つ。
*
【目次】
- プログラミングの基礎,AIシステムの基礎: [PDF], [パワーポイント]
- ニューラルネットワークの基礎: [PDF], [パワーポイント]
- ニューラルネットワークによる分類,未来予測: [PDF], [パワーポイント]
- ディープラーニングの利用例: [PDF], [パワーポイント]
- 画像分類: [PDF], [パワーポイント]
- 物体検出: [PDF], [パワーポイント]
- セグメンテーション: [PDF], [パワーポイント]
- 姿勢推定: [PDF], [パワーポイント]
- 顔情報処理: [PDF], [パワーポイント]
- 自然言語処理の基礎: [PDF], [パワーポイント]
- Segment Anything ー 汎用性のあるセグメンテーションモデル ー: [PDF], [パワーポイント]
- 全体まとめと発展: [PDF], [パワーポイント]
1. プログラミングの基礎,AIシステムの基礎
主なポイント
プログラミングの基礎とAIシステムの基礎
-
プログラミングと人工知能の楽しさ
プログラミングは人間の力を増幅し、私たちができることを大幅に広げる技術です。プログラミングの特徴として:
- クリエイティブな行為であり、自分のアイデアを形にすることができる
- シミュレーション、大量データ処理、AI連携、ITシステム制作など様々な活動で役立つ
- 作業の自動化や問題解決に活用できる
人工知能は人間の思考を模倣し、超えることを目指す挑戦的分野です。人工知能の特徴として:
- 現在進行形の最先端技術であり、未来に向けても発展が続く刺激と興奮に満ちた分野
- 画像認識、物体検出、顔情報処理、テキスト検出など様々な応用がある
- データから新しい価値を創造できる能力を持つ
-
Pythonの基礎
Pythonプログラミングにおける重要な概念:
- モジュール:特定の機能を実現するためのPythonプログラムファイル
- import turtleはturtleモジュールを現在のプログラムにインポート
- クラスとオブジェクト:クラスは同じ種類のオブジェクトの集まり
- turtle.Turtle()はturtleモジュールのTurtleクラスのオブジェクト生成
- Turtleクラスは図形の描画や移動などの操作の機能を実現
- メソッド:オブジェクトが持つ機能や操作
- goto(0,100)は指定した座標への移動
- forward(100)は前進、right(90)は右回りに回転
タートルグラフィックスでは、カーソルを使って視覚的にプログラミングの結果を確認できます。これにより、プログラミングをゲーム感覚で楽しみながら学習することができます。
- モジュール:特定の機能を実現するためのPythonプログラムファイル
-
対話型AI(ChatGPT)の活用
ChatGPTはAIによる対話システムで、以下のような活用方法があります:
- 文章処理(要約、推敲、翻訳)のほか、問答により学び、新たな視点を得ることができる
- プログラミング学習における質問や問題解決のサポート
- プログラム作成の補助やデバッグの支援
- 勉強用の要点整理や確認問題の作成
ChatGPT利用上の注意点:
- AIの回答が間違っている場合がある(必ず根拠を確かめる)
- 個人情報や機密情報を投稿しない
- 大学のレポートなどはAIの回答をそのまま提出せず、参考として活用する
-
AIプログラムの構成
人工知能プログラムは以下の要素から構成されています:
- 学習データの読み込みと前処理:画像のサイズ変更やデータの正規化
- モデルの構築:ニューラルネットワークの層の設計
- モデルのコンパイル:最適化手法や評価指標の設定
- 学習:重みとバイアスの最適化
- モデルの検証:学習済みモデルの評価
- タスク実行:新たなデータに対する予測
例として「犬」か「猫」かを判別する画像分類プログラムでは、176の犬画像と183の猫画像で学習し、新しい画像に対して確率を出力します。
演習
演習:PythonプログラミングとAI画像分類の基礎
演習の全体像と進め方
本演習では、Pythonプログラミングの基本的な描画機能から始め、最終的にはAI(人工知能)による画像分類プログラムの構築と実行までを段階的に学びます。
-
演習①~③では、
turtle
モジュールを用いたグラフィックス描画を通して、Pythonの基本的な文法や概念(関数の呼び出し、座標、繰り返し、リストなど)を視覚的に学びます。これらはオンライン環境(Trinket)で手軽に実行・編集できます。 -
演習④では、より実践的なAIプログラムとして、犬と猫の画像を分類するニューラルネットワークモデルを扱います。こちらはご自身のPC環境でPython、必要なライブラリ、画像データを準備して実行します。
各演習は特定のテーマに焦点を当てていますが、順番に取り組むことで、プログラミングの基礎からAI応用への流れをスムーズに理解できるよう設計されています。
演習
① タートルグラフィックス:基本的な移動
-
実行環境: https://trinket.io/python/f29bfe71cd
上記リンク先でプログラムを実行・編集できます。「実行ボタン(► Run)」をクリックしてください。
-
プログラム内容:
Pythonの
turtle
モジュールを使い、画面上に「カメ(turtle)」を表すカーソルを動かして線を描画します。t = turtle.Turtle()
でカメオブジェクトを作成し、t.goto(x, y)
で指定した座標へカメを移動させます。このプログラムでは、(0, 0)から(0, 100)へ、次に(100, 0)へと移動し、直角二等辺三角形の2辺を描きます。import turtle t = turtle.Turtle() t.goto(0,100) t.goto(100,0)
-
ポイント:
import turtle
でモジュールを読み込むことの理解。turtle.Turtle()
で描画用のオブジェクトを作成すること。goto(x, y)
メソッドが、指定した絶対座標へカーソルを移動させることを確認しましょう。- 座標(0, 0)が画面中央の原点であることを意識しましょう。
② タートルグラフィックス:星形の描画
-
実行環境: https://trinket.io/python/5366def2f4
上記リンク先でプログラムを実行・編集できます。「実行ボタン(► Run)」をクリックしてください。
-
プログラム内容:
turtle
モジュールを使用し、複数の座標点を順番にgoto()
メソッドで結ぶことで、星形の図形を描画します。始点(0, 100)から始まり、5つの頂点を経由して、最後に始点に戻るように座標が指定されています。import turtle t = turtle.Turtle() t.goto(0, 100) t.goto(58, -80) t.goto(-95, 30) t.goto(95, 30) t.goto(-58, -80) t.goto(0, 100)
-
ポイント:
- 複数の
goto()
呼び出しを連続させることで、複雑な図形が描けることを理解しましょう。 - 各
goto()
の座標値が、描画される図形の形をどのように決定しているかを確認しましょう。 - (応用)座標値を変更すると、どのような異なる図形が描けるか試してみましょう。
- 複数の
③ タートルグラフィックス:繰り返しと色
-
実行環境: https://trinket.io/python/f8cd554693
上記リンク先でプログラムを実行・編集できます。「実行ボタン(► Run)」をクリックしてください。
-
プログラム内容:
turtle
モジュールに加えて、繰り返し処理(for
ループ)と色の指定を利用して、複数の円を描画します。colors
リストに色の名前を格納し、for i in range(3):
で3回の繰り返し処理を行います。ループの中で、t.color()
で描画色を設定し、t.circle()
で円を描き、t.forward()
で次の円を描く位置へ移動します。これにより、赤、緑、青の3つの円が一列に並びます。import turtle t = turtle.Turtle() colors = ["red", "green", "blue"] for i in range(3): t.color(colors[i]) t.circle(30) t.forward(50)
-
ポイント:
for
ループを使って同じような処理を繰り返す方法を理解しましょう。- リスト (
colors
) を使って複数のデータ(ここでは色名)を管理する方法。 - ループ内でリストの要素 (
colors[i]
) を順番に取り出して利用する方法。 color()
,circle()
,forward()
といった新しいturtle
メソッドの機能を確認しましょう。- (応用)色のリストや円のサイズ、移動距離(
forward
の値)を変更すると、描画結果がどう変わるか試してみましょう。
④ AIによる画像分類(犬と猫)
-
実行環境: ご自身のPC (Windows推奨)
-
前準備 (環境構築):
この演習プログラム(
enshu1.py
)を実行するために、以下の手順でご自身のPCに必要なソフトウェアとデータを準備します。コマンドプロンプト(またはPowerShell)を管理者として実行し、以下のコマンドを順番に入力して実行してください。-
Pythonのインストール:
- https://www.python.org からPythonをダウンロードしてインストールします。この授業では Python 3.10 または 3.11 を推奨します (TensorFlow 2.10.1との互換性のため)。
- インストール時に「Add Python 3.x to PATH」にチェックを入れることを推奨します。
-
必要なライブラリのインストールとデータ準備:
以下のコマンドをコマンドプロンプトで実行します。Pythonのパッケージ管理ツール(
pip
)の更新、開発環境(Jupyter
等)、turtle
、AI関連ライブラリ(TensorFlow
,Pillow
,Matplotlib
)のインストール、および演習で使用する犬と猫の画像データのダウンロード・展開、演習用スクリプト(enshu1.py
)のダウンロードを行います。python -m pip install -U pip setuptools python -m pip install -U jupyterlab jupyter jupyter-console jupytext PyQt5 nteract_on_jupyter spyder python -m pip install -U PythonTurtle python -m pip install tensorflow==2.10.1 pillow matplotlib mkdir c:\coco2017 cd c:\coco2017 curl -O https://www.kkaneko.jp/a/dog.zip curl -O https://www.kkaneko.jp/a/cat.zip curl -O https://www.kkaneko.jp/a/dogcat.zip powershell Expand-Archive -DestinationPath . dog.zip powershell Expand-Archive -DestinationPath . cat.zip powershell Expand-Archive -DestinationPath . dogcat.zip del enshu1.py curl -O https://www.kkaneko.jp/a/enshu1.py
- 注意:
curl
コマンドが利用できない場合は、Webブラウザで各URLにアクセスし、ファイルをc:\coco2017
フォルダに手動でダウンロード・展開してください。
- 注意:
-
-
プログラムの実行:
コマンドプロンプトで
c:\coco2017
ディレクトリに移動した状態で、次のコマンドを実行します。python enshu1.py
-
プログラム内容と学習ポイント:
このプログラム (
enshu1.py
) は、AIの一分野である機械学習(特にディープラーニング)を用いて、与えられた画像が「犬」であるか「猫」であるかを分類するモデルを構築し、実際に分類を行うものです。プログラム全体を通して、画像分類AIがどのように作られ、動くのかの一連の流れを体験できます。-
プログラムが行うことの概要:
- 犬と猫の画像データを読み込み、AIモデルが扱いやすい形式に変換(前処理)。
- ニューラルネットワークモデル(畳み込みニューラルネットワーク: CNN)を定義。
- 用意した犬と猫の画像データを使って、モデルに画像の特徴を学習させる(訓練)。
- 学習済みモデルが未知の画像(テスト画像)をどの程度正しく分類できるか評価。
- 実際にテスト画像を入力し、犬か猫かの分類結果と、その確率を表示。
-
学ぶことができる知識とスキル(コード内の各ステップに対応):
- 画像の読み込みと前処理 (
preprocess_image
関数,images
リスト作成部分):PIL
(Pillow) ライブラリを使った画像の読み込み、指定サイズへの変更 (resize
)。- 画像を数値データ (NumPy配列) に変換し、値を0から1の範囲に正規化する意味。
- データセット(多数の画像と正解ラベル
labels
)の準備方法。
- モデルの構築 (
tf.keras.models.Sequential([...])
):TensorFlow
(tf
) とKeras
を使ったニューラルネットワークモデルの層構造の定義方法。- 畳み込み層 (
Conv2D
)、プーリング層 (MaxPooling2D
)、全結合層 (Dense
) など、画像認識でよく使われる層の役割の概要。 - 活性化関数 (
relu
,softmax
) の役割の概要。
- モデルのコンパイル (
model.compile(...)
):- モデルを学習させるための設定(最適化手法
optimizer='adam'
, 損失関数loss='sparse_categorical_crossentropy'
, 評価指標metrics=['accuracy']
)を行うこと。
- モデルを学習させるための設定(最適化手法
- 学習 (
model.fit(...)
):- 用意した画像データ (
np.array(images)
) と正解ラベル (labels
) を使ってモデルを訓練すること。 epochs=5
は、データセット全体を5回繰り返して学習させることを意味する。
- 用意した画像データ (
- モデルの評価 (
model.evaluate(...)
):- 学習に使っていないデータ(テストデータ)で、モデルの性能(損失
Test Loss
と精度Test Accuracy
)を確認する重要性。
- 学習に使っていないデータ(テストデータ)で、モデルの性能(損失
- タスクの実行(予測) (
model.predict(...)
,plt.imshow(...)
など):- 学習済みモデルを使って、新しい画像 (
test_image_path
) が犬か猫かを予測する方法。 np.expand_dims
でモデル入力用にデータの形を調整すること。- 予測結果 (
predictions
) は各クラス(犬、猫)に属する確率として出力されること。 np.argmax
で最も確率の高いクラスを最終的な分類結果とすること。Matplotlib
(plt
) を使って画像を表示する方法。
- 学習済みモデルを使って、新しい画像 (
- 画像の読み込みと前処理 (
-
-
ソースコード (
enshu1.py
):from PIL import Image import numpy as np import os import tensorflow as tf import matplotlib.pyplot as plt # 1. 画像の読み込みと前処理 def preprocess_image(image_path): # ... (preprocess_image 関数の実装) ... image = Image.open(image_path).resize((150, 150)) image = np.array(image) / 255.0 # Handle grayscale images by converting them to RGB if image.ndim == 2: image = np.stack((image,) * 3, axis=-1) # Handle images with alpha channel by removing it elif image.shape[2] == 4: image = image[:, :, :3] return image # データセットの画像とラベルの設定 os.chdir("c:/coco2017") # (非常に長いリストのため、一部のみ表示。実際には全てのパスが含まれます) image_paths = ["dog/000000017029.jpg", "dog/000000022192.jpg", # ... more dog paths ... "cat/000000004795.jpg", "cat/000000010363.jpg"] # ... more cat paths ... ending with "cat/000000574810.jpg" # (同様に非常に長いリストのため、一部のみ表示) labels = [0, 0, # ... many 0s ... 1, 1] # ... many 1s ... ending with 1 images = [preprocess_image(path) for path in image_paths] labels = np.array(labels) images = np.array(images) # Convert list of images to NumPy array # 2. モデルの構築 model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)), tf.keras.layers.MaxPooling2D((2, 2)), # Add more Conv and Pooling layers if needed tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(2, activation='softmax') # 2 classes: dog and cat ]) # 3. モデルのコンパイル model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 4. 学習 # Check if images array is empty or contains incompatible shapes if images.size == 0: print("Error: No images loaded or preprocessed correctly.") elif len(images.shape) < 4: print(f"Error: Incorrect shape for images array: {images.shape}. Expected (num_samples, height, width, channels).") else: print(f"Starting model training with {images.shape[0]} images...") model.fit(images, labels, epochs=5) # Use the NumPy array directly # 5. モデルの評価 (Use a different set of images for evaluation if available) # Example using the same data for simplicity, ideally use a separate validation set print("Evaluating model...") # Ensure test data is preprocessed correctly test_image_paths = ["dogcat/000000001675.jpg", "dogcat/000000007386.jpg"] try: test_images = np.array([preprocess_image(path) for path in test_image_paths]) test_labels = np.array([0, 1]) # Corresponding labels for test images (0: dog, 1: cat) if test_images.size > 0 and len(test_images.shape) == 4: test_loss, test_accuracy = model.evaluate(test_images, test_labels) print("Test Loss:", test_loss) print("Test Accuracy:", test_accuracy) else: print("Error: Test images could not be loaded or processed correctly.") except FileNotFoundError as e: print(f"Error loading test image: {e}. Make sure dogcat.zip was extracted.") except Exception as e: print(f"An error occurred during evaluation: {e}") # 6. タスクの実行(学習済みモデルを使用して新たな画像に対して予測を行う) print("Running predictions on test images...") for test_image_path in test_image_paths: try: test_image = preprocess_image(test_image_path) test_image_for_prediction = np.expand_dims(test_image, axis=0) # Add batch dimension if len(test_image_for_prediction.shape) == 4: # Ensure shape is (1, 150, 150, 3) predictions = model.predict(test_image_for_prediction) # Display the image image = plt.imread(test_image_path) plt.imshow(image) plt.title(os.path.basename(test_image_path)) # Show only filename plt.axis('off') # Hide axes plt.show() # Print prediction details print(f"Image: {os.path.basename(test_image_path)}") print(f"Prediction probabilities (Dog, Cat): {predictions[0]}") predicted_label_index = np.argmax(predictions[0]) predicted_label = "犬 (Dog)" if predicted_label_index == 0 else "猫 (Cat)" print(f"分類結果: {predicted_label}") print("-" * 20) else: print(f"Error: Could not process image {test_image_path} for prediction due to shape issues.") except FileNotFoundError: print(f"Error: Test image file not found at {test_image_path}") except Exception as e: print(f"An error occurred during prediction for {test_image_path}: {e}")
注: 上記ソースコード内の
image_paths
とlabels
のリストは非常に長いため、表示を一部省略しています。実際のenshu1.py
ファイルには全てのデータが含まれています。
演習の活用方法
-
オンライン演習 (①~③):
- Trinket上でコードを自由に修正して実行できます。
goto()
の座標値、circle()
の半径、forward()
の距離、colors
リストの内容などを変更し、描画結果の変化を観察することで、各命令や構文の理解を深めましょう。
-
ローカル演習 (④):
- プログラム(
enshu1.py
)内のパラメータ(例:epochs
の値、テスト画像のファイル名test_image_path
のリスト)を変更して実行し、結果(学習時間、精度、分類結果)がどのように変わるか観察してみましょう。(注意: モデル構造やデータ処理部分の変更は、エラーの原因となる可能性があるため、まずは簡単なパラメータ変更から試すことを推奨します。) - コード内の各処理が、AIモデル構築・学習・予測のどのステップに該当するかを意識しながら読み進めましょう。
- プログラム(
今回の授業で学ぶ意義と満足感
-
プログラミングの基礎実践: Pythonを使ったグラフィックス描画や基本的な処理(繰り返し、リスト操作)を体験し、プログラムでアイデアを形にする基本的なプロセスを学びます。
-
問題解決と自律学習: オンライン環境や自身のPC環境でコードを実行・修正する経験を通して、試行錯誤しながら問題を解決する力や、自ら学びを進める力を養います。
-
AI技術への理解と興味喚起: AI(画像分類)の基本的な仕組みやプログラム構成に触れることで、最先端技術への理解を深め、情報工学分野への興味や学習意欲を高めます。将来、ITエンジニアや研究者として活躍するための基礎知識と自信を育みます。
2. ニューラルネットワークの基礎
主なポイント
-
機械学習の基本概念
機械学習は、コンピュータがデータを使用して学習することにより知的能力を向上させる技術です。機械学習の特徴として:
- 情報の抽出能力を持ち、ルールや知識のプログラム化が不要
- 直感、主観、経験など人間には容易だがプログラム化が困難な作業に対応
- 一般のプログラミングとは異なり、明示的な指示ではなくデータから学習する能力を持つ
機械学習における重要な概念として「汎化」があります。これは訓練データから学習したパターンを未知のデータにも適用できる能力です。
-
ニューラルネットワークの構造と仕組み
ニューラルネットワークは以下の要素から構成されています:
- ユニット:基本的な計算単位で、入力の重みづけ、合計とバイアス、活性化関数の適用を行う
- 層構造:入力層、隠れ層、出力層などから成り、データが一方向に流れる
- 結合:ユニット間の接続で、重みを持つ
ニューラルネットワークの処理の原理は:
- 入力の重みづけ(入力値に重みを掛ける)
- 合計とバイアス(重み付けした入力の合計にバイアスを加える)
- 活性化関数の適用(合計値に活性化関数を適用して出力を得る)
活性化関数には、シグモイド関数やReLU(2011年発表)などがあります。
-
ニューラルネットワークの学習
ニューラルネットワークの学習過程は:
- 訓練データを用いてニューラルネットワークから結果を出し、正解との誤差を計算
- 結合の重みとバイアスを調整して誤差を減らす
- 誤差が減らなくなったら最適化完了とみなす
学習の目的は「望みの出力が得られるように重みとバイアスを調整すること」です。
-
畳み込み(Convolution)の仕組み
畳み込みは:
- データを移動しながらカーネル(フィルタ)と重ね合わせる操作
- カーネルと同じ長さにデータを切り出し、要素同士の掛け算と合計を計算
- 特定のパターンに強く反応するという特性を持つ
画像処理における畳み込みは、画像データの各部分に対してカーネルを適用し、特徴を抽出します。応用例として、ぼかしやエッジ抽出などの画像処理が挙げられます。
-
応用と意義
この講義の学習意義として:
- AIの可能性に対する理解と興味の向上
- AIの設計・実装に必要な知識の修得
- 実際のプログラムや学習データを通じた直感的理解
- AI時代に活躍できる人材育成への貢献
ニューラルネットワークは画像認識や自然言語処理など、幅広い分野で応用されています。
演習
演習の全体像と進め方
本演習では、ニューラルネットワークの基礎概念を段階的に学びます:
- 最初に基本的なニューロンの動作原理
- 次に複数ニューロンの組み合わせによる複雑な問題解決
- さらにニューロンのパラメータ調整の効果
- 最後に畳み込み操作の基本原理
各演習は独立していますが、順番に取り組むことで理解が深まるよう設計されています。
演習
①ReLU関数とニューロンの動作
https://trinket.io/python/af9e01d901
ReLU関数とニューロンの動作を実装しています。まず、ReLU関数を定義し、入力が0未満の場合は0を、0以上の場合は入力値をそのまま返します。次に、ニューロンの処理を行うn関数を定義し、3つの入力に対して重みを掛け、バイアスを加えた値をReLU関数に渡します。その後、様々な入力値に対してReLU関数とn関数の出力を表示し、ニューロンの振る舞いを確認しています。
ポイント: プログラムの実行結果を観察し、入力値の変化に対してReLU関数がどのように反応するかに注目してください。特に入力が負の値の場合と正の値の場合の違いを理解することが重要です。
②XOR問題の実装
https://trinket.io/python/8a0eed74c9
3つのニューロンを組み合わせて、XOR(排他的論理和)の機能を実現しています。ReLU関数は前の例と同様です。n1, n2, n3の3つの関数は、それぞれ異なる重みとバイアスを持つニューロンを表現しています。n関数は、入力x1, x2を受け取り、それらをまずn1とn2に通した後、それぞれの出力をn3への入力として渡すことでXORの出力を計算します。最後に、4つの異なる入力パターン(0,0)(0,1)(1,0)(1,1)に対してn関数を呼び出し、XORの真理値表に従った出力を表示します。
ポイント: XOR問題は単層のニューラルネットワークでは解決できない非線形問題として有名です。コードを通して、なぜ複数層が必要なのか、各ニューロンがどのような役割を果たしているのかを考察してみましょう。
③ニューロンの重み調整
https://trinket.io/python/b1f04a9758
2つの入力を受け取るニューロンの動作を示しています。ReLU関数は前の例と同様です。 n関数は、2つの入力x1とx2に対して、重み4と-2を掛け、バイアスは無しで計算します。その結果をReLU関数に渡し、出力を返します。プログラムでは、x1を3に固定し、x2を0から8まで変化させながら、ニューロンの出力を表示しています。このニューロンは、x1の4倍からx2の2倍を引いた値が正の場合に活性化し、出力を返します。
応用課題: コード中の重み"-2"を"-6"に変更し、出力がどのように変化するか観察してみましょう。この変更がニューロンの判断境界にどのような影響を与えるか考察できますか?
④畳み込み操作
https://trinket.io/python/3419fd07e4
3つの入力を受け取る関数cの動作を示しています。 c関数は、3つの入力x1, x2, x3に対して、重み1, 0, 1を掛け、バイアスは無しで計算します。その結果を返します。プログラムでは、0と1からなる長さ10のリストxを定義しています。その後、iを0から7まで変化させながら、xのi番目からi+2番目までの3つの要素をc関数に渡し、出力を表示しています。
実践的意義: この簡単な畳み込み操作は、実際のCNN(畳み込みニューラルネットワーク)で画像処理を行う際の基本原理です。出力結果からどのようなパターン(例:1,0,1や1,1,1)に強く反応しているか確認してみましょう。
演習の活用方法
- 各演習コードは自由に修正して実験できます
- パラメータ(重みやバイアス)を変更し、出力の変化を観察することで理解を深めましょう
- 実際のAI応用との関連性を意識しながら取り組むことで、学習効果が高まります
今回の授業で学ぶ意義と満足感
- 機械学習やニューラルネットワークの仕組みを理解。AIの可能性に対する興味と期待の高まり。
- ニューラルネットワークの構成要素や学習原理を具体的に学び、AIの設計・実装に必要な知識を修得。
- 実際のプログラム、学習データを確認し、AIの動作を直感的に把握。アクティブラーニングの楽しさを実感。
- 機械学習の最先端に触れる。AI時代に活躍できる人材を目指すモチベーションが高まり、情報工学で社会に貢献したいという志を高める。