オンデバイスモデルとは、トレンチコートを羽織った三つの部品です。センサーが生の信号を生み出します。圧縮されたネットワークがその信号を予測に変えます。アプリがその予測をどう扱い、どう見せるかを決めます。それぞれの部品に固有の故障モードがあり、設計上の判断はその故障モードの中に隠れています。
このシステムを高いところから見る
オンデバイス機械学習とは、モデルがデータの生まれる場所で動くという意味であり、データセンターで動くという意味ではありません。モデルはオフラインで、たいていはGPUクラスタ上で訓練され、その後、対象ハードウェア向けに圧縮・変換されます。この変換の工程は見た目を整えるためのものではありません。ネットワークがスマホのニューラルアクセラレータ、DSP、あるいはすでにそこにあるCPUコアで動けるよう、演算そのものを書き換えます。スマホが受け取るのは、クラスタが訓練したモデルそのものではありません。より小さく、より速く、より脆い従兄弟です。この交換は、レイテンシ、プライバシー、バッテリーを、精度と柔軟性と引き換えにするものです。クラウドモデルはアプリの更新なしに差し替えられます。オンデバイスモデルはビルドに凍結されます。この制約が下流のすべてを形づくります。アプリをどれくらいの頻度で出荷するかから、訓練セットに一度も含まれなかった入力にどれだけ優雅に対処するかまで。
センサー、モデル、アプリ
センサーの層は物理です。カメラのフレームは光子として小さなセンサーに届き、モデルが見る前にデモザイク、ホワイトバランス、クロップを経ます。マイクの信号はフィルタリングされ、窓関数がかけられます。加速度計は三軸を一定のレートで報告します。これらの工程は地味で、しかも実世界での精度を支配します。きれいなクロップで訓練されたモデルは、わずかにぼやけた、あるいは露出不足のフレームでは性能が落ちます。モデルの層は算術です。畳み込み、行列積、活性化関数、そのすべてが八ビット整数以下に量子化されます。量子化は、精度が静かに漏れ出す場所です。浮動小数点で高いスコアを出すネットワークが、変換後に何ポイントか失うことがあり、しかもその損失はクラス間で均一ではありません。アプリの層は判断です。いつ推論を走らせるか、結果を時間方向にどう平滑化するか、信頼度が低いときどうするかを決めます。毎フレーム骨格を描き直す姿勢トラッカーは震えます。平滑化をかけすぎるものは速い動きに遅れます。どちらの層も間違っていません。交渉しているのです。
エッジケース、つまり面白くなるところ
エッジケースは珍しいものではありません。それは火曜日です。ポケットの中のスマホは温まり、サーマルガバナがアクセラレータを絞るので、推論は半分の速度になります。アプリはフレームを落とすか、精度を落とすかを決めなければなりません。肌の色が濃いユーザーが腕装着型の光学センサーを使うと、信号は弱くなります。反射光の物理は公平さなど気にしないからです。ひとつの人口集団だけで主に訓練されたモデルは、別の集団で静かに失敗し、その失敗はユーザーの操作ミスのように見えます。次に更新の問題があります。連合学習とモデルパッチは、配備済みのモデルを改善させますが、新しい攻撃面も持ち込みます。悪いパッチはすべての端末を一度に劣化させうるのです。オンデバイスのスタックは、クラウドのスタックを小さくしたものではありません。異なるボトルネックを持つ別のスタックであり、そのボトルネックは端末、天気、そしてそれを持つ人によって動きます。
何が壊れるのか、そしてそれがなぜ役に立つのか
壊れるのは、シームレスという約束です。マーケティングの言葉は層が消えることを前提にしています。消えません。層は積み重なり、それぞれが出力に指紋を残します。指紋がどこにあるかを知ることが、クラッシュせずにどこかおかしいと感じる製品をデバッグする方法です。暗い光の中で顔検出器が顔を見逃せば、第一の容疑者はセンサーの層です。そこにない顔を見つけてしまえば、モデルの層です。正しい顔を見つけたのに枠が震えれば、アプリの層です。この対応づけは小技ではありません。それが仕事のすべてです。センサーは正直です。手首、ポケット、部屋は、いつも見るのに適した場所とは限りません。モデルは正直です。訓練セットはいつも代表的とは限りません。アプリは正直です。ユーザーはいつも辛抱強いとは限りません。失敗した層を名指しすることが、いちばん近いものを直すのではなく、正しいものを直す方法なのです。
FAQ
カメラを使うとスマホが熱くなり、遅くなるのはなぜですか?
ニューラルアクセラレータが実際の仕事をしていて、スマホが温まるとサーマルガバナがそれを絞るからです。ポケットはひどい放熱板です。アプリはフレームを落とすか精度を落とすかを選ばなければならず、ほとんどはフレームを選びます。
スペック表の精度の数字は信用できますか?
それが量子化の後に、あなたと似たハードウェアで、あなたと似た入力で測られたものである場合に限ります。訓練クラスタの浮動小数点のスコアは出発点であって、約束ではありません。変換の工程は精度を漏らし、しかも均一には漏らしません。
モデルが実地でおかしくなったとき、最初に確認すべきことは何ですか?
どの層かを名指しすることです。暗い光とモーションブラーはセンサーを指します。誤検出はモデルを指します。震えと遅延はアプリを指します。正しい層を直すほうが、間違った層を再訓練するより速いのです。




