Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Reviewing_machine_learning_program.pdf
Search
shibuiwilliam
October 12, 2022
Programming
2.4k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Reviewing_machine_learning_program.pdf
機械学習のプログラムをレビューする。
https://rakus.connpass.com/event/257623/
shibuiwilliam
October 12, 2022
More Decks by shibuiwilliam
See All by shibuiwilliam
The Conductor Pattern -Multi-Granularity Feedback for Creative Agents-
shibuiwilliam
2
96
LLM・AIエージェントシステムベストプラクティス
shibuiwilliam
8
2.6k
LLMやAIエージェントをソフトウェアに組み込むプラクティス
shibuiwilliam
3
6.1k
From Prompt Engineering to Loop Engineering
shibuiwilliam
2
490
OntologyとLLMOps
shibuiwilliam
4
210
Rule repository
shibuiwilliam
3
100
LLM時代の検索アーキテクチャと技術的意思決定
shibuiwilliam
5
2.7k
Why Open Dataspacesのまとめ
shibuiwilliam
2
310
マルチモーダル非構造データとの闘い
shibuiwilliam
2
860
Other Decks in Programming
See All in Programming
Security issues being discussed on Web Platforms
petamoriken
0
1.4k
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.8k
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2.2k
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
250
カツオ、ご期待ください
suneo3476
0
140
wkhtmltopdfの次どうするか問題2026
willnet
2
1.8k
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
110
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
110
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
580
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
130
残高管理から台帳サービスへの進化
artoy
0
140
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.3k
Featured
See All Featured
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.1k
From π to Pie charts
rasagy
1
390
We Are The Robots
honzajavorek
0
380
Building the Perfect Custom Keyboard
takai
2
890
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
770
Product Roadmaps are Hard
iamctodd
55
13k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Transcript
機械学習のプログラムを レビューする 2022/10/12 しぶい
自己紹介 shibui yusuke • いろいろ → Launchable(いまここ) • MLOpsとかいろいろエンジニア •
たまにセールスとかPRとか • もともとクラウド基盤の開発、運用 • ここ6年くらいMLOpsとバックエンドとインフラとたまに データ分析とAndroidで仕事 • Github: @shibuiwilliam • Meety: https://meety.net/matches/OPJgijxiEMHE • 最近の趣味:猫と副業と自宅勤務改善 cat : 0.55 dog: 0.45 human : 0.70 gorilla : 0.30 物体検知 2
• 2022年11月14日発売予定! • https://www.amazon.co.jp/dp/4798173401/ • 発売中! • https://www.amazon.co.jp/dp/4798169447/
今日話すこと • 機械学習開発におけるコードレビュー ◦ 方針を合意する ◦ Jupyter Notebookとの闘い ◦ 確率的な機械学習のプログラムをレビューする
◦ まとめ • https://speakerdeck.com/shibuiwilliam/reviewing-machine-learning-program
考えてるものが違う • ユーザから見たAI • MLエンジニアから見たML • ソフトウェアエンジニアから見た MLシステム ネコを 描いて!
方針を合意する • Jupyter Notebookの位置付け • データサイエンティスト、機械学習エンジニアに求めるアウトプット • 本番システムに導入するコード品質 いきなり出 てきたコー
ド いきなり依頼された コードレビュー コード 合意した方針 方針に沿った開発
Jupyter Notebookとの闘い
Jupyter Notebook WebブラウザでPythonを 書いて実行、可視化できる 開発環境。
Jupyter Notebook • 利点 ◦ 書いてすぐ実行できる。 ◦ 部分実行や途中実行もできる。 ◦ テーブルやグラフを可視化できる。
◦ データサイエンスや機械学習開発のデファクトスタンダードになってる。 • 難点 ◦ リントもフォーマットもできない。 ◦ レビューコメントを書けない。 ◦ 部分実行や途中実行されていると、プログラムの実行順序がわからない。 ◦ 適当に作って適当に放置される(レポジトリで管理されない)。 ◦ ファイルサイズが大きい。
DSやMLエンジニアに求めるアウトプット • 学習が正しく動き、学習の評価と推論の評価で矛盾が生じないこと。 取得したデータが正しい→ ←この処理が正しい 動くモデルができてる→ ←要件を満たす 評価と推論が乖離しない→ データ分析 前処理
学習 評価 推論 ←損失関数が下がる ←動く 安定して動かせる 第3者に理解できる ←説明・納得できる
• 目的が大事 ◦ 多くの場合、Jupyter Notebookは中間成果物。 ◦ 分析や機械学習の正しさを証明、検証するためのツール。 Jupyter Notebookが本番システムに組み込まれることはない。 ◦
プログラムと考えるよりもレポートやドキュメントとして扱うと精神衛生上健全。 • レビュー対象 ◦ データ!!! ◦ 分析や機械学習の正しさ ◦ 前処理、後処理、評価の正しさ ◦ 可視化 ◦ 説明 • 非レビュー対象 ◦ コード品質 Jupyter Notebookをレビューする
• レビュー会 ◦ Jupyter Notebookを通して実行した状態でレビューする。 ▪ レビュー会(30〜60分)でJupyter Notebookに書いた分析や機械学習をレビューする。 ▪ レビュー対象のJupyter
NotebookはColabやクラウド(Vertex AIやSagemaker等)の 共通開発環境にデータとともに保存する。ローカル環境禁止。 ▪ レビュー会ではJupyter Notebookを上から下まで順番に実行した結果を報告する (部分実行や途中実行は禁止)。 ▪ 分析・テスト結果は必ず全て可視化する。 ◦ コード品質は諦める。 ◦ ただし、最低限読めるプログラムを書く。 Jupyter Notebookをレビューする
このツールを使えばもっと便利になるかも • https://github.com/marketplace/actions/diff-notebooks • GitHub ActionsでJupyter Notebookの変更を可視化してレビューするツール。
確率的な機械学習の プログラムをレビューする
.ipynb -> .py へ書き直す データ分析 前処理 学習 評価 推論 ここは書き直す
必要がある。 ここは書き直さない 場合もある
前処理と推論だけ書き直す場合 • レビュー対象 ◦ コードの可読性とメンテナンス性 ◦ データ検証で不明点を減らす ▪ コードだけだと想定しているデータがわからないことが多い ▪
データ検証やコメントで扱っているデータの例や構造を定義することを推奨 ▪ テーブルデータであればpanderaやTensorFlow data validationが有効 ◦ テスト ▪ ユニットテストと結合テスト ▪ 推論結果もテストする
データ検証例 import pandas as pd import pandera as pa schema
= pa.DataFrameSchema({ "gender": pa.Column(str, checks=pa.Check(lambda x: x in _genders , element_wise=True, error=f"gender must be {_genders}"), ), "height_cm": pa.Column(float, checks=[ pa.Check(lambda x: 130 <= x <= 210 , element_wise=True, error=f"height must be between [130, 210]", ), pa.Hypothesis.two_sample_test( sample1="male", sample2="female", groupby="gender", relationship="greater_than", alpha=0.01, equal_var=True, ), ], ), }) df = pd.DataFrame(data = {"gender": genders, "height_cm": heights}) df = schema(df) • Pythonのpandasとpanderaによるデータ検証 • カラムごとにdata schemaを定義し、 チェックを挟むことで取得したデータの 正しさを検証する • Hypothesis testingを活用することで 複数カラム間の妥当性をテストすることが 可能
学習や評価も書き直す場合 • レビュー対象 ◦ コードの可読性とメンテナンス性 ◦ 責任分界を明確にし、可能な限りSOLID原則を守る ▪ 少なくとも単一責任の原則は守る ▪
他は努力目標 ◦ 学習と評価の結果を記録するコードを追加する ▪ 各種機械学習サービスやライブラリ(Vertex AI、Sagemaker、MLflow等)で 提供されているものを使う ◦ データ検証 ◦ テスト
機械学習のフローと単一責任の原則 データ取得 前処理 学習 評価 推論 モデル定義 評価指標 データ元 class
CoolML(): def __init__(self) def load_data(self) def __load_user_data(self) def __load_item_data(self) def preprocess_train_evaluate(self) def predict(self) def run_all(self) • 機械学習のコードをまとめたクラス • 一箇所の変更で他も変更する必要が あり、メンテナンスが難しい • 可読性も低くなりがち
機械学習のフローと単一責任の原則 データ取得 前処理 学習 評価 推論 モデル定義 評価指標 データ元 class
CoolML(): def __init__(self) def load_data(self) def __load_user_data(self) def __load_item_data(self) def preprocess_train_evaluate(self) def predict(self) def run_all(self) class DataWarehouseAccessor() class UserDataLoader() class ItemDataLoader() class Normalize() class CoolModel() def define_model(self) class EvaluationMetrics() class ModelTrainer() def train(self) def evaluate(self) -> EvaluationMetrics class Predictor() class Pipeline() def __init__(self, data_loader:DataLoader, preprocess:Preprocess, model:CoolModel, predictor:Predictor) データアクセスと データロートを 分ける 前処理と学習を分ける 定義と実行を分ける 推論を処理含めて クラスにまとめる パイプラインにする
まとめ
まとめ • 異なるスキルセット、異なるチームで開発することが多い機械学習プロジェクト • 互いに開発とレビューの方針を合意し、その合意に沿って開発しレビューする • Jupyter Notebookはレポートやドキュメントのつもりで作り、レビューする • 本番コードは不明点の削減と可読性の向上を目指す
• 機械学習を実用化する方法論や事例を学ぶ勉強会 • 次回は10/25(火)18:00開催。ぜひご参加ください! ◦ 株式会社プレイド ML Tech Lead 春日
瑛 様 KARTEにおけるMLOpsの変遷 ◦ 株式会社DeNA データ本部副本部長 加茂 雄亮 様 DeNAにおける AI Project Management Flow and Build Trap Review • https://mlops.connpass.com/event/261097/ MLOps勉強会 第24回は10/25 (火) 18:00-!!