AI実験・AI探求ガイド

第1章 AIプログラミング開発環境の構築

目標

本章の目標は、自身のパソコンでAIプログラミングの実行と実験が可能な環境を構築することである。本章を完了すると、さまざまなAIプログラムを動作させたり、ソースコードの確認や修正ができる環境が整う。

1.1 Pythonの役割

PythonはAIプログラミングにおいて広く利用されているプログラミング言語である。機械学習やディープラーニングのライブラリが豊富で、初学者にも扱いやすいことが特徴となっている。

1.2 AIプログラミングにおける開発環境の全体像

AIプログラミングには以下の要素が必要である。

1.3 ソフトウェアのインストール(Windows)

WindowsではwingetというWindowsの公式パッケージ管理ツールを用いて多くのソフトウェアをインストールできる。管理者権限で実行し、システム全体にインストールすることを推奨する。

Python 3.12、Windsurf、NVIDIA CUDA、Git、PyTorchのインストールは次の手順で行う。

手順

  1. 管理者権限でコマンドプロンプトを起動する
    • Windowsキーまたはスタートメニュー → cmdと入力 → 右クリック → 「管理者として実行」
  2. 以下のコマンドを実行する

管理者権限は、wingetの--scope machineオプションやpipでシステム全体にソフトウェアをインストールするために必要となる。

winget install --scope machine --id Python.Python.3.12 -e --silent
winget install --scope machine --id Git.Git -e --silent
winget install --scope machine --id Nvidia.CUDA --version 12.6 -e
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
winget install --scope machine --id Codeium.Windsurf -e --silent

インストール後、PythonとGitについては、Windsurfなどの開発エディタから使用できるようにするためにパスを通す操作が必要である。

用語説明

実践ガイド

この章の内容を実践する詳細な手順については、別ページのWindows AI支援Python開発環境構築ガイドを参照されたい。

演習

次のプログラムを実行し、Pythonのバージョン、Gitのバージョン、PyTorchのバージョン、GPUの動作を確認せよ。Python 3.12、NVIDIA CUDA、Git、PyTorchのインストールに問題ないかも確認できる。

import sys
import subprocess
import torch

print(sys.version)
print(subprocess.check_output(['git', '--version'], text=True).strip())
print(torch.__version__)
print(torch.cuda.is_available())
実行結果の例

第2章 Pythonプログラム実行による探求

目標

第1章で構築した環境を使用して、実際にAIプログラムを実行し、パラメータ変更による効果を観察する。本章では、pipを使用したPythonライブラリのインストール方法と、プログラムの変更・再実行による探求手法を習得する。コード修正とグラフ観察を通じて学習する。

用語説明

2.1 Windsurfでのプログラムの実行手順

新規Pythonファイルの作成

  1. メニューから File → New File を選択する
  2. ファイル名を入力する(例:a.py)
  3. 保存したいフォルダ(ディレクトリ)を選び、Create File をクリックする

なお、左側のメニューから既存のファイルを開くことも可能である。

コードの入力と実行

  1. 作成した新しいファイルの画面で、コードを作成・編集する
  2. 画面上部の実行ボタン(再生マークのアイコン)をクリックしてプログラムを実行する
  3. 実行結果は画面下部のターミナルまたは出力ウィンドウに表示され、損失のグラフがポップアップで表示される

Windsurfの主な機能

  1. Ctrl+Shift+P を押し、コマンドパレットを開く
  2. "Python: Select Interpreter" と入力し、表示される候補から選択する
  3. システムにインストールされたPython 3.12が選択されていることを確認する(選択されていなければ変更する)

2.2 必要なライブラリのインストール

Pythonプログラムはそれぞれ異なるライブラリを必要とする場合がある(例:後述のプログラムは matplotlib ライブラリを必要とする)。必要なライブラリがインストールされていない場合は、以下の手順でインストールする。

手順

  1. 管理者権限でコマンドプロンプトを起動
    • Windowsキー → cmd と入力 → 右クリック → 「管理者として実行」
  2. pipコマンドでライブラリをインストール

必要なライブラリはプログラムによって異なる。以下は代表的な例である。

pip install numpy pandas matplotlib pillow requests

インストール完了後、正常に終了したことを確認する。

主要なPythonライブラリ

Pythonには、様々な分野で活用できる多くのライブラリがある。機械学習やデータサイエンス分野では、以下のライブラリが使用される。

2.3 プログラム実行による探求の基本手順

プログラム実行による探求は以下のサイクルで行う。

  1. 仮説設定:プログラムの動作について予想を立てる
  2. コード変更:パラメータや値を変更する
  3. 実行:プログラムを実行して結果を得る
  4. 結果観察:出力やグラフを観察する
  5. 考察:結果から何が分かったかを整理し、次の仮説を立てる

このサイクルを繰り返すことで、プログラムの動作原理を理解する。学習率変更は一例であり、様々なパラメータや設定を対象とした多様な探求が可能である。

2.4 学習率の変更と効果

後述のプログラムでは、学習率(現在の設定は 0.1)がモデルの学習速度に影響する。学習率を変更し、その効果をグラフで確認する。

変更手順

  1. 現在開いている a.py ファイルのコードを表示する
  2. 以下の行を探す
a.data -= 0.1 * a.grad
b.data -= 0.1 * b.grad
  1. この行の 0.1 を別の数値に書き換える
    • 例:0.01(学習率を小さくする)
    • 例:0.5(学習率を大きくする)
  2. コードを変更したら、ファイルを保存する(Ctrl+S またはメニューの File → Save)
  3. 再度、画面上部の実行ボタンをクリックしてプログラムを実行する

期待される効果

学習率を変更すると、表示される損失のグラフに以下のような違いが見られる。

実行結果の確認方法

正常に動作している場合の目安
プログラムが正常に実行されると、以下の結果が得られる。

グラフの見方と解釈方法
表示されるグラフは横軸が反復回数(0から9まで)、縦軸が損失値を表す。正常な学習では、グラフの線が左上から右下に向かって下降する。学習率が適切な場合、滑らかな減少曲線を描いて最終的に損失がほぼ0に収束する。学習率が大きすぎると振動や発散を示し、小さすぎると変化が緩慢になる。

様々な学習率を試して、損失のグラフがどのように変化するかを観察することで、学習率がモデルの収束に与える影響を理解する。

import torch
import matplotlib.pyplot as plt

# 入力データと目標値を定義
x = torch.tensor([1., 2., 3., 4.])
y = torch.tensor([3., 5., 7., 9.])

# 学習する重み 'a' とバイアス 'b' を初期化。requires_grad=True により勾配計算を有効にする
a = torch.tensor(0.5, requires_grad=True)
b = torch.tensor(0.0, requires_grad=True)

# 各反復での損失を記録するためのリスト
losses = []

# 勾配降下法による学習ループ
for _ in range(10):
    # 予測値と目標値の差の二乗平均を損失として計算
    loss = ((a * x + b - y) ** 2).mean()

    # 損失値をリストに追加(.item() でテンソルからPythonの数値に変換)
    losses.append(loss.item())

    # 損失の勾配を計算
    loss.backward()

    # 勾配降下法による重み 'a' とバイアス 'b' の更新
    # .data を直接変更することで、この操作が勾配計算に影響しないようにする
    a.data -= 0.1 * a.grad
    b.data -= 0.1 * b.grad

    # 勾配をゼロにリセット(次の反復のために必要)
    a.grad.zero_()
    b.grad.zero_()

# 学習後の重み 'a'、バイアス 'b' と最終的な損失値を出力
print(f"a={a:.2f}, b={b:.2f}, loss={loss:.3f}")

# 損失の推移をグラフで表示
plt.plot(losses)
plt.xlabel('Iteration')
plt.ylabel('Loss')
plt.title('Training Loss')
plt.show()

このプログラムは線形関数 y=ax+b(一次関数)の重み a とバイアス b を勾配降下法で学習するPyTorchの実装である。入力データ [1,2,3,4] と目標値 [3,5,7,9] から、初期重み a=0.5、初期バイアス b=0.0 を10回の反復で最適化し、各ステップの損失値をリストに記録してグラフ表示する。重み a やバイアス b の初期値、学習率 0.1 を変更することで収束過程の違いを観察できる機械学習プログラムである。

演習

  1. 上記のプログラムを実行し、損失のグラフを確認する
  2. 実行結果の例
  3. 学習率を 0.01 に変更して実行し、グラフの変化を観察する
  4. 学習率を 0.5 に変更して実行し、グラフの変化を観察する
  5. それぞれの実行結果を比較し、学習率が収束過程に与える影響を確認する

この演習は一例であり、内容に応じた考察、何が分かったかの記録、仮説設定を行うことが重要である。

発展ガイド

別ページに、多数のAIプログラムと説明を記載しており、AI技術の多様性を確認できる。そして、多数のAIプログラムの実行や探求ができる。その際に、本章の内容が参考となる。人工知能のプログラム実行体験と探求(Windows上)のページ https://www.kkaneko.jp/ai/labo/index.html を参照されたい。

第3章 探求プロセス

3.1 学習目標

本章では、第2章で習得したプログラム探求の手法を、より広範囲のプログラムや探求活動に応用できる汎用的なスキルとして定着させることを目的とする。

具体的な到達目標:

3.2 探求プロセスの実践手法

探求プロセスの概要

以下の共通プロセスで探求を進めることができる。

  1. 探求対象の特定:実装されたPythonプログラムの確認などを通して、調整・変更可能な部分を特定する
  2. 仮説の立案:変更による影響を予測する
  3. 結果の観察方法:仮説検証に適した結果確認方法を決める
  4. 記録と整理:探求結果を整理し、次の探求に活用する

具体例:オープンボキャブラリ型物体検出を用いた探求

ここでは、物体検出を研究テーマとした例で説明する。オープンボキャブラリ型物体検出(Open-Vocabulary Object Detection, OVD)は、事前に定義されたカテゴリを超えて、任意のテキスト入力で記述された物体を検出する技術である。従来手法では訓練時に使用した限定的なカテゴリ(例:COCOデータセットの80クラス)のみを検出できたが、オープンボキャブラリ型では訓練時に見たことのない新規カテゴリ(ノベルクラス)に対してもゼロショット検出が可能となっている。

この技術は事前学習済みの視覚言語モデル(例:CLIP)を活用することで、視覚情報とテキスト記述を統合した物体検出を実現する。実用面では、新しい物体カテゴリに対してモデルの再学習を必要とせず、テキストプロンプトによる柔軟な検索条件指定が可能という特徴を持つ。

各ステップの詳細

1. 探求対象の特定

実装されたPythonプログラムの確認などを通して、調整・変更可能な部分を特定する。

2. 仮説の立案

変更による影響を予測する際の観点。実験は「仮説設定→実験設計→結果分析→考察」の手順で実施する。

仮説の具体例:

3. 結果の観察方法

仮説検証に適した結果確認方法を決める。

観察の具体例:

4. 記録と整理

探求結果を整理し、次の探求に活用する。

記録と考察の具体例:

プログラム中では英語の単語・文章で指定する。

探求から研究への発展

探求プロセスの最終段階として、単純なプログラム実験を学術的研究に発展させることができる。

発展の段階:

  1. プログラム実験段階:個別のプログラムパラメータを変更し、結果を観察
  2. パターン発見段階:複数の実験結果から規則性や傾向を特定
  3. 仮説形成段階:観察されたパターンの背景にある原理を推測
  4. 体系的検証段階:仮説を検証するための計画的な実験設計
  5. 学術的位置づけ段階:既存の学術研究との関連性を明確化

探求成果の研究としての位置づけ指針:

3.3 探求における柔軟な思考

探求プロセスでは、ある方法でうまくいかなかった場合、別の方法での目的達成を考えることが重要である。また、ある方法の精度が悪い場合でも、それは失敗ではなく、モデルの特性や限界を理解する貴重な発見となる。

探求プロセスにおいては、予想外の結果や期待と異なる結果も含めて、すべての結果が学習の機会となる。重要なのは結果の良し悪しではなく、そこから何を学び取れるかである。失敗と思われる結果からも、技術の限界、適用条件、改善の方向性など、多くの知見を得ることができる。このような柔軟な思考が、継続的な探求と学習を可能にする。

3.4 研究計画の立案

研究計画の立案は、探求を成功に導くための重要な準備段階である。自分の技術レベルや利用可能なリソースで解決可能な課題を設定し、計画段階では現実的な目標設定を行うことが重要である。

研究テーマの選定

研究目標の設定

目標設定のチェックリスト:

目標の階層化:最終目標までを段階的に達成できる目標を設定する。道筋を確認しながら進めることができる。

研究手法の選択

研究目標に適した手法を選択し、その手法を習得するための学習計画も含める。

取り組み内容:

研究計画の作成と共有

研究計画を文書化することで、研究の方向性を明確にし、指導教員や同僚との議論を促進できる。時期は7月に実施し、仲間や教員と共有し、意見を求めることが重要である。

文書化で重要な構成:

研究の妥当性確保と成果発表

研究計画には妥当性確保の方針と成果発表の計画を含める必要がある。

妥当性確保の方針:

成果発表の計画:

スケジュール管理とリスク対策

研究期間を複数の段階に分割する。スケジュールには余裕を持たせ、使用する技術やツールが期待通りに動作しない可能性を考慮し、代替手法を想定しておく。

研究計画は固定的なものではなく、研究の進行とともに適切に修正していくことが重要である。定期的な見直しを通じて、より効果的な研究実施を目指す。