この記事は、システムエンジニアとして働きながら大学院に通って人工知能を専攻し、最終的に研究成果を2025年の人工知能学会全国大会で発表するまでに勉強した技術書と論文を紹介します。大学院入学までは機械学習がどんな仕組みなのか全く無知で、ニューラルネットワークの説明でよくある、格子状に並んだ円と線がたくさんつながっている絵しか見たことがありませんでした。
そんな私が2年間試行錯誤しながら学習・研究し、成果がそれなりに認められて研究者の末席を汚すまでに至った経緯です。研究内容が動画分類とややニッチなので、紹介する技術書や論文の内容も少し偏っています。Transformerモデルを活用した動画分類に興味のある方などに。
また、研究内容とは直接関係ありませんが、機械学習モデルの実装や学習ができるようになったので何かアプリやWebサービスを作ってみたいと思って手を出した技術書についても"AIアプリ開発の技術書"という章に記載しています。ここ開発したアプリと悪あがきは カメラとCNNでカップ麺を識別して作り方を翻訳するアプリ にまとめてあります。
キーワード:動画分類, 手話認識, Transformer, ViViT
言語
入門Python3

とりあえずPythonを勉強しようと手に取った本です。同じオライリーからは「はじめてのPython」という似たような本が出ていますが、そちらは2009年出版とやや古い本です。「はじめての」と比べて本のサイズがやや小さい(ページ数は同じ)から、手元に置いておくのに最適。Pythonの文法を大まかに捉えるには良い本ですが、プログラミング中に文法を調べたときなど辞書のような使い方をするには、次に紹介する独習Pythonがおすすめ。
独習Python

個人的に読みやすさ分かりやすさで定評のある翔泳社の独習シリーズのPython版。「独習C#」も愛用しています。こう処理させるにはどうしたらいいというような時に、Python文法や記法の辞書のように使えます。最近はChatGPTに訊いてしまうことも多いですが、目的のページの前後に載っている関連する情報まで知ることができるのは本ならでは。
機械学習
Pythonで動かし学ぶ!あたらしい機械学習の教科書

機械学習ライブラリの使い方を解説してくれる技術書は数あれど、機械学習の数学的なアルゴリズムを、かつ分かりやすく解説してくれる技術書はそうありません。本書は数少ない機械学習アルゴリズムの解説本です。線形回帰モデル、分類モデルといった基本のモデルから、畳み込みニューラルネットワークによる画像分類までを数式で理解できます。高校と理系大学教養レベルの数学の知識が必要ですが、本書の前半で解説されています。この本で機械学習の数式への抵抗がなくなったので、後の論文などもなんとか読み進めることができました。
最短コースでわかるPyTorch&深層学習プログラミング

機械学習の論文では実装コードが公開されていることがあり、研究者の間では機械学習ライブラリPyTorchを利用していることが多いようです。「あたらしい機械学習の教科書」でもライブラリを使った実装が載っていたのですが、Kerasであったため、PyTorchを勉強するべく手に取りました。たまたま大学院で本書の著者の講義を受けていた縁から購入しました。研究でのコードは本書を元にPyTorchで実装されています。
「強化学習」を学びたい人が最初に読む本

自ら試行錯誤して学習するアルゴリズム、強化学習に興味を持ち、何か研究に応用できないかと思い手に取った本。強化学習は時間・GPUともに莫大なリソースが必要なため、本書では著者が独自に開発した簡易ゲームに強化学習を適用しながら解説しています。私は大学院のGPUサーバを使ってOpenAIのGymnasium CarRacingに適用しようとしていましたが、それでもあまりに時間がかかりすぎるので挫折した経緯があります。おかげで強化学習が本当に実用的な技術なのか懐疑的です。
Transformerモデル
大規模言語モデル入門

Transformerモデルのアルゴリズムを理解したいときに最適な技術書です。私の研究ではTransformerから派生した動画認識モデルを活用しています。識別する対象は動画ですが、そのアルゴリズムはTransformerと本質的には同じなため、本書での理解が役に立ちました。Transformerの数学的なアルゴリズムは、数行の数式で表現できてしまうのですが、その意味を理解するのはなかなか難儀でした。
Vision Transformer入門

Vision Transformer(ViT)は、Transformerモデルを画像分類に応用したアルゴリズムです。仕組みはTransformerですが、得られる結果としてはCNNによる画像分類と同じです。ゆえにViT単独で利用されるというよりは、言語+画像というようなマルチモーダルな大規模言語モデルにおいて画像の前処理やトークン化に活用されているイメージです。本書の前々半がViTアルゴリズムの解説とコードですが、そこから先はコードが一切なくなり調査論文のような内容になっていて多少面食らいました。
機械学習エンジニアのためのTransformers

Hugging Faceで公開されているLLMモデルライブラリ Transformersの解説書です。研究で使用したViViTモデルはHugging Faceにあるモデルを活用しました。
AIアプリ開発の技術書
機械学習フレームワークをある程度自由に活用できるようになり、CNNによるカップ麺識別アプリを開発しました。そのとき参考にした技術書です。
基礎から学ぶ Flutter

iOS/Androidに対応したアプリを開発するためのアプリ開発フレームワーク Flutterの入門書です。カップ麺アプリ本体の開発に活用しました。FlutterではDartというFlutterでしか用途のない言語を使って開発します。そのためかDartの入門書がどこからも出版されていません(私調べ)。本書では1章を割いてDart文法の解説があり、そこだけで何とか開発を進めるしかありません。しかし一意の言語とフレームワークでiOS/Android両方のアプリ開発ができるので、学習価値はかなりあると思います。
動かして学ぶ!Python Django開発入門

Django4 Webアプリ開発実装ハンドブック

カップ麺アプリの開発にあたって、発売されているカップ麺の画像や商品名・原材料などのデータを収集しています。収集自体はECサイトのAPIを利用してPythonでプログラムを組んで実行しています。しかし収集したデータ(不要なデータを含む)から必要な情報を選択し、常時600種類以上あるカップ麺のデータを対応するラベルと一意に管理して、さらにどれをモデルに組み込んだのか把握するためにデータ管理ツールを必要としていました。そのツールをDjangoを利用してWebアプリとして開発しています。
しかしDjangoはなかなか複雑なエコロジーを持っいるうえ、データベースさえあればほぼ何も書かなくてもWebページができてしまうという不思議なフレームワークです。そのため何が行われているのか全く理解できず、習得にはかなり苦労しました。
JavaScript本格入門

DjangoだけではWebページでの操作感や表示方法に不満があったので、JavaScriptを活用しています。
Amazon Web Services パターン別構築・運用ガイド

アプリ本体のサーバサイド実装や、データ管理ツール、データベースをAWS上で構築することにしていました。当初はEC2インスタンスでの運用を考えていましたが、今はサーバクライアント間の単純な応答ならAPI Gateway + AWS Lambdaでサーバレスな構成でも良いかと考えています。
主な先行論文
Attention Is All You Need
言わずと知れたTransformerの提案論文。初心者はいきなりこれを読んでもよく分からないから、すでに紹介した「大規模言語モデル入門」を傍らに置きながら読み進めると良いです。
An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
Transformerを画像分類に拡張したVision Transformer(ViT)の提案論文。画像をパッチと呼ばれる16$\times$16の単位に分割し、それをTransformerのトークンとして扱うことでベクトル化している。画像は$16\times 16$、つまり$256$単語に相当するという考え方です。
ViViT: A Video Vision Transformer
Transformerをさらに動画分類にまで拡張したVideo Vision Transformer(ViViT)の提案論文。ViTで導入したパッチという考え方を、フレーム方向(つまり時系列方向)にも拡張しベクトル化します。
3D CNN Transformer による手話認識
アルゼンチン手話の孤立手話データセットLSA64を3DCNNとTransformerで学習・検証した論文。3次元畳み込みすることで、動画データをベクトル化している。
Sign Pose-Based Transformer for Word-Level Sign Language Recognition
アルゼンチン手話の孤立手話データセットLSA64と、アメリカ手話の孤立手話データセットWLASLをTransformerで学習・検証した論文。動画データから話者の骨格座標を抽出したデータをTransformerに入力している。