On this page | |
Since | 20.5 |
概要 ¶
これは、回帰問題を解くことができる汎用MLトレーニングノードです。 MLでは、Regression(回帰)とは、順伝播型ニューラルネットワーク(モデル)をトレーニングして、固定数の入力変数から固定数の出力変数につなぐ連続関数を厳密に近似できるようにすることを意味します。 Houdiniでは、この関数をプロシージャルネットワークの形式で用意することができます。 詳細は、機械学習のドキュメントを参照してください。
例えば、Regression MLは、リグポーズに基づいてキャラクタをリアルに変形させて方法を学習して、リニアブレンドスキニングを改善することができます。 ML Deformerのコンテンツライブラリを参照してください。 この場合では、MLを使用して、リグポーズをスキン変形にマッピングする関数を学習しています。
ML Regression Train TOPは、ラベル付きサンプルで構成されたデータセットが与えられたモデルをトレーニングします(ML Exampleを参照)。
各ラベル付きサンプルは、入力コンポーネントとそれに呼応したターゲットコンポーネントで構成されたペアです。
Regression(回帰)の場合、入力コンポーネントとターゲットコンポーネントの両方が連続変数のタプルです。この連続変数には、ポイント座標、カラー、PCAコンポーネントを含むことができます。
各ターゲットコンポーネントが連続変数を構成しているので、 Regression(回帰) という用語が使用されています。
ラベル付きサンプルがトレーニングのベースです。
ML Deformerの特定のケースでは、各入力コンポーネントは、(シリアライズされた)ポーズで、それに呼応するターゲットコンポーネントは、肉体シミュレーションによって得られた(PCA圧縮された)スキン変形です。
ML Regression Train TOPは、何かしらのユーザ指定の入力コンポーネントからターゲットコンポーネントを予測するモデルを作成します。 このゴールは、上手く一般化されたモデルを用意することです。 つまり、データセットのトレーニング部分に含まれていない入力に対して有益な予測を生成できるようにすることです。 ML Regression Train TOPには、トレーニング済みモデルが未知の入力に対して上手く動作できるように役立ついくつかのメソッドが用意されています。 これらのメソッドのことをRegularization(正則化)メソッドと呼びます。
ML Regression Train TOPによって生成されたトレーニング済みモデルは、ONNXフォーマットでディスクに書き出されます。
このモデルをHoudiniに取り込む最も簡単な方法は、ML Regression Inferenceツールを使用することです。
ML Regression Train TOPは、順伝播型ニューラルネットワークを生成します。 このニューラルネットワーク内の入力の数は、入力変数の数に相当します。 このニューラルネットワーク内の出力の数は、ターゲット変数の数に相当します。 ML Regression Train TOPは、扱うRawデータセットに格納されている次元を使用して、ネットワークの入力と出力の数を自動的に判断します。
入力と出力の愛大には、いくつかの隠れ層があります。これらの隠れ層はユーザによって制御可能です。 これらの隠れ層の幅は、入力と出力の数の最大値です。 ネットワークの挙動は、一連のパラメータで制御されます。 各パラメータは、ウェイト(スケーリング係数)またはバイアス(加算定数)のどちらかです。 トレーニングの目的は、Regression(回帰)タスク用にこれらのパラメータを最適化することです。
ML Regression Train TOPは、データセットのトレーニング部分を複数回パススルーさせます。そのような各パスのことを Epoch(エポック) と呼びます。
トレーニング処理は、トレーニングノードの設定を毎回変えて、複数回繰り返すことができます。
これらのトレーニング設定のことを、一般的に Hyperparameters(ハイパーパラメータ) と呼びます。
このようなハイパーパラメータのよくある例としては、学習率、ネットワークの隠れ層の数、ネットワークの幅などの設定があります。
Wedge TOPを使用することで、色々と変更したハイパーパラメータでトレーニング処理を繰り返すことができます。
Wedgeの設定毎に、 Model Base Name の末尾にTOPアトリビュート名を追加することで、その結果のモデルを別々のファイルに保存することができます。
ML Regression Train TOPは、ユーザが用意したデータセットを内部的に2つの部分(トレーニング部分と検証部分)に分割します。 これら2つの部分は、ユーザ側で制御可能です。 トレーニング部分は、各トレーニングエポックの度にネットワークパラメータの改善に使用されます。 検証部分は、トレーニングに使用されないデータに対するネットワークのパフォーマンスを検証するのに使用されます。
オーバーフィッティング(過剰適合)は、モデルがトレーニングデータ内の入力に対して正しい出力を生成するのにトレーニングデータ外の入力(未知の入力)に対して正しくない出力を生成する時に起こります。 オーバーフィッティング(過剰適合)を軽減するために、ML Regression Train TOPは、Early Stopping(早期停止)とWeight Decay(ウェイト減衰)という2つの単純なRegularization(正則化)メソッドをサポートしています。 Early Stopping(早期停止)は、検証損失(検証セットの損失)の減少が止まったかどうかをチェックします。 減少が止まった場合、トレーニングは強制終了します。 Weight Decay(ウェイト減衰)は、トレーニングに使用される損失関数に対して、大きなウェイトにペナルティを課す項が含まれるように修正します。
部分トレーニング ¶
モデルを一度にすべてトレーニングするのではなく、モデルを少しずつ部分的にトレーニングすることができます。その場合、各トレーニングパスは、限られた数のエポックで構成されます。 トレーニングを複数のパスに分割すると、様々なトレーニングセットアップが可能になります。 例えば、部分的にモデルを定期的にディスクに保存できるようになります。 部分的に保存されたトレーニング済みモデルをそれぞれ推論することで、トレーニングの進捗状況を視覚化することができます。
もう1つのトレーニングセットアップは、各部分トレーニングパスの前に新しいトレーニングデータを生成することです。 これは、データセットがプロシージャルネットワークを介してHoudini内で生成される時に適用することができます。
固定サイズのデータセット内のデータポイントを再考するのと比較して、新しいトレーニングデータのストリームでトレーニングすると、未知データに対してもっと上手く一般化するモデルを生成することができます。 もう1つの利点は、トレーニングデータの量を事前に決定する必要がないことです。
ML Regression Train TOP周辺で以下のようにTOPノードを配置して構成することで、トレーニングを複数のパスに分割することができます:
-
ML Regression Train TOPをフィードバックブロック内に配置します(
Feedback Begin TOPを参照)。
-
Feedback Begin TOPの入力には、部分トレーニング毎に1個のワークアイテムを持たせます。
-
例えば、
Wedge TOPを
Feedback Begin TOPの前に配置することで、 Wedge Count パラメータで部分的トレーニングパスの数を指定することができます。
-
-
Feedback Begin TOPの Create Iterations From パラメータを Upstream Items に設定します。
-
部分的トレーニングパスあたりのエポックの最大数は、ML Regression Train TOPの Max Epochs を1024などの比較的少ない値に設定することで制御可能です。
-
部分的トレーニング済みのONNXモデルを出力して維持するために、ML Regression Train TOP上で以下を指定します。
-
Files タブの Model Base Name には、
@wedgeindex
などのアトリビュートを含めてください。
-
-
各部分的トレーニングパスの前に新しいトレーニングデータを生成するために、フィードバックループ内のML Regression Train TOPの前に新しいデータセットの生成を発動する
ROP Fetch TOPを配置します。
ファイルアクセス ¶
ML Regression Train TOPは、色々なファイルにアクセスすることができます。
ファイルのベース名に1つ以上のTOPアトリビュート(例えば、@wedgeindex
や@loopiter
)を挿入することで、各ファイル名を好きなように変更することができます。
これは、以下のような色々なタイプのTOP MLトレーニングセットアップを作成します:
-
Wedge TOPを使用して、色々なハイパーパラメータでトレーニングします。
-
TOPフィードバックループ内で部分的トレーニングを繰り返して実行します。
-
TOPフィードバックループ内で必要に応じて追加トレーニングデータを生成します。
ML Regression Train TOPがアクセスするファイルは、読み込み専用、読み込みと書き込みの両方に対応、書き込み専用(または追加書き込み)だったりします。
読み込み専用カテゴリには、データセットがあり、 Data Set Folder と Data Set Base Name を使用して指定します。 これは、Early Stopping(早期停止)が有効な場合に、トレーニングデータと検証データのソースを用意します。
書き込み専用カテゴリには、ONNXフォーマットの部分的トレーニング済みモデルがあり、 Models Folder と Model Base Name でファイル名が決定されます。
トレーニングの現行状態は、 States Folder と State Base Name を使用して指定します。 トレーニング状態は、ML Regression Train TOPの1回の呼び出しの開始時に読み込まれ、終了時に書き込まれます。 このトレーニング状態によって、ML Regression Train TOPは、前回の呼び出しで中断したところからトレーニングを再開することができます。 これは、トレーニング状態の名前が前回の呼び出しと同じ場合に有効です。 トレーニング状態はチェックポイントのように機能し、不完全なトレーニングを再開することができます。
トレーニングに関連した診断情報と進捗情報は、 Logs Folder と Log Base Name で指定されたファイル場所に記録されます。 ログファイルが存在した場合、ログ情報は、その既存のログファイルに追記されます。 このログ記録によって、ML Regression Train TOPを複数回呼び出すことで(例えば、TOPフィードバックループ内で呼び出すことで)単一トレーニングが複数パーツに分割された場合でも、単一ログファイルを生成することができます。
制限事項 ¶
ML Regression Train TOPとそれ関連のSOPノードは、Houdiniで回帰MLを簡単にすぐにでも実験できるようになっています。 いくつかの場面では、固有の問題に対処するのに何かしらのトレーニング機能を追加する必要があるので、このML Regression Train TOPでは難しいところが出てきます。 例を挙げると、他のニューラルネットワークアーキテクチャ、異なる正則化手法、異なるコスト関数、追加の入力データなどが要因です。 その場合、このノードの内部とそのトレーニングスクリプトを抽出してコピーして、修正が加えられたトレーニングノードを作成するためのベースとしてそれらを使用すると良いでしょう。 サンプルベースのMLツールキットのSOP側にある他の多くのツールを引き続き使用することができます。
パラメータ ¶
Architecture
ネットワークのアーキテクチャ。
Fully Connected Layers (MLP)
アクティベーション層で交互に配置された完全に接続された線形層で構成されたネットワークを作成します。
Custom
ユーザ側で完全に指定されたアーキテクチャに基づいてネットワークを作成します。
Constant Output Layer
出力ユニットのみで構成されたネットワークを作成します。すべての入力は無視されます。
Custom Network Format
カスタムニューラルネットワーク構造の指定に使用されるフォーマット。 現在のところ、選択肢は1つだけです: Script。
Network Specification Script
ニューラルネットワーク構造を指定したPythonスクリプト。 これは単なる構造で、ネットワークを作成するものではありません。
Shuffle
有効(推奨)にすると、データセットが使用される前にとにかくそのデータセットのエレメントがランダム順に並び替わります。 これを有効にすることで、データセットの最後の連続部分で構成される検証セットがそのデータセットのランダムサンプルで構成されることが保証されます。
Limit Size
有効にすると、データセットの初期部分のみが保持されます。 残りのデータは削除されます。 この工程は、データセットがトレーニングに使用される前のShuffleの直後に実行されます。 このオプションは、トレーニング済みモデルの一般化エラーがデータサイズ(例えば、Wedge TOPの利用)にどのように依存しているのか調べるのに役立ちます。 その結果のカーブは、一般化を改善するのにどれほどのデータが有益であるかどうかを示します。
Upper Limit
保持されるデータセット数の上限を指定します。 残りのデータセットのサイズは、初期データサイズの最小値とこの上限になります。
Random Seed
ニューラルネットワークのパラメータの初期化に使用されるランダムシード。 ランダムシードを変えると、精度が異なる別のモデルを生成することができます。 このハイパーパラメータは、Wedgeで使用する候補となり得るパラメータです。
Epochs per Evaluation
各検証損失評価の前にトレーニングされるエポックの数。
Patience
現行のベストな検証損失の改善が見られずに評価を中止するまでの検証損失が評価される回数。
Note
このパラメータは、エポックの数ではなく評価の数で表現されます。 評価中にトレーニングされるエポックの数を確認するには、 Epochs for Evaluation パラメータを参照してください。
Max Batch Size
最適化工程毎に考慮される、トレーニングセットからランダムに選択されるラベル付きサンプルの数の上限。
Algorithm
トレーニングに使用される最適化アルゴリズムを選択します。 現在のところ、オプションは Adam オプティマイザ(説明はここ)のみです。
Learning Rate
これは、トレーニング中に使用されるステップサイズを制御します。 ステップサイズが大きいほど、ネットワークパラメータの各更新の間隔が大きくなる傾向があります。 Learning Rate を小さくすると時間がかかってしまいますが、局所的に最適な解がスキップされるのを防ぐことができます。
Beta1
この係数は、Adam最適化アルゴリズム固有のものです。 Pytorchのドキュメントを参照してください。
Beta2
この係数は、Adam最適化アルゴリズム固有のものです。 Pytorchのドキュメントを参照してください。
Limit Epochs
トレーニング中のエポック数に厳格な上限を強制します。
Max Epochs
エポック数の厳格な上限。 この数を低く設定しすぎると、モデルの精度に悪影響を与える可能性があります。
Weight Decay
この値を大きく設定するほど、トレーニングセッションはウェイトをもっと小さく維持しようと試みます(ウェイトのみで、バイアスは小さく維持しません)。 これは、オーバーフィッティング(過剰適合)を防ぐための非常に基本的な方法です。
Enable Early Stopping
有効にすると、検証セットのモデルのパフォーマンス改善が止まると即座にトレーニングを停止します。
Training Data Proportion
モデルのトレーニングに使用されるデータセットの割合。 このパラメーターは、 Enable Early Stopping が有効な場合にのみ適用されます。
Validation Data Proportion
モデルのパフォーマンスを検証するのに使用されるデータセットの割合。 検証セットは、( Shuffle が有効になっている場合は、シャッフル後の)データの末尾にある連続したエレメントの範囲で構成されます。 Shuffle オプションを有効にすることを推奨します。 有効にしなかった場合、検証セットは一般的にはデータセット全体がランダムサンプルで構成されなくなります。 このパラメーターは、 Enable Early Stopping が有効な場合にのみ適用されます。
Log to Standard Output
有効にすると、トレーニング中に情報が標準出力に書き出されます。 これは、同じ情報がログファイルに書き出されないようにするわけではありません。
Data Set Folder
1つ以上のデータセットを含んだソースフォルダ。
Data Set Base Name
.raw
拡張子を除いたデータセットのベース名。
Models Folder
トレーニング済みモデルの保存先フォルダ。
Models Base Name
.onnx
拡張子を除いたトレーニング済みモデルのベース名。
States Folder
トレーニングノードがトレーニング状態を格納する先のフォルダ。
States Base Name
拡張子を除いたトレーニング状態のベース名。 これは、トレーニングノードが再開されるトレーニング状態です。
Logs Folder
1つ以上のトレーニングログが格納されるフォルダ。
Logs Base Name
.txt
拡張子を除いたトレーニングログのベース名。
Use CPU Exclusively
有効にすると、トレーニング全体がGPU上ではなくCPU上で行なわれます。 これは非常に遅いので推奨しません。 このオプションは、デバッグ用途のために存在しています。
Environment Path
このノードの内部トレーニングスクリプトが実行されるPython仮想環境のパス。
TOP Scheduler Override
このパラメータは、このノードのTOPスケジューラを上書きします。
Schedule When
有効にすると、このパラメータを使用して、このノードのどのワークアイテムをスケジュールに組むのかを決めるエクスプレッションを指定することができます。 そのエクスプレッションが指定されたワークアイテムに対して0を返すと、そのワークアイテムはスケジューラに組まれずに、即座にクック済みとしてマークされます。 そのエクスプレッションが0以外の値を返すと、そのワークアイテムは従来どおりにスケジュールに組まれます。
Work Item Label
このノードがワークアイテムにどのようにラベルを付けるのかを決めます。 このパラメータによって、固有でないラベル文字列をワークアイテムに割り当てることができ、そのラベルを使用してアトリビュートパネル、タスクバー、スケジューラジョブ名のワークアイテムを区別することができます。
Use Default Label
このノード内のワークアイテムは、TOPネットワークからデフォルトのラベルを使用します。 デフォルトが設定されていない場合は、それらのワークアイテムにはラベルは付きません。
Inherit From Upstream Item
ワークアイテムは親ワークアイテムのラベルを継承します。
Custom Expression
ワークアイテム毎に評価される Label Expression カスタムエクスプレッションをワークアイテムのラベルに設定します。
Node Defines Label
ワークアイテムのラベルをこのノードの内部ロジックで定義します。
Label Expression
有効にすると、このパラメータを使用して、このノードで作成されたワークアイテムに独自のラベルを指定することができます。
このパラメータには、ワークアイテムアトリビュートの参照またはビルトインのプロパティを含めたエクスプレッションを使用することができます。
例えば、$OS: @pdg_frame
は、フレーム値に基づいて各ワークアイテムのラベルを設定します。
Work Item Priority
このパラメータは、現行スケジューラがこのノード内のワークアイテムの優先度を設定する方法を決めます。
Inherit From Upstream Item
ワークアイテムは、親ワークアイテムの優先度を継承します。ワークアイテムに親ワークアイテムがなければ、その優先度は0に設定されます。
Custom Expression
ワークアイテムの優先度は、 Priority Expression の値に設定されます。
Node Defines Priority
ワークアイテムの優先度は、このノード自身の内部優先度計算に基づいて設定されます。
このオプションは、
Python Processor TOP,
ROP Fetch TOP, ROP Output TOPのノードでのみ利用可能です。
これらのノードは、各自のノードロジックで実装された優先度設定スキームを定義しています。
Priority Expression
このパラメータには、ワークアイテムの優先度を設定するためのエクスプレッションを指定します。 このエクスプレッションは、ノード内のワークアイム毎に評価されます。
このパラメータは、 Work Item Priority が Custom Expression に設定されている場合にのみ利用可能です。
See also |