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.4k
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
2k
Feature vector calculation of tennis swing using Gaussian process regression and dissimilarity calculation by DTW distance
hampen2929
0
5.4k
Tennis swing recognition based on pose estimation and LightGBM
hampen2929
0
4.6k
Other Decks in Programming
See All in Programming
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.2k
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.1k
みんなでプロポーザルを書いてみた
yuriko1211
0
260
Remix on Hono on Cloudflare Workers
yusukebe
1
290
Macとオーディオ再生 2024/11/02
yusukeito
0
370
Outline View in SwiftUI
1024jp
1
330
Jakarta EE meets AI
ivargrimstad
0
560
3rd party scriptでもReactを使いたい! Preact + Reactのハイブリッド開発
righttouch
PRO
1
600
受け取る人から提供する人になるということ
little_rubyist
0
230
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
540
What’s New in Compose Multiplatform - A Live Tour (droidcon London 2024)
zsmb
1
470
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
6
1.7k
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
327
21k
Teambox: Starting and Learning
jrom
133
8.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
For a Future-Friendly Web
brad_frost
175
9.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
We Have a Design System, Now What?
morganepeng
50
7.2k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Building an army of robots
kneath
302
43k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
The Cost Of JavaScript in 2023
addyosmani
45
6.8k
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 ご静聴ありがとうございました︕