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
78
LLM・AIエージェントシステムベストプラクティス
shibuiwilliam
7
2.5k
LLMやAIエージェントをソフトウェアに組み込むプラクティス
shibuiwilliam
2
660
From Prompt Engineering to Loop Engineering
shibuiwilliam
2
460
OntologyとLLMOps
shibuiwilliam
4
150
Rule repository
shibuiwilliam
3
87
LLM時代の検索アーキテクチャと技術的意思決定
shibuiwilliam
5
2.7k
Why Open Dataspacesのまとめ
shibuiwilliam
2
290
マルチモーダル非構造データとの闘い
shibuiwilliam
2
810
Other Decks in Programming
See All in Programming
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
330
Building an Out-of-Order CPU
latte72
1
780
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
120
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
140
FreeBSDでZabbixを動かす
kenkino
0
300
Webの地図
yosuke_furukawa
PRO
6
4.6k
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
590
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
480
アクセシビリティから考える情報設計
high_g_engineer
0
380
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
0
1.4k
新卒PdEのリアル
ryu1013
1
500
Featured
See All Featured
New Earth Scene 8
popppiees
4
2.6k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
690
Paper Plane
katiecoart
PRO
4
53k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
740
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
890
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
280
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
290
The Language of Interfaces
destraynor
162
27k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
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-!!