オンデバイスでディープラーニングを学習させる手法

  • 2018.10.15
  • AI
オンデバイスでディープラーニングを学習させる手法

1.オンデバイスでディープラーニングを学習させる手法まとめ

・オンデバイスでディープラーニングを学習させる事は簡単ではない
・大企業のチームは既にそれを行って製品化しているので可能ではある
・FWを使って構築したモデルをFW外で扱う工夫が必要

2.オンデバイスでディープラーニングを学習させる困難さ

以下、petewarden.comより「What Does it Take to Train Deep Learning Models On-Device?」の意訳です。

ここ数週間、数人から電話や組み込み機器でモデルをトレーニングさせる事について質問を受けました。良い知らせは、それは間違いなく可能だということです。これを成功させている複数の事例があります。悪い知らせは、私たちが使っているツールではまだ簡単にはできないということです。

2014年、私は電話上で簡単な転移学習を行う方法を示すコードとビデオを公開しました。その時点では、サポートベクターマシンを使用して最終層のオンデバイストレーニングを処理していましたが、バックプロパゲーション(つまりニューラルネットワーク)を使用しなかった根本的な理由はありませんでした。ただ単に私が良く知っている手法を使用する法が簡単だったのです。私の事例より早く同様な事を実現した他の例がきっとあると確信しています。

ニューラルネットワークを使用したオンデバイス学習が長い間普遍的に行われてきた分野の1つが音声認識です。現在でも貴方のスマートフォンは、初回設定時にウェイクアップワード(「OK Google」や「Hey Siri」などの音声アシスタントを起動する言葉)を何度か発声するように貴方に求めてきます。それを使って貴方の発音を学ぶのです。

典型的ケースでは、バックプロパゲーションを使用してネットワークを完全に再トレーニングする必要はありませんが、特徴量抽出プロセスまたは最終レイヤ部は転移学習に似ています。

Appleの実装では、補足的なネットワークを使用して、彼らが話者空間(speaker space)と呼ぶスペースであなたの発声を比較します。これは、通常の学習の考え方とかなり異なっています。これらのケースは、オンデバイス学習の有効な事例と思います。しかし、私はネットワークの変更部分の範囲を把握するために「パーソナライゼーション」という用語を使用することがよくあります。

Pythonで構築されたディープラーニングをオンデバイスで構築する必要が出てくる状況もあります。公開されている良い例は、Googleキーボードアプリケーションです。この実装では、匿名化されたモデルのアップデートをネットワーク経由で実施するという新しい側面に焦点を当てていますが、これらのアップデートは、従来のフォワードパスとバックワードパスを電話機で実行する手法からもたらされています。

このように、大企業のチームはオンデバイス上で学習するアプリケーションを構築していますが、どうすれば私達は同じことを実現できるのでしょうか?実現のために重要なことは、モデルを訓練するために2つの異なる段階があることを認識することです。1つ目は、勾配を更新するためのバックプロパゲーションを構築することです。2つ目は、実際にサンプルデータをフォワードパスに渡して、その後、勾配の変化をバックパスに渡す事です。

TensorFlowを含むほとんどのライブラリは、Pythonでバックプロパゲーション操作を構築するのに必要な微分演算を自動で処理します。このコードでは、推論演算(畳み込みレイヤーがアクティベーション関数に入力されるなど)で定義したモデルを調べ、損失関数を含むバックプロパゲーションの補完的な演算セットを構築します。重要な点は、一度グラフが構築された後、少なくともTensorFlowではPythonコードをもうこれ以上必要しないということです。バックワードパスの実行は、微分段階で作成された操作のサブグラフを実行することを意味します。

TensorFlowの観点から言えば、これは、バックワードパスを作成した後、順方向操作と逆方向操作の両方を含むGraphDefを保存できることを意味します。それをC ++、つまりオンデバイスまたはサーバー上にロードすると、理論的にはSession :: Run()を使ってラベル付きの学習データを用いて勾配の更新を実行することもできます。

これはあくまで理論的な話です。何故ならこの処理に関するドキュメントは存在せず、変数の初期化、チェックポイントの読み込みと保存、損失の処理など、C ++で簡単には行えないような慣れないステップがたくさんあるからです。しかし、これは私達が埋めることができるギャップと思います。何故ならこれらの問題を克服したGoogleの内部チームが存在するので、少なくとも可能であるという証拠があります。同様の作業を行っている外部チームの例があるはずですので、TensorFlowやその他のフレームワークで共有可能なコードがあれば、コメントを追加したりTwitterで返信してくれれば私は喜んでシェアします。

3.オンデバイスでディープラーニングを学習させる手法関連リンク

1)petewarden.com
What Does it Take to Train Deep Learning Models On-Device?

2)ai.googleblog.com
Federated Learning: Collaborative Machine Learning without Centralized Training Data