AI実験・AI探求ガイド
第1章 AIプログラミング開発環境の構築
目標
本章の目標は、自身のパソコンでAIプログラミングの実行と実験が可能な環境を構築することである。本章を完了すると、さまざまなAIプログラムを動作させたり、ソースコードの確認や修正ができる環境が整う。
1.1 Pythonの役割
PythonはAIプログラミングにおいて広く利用されているプログラミング言語である。機械学習やディープラーニングのライブラリが豊富で、初学者にも扱いやすいことが特徴となっている。
1.2 AIプログラミングにおける開発環境の全体像
AIプログラミングには以下の要素が必要である。
- Python本体:プログラミング言語
- NVIDIA CUDA:NVIDIA GPU上で並列計算を実行するためのプラットフォーム
- PyTorch:研究分野で広く使用される深層学習フレームワーク
- 開発エディタ:コード作成・編集(例:Windsurf、Cursor、Visual Studio Code、Jupyter Notebook)
- Git:GitHubなどのサイトから必要なAIプログラムのファイルをダウンロードするために使用する。多くのAIプロジェクトがGitHub上で公開されており、Gitを使用してこれらのプロジェクトを取得できる
1.3 ソフトウェアのインストール(Windows)
WindowsではwingetというWindowsの公式パッケージ管理ツールを用いて多くのソフトウェアをインストールできる。管理者権限で実行し、システム全体にインストールすることを推奨する。
Python 3.12、Windsurf、NVIDIA CUDA、Git、PyTorchのインストールは次の手順で行う。
手順
- 管理者権限でコマンドプロンプトを起動する
- Windowsキーまたはスタートメニュー →
cmd
と入力 → 右クリック → 「管理者として実行」
- Windowsキーまたはスタートメニュー →
- 以下のコマンドを実行する
管理者権限は、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などの開発エディタから使用できるようにするためにパスを通す操作が必要である。
用語説明
- winget:Windowsの公式パッケージ管理ツール
- pip:Pythonのライブラリ管理ツール
- パス:コマンドラインでプログラムを実行するための検索パス
実践ガイド
この章の内容を実践する詳細な手順については、別ページの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ファイルの作成
- メニューから File → New File を選択する
- ファイル名を入力する(例:a.py)
- 保存したいフォルダ(ディレクトリ)を選び、Create File をクリックする
なお、左側のメニューから既存のファイルを開くことも可能である。
コードの入力と実行
- 作成した新しいファイルの画面で、コードを作成・編集する
- 画面上部の実行ボタン(再生マークのアイコン)をクリックしてプログラムを実行する
- 実行結果は画面下部のターミナルまたは出力ウィンドウに表示され、損失のグラフがポップアップで表示される
Windsurfの主な機能
- Cascadeチャットの起動
Ctrl+L を押すと、Cascadeチャットを起動できる - Python実行環境(インタープリター)の設定確認
プログラムが正常に動作しない場合は、以下の手順で設定を確認する
- Ctrl+Shift+P を押し、コマンドパレットを開く
- "Python: Select Interpreter" と入力し、表示される候補から選択する
- システムにインストールされたPython 3.12が選択されていることを確認する(選択されていなければ変更する)
2.2 必要なライブラリのインストール
Pythonプログラムはそれぞれ異なるライブラリを必要とする場合がある(例:後述のプログラムは matplotlib ライブラリを必要とする)。必要なライブラリがインストールされていない場合は、以下の手順でインストールする。
手順
- 管理者権限でコマンドプロンプトを起動
- Windowsキー → cmd と入力 → 右クリック → 「管理者として実行」
- pipコマンドでライブラリをインストール
必要なライブラリはプログラムによって異なる。以下は代表的な例である。
pip install numpy pandas matplotlib pillow requests
インストール完了後、正常に終了したことを確認する。
主要なPythonライブラリ
Pythonには、様々な分野で活用できる多くのライブラリがある。機械学習やデータサイエンス分野では、以下のライブラリが使用される。
- PyTorch:Metaが開発したオープンソースの機械学習ライブラリ。深層学習モデルの構築と訓練に使用され、柔軟性と高速なGPU計算をサポートする。後述のプログラムでも使用されている
- timm:PyTorch上で動作する画像認識モデルのライブラリ。多数のSOTA(State-of-the-Art:最高性能)モデルが実装されており、転移学習などに活用される
- NumPy:数値計算を行うためのライブラリ。多次元配列の操作が可能で、科学計算の基盤となる
- Pandas:データ分析を行うためのライブラリ。表形式データの操作や加工を得意とし、データの前処理に使用される
- Matplotlib:グラフ描画ライブラリ。データの可視化に利用され、後述のプログラムでも損失の推移をグラフで表示するために使用されている
2.3 プログラム実行による探求の基本手順
プログラム実行による探求は以下のサイクルで行う。
- 仮説設定:プログラムの動作について予想を立てる
- コード変更:パラメータや値を変更する
- 実行:プログラムを実行して結果を得る
- 結果観察:出力やグラフを観察する
- 考察:結果から何が分かったかを整理し、次の仮説を立てる
このサイクルを繰り返すことで、プログラムの動作原理を理解する。学習率変更は一例であり、様々なパラメータや設定を対象とした多様な探求が可能である。
2.4 学習率の変更と効果
後述のプログラムでは、学習率(現在の設定は 0.1)がモデルの学習速度に影響する。学習率を変更し、その効果をグラフで確認する。
変更手順
- 現在開いている a.py ファイルのコードを表示する
- 以下の行を探す
a.data -= 0.1 * a.grad
b.data -= 0.1 * b.grad
- この行の 0.1 を別の数値に書き換える
- 例:0.01(学習率を小さくする)
- 例:0.5(学習率を大きくする)
- コードを変更したら、ファイルを保存する(Ctrl+S またはメニューの File → Save)
- 再度、画面上部の実行ボタンをクリックしてプログラムを実行する
期待される効果
学習率を変更すると、表示される損失のグラフに以下のような違いが見られる。
- 学習率を小さくした場合(例:0.01)
グラフの損失はゆっくりと減少する。重み a と b の更新量が小さいため、10回の反復では十分に損失が下がらない場合がある - 学習率を大きくした場合(例:0.5)
グラフの損失は急激に変化する。適切な範囲内であれば速やかに収束するが、学習率が2.0を超える場合には更新量が大きすぎるため、損失が振動したり発散したりすることがある
実行結果の確認方法
正常に動作している場合の目安
プログラムが正常に実行されると、以下の結果が得られる。
- コンソールに「a=2.00, b=1.00, loss=0.000」のような出力が表示される
- 損失のグラフが表示され、損失値が反復回数とともに減少する曲線が描かれる
グラフの見方と解釈方法
表示されるグラフは横軸が反復回数(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 を変更することで収束過程の違いを観察できる機械学習プログラムである。
演習
- 上記のプログラムを実行し、損失のグラフを確認する
- 学習率を 0.01 に変更して実行し、グラフの変化を観察する
- 学習率を 0.5 に変更して実行し、グラフの変化を観察する
- それぞれの実行結果を比較し、学習率が収束過程に与える影響を確認する

この演習は一例であり、内容に応じた考察、何が分かったかの記録、仮説設定を行うことが重要である。
発展ガイド
別ページに、多数のAIプログラムと説明を記載しており、AI技術の多様性を確認できる。そして、多数のAIプログラムの実行や探求ができる。その際に、本章の内容が参考となる。人工知能のプログラム実行体験と探求(Windows上)のページ https://www.kkaneko.jp/ai/labo/index.html を参照されたい。
第3章 探求プロセス
3.1 学習目標
本章では、第2章で習得したプログラム探求の手法を、より広範囲のプログラムや探求活動に応用できる汎用的なスキルとして定着させることを目的とする。
具体的な到達目標:
- 探求プロセスを理解する
- 具体的な探求手順を実践できる
- 研究計画の立案から実践までの一連のプロセスを理解する
- 失敗や予想外の結果を学習機会として活用できる柔軟な思考を身につける
3.2 探求プロセスの実践手法
探求プロセスの概要
以下の共通プロセスで探求を進めることができる。
- 探求対象の特定:実装されたPythonプログラムの確認などを通して、調整・変更可能な部分を特定する
- 仮説の立案:変更による影響を予測する
- 結果の観察方法:仮説検証に適した結果確認方法を決める
- 記録と整理:探求結果を整理し、次の探求に活用する
具体例:オープンボキャブラリ型物体検出を用いた探求
ここでは、物体検出を研究テーマとした例で説明する。オープンボキャブラリ型物体検出(Open-Vocabulary Object Detection, OVD)は、事前に定義されたカテゴリを超えて、任意のテキスト入力で記述された物体を検出する技術である。従来手法では訓練時に使用した限定的なカテゴリ(例:COCOデータセットの80クラス)のみを検出できたが、オープンボキャブラリ型では訓練時に見たことのない新規カテゴリ(ノベルクラス)に対してもゼロショット検出が可能となっている。
この技術は事前学習済みの視覚言語モデル(例:CLIP)を活用することで、視覚情報とテキスト記述を統合した物体検出を実現する。実用面では、新しい物体カテゴリに対してモデルの再学習を必要とせず、テキストプロンプトによる柔軟な検索条件指定が可能という特徴を持つ。
各ステップの詳細
1. 探求対象の特定
実装されたPythonプログラムの確認などを通して、調整・変更可能な部分を特定する。
- テキストプロンプト(物体の名称、属性記述)(例:
car
、red backpack
、person wearing hat
) - 信頼度閾値の設定(例:0.1、0.3、0.5、0.7)
2. 仮説の立案
変更による影響を予測する際の観点。実験は「仮説設定→実験設計→結果分析→考察」の手順で実施する。
- ゼロショット検出性能への影響(例:「ノベルクラスはベースクラスより検出精度が低い」)
- テキスト記述の詳細度による影響(例:「抽象的記述より具体的記述で検出精度が向上する」)
仮説の具体例:
- ベースクラスとノベルクラスの検出性能比較:仮説「訓練済みクラス(ベースクラス)の方が未訓練クラス(ノベルクラス)より高いAPを示す」
- テキスト記述の抽象度による影響:仮説「具体的記述(
bicycle
)の方が抽象的記述(two-wheeled vehicle
)より高い検出精度を示す」 - 信頼度閾値の最適化:仮説「ベースクラスとノベルクラスでは最適な信頼度閾値が異なる」
3. 結果の観察方法
仮説検証に適した結果確認方法を決める。
- 検出されたバウンディングボックスの数と位置(例:検出数の増減、IoU値の変化)
- Average Precision(AP)の測定(例:AP@0.5、APrare、APnovelでの評価)
- 信頼度スコアの分布分析(例:閾値別の精度-再現率曲線)
観察の具体例:
- ベースクラスとノベルクラスの性能差:LVIS等のベンチマークでベースクラス、ノベルクラス、全体のAPを比較
- テキスト記述による検出精度変化:同一物体に対する異なる記述方法(
car
vsred sports car
)でのAP比較 - 閾値変化による精度-再現率トレードオフ:信頼度閾値を0.1から0.9まで変化させた際のPrecision-Recallカーブの変化
4. 記録と整理
探求結果を整理し、次の探求に活用する。
- テキストプロンプトとAP値の対応記録(例:
bicycle
→AP 0.45、mountain bike
→AP 0.38) - 検出パターンの発見(例:属性を含む記述での精度変化傾向)
記録と考察の具体例:
- ベースクラスとノベルクラス間のAPギャップの定量化
- テキストプロンプトの記述方法がゼロショット検出性能に与える影響の分析
- 信頼度閾値設定の最適化による検出性能向上の検証
- 視覚言語モデルの特性や限界に関する知見の蓄積
プログラム中では英語の単語・文章で指定する。
探求から研究への発展
探求プロセスの最終段階として、単純なプログラム実験を学術的研究に発展させることができる。
発展の段階:
- プログラム実験段階:個別のプログラムパラメータを変更し、結果を観察
- パターン発見段階:複数の実験結果から規則性や傾向を特定
- 仮説形成段階:観察されたパターンの背景にある原理を推測
- 体系的検証段階:仮説を検証するための計画的な実験設計
- 学術的位置づけ段階:既存の学術研究との関連性を明確化
探求成果の研究としての位置づけ指針:
- 単発の実験結果ではなく、複数の実験から導かれた知見であること
- 他の研究者が同じ条件で実験を行えば同じ結果が得られる再現性があること
- 技術分野や社会に対する貢献の可能性が説明できること
3.3 探求における柔軟な思考
探求プロセスでは、ある方法でうまくいかなかった場合、別の方法での目的達成を考えることが重要である。また、ある方法の精度が悪い場合でも、それは失敗ではなく、モデルの特性や限界を理解する貴重な発見となる。
探求プロセスにおいては、予想外の結果や期待と異なる結果も含めて、すべての結果が学習の機会となる。重要なのは結果の良し悪しではなく、そこから何を学び取れるかである。失敗と思われる結果からも、技術の限界、適用条件、改善の方向性など、多くの知見を得ることができる。このような柔軟な思考が、継続的な探求と学習を可能にする。
3.4 研究計画の立案
研究計画の立案は、探求を成功に導くための重要な準備段階である。自分の技術レベルや利用可能なリソースで解決可能な課題を設定し、計画段階では現実的な目標設定を行うことが重要である。
研究テーマの選定
- 興味と関心:自分が本当に知りたいと思う問題を選ぶことが、継続的な取り組みの基盤となる
- 技術的実現可能性:現在の知識とスキルで取り組める範囲内の問題を設定する
研究目標の設定
目標設定のチェックリスト:
- 具体的:何を明らかにするかを明確に記述
- 測定可能:達成度を客観的に評価できる指標を設定
- 達成可能:現実的に実現可能な目標
目標の階層化:最終目標までを段階的に達成できる目標を設定する。道筋を確認しながら進めることができる。
研究手法の選択
研究目標に適した手法を選択し、その手法を習得するための学習計画も含める。
取り組み内容:
- 研究手法の調査:研究目標を達成するための技術や関連する先行事例を調査し、自分の研究に適用可能な手法を特定する
- 新しい手法の開発は慎重に検討する。既存手法の組み合わせや改良で目標達成が可能かを検討する
- 開発環境の構築
- 実験データの準備:プロトタイプやサンプル実装を通じて、技術的な障壁を早期に発見する
- 実験結果の取得と考察
- 実験の実施と記録:どんな小さなことでも探求成果になりうるため、実験過程を詳細に記録する
- 文書化:実験データ、実験手順説明、考察、参考文献リストを含むWord文書として整理する
研究計画の作成と共有
研究計画を文書化することで、研究の方向性を明確にし、指導教員や同僚との議論を促進できる。時期は7月に実施し、仲間や教員と共有し、意見を求めることが重要である。
文書化で重要な構成:
- 背景
- 研究目標
- 取り組み
- 将来計画
- 参考文献
研究の妥当性確保と成果発表
研究計画には妥当性確保の方針と成果発表の計画を含める必要がある。
妥当性確保の方針:
- 再現性の確保:実験環境(ソフトウェア版本、ハードウェア仕様)の詳細記録
- 先行研究との比較:関連する学術論文の調査と内容整理、自分の手法と既存手法の違いを明確に説明
- 研究倫理の遵守:他者の研究成果の適切な引用、実験データの捏造や改ざんの禁止
成果発表の計画:
- 発表形式:ゼミ発表、卒業研究発表、学会発表(オプション)等から適切な形式を選択
- 発表内容の構成:背景と目的、手法、結果、考察、結論の流れで整理
スケジュール管理とリスク対策
研究期間を複数の段階に分割する。スケジュールには余裕を持たせ、使用する技術やツールが期待通りに動作しない可能性を考慮し、代替手法を想定しておく。
研究計画は固定的なものではなく、研究の進行とともに適切に修正していくことが重要である。定期的な見直しを通じて、より効果的な研究実施を目指す。