AIとMLにおける私の25年の冒険
(austinhenley.com)- AI/ML分野で働くつもりはまったくなかった
- ただ仕事に必要なツールを使っているうちに、自然とAIやMLを使うようになり、最終的にはこの分野に足を踏み入れることになった(CMU准教授)
- 新年を機に2000年に立ち返り、これまで関わってきた主要なAI/MLプロジェクトを振り返る
If文とランダムな数値: 初期のプログラミング体験
- ビデオゲームから始まった:
- たまごっちに着想を得て、VB6でバーチャルペットゲームの開発を試みた。
- タイマーと条件文を使って単純なロジックを実装:
- 10秒ごとに空腹度が増加。
- 空腹度が一定レベルを超えると、3秒ごとに体力が減少。
- 体力が0になるとペットが倒れる。
- 結果: 単調で面白みのないゲームになった。
- 高校時代のゲーム開発:
- 2D宇宙シューティングゲームを開発:
- プレイヤーが敵のウェーブを防ぎつつ、パワーアップを集める。
- 敵の出現パターンは、ランダムな数値とゲームプレイ統計(プレイ時間、発射回数、HPなど)を使った長い
if文で実装。 - 結果:
- ゲームにやや動的で予測不能な感触が生まれた。
- しかし興味は長続きせず、プレイヤーはすぐにやめてしまった。
- 2D宇宙シューティングゲームを開発:
- AIという概念の探求:
- 2000年代半ば、Programming Game AI by Example を購入し、ゲームにAIを実装する方法を学んだ。
- 当初は活用できなかったが、その後のプロジェクトで大いに役立った。
- この時期の経験は、より複雑で興味深いゲームメカニクスを試す土台になった
状態機械と高階関数: 大学時代のゲーム開発
- ゲームの進化:
- 大学時代、ゲーム開発の水準を一段引き上げ、何百万人もが遊ぶゲームを制作した。
- 一部のゲームは収益化にも成功。
- プログラミングの腕が成熟するにつれ、本で学んだ内容を実戦で活かせるようになった。
- 技術の適用:
- 有限状態機械(Finite State Machine):
- 敵の行動パターンの実装に活用。
- ファクトリーパターン:
- オブジェクトの生成と管理。
- 高階関数(Higher-order Functions):
- 敵や武器の挙動を組み合わせ可能な設計にした。
- 例:
- 武器は左右25度の振幅で揺れながら、細い円錐状に弾を発射する。
- 弾は近くの目標へわずかに誘導され、1%の確率でリコシェット(跳弾)が発生。
- 有限状態機械(Finite State Machine):
- ゲームの生き生きとした感じ:
- ゲームの状態とプレイヤー入力をもとに、動的な要素を段階的に追加。
- ランダム性と組み合わせ可能性を使って変化を加えた。
- このアプローチは敵の行動だけでなく、スプライト、パーティクルエフェクト、効果音、弾、アニメーションなどゲーム全体にレイヤー的に適用された。
- 結果:
- ゲームはより生き生きとして面白くなった。
- しかしそれはAIではなく、よく設計された
if文と関数呼び出しの組み合わせにすぎないと気づいた。
- ゲームに「生きている」ような感覚を与えることはできたが、この段階ではなお手作業で設計したロジックと関数を使っているにすぎないと理解した。
一階述語論理、知識表現、サポートベクターマシン、ニューラルネットワーク: 大学院初期の経験
- 修士課程の開始:
- 卒業後、締切ぎりぎりで修士課程に登録。
- 選べる授業が限られており、AIとニューラルネットワークの講義を受講。
- 本来希望していたコンパイラ講義の代わりに選んだ授業には失望した:
- 演習や実装がなく、高次の理論中心。
- 定義をめぐる議論が多かった。
- AI講義:
- Artificial Intelligence: A Modern Approach (Third Edition) を教科書として使用。
- 計画、エージェント、一階述語論理、知識表現などの概念を学んだ。
- 問題を考えるための新しい語彙は得たが、実際に応用するのは難しかった。
- ニューラルネットワーク講義:
- パーセプトロン、サポートベクターマシン(SVM)、フィードフォワードネットワーク、ホップフィールドモデル、バックプロパゲーション(backpropagation)などの理論を学習。
- 実習に関する明確な指針が不足:
- 「MATLABパッケージを探してみなさい」という教授の返答に落胆。
- 低帯域ビデオチャットプログラムの開発:
- OpenCVで顔検出と領域抽出を実施:
- 口角の状態、左眉の位置、右目が開いているかどうかなどを分類。
- ラベル付けされた顔画像を数百枚、データベースから収集。
- 分類した二値状態をソケット経由で送信し、OpenGLでアバターをレンダリング。
- 結果:
- 照明変化に敏感で、パラメータ調整が難しく、学習に長時間を要した。
- OpenCVの扱いも難しく、プログラム修正が煩雑だった。
- OpenCVで顔検出と領域抽出を実施:
- 成果:
- 多くの試行錯誤を通じて多くを学んだ。
- 2013年1月、初期デモ動画をアップロードして共有:
- デモ動画 はアマチュア的ではあるものの、1000回を超える視聴を記録。
- この時期は、理論を実際に実装し、問題を解決する方法を学ぶ重要な成長の過程だった
決定木、クラスタリング、推薦アルゴリズム: 博士課程での経験
- 研究目標:
- コードエディタのログデータを分析し、次のような問題の解決を試みた:
- プログラマーがコードで行き詰まっている、あるいは道に迷っているかを特定する。
- プログラマーが次に調べるファイルを予測する。
- 関心のあるコードを正確に推薦する。
- コードエディタのログデータを分析し、次のような問題の解決を試みた:
- 活用した統計的手法:
- C4.5アルゴリズム: 決定木を生成。
- K-means と DBSCAN: イベントのクラスタリング。
- Apriori と協調フィルタリング: イベント間の関連性を探索。
- 結果:
- 単純な手法でありながら、驚くほど強力な性能を示した。
- ほとんどの場合、複雑なニューラルネットワークよりもこれらの方法で十分に効果的だった。
- 成果:
- 論文発表、複数のインターン経験、開発者ツールの制作。
- 博士課程を修了。
- 関連資料:
- 論文: 開発者が情報を探す方法に関するデータ分析
Foraging and Navigations, Fundamentally: Developers Predictions of Value and Cost (PDF)) - Microsoftインターン報告: コードレビューボット制作の経験
When users never use the features they asked for
- 論文: 開発者が情報を探す方法に関するデータ分析
- 博士課程のあいだ、統計的手法を使って実践的な問題を解決し、学術と実務の両方で意味のある成果を上げた
インテリジェントユーザーインターフェース: 教授としての研究の始まり
- 新たな研究方向の設定:
- 2018年、テニュアトラック教員として インテリジェント開発者ツール(Intelligent Developer Tools) を研究テーマに選んだ。
- 当初は概念が曖昧だったが、予測モデルを使ってプログラマーの誤解を事前に特定し、修正するプロジェクトから始めた。
- 最初の研究提案:
- プロジェクト目標:
- プログラム解析技術と予測モデルを活用し、初心者プログラマーがプログラムの動作について抱く誤解を特定する。
- プログラマーを邪魔せずに誤解を修正し、ロジックを説明する。
- 意図しないプログラム動作の変化を捉えるテストコードを生成し、将来の誤解を防ぐ。
- 要約:
- プロジェクト目標:
- 第2のプロジェクト:
- プログラマーの情報ニーズを予測し、リアルタイムでユーザーインターフェースを生成する研究。
- 例:
- Git履歴を探索しているプログラマーに、推奨コミット群を可視化して提示する。
- 研究の統合:
- "Inquisitive Programming Environments as Learning Environments for Novices and Experts" という大きなビジョンを提案。
- 関連資料:
- 成果と限界:
- プロジェクトは助成を受けて順調に始まったが、研究が本格化する前に教授職を辞した。
- この時期は、インテリジェントユーザーインターフェースに関する研究を具体化し、大きなビジョンを設計した重要な転換点だった
プログラム合成と大規模言語モデル(LLM): Microsoftでの経験
- Microsoftへの参加:
- 2022年1月、Microsoftのプログラム合成チームに参加。
- 同年にChatGPTが登場し、AI技術があらゆる分野に適用され始め、絶好のタイミングでAIの仕事に没頭することになった。
- AI適用への慎重な姿勢:
- AIチームに所属していたが、強い理由がない限りAIの使用には反対の立場だった:
- ユーザーの問題を解決しようとする明確な目標があるかを問う。
- 単純な
if文で代替できないか検討する。 - 自然言語インターフェースが本当に適切な選択か考える。
- 関連する意見:
- AIチームに所属していたが、強い理由がない限りAIの使用には反対の立場だった:
- 主要プロジェクト
-
- LLMのattention重みを活用した研究:
- 開発者がコード探索中にどこへ注目するかを予測できるか調査。
- Follow-up Attention: An Empirical Study of Developer and Neural Model Code Exploration (pdf).
-
- データサイエンス向けAIチューター:
- IntelliCodeのユーザー体験改善:
- 複数行コード編集提案のためのユーザーインターフェースを探究。
- Exploring 50 user interfaces for AI code.
- データサイエンティスト向けのLLMベースツール:
- 学生向けのLLMベースツール:
- 企業向けCopilot構築の研究:
-
- 現在と今後の活動
- 独立したAIツール開発:
- Microsoft退社後、個人のAIプロジェクトに没頭。
- 主なツール:
- Mirror: AIベースのツール。
- Promptclipper: プロンプト管理ツール。
- 独立したAIツール開発:
- AIとLLMを基盤にした多彩なプロジェクトを通じて革新的なソリューションを開発し、現在もAIツールの研究と開発を続けている
締めくくり
- 楽しい25年だった
- これからの計画は? これからも教え、学び、作り続ける予定
1件のコメント
Hacker Newsのコメント
if文で十分なのかを考えていた。自然言語が適切なインターフェースなのか確信する必要がある