Translate

2016年12月21日水曜日

TensorFlowは機械学習ビジネスの"フレームワーク"ではないかと邪推する

TensorFlowを始める最初に読んだのが

有山圭ニ著「TensorFlowはじめました」


だったのだけど、
機械学習はおろかPythonの知識すらなかったので
正直書いていることがよくわからなかった。

特になんで変数やPlaceholderをわざわざ定義しなきゃならないのか
Python自体の持つ変数で十分じゃないのか
とか
なんでわざわざsessionをおこしてrunするのか
Pythonの関数として定義させて呼び出せば
Pythonコードの読み方がトリッキーにならずに済むのに
とか
おもっていた。




p8にかかれていたオーバヘッドの絵(上の図はそれを模写したもの)が
その理由であることもなんとなくしかわからなかった。

がTensorFlowのGuide>How-Tosを読んでいくと
なんとなく意味がわかってきた。

それに気づいたのが情報機構主催の研修
「Chainerを利用したDeepLearningプログラムの仕組みとその作成・実装方法」
で講師だった新納浩幸教授がChainerが「フレームワーク」であると説明したときだった。

Chainerがフレームワークなら
TensorFlowもフレームワークになっているんじゃないのか
とおもい、やや強引だけどMVCフレームワークの代表格Struts2と比較する絵を
書いてみたら、意外と整理できた。






StrutsをJSPなどを無視してざっくり説明すると
Actionを実装した具現クラスをたくさん作って、
XMLで書いた定義ファイルに従って画面遷移させる
MVCフレームワークだ。

TensorFlowはというと、
C++でOperationの具現クラスを作って独自Operrationが
つくれるようになっている。
機械学習素人やいっちょかみレベルの開発者は
TensorFlowが提供する既存のOperationを使うだけなので
C++開発はほとんどしないが、
TensorFlow自体はすべてC++コードがメインだ。
Pythonからそれを呼び出してつかっているだけなのだけど、
Pythonコード上のリテラルを使ってしまうと
最初の絵の左側のように毎回処理が終わったらC++のレジスタ領域から
Pyhonの変数にもどさないといけない。
だけどtf.Variableを用意してこれをC++上のオブジェクトとしてしまえるようにすれば
Pythonの世界に戻ってこなきて良いわけだ。

XMLで計算グラフを定義してもいいけど、
機械学習のモデル設計者の立場からすると
ランタイム実行を何度も繰り返す主戦場をあたかも
Pythonの上で開発しているように見せかければいいわけか。

ただプログラミングに重心を持つ開発者からすると
Chainerのほうが行数も少なく済む。
グラフ定義しておいてそこで処理せず
セッション実行で初めて動き出すところに違和感を感じる。

けど、主戦場がC++でPythonはそれを定義するために使っている部分と
それを実行する部分をしっかり理解してコードを読み書きすれば
違和感は払拭できる。

ChainerはGPUを使う場合はnumpyではなくCuPyを使うけど
TensorFlowはtf.Variableを使うのでそんな必要はない。
かわりにrun関数の引数でPythonの世界で扱っていたデータを
C++の世界に送り出してやればあとは"データフロー"グラフで処理してくれる。

 tf.Variable名前空間を使えば、訓練済みの重さとバイアスを保存・復元も簡単、
訓練・自動評価・パラメータ更新系モジュールで完成したチェックポイントファイルを
ServingのリファレンスインプリメントであるServerCoreのようにしてやれば
最新の訓練済みパラメータの推論側のシステムへホットアップロードでき
CPU側でVariable管理、GPU側で学習や推論を動かす実装にして
推論側の高速化はQuantatizeでfloatの32bitを8bitに圧縮し処理で実現
Distributed TensorFlowKubernetes+docker
2017前半からGPUサポートするGoogle Cloud Platformで開発系本番系インフラを
つくることができる。
Deep Learningでレイヤが熱くなり混沌とするグラフ実装をスリム化する手段は
TF-Slimでなんとかして、
独自OperationはPython/C++両方でexposeするのでネーミングルールの注意まで
How-Tosに掲載されている..

TensorFlowのアーキテクチャを読んでいくと
ますますGoogleの機械学習/NN/DLに対する本気度がわかってくる..

ソフトウェアジャパン2016で人工知能学会会長の松原さんが
人工チノについては「日本は海外から1周以上周回遅れ」といっていたが
そのとおりかもしれない..

たしかに
国内企業産のChainerはバージョンアップも頻繁で
どんどん新しいモデルが表現できるようにして
先進技術をとりこんでいるのかもしれないが
フレームワークの目的範囲がTensorFlowよりも狭い気がする..


0 件のコメント:

ClaudeをOpenAI O1のように思考させるDifyサンプルを試す

 Difyの「探索」タブにはさまざまなサンプルが載っており、その1つに「Thinking Claude (OpenAI O1 Alternative)」というものがある。   このサンプルがどういうものか、未だに自分でも解けない以下の問題をためしに聞いてみることにした。 『人類の...