細胞の遺伝子発現とキャラクター対話の一部分は、異なるデータに見える。しかし、観測の背後にどのような状態があり、その状態がどこへ向かうのかという問いは共通する。この講義では、その問いを一続きの機械学習の流れとして扱う。

$$\boxed{\text{Observation}\to\text{Representation}\to\text{Geometry}\to\text{Trajectory}\to\text{Dynamics}\to\text{Fate}}$$

細胞分化と物語の進行を毎回並べて考える。ただし、同じ証拠が得られるわけではない。一般的な単一細胞の発現測定は細胞を破壊するため、同じ細胞の連続観測ではない。対話ログにはセッション内の発話順序が残る。この違いが、直接測れる遷移と仮定が必要な遷移を分ける。

点だけを見る場合と時間が分かる場合

点だけを見る場合と時間が分かる場合座標1座標2

教育用の2次元合成模式図。線は推論結果ではなく、シミュレータが知る個体内の順序を示す。スナップショットの色には時間や分岐の正解を含めていない。

図で時間を隠すと分岐の形は見えるが、出発点と方向は決まらない。個体IDと時間を表示すれば、どの点を結ぶかが分かる。第7講までは主に前者を、第8講以降は系列、集団の移動、帰結を扱う。

対象と進め方

対象はPythonの配列、行列積、平均と分散、条件付き確率、微分を学んだCS学部3年生程度。生物学の前提知識は不要だ。固有ベクトルは第2講で復習し、確率微分方程式や因果識別の詳細な証明は発展学習とする。

第1–10講は約90分、説明60分と実習・討論30分を基本とする。第11講は100分、最後の統合講義は110分を見込む。具体的な問題、小さな例、数式、アルゴリズム、Python実装、生物学への適用、対話への適用を繰り返す。外部講義の翻訳や書き起こしではなく、このシリーズのための講義原稿である。

12講の地図

講義問い方法共通課題の成果物
1. 観測と隠れた状態1行は何を表すか観測モデル、識別可能性データ定義と評価分割
2. PCA圧縮で何を失うか共分散、固有ベクトル、SVD射影と再構成誤差
3. 表現学習曲がった構造をどう表すかAutoencoder、VAE学習した潜在座標
4. 多様体近さとは何かkNN、Isomap、UMAP近傍関係の比較
5. 拡散とスペクトル局所から全体をどう捉えるかLaplacian、Diffusion Map拡散座標と時間尺度
6. クラスタとコミュニティ状態の境界をどこに置くかk-means、DBSCAN、Louvain、Leiden解像度による状態分割
7. 軌跡推論点をどう経路にするかMST、Principal Graph、PAGArootに依存する擬似時間
8. 系列モデル順序があると何が変わるかMarkov、HMM、State Space Model遷移と隠れ状態の推論
9. 速度とベクトル場今どこへ動くかRNA Velocity、回帰次の状態と予測誤差
10. 集団の輸送個体の対応なしで移動を考えられるかOptimal Transport、Sinkhorn周辺分布を満たす輸送計画
11. 連続動力学連続する移動規則を学べるかNeural ODE/SDE、Flow Matching積分で得た分布
12. 帰結と因果何を予測し、何を変えられるかSurvival、Fate Prediction、Causal Inference打ち切りを考慮した分析と効果

実装はCPUで実行できる小規模な例に絞る。紹介する全手法を再実装するわけではない。例えば第7講のコードはクラスタ中心のMST基準線であり、PAGAそのものではない。各講で実装範囲と概念的な拡張を明記する。

実習の開始

全実習のZIPをダウンロードして展開する。common.py、lesson01.pyからlesson12.py、実行器、依存パッケージ一覧が同じフォルダにある。Python 3.12で次を実行する。

python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
python run_all.py --output outputs

Windowsでの有効化は.venv\Scripts\activate。インストールには通信が必要だが、実習は外部データ、APIキー、GPUを必要としない。UMAPの初回実行はコンパイルで時間がかかることがある。

python lesson02.py --output outputs
python run_all.py --lessons 2 5 7 --output outputs

図と数値はoutputs/に保存する。検証実行の記録にはPythonとパッケージのバージョンも含む。乱数seedを固定してもOSや数値ライブラリによる小さな差はあり得る。固有ベクトルの符号が反転しただけなら誤りではない。

共通データの意味

共通合成データのNPZも直接ダウンロードできる。numpy.load("branching-trajectories.npz", allow_pickle=False)で開く。生成器の既定値と同じデータである。

120個体を16時点で観測するため、行数は1,920、各行の特徴量は24個である。既知の2次元分岐状態を非線形関数と固定混合行列で変換し、観測ノイズを加える。ノートPCで挙動を確かめるための大きさであり、実際の発現データや言語のベンチマークではない。

フィールド単位と意味用途
X1,920 × 24の観測行列モデル入力
z_trueシミュレータの2次元状態正解の図示・評価専用
time, session, next_index時点、個体ID、次行番号系列分析、終端は-1
branch行ごとの分岐符号−1または+1事後評価の正解
trainセッション単位の分割マスク学習90、評価30セッション
fateセッションの最終分岐0または1予測対象
duration, event追跡期間、イベント観測フラグ右打ち切り生存分析
baseline, treatment, outcome処置前のリスク、無作為処置、後続の連続結果因果推論実習

durationの時計は16フレームの観測が終わってから始まる。0から1までの軌跡のtimeとは別の時計だ。離脱後の未来フレームを観測したことにはしない。第12講では初期部分からのfate予測と、別の追跡イベント・処置効果の問題を分ける。

処置結果は$Y=0.7B+0.8A+\epsilon$で生成し、$A$を無作為に割り付ける。この世界の平均処置効果は0.8なので推定値と比較できる。現実のプロンプトや治療の効果が0.8という意味ではない。

評価するもの

目的検査不十分な証拠
表現未使用セッションの再構成、近傍保存美しく分離した島
軌跡root・近傍数への感度、既知順序との一致一つの高い相関
動力学次時点と複数ステップの予測誤差学習点上の矢印
分布周辺分布誤差、輸送コスト、未使用分布個体の正しい対応という主張
帰結分割したセッションでのBrier score、較正、打ち切りaccuracyだけ
因果無作為化、または識別仮定と不確実性状態と離脱の相関

標準化やPCAも評価データを使って学習してはいけない。早期予測では未来フレームが表現の選択に入っていないか確認する。scikit-learnのデータリーク解説に実装上の注意がある。

最終課題: 実際の対話へ

利用権限があり個人を識別する情報を除いた対話、または自作の公開可能な対話を使う。分析単位を1メッセージか直前数ターンの窓に固定する。各特徴はその時点までの文章だけから作る。セッション全体の要約を初期状態に使えば結末が漏れる。

同じユーザーやキャラクターが複数セッションに現れる場合、セッション分割だけでは不十分なことがある。ユーザー、キャラクター、実時間のどの軸で分離したかを記す。会話長だけの基準線と比較し、話題変更を感情変化と誤認した例も読む。

提出物は問いとデータ定義1ページ、再現可能なコード、主要図3枚、失敗例2件、限界1ページ。配点は問題・データ定義20%、リークのない評価25%、方法と基準線25%、解釈・失敗分析20%、再現性10%。生物学側を選ぶならdonor・batchの分割を考え、lineage tracingと推論した経路を区別する。

第1講では、アルゴリズムより先に観測の1行が何を意味するかを決める。