Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
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
Rule repository
shibuiwilliam
3
47
LLM時代の検索アーキテクチャと技術的意思決定
shibuiwilliam
4
2.3k
Why Open Dataspacesのまとめ
shibuiwilliam
2
54
マルチモーダル非構造データとの闘い
shibuiwilliam
2
580
飽くなき自動生成への挑戦
shibuiwilliam
1
83
AIエージェントのメモリについて
shibuiwilliam
1
710
画像生成AIについて
shibuiwilliam
1
66
2026年はチャンキングを極める!
shibuiwilliam
9
2.3k
R&Dチームを起ち上げる
shibuiwilliam
1
270
Other Decks in Programming
See All in Programming
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
12k
The Arts and Crafts of Work in the AI Era — Toward Mastery in Software Development
kuranuki
1
730
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
100
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
380
CLIであることを活かしたGitHub Copilot CLI活用術 / GitHub Copilot CLI Pro Tips & Tricks
nao_mk2
1
1.2k
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
150
dRuby over BLE
makicamel
2
330
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
240
Oxlintのカスタムルールの現況
syumai
6
1k
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.3k
3Dシーンの圧縮
fadis
1
680
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
200
Featured
See All Featured
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
The Spectacular Lies of Maps
axbom
PRO
1
790
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
480
Become a Pro
speakerdeck
PRO
31
6k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
Exploring anti-patterns in Rails
aemeredith
3
400
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
200
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
600
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
190
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-!!