Object oriented proggraming for Machine learning implementation
1機械学習の実装から考えるオブジェクト指向イベント︓ PyCon2020⽇時︓ 2020年8⽉29⽇(⼟) 16:30~会場︓ Zoom名前︓ はんぺん(hampen2929)
View Slide
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、クリーンアーキテクチャ(カプセル化とは)、独学プログラマークラス化 カプセル化 継承 ポリモーフィズム• 変数とメソッドを同じところにまとめること• 変数とメソッドを切り出すこと• データをクラス内に隠蔽して外から⾒えなくすること• メソッドや変数を親クラスと呼ばれるクラスから受け継ぐこと説明• 処理の中からデータやモデルなどのクラスをまとめる• 前処理、推論、後処理などをメソッドとして切り出す• データを外から触れないようにする• モデルに必要な処理を親クラスで定義して⼦クラスに継承させる機械学習での例• 複数のクラスで中の実装が違えど、同じインターフェースで実装されること• モデルのメソッド名、引数、返り値を同じにして違うクラスを実装する• 整理整頓がされてどこにどの処理があるかがわかりやすい• ⽬的のメソッドごとに切り出されているので、修正がしやすい• データを守ることができる• 共通の処理を実装しなくてよくなる• 実装を強いて実装部分が明確になる利点• 利⽤側からは中のロジックを気にする必要がない• モデルの変更がしやすいオブジェクト指向の特徴
9Pythonのモットーとして「みんな⼤⼈なんだから」が存在し、オープン(パブリック)であることがクローズ(プライベート)であることより有益であるという思想がある。Pythonにカプセル化は必要か︖Effective Python第2版、項⽬42 プライベート属性よりパブリックな属性が好ましいパブリック属性プライベート属性• クラスの外からは⾒えず使⽤することができない説明• クラスの外から⾒えて使⽤することができるclass Hoge():self.__huga = “poyo”実装例class Hoge():self.huga = “poyo”オブジェクト指向の特徴
10メソッド名、引数、返り値が同じである共通のインターフェースを有することで、利⽤側からは中のロジックを気にする必要がなくなり、モデルの変更がしやすくなる。ポリモーフィズムポリモーフィズムありモデルAモデルBモデルCcomputecomputecomputeインターフェイスが同じだから使いやすいね♪class_name(str)image(JpegImageFile)class_name(str)image(JpegImageFile)class_name(str)image(JpegImageFile)ポリモーフィズムなしインターフェイスが違うから使いにくいね…モデルAモデルBモデルCcomputeget_resultinferenceclass_name(str)image(JpegImageFile)class_name(list)image(np.ndarray)class_name(dict)image(Tensor)オブジェクト指向の特徴
11画像分類のモデルの実装を例に実装を確認していく。実装例の確認 実装例の確認画像分類モデルcompute”sports_car”
12画像分類モデルを実装するにあたりインターフェイスと抽象クラスと具象クラスの3つのクラスを⽤いる。オブジェクト指向を3つのクラスに分けて考える画像分類ベースモデルクラス(抽象クラス)ベースモデルクラス(インターフェイス)画像分類モデルクラス(具象クラス)• 個々のクラス特有の処理を実装する説明• 共通の処理を実装する• 具体的な処理は実装せずクラスの変数やメソッドのみを定義する• 個々の画像分類のモデル特有の処理を実装する機械学習での例• 画像分類のモデルの共通の処理を実装する• モデルの処理の流れを定義する実装例の確認
131. 機械学習のモデルとしての振る舞い2. 画像分類の共通の処理3. 個々の⼿法の画像分類モデル特有の処理クラス化と継承画像分類の処理画像分類ベースモデルクラス(抽象クラス)ベースモデルクラス(インターフェイス)画像分類モデルクラス(具象クラス)実装例の確認
14画像分類のベースモデルクラスを継承して”get_model”のメソッドをオーバーライドするだけで作成が可能である。継承画像分類のベースモデルクラス画像分類のモデルたち実装例の確認
15インターフェースが同じなので双⽅のモデルは同じように使⽤できる。ポリモーフィズム画像分類のベースモデルクラス画像分類のモデルたち実装例の確認
16オブジェクト指向を⽤いることで⾟みが少しだけ緩和された。まとめ⾟みエピソード• Jupyter notebookにつらつらと実装をしていると、最初は楽しいがだんだんと変数の管理が複雑になったり、処理の繰り返しなどが⽬⽴ち始め管理が⼤変になる。→クラスにまとめて処理をメソッドに切り出して管理を楽にすることができ(そう)ノートブックの管理• 実装をした直後ならまだしも、実装してから時間がたった後に複雑な処理に対して修正を加えるのは⼤変で苦痛を伴う作業になってしまう。→クラスとメソッドが切り出されて修正箇所がわかりやすくなった修正が⼤変• 技術進歩の早い機械学習の領域において、新しく精度や推論速度に関して優れた⼿法が出てくるのは⽇常茶飯事であり、それに対応するために毎回スクラッチで処理を実装するのでは時間がかかりすぎてしまう。→ポリモーフィズムを使うことでモデルの差し替えが容易になったモデルの更新が頻繁まとめ
17n 本Ø なぜオブジェクト指向で書くのかØ 独学プログラマーØ クリーンアーキテクチャØ Effective Python 第2版Ø ⾃⾛プログラマーn 記事Ø ⼿続き型⾔語とは︖オブジェクト指向⾔語と⽐較しわかりやすく解説︕メリットやPythonにおすすめの型を紹介︕Ø オブジェクト指向と10年戦ってわかったこと参考⽂献 まとめ
18ご静聴ありがとうございました︕