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
OOP for ML
Search
Hampen
August 29, 2020
Programming
3
2.7k
OOP for ML
Object oriented proggraming for Machine learning implementation
Hampen
August 29, 2020
Tweet
Share
More Decks by Hampen
See All by Hampen
Tennis form visualization
hampen2929
1
2.2k
Feature vector calculation of tennis swing using Gaussian process regression and dissimilarity calculation by DTW distance
hampen2929
0
5.5k
Tennis swing recognition based on pose estimation and LightGBM
hampen2929
0
4.7k
Other Decks in Programming
See All in Programming
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
720
CSC307 Lecture 09
javiergs
PRO
1
830
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
190
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.5k
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
160
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
950
CSC307 Lecture 02
javiergs
PRO
1
780
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
610
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
2.4k
Patterns of Patterns
denyspoltorak
0
1.4k
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
450
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
40k
Darren the Foodie - Storyboard
khoart
PRO
2
2.4k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
3.9k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
92
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
49k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
Transcript
1 機械学習の実装から考えるオブジェクト指向 イベント︓ PyCon2020 ⽇時︓ 2020年8⽉29⽇(⼟) 16:30~ 会場︓ Zoom 名前︓
はんぺん(hampen2929)
2 ⾃⼰紹介 持丸 裕⽮ 【経歴】 2015年 東北⼤学⼯学部卒業 2016年 Fraunhofer IISB
(ドイツ留学) 2018年 東北⼤学⼤学院⼯学研究科卒業 2018年 IT系企業のData science部署配属 【仕事】 2018年 予測モデルの構築と分析 2019年 画像・動画の分析 2020年 動画分析アプリケーション構築 【プライベート】 テニスの動画分析 未踏AI はんぺん (hampen2929)
3 アジェンダ 背景 オブジェクト指向の特徴 まとめ 実装例の確認 ⼿続き型とオブジェクト指向
4 本発表は社会⼈3年⽬の現在の⾃分が社会⼈1年⽬の時に機械学習の実装をする上で知っ ておきたかったこと話すので、内容は初学者の⽅向けです。 本発表の対象者 説明 • 初学者のデータサイエンティスト・機械学習エンジニアで⼤学でコンピュータサイエンスを勉 強していないが機械学習などの実装をやる⽻⽬になった⼈ • Jupyter
notebookでつらつらと実装するのに限界を感じている⼈ • オブジェクト指向よくわからない⼈ 対象者 背景
5 機械学習の実装は基本的に⾟いので、オブジェクト指向の書き⽅で少しでも⾟さを緩和できるこ とを皆さんに知ってもらうことが⽬的です。 本発表の⽬的 ⾟みエピソード • Jupyter notebookにつらつらと実装をしていると、最初は楽しいがだんだんと変数の管 理が複雑になったり、処理の繰り返しなどが⽬⽴ち始め管理が⼤変になる。 ノートブックの管理
• 実装をした直後ならまだしも、実装してから時間がたった後に複雑な処理に対して修正 を加えるのは⼤変で苦痛を伴う作業になってしまう。 修正が⼤変 • 技術進歩の早い機械学習の領域において、新しく精度や推論速度に関して優れた⼿ 法が出てくるのは⽇常茶飯事であり、それに対応するために毎回スクラッチで処理を実装 するのでは時間がかかりすぎてしまう。 モデルの更新が頻繁 オブジェクト指向で実装して⾟みを緩和 背景
6 モデリングをする際に⼿続き型からオブジェクト指向へのリファクタリングの溝を埋めたい。 ⼿続き型とオブジェクト指向 ⼿続き型 メリット • ⼩さなプログラムを書くにはちょうど良い • コードを追いかけやすい •
学習難易度が低い • 処理の再利⽤ができる • クラス、カプセル化、継承、ポリモーフィ ズムと⾏った特徴を使⽤できる • 修正を加えるのが⽐較的容易 オブジェクト指向 デメリット • 処理の再利⽤ができない • グローバル変数 • 修正を加えるのが難しい • ⼩さなプログラムを書くには向かない • コードを追いかけにくい • 学習難易度が⾼い 独学プログラマーp144, ⼿続き型⾔語とは︖オブジェクト指向⾔語と⽐較しわかりやすく解説︕メリットやPythonにおすすめの型を紹介︕ 分析 モデリング モデリング パッケージ システム 主な⽤途 ⼿続き型とオブジェクト指向
7 変更されない箇所を軸に、頻繁に変更されるであろう箇所をクラスに抽出する ↓ 変更に対して柔軟に対応できる ↓ 実装者が楽できる なぜオブジェクト指向で書くのか オブジェクト指向と10年戦ってわかったこと 実装者が楽できる なぜオブジェクト指向で書くのか
8 オブジェクト指向にはクラス化、カプセル化、継承、ポリモーフィズムの4つの特徴が存在する。 オブジェクト指向の4⼤要素 オブジェクト指向でなぜつくるのかp106、クリーンアーキテクチャ(カプセル化とは)、独学プログラマー クラス化 カプセル化 継承 ポリモーフィズム • 変数とメソッドを同じところ
にまとめること • 変数とメソッドを切り出すこ と • データをクラス内に隠蔽し て外から⾒えなくすること • メソッドや変数を親クラスと 呼ばれるクラスから受け継 ぐこと 説明 • 処理の中からデータやモデ ルなどのクラスをまとめる • 前処理、推論、後処理な どをメソッドとして切り出す • データを外から触れないよ うにする • モデルに必要な処理を親ク ラスで定義して⼦クラスに 継承させる 機械学習 での例 • 複数のクラスで中の実装が 違えど、同じインターフェー スで実装されること • モデルのメソッド名、引数、 返り値を同じにして違うクラ スを実装する • 整理整頓がされてどこにど の処理があるかがわかりや すい • ⽬的のメソッドごとに切り出 されているので、修正がし やすい • データを守ることができる • 共通の処理を実装しなくて よくなる • 実装を強いて実装部分が 明確になる 利点 • 利⽤側からは中のロジック を気にする必要がない • モデルの変更がしやすい オブジェクト指向の特徴
9 Pythonのモットーとして「みんな⼤⼈なんだから」が存在し、オープン(パブリック)であることがク ローズ(プライベート)であることより有益であるという思想がある。 Pythonにカプセル化は必要か︖ Effective Python第2版、項⽬42 プライベート属性よりパブリックな属性が好ましい パブリック属性 プライベート属性 •
クラスの外からは⾒えず使⽤ することができない 説明 • クラスの外から⾒えて使⽤する ことができる class Hoge(): self.__huga = “poyo” 実装例 class Hoge(): self.huga = “poyo” オブジェクト指向の特徴
10 メソッド名、引数、返り値が同じである共通のインターフェースを有することで、利⽤側からは中の ロジックを気にする必要がなくなり、モデルの変更がしやすくなる。 ポリモーフィズム ポリモーフィズムあり モデルA モデルB モデルC compute compute
compute インターフェイスが同じだから 使いやすいね♪ class_name(str) image(JpegImageFile) class_name(str) image(JpegImageFile) class_name(str) image(JpegImageFile) ポリモーフィズムなし インターフェイスが違うから 使いにくいね… モデルA モデルB モデルC compute get_result inference class_name(str) image(JpegImageFile) class_name(list) image(np.ndarray) class_name(dict) image(Tensor) オブジェクト指向の特徴
11 画像分類のモデルの実装を例に実装を確認していく。 実装例の確認 実装例の確認 画像分類モデル compute ”sports_car”
12 画像分類モデルを実装するにあたりインターフェイスと抽象クラスと具象クラスの3つのクラスを⽤い る。 オブジェクト指向を3つのクラスに分けて考える 画像分類ベースモデルクラス (抽象クラス) ベースモデルクラス (インターフェイス) 画像分類モデルクラス (具象クラス)
• 個々のクラス特有の処 理を実装する 説明 • 共通の処理を実装す る • 具体的な処理は実装 せずクラスの変数やメ ソッドのみを定義する • 個々の画像分類のモ デル特有の処理を実 装する 機械学習 での例 • 画像分類のモデルの共 通の処理を実装する • モデルの処理の流れを 定義する 実装例の確認
13 1. 機械学習のモデルとしての振る舞い 2. 画像分類の共通の処理 3. 個々の⼿法の画像分類モデル特有の処理 クラス化と継承 画像分類の処理 画像分類ベースモデルクラス
(抽象クラス) ベースモデルクラス (インターフェイス) 画像分類モデルクラス (具象クラス) 実装例の確認
14 画像分類のベースモデルクラスを継承して”get_model”のメソッドをオーバーライドするだけで作 成が可能である。 継承 画像分類のベースモデルクラス 画像分類のモデルたち 実装例の確認
15 インターフェースが同じなので双⽅のモデルは同じように使⽤できる。 ポリモーフィズム 画像分類のベースモデルクラス 画像分類のモデルたち 実装例の確認
16 オブジェクト指向を⽤いることで⾟みが少しだけ緩和された。 まとめ ⾟みエピソード • Jupyter notebookにつらつらと実装をしていると、最初は楽しいがだんだんと変数の管 理が複雑になったり、処理の繰り返しなどが⽬⽴ち始め管理が⼤変になる。 →クラスにまとめて処理をメソッドに切り出して管理を楽にすることができ(そう) ノートブックの管理
• 実装をした直後ならまだしも、実装してから時間がたった後に複雑な処理に対して修正 を加えるのは⼤変で苦痛を伴う作業になってしまう。 →クラスとメソッドが切り出されて修正箇所がわかりやすくなった 修正が⼤変 • 技術進歩の早い機械学習の領域において、新しく精度や推論速度に関して優れた⼿ 法が出てくるのは⽇常茶飯事であり、それに対応するために毎回スクラッチで処理を実装 するのでは時間がかかりすぎてしまう。 →ポリモーフィズムを使うことでモデルの差し替えが容易になった モデルの更新が頻繁 まとめ
17 n 本 Ø なぜオブジェクト指向で書くのか Ø 独学プログラマー Ø クリーンアーキテクチャ Ø
Effective Python 第2版 Ø ⾃⾛プログラマー n 記事 Ø ⼿続き型⾔語とは︖オブジェクト指向⾔語と⽐較しわかりやすく解説︕メリットやPythonにおすす めの型を紹介︕ Ø オブジェクト指向と10年戦ってわかったこと 参考⽂献 まとめ
18 ご静聴ありがとうございました︕