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
1.9k
Feature vector calculation of tennis swing using Gaussian process regression and dissimilarity calculation by DTW distance
hampen2929
0
5.3k
Tennis swing recognition based on pose estimation and LightGBM
hampen2929
0
4.6k
Other Decks in Programming
See All in Programming
Method Swizzlingを行うライブラリにおけるマルチモジュール設計
yoshikma
0
100
Regular Expressions, REXML, Automata Learning
makenowjust
0
180
オートマトン学習しろ / Do automata learning
makenowjust
3
100
令和トラベルにおけるLLM活用事例:社内ツール開発から得た学びと実践
ippo012
0
110
1人で挑むSwiftコンパイラ 〜型システム入門編〜
s_shimotori
0
310
The Sequel to a Dream of Ruby Parser's Grammar
ydah
1
180
iOSの隠されたAPIを解明し、開発効率を向上させる方法/iOSDC24
noppefoxwolf
2
120
null or undefined
susisu
21
4.1k
初めてのiOS関連GitHub ActionsをMarketplaceに公開するまでの実録
konifar
3
200
ゲームボーイアドバンスでSwiftを動かそう
k_koheyi
0
510
What we keep in mind when migrating from Serverless Framework to AWS CDK and AWS SAM
kasacchiful
1
130
TypeScriptで 負荷テストを書こう 〜k6のシングルバイナリの秘密〜
dora1998
7
2.8k
Featured
See All Featured
The Language of Interfaces
destraynor
153
23k
What's in a price? How to price your products and services
michaelherold
241
11k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.4k
Producing Creativity
orderedlist
PRO
340
39k
A Modern Web Designer's Workflow
chriscoyier
690
190k
How GitHub (no longer) Works
holman
309
140k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
363
22k
[RailsConf 2023] Rails as a piece of cake
palkan
44
4.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
42
2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
122
18k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
27
7.4k
Designing the Hi-DPI Web
ddemaree
278
34k
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 ご静聴ありがとうございました︕