有用なメンタルモデル
学習によって、モデルが学習した数値設定が定められます。推論ではその設定を固定したまま利用します。
モデルを、すぐに使える回答を蓄えたデータベースではなく、保存された計算として考えてみましょう。推論では、システムが計算の入力に値を与え、その計算を実行し、出力として値を受け取ります。結果は、学習した同じ関係性を今回の入力に適用することで得られます。
この区別が重要なのは、通常、モデルが学習中に保存された完成済みの回答を取り出しているわけではないからです。モデルは受け取った入力に対して結果を計算します。
推論の仕組み
正確な計算方法はAIモデルによって異なりますが、基本的な流れは共通しています。
- 入力を、モデルが想定する形式に変換します。画像ならサイズを変更することがあります。テキストなら数値の断片に分割することがあります。表の1行なら正規化することがあります。この準備処理は「推論パイプライン」にまとめられることが多いものの、モデル自体の外部で行われます。
- モデルが学習した計算を実行します。データはモデルの入力から層を通って出力へと進みます。この計算の方向はフォワードパスと呼ばれます。
- モデルが数値出力を生成します。分類器は、複数のラベルに対するスコアを生成することがあります。予測モデルは、数値や範囲を生成することがあります。言語モデルは、次に来る可能性のあるトークン、つまり処理可能なテキストの断片に対するスコアを生成します。
- ソフトウェアがその出力を解釈または選択します。しきい値を適用したり、最もスコアの高いラベルを選択したり、トークンをサンプリングしたり、結果を整形したりします。このステップは周辺の推論パイプラインの一部ですが、必ずしもモデルの一部ではありません。
- サービングシステムが結果を返すか保存します。サービングとは、モデルを読み込み、処理を受け付け、スケジュールし、出力を届けるインフラストラクチャです。推論とは、サービングシステムが実行するモデルの利用です。
「推論」の狭い意味では、ステップ2と、そこで生成されるモデル出力を指します。実際には、エンジニアは準備済みの入力から利用可能な結果までの広い流れを指して、この言葉を使うこともあります。詳細が重要な場合は、どの境界を指しているのか確認しましょう。
raw input
|
v
input preparation
|
v
fixed trained model ----> numeric model output
|
v
selection or policy
|
v
usable result通常、この流れのどこでも、モデルは学習済みの設定を更新しません。将来の学習に使う可能性のあるログとしてやり取りを記録することは、その推論中に学習することとは異なります。
具体例
スパム分類器が1通のメールを受け取るとします。メールをモデル用に準備した後、フォワードパスによって次の値が生成されます。
spam: 0.82
not spam: 0.18これらのスコアが推論の出力です。利用可能なラベルに対してモデルが相対的にどの程度支持しているかを示しますが、そのメールがスパムであることを証明するものではありません。
ここで、メールサービスに「スパムスコアが0.70以上ならメッセージをスパムに移動する」というルールがあるとします。このサービスがこのメッセージを移動するのは、0.82がそのしきい値を超えるからです。
この区別は簡単に確認できます。サービスがしきい値を0.90に引き上げた場合、同じモデルは同じ0.82というスコアを出力し続けても、メッセージは受信トレイに残ります。変わったのは推論ではなく、アプリケーションのポリシーです。
この分離は多くのシステムに見られます。リスクモデルがスコアを生成し、銀行がどのスコアで審査を開始するかを決めます。医療モデルが画像内の領域を示し、臨床医がそれを解釈します。推薦モデルが項目を順位付けし、プロダクトが表示する件数を決めます。
テキスト生成で推論が繰り返される理由
分類器では、1回のフォワードパスでモデルの出力全体を生成できます。自己回帰型の言語モデルは異なる仕組みで動作します。
プロンプトを受け取ると、まずモデルが次に来る可能性のあるものに対するスコアを生成します。次にデコード規則が1つのトークンを選択します。選択されたトークンがテキストに追加され、モデルはその長くなった系列に対して再び実行されます。このループは、終了マーカーを選択するか、別の停止条件に達するまで続きます。
prompt
-> forward pass
-> next-token scores
-> select one token
-> append it
-> repeat
-> stopデコード規則は重要です。最もスコアの高いトークンを選ぶと、条件が安定している場合、処理は決定的になります。複数の候補からサンプリングすると、同じプロンプトから異なるテキストを生成できます。どちらの場合もモデル自体は変わりません。違いは、ソフトウェアが出力スコアからどのように選択するかによって生じます。Hugging Faceの生成に関するドキュメントでは、これらを個別の生成オプションとして扱っています。
このため、「推論は1回のフォワードパスである」という説明は、便利な簡略化ではあっても、普遍的な定義ではありません。1回のパスで1つの予測、1組のスコア、またはより長い生成結果に向けた1ステップを生成することがあります。
推論が重要な理由
推論は、学習済みモデルが実際の入力と接する場面です。その動作は、AI機能が有用で、手頃なコストで、応答性が高く、信頼できるものになるかどうかに影響します。
その結果を決めるのはモデルだけではありません。入力準備はモデルの想定に合っていなければなりません。出力の選択はタスクに適している必要があります。ランタイムは利用可能なハードウェア上で計算を実行しなければなりません。サービング層はリクエストのパターンに対応する必要があります。
こうした選択によって、次のようなトレードオフが生じます。
- 応答時間:インタラクティブな処理では、素早い結果が求められます。
- スループット:バッチ処理や負荷の高いサービスでは、時間あたりにシステムがどれだけの処理を完了できるかが重要です。
- コストとエネルギー:推論のたびに計算資源を消費します。繰り返し生成を行う場合は、各ステップで資源を消費します。
- 出力品質:低精度の数値を使うなど、速度を上げる変更によって出力が変わることがあるため、検証が必要です。
- プライバシーと接続性:推論はデータセンターでもローカルデバイスでも実行できます。実行場所によって、ネットワーク経由で送信する必要のあるデータが変わります。
推論の設定に唯一の最適解はありません。適切なバランスは、モデル、ワークロード、ハードウェア、アプリケーションの要件によって異なります。Googleの本番MLガイドでは、基本的な選択肢の1つとして、出力をバッチ処理で事前に計算するか、必要に応じて計算するかを示しています。
よくある誤解
「推論とは、モデルが私から学習すること」
通常は違います。通常の推論では、学習済みの設定を固定して使います。プロダクトがユーザーとのやり取りを保存し、後で別の学習プロセスに使うことはありますが、それは推論に自動的に含まれるものではありません。
システムによっては、利用時の計算と適応や外部メモリを意図的に組み合わせることがあります。その場合、何がいつ変化するのかをシステムが明示すべきです。「推論」という言葉だけで学習を意味するわけではありません。
「推論は予測と同じこと」
これらの用語は同じ意味で使われることが多いものの、推論はプロセス、予測は出力と区別すると有用です。出力のほうが広い言葉です。生成モデルは、必ずしも予測とは呼ばれないテキスト、画像、音声を生成するからです。
「推論は常にリアルタイムで行われる」
推論にはオンラインとオフラインがあります。オンライン推論はリクエストが到着したときに実行されます。オフライン推論またはバッチ推論は、多数の入力をまとめて処理し、後で使うために結果を保存できます。
「同じ入力なら必ず同じ出力になる」
必ずしもそうではありません。モデルや選択規則によっては決定的です。一方で、可能な出力からサンプリングするものもあります。ランタイムの詳細によって、小さな数値差が生じることもあります。再現性は「推論」という言葉の性質ではなく、システム全体の性質です。
「推論モードなら、正しい予測を出せる状態になっている」
フレームワークの用語は、一般的な概念より狭い場合があります。たとえば、PyTorchのinference_modeは勾配計算に使われる記録処理を無効にしますが、すべてのモデル層を評価モードに自動的に切り替えるわけではありません。フレームワークの切り替えは実装上のツールであり、AI推論の定義ではありません。
「推論がAIプロダクト全体である」
推論は1つの構成要素にすぎません。アプリケーションは、データの検索、安全ルールの適用、ツールの呼び出し、状態の保存、インターフェースの表示なども行うことがあります。これらのステップはモデルの推論計算の外部にありますが、結果に大きな影響を与える可能性があります。
推論がAIシステムに組み込まれる場所
学習と推論には異なる役割があります。学習では、モデルの出力と目的関数を繰り返し比較し、モデルを更新します。推論では、その結果得られた固定モデルを使って入力を処理します。
デプロイされたシステムには、さらに別の層が加わります。
training -> saved model -> deployment and serving -> inference -> application action
|
v
logs for later reviewログは最終的に別の学習実行に利用されることがあります。これはシステムレベルではフィードバックループを形成しますが、通常の各推論は依然として、保存された特定バージョンのモデルを使います。
次に読むもの
推論で使われる学習済みモデルを作成または更新するプロセスについては、AIにおける学習とは?を読んでください。直接的な違いについては学習と推論の違いを参照し、次に推論レイテンシーとは?へ進むと、デプロイ時の速度がどのように測定されるかを理解できます。