Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OOP for ML

Hampen
August 29, 2020

OOP for ML

Object oriented proggraming for Machine learning implementation

Hampen

August 29, 2020
Tweet

More Decks by Hampen

Other Decks in Programming

Transcript

  1. 2 ⾃⼰紹介 持丸 裕⽮ 【経歴】 2015年 東北⼤学⼯学部卒業 2016年 Fraunhofer IISB

    (ドイツ留学) 2018年 東北⼤学⼤学院⼯学研究科卒業 2018年 IT系企業のData science部署配属 【仕事】 2018年 予測モデルの構築と分析 2019年 画像・動画の分析 2020年 動画分析アプリケーション構築 【プライベート】 テニスの動画分析 未踏AI はんぺん (hampen2929)
  2. 5 機械学習の実装は基本的に⾟いので、オブジェクト指向の書き⽅で少しでも⾟さを緩和できるこ とを皆さんに知ってもらうことが⽬的です。 本発表の⽬的 ⾟みエピソード • Jupyter notebookにつらつらと実装をしていると、最初は楽しいがだんだんと変数の管 理が複雑になったり、処理の繰り返しなどが⽬⽴ち始め管理が⼤変になる。 ノートブックの管理

    • 実装をした直後ならまだしも、実装してから時間がたった後に複雑な処理に対して修正 を加えるのは⼤変で苦痛を伴う作業になってしまう。 修正が⼤変 • 技術進歩の早い機械学習の領域において、新しく精度や推論速度に関して優れた⼿ 法が出てくるのは⽇常茶飯事であり、それに対応するために毎回スクラッチで処理を実装 するのでは時間がかかりすぎてしまう。 モデルの更新が頻繁 オブジェクト指向で実装して⾟みを緩和 背景
  3. 6 モデリングをする際に⼿続き型からオブジェクト指向へのリファクタリングの溝を埋めたい。 ⼿続き型とオブジェクト指向 ⼿続き型 メリット • ⼩さなプログラムを書くにはちょうど良い • コードを追いかけやすい •

    学習難易度が低い • 処理の再利⽤ができる • クラス、カプセル化、継承、ポリモーフィ ズムと⾏った特徴を使⽤できる • 修正を加えるのが⽐較的容易 オブジェクト指向 デメリット • 処理の再利⽤ができない • グローバル変数 • 修正を加えるのが難しい • ⼩さなプログラムを書くには向かない • コードを追いかけにくい • 学習難易度が⾼い 独学プログラマーp144, ⼿続き型⾔語とは︖オブジェクト指向⾔語と⽐較しわかりやすく解説︕メリットやPythonにおすすめの型を紹介︕ 分析 モデリング モデリング パッケージ システム 主な⽤途 ⼿続き型とオブジェクト指向
  4. 8 オブジェクト指向にはクラス化、カプセル化、継承、ポリモーフィズムの4つの特徴が存在する。 オブジェクト指向の4⼤要素 オブジェクト指向でなぜつくるのかp106、クリーンアーキテクチャ(カプセル化とは)、独学プログラマー クラス化 カプセル化 継承 ポリモーフィズム • 変数とメソッドを同じところ

    にまとめること • 変数とメソッドを切り出すこ と • データをクラス内に隠蔽し て外から⾒えなくすること • メソッドや変数を親クラスと 呼ばれるクラスから受け継 ぐこと 説明 • 処理の中からデータやモデ ルなどのクラスをまとめる • 前処理、推論、後処理な どをメソッドとして切り出す • データを外から触れないよ うにする • モデルに必要な処理を親ク ラスで定義して⼦クラスに 継承させる 機械学習 での例 • 複数のクラスで中の実装が 違えど、同じインターフェー スで実装されること • モデルのメソッド名、引数、 返り値を同じにして違うクラ スを実装する • 整理整頓がされてどこにど の処理があるかがわかりや すい • ⽬的のメソッドごとに切り出 されているので、修正がし やすい • データを守ることができる • 共通の処理を実装しなくて よくなる • 実装を強いて実装部分が 明確になる 利点 • 利⽤側からは中のロジック を気にする必要がない • モデルの変更がしやすい オブジェクト指向の特徴
  5. 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) オブジェクト指向の特徴
  6. 12 画像分類モデルを実装するにあたりインターフェイスと抽象クラスと具象クラスの3つのクラスを⽤い る。 オブジェクト指向を3つのクラスに分けて考える 画像分類ベースモデルクラス (抽象クラス) ベースモデルクラス (インターフェイス) 画像分類モデルクラス (具象クラス)

    • 個々のクラス特有の処 理を実装する 説明 • 共通の処理を実装す る • 具体的な処理は実装 せずクラスの変数やメ ソッドのみを定義する • 個々の画像分類のモ デル特有の処理を実 装する 機械学習 での例 • 画像分類のモデルの共 通の処理を実装する • モデルの処理の流れを 定義する 実装例の確認
  7. 13 1. 機械学習のモデルとしての振る舞い 2. 画像分類の共通の処理 3. 個々の⼿法の画像分類モデル特有の処理 クラス化と継承 画像分類の処理 画像分類ベースモデルクラス

    (抽象クラス) ベースモデルクラス (インターフェイス) 画像分類モデルクラス (具象クラス) 実装例の確認
  8. 16 オブジェクト指向を⽤いることで⾟みが少しだけ緩和された。 まとめ ⾟みエピソード • Jupyter notebookにつらつらと実装をしていると、最初は楽しいがだんだんと変数の管 理が複雑になったり、処理の繰り返しなどが⽬⽴ち始め管理が⼤変になる。 →クラスにまとめて処理をメソッドに切り出して管理を楽にすることができ(そう) ノートブックの管理

    • 実装をした直後ならまだしも、実装してから時間がたった後に複雑な処理に対して修正 を加えるのは⼤変で苦痛を伴う作業になってしまう。 →クラスとメソッドが切り出されて修正箇所がわかりやすくなった 修正が⼤変 • 技術進歩の早い機械学習の領域において、新しく精度や推論速度に関して優れた⼿ 法が出てくるのは⽇常茶飯事であり、それに対応するために毎回スクラッチで処理を実装 するのでは時間がかかりすぎてしまう。 →ポリモーフィズムを使うことでモデルの差し替えが容易になった モデルの更新が頻繁 まとめ
  9. 17 n 本 Ø なぜオブジェクト指向で書くのか Ø 独学プログラマー Ø クリーンアーキテクチャ Ø

    Effective Python 第2版 Ø ⾃⾛プログラマー n 記事 Ø ⼿続き型⾔語とは︖オブジェクト指向⾔語と⽐較しわかりやすく解説︕メリットやPythonにおすす めの型を紹介︕ Ø オブジェクト指向と10年戦ってわかったこと 参考⽂献 まとめ