例に重みの付いたニューラルネットワークの訓練
例の重み付けはニューラルネットワークの訓練では一般的なバリエーションであり,訓練データの異なる例に異なる重要性が与えらるというものである.簡単に言うと,これは各例の損失にその例に関連付けられた重みを掛け,NetTrainで実行される最適化プロセスでそれに高いもしくは低い重要性を与えることで達成できる.
- ある例を正しく分類する方が,別の例を分類するよりも重要なことがある.不正検出に使われる二項分類器を考えてみよう.false positivesは無害であるがfalse negativesは壊滅的である.訓練中にこれを避ける方法の一つとして,負例よりも正例に大きい重みを置くというものがある.
- 同様に,分類問題のクラスの出現についての事前分布があるが,訓練データが異なるクラスから比較的バランスよい数で構成されている場合,対応するクラスの事前確率に相対の例に重み付けすることによって,この事前分布を学習タスクに直接組み込むことができる.
- カリキュラム学習では,モデルが向上するに連れてその訓練方法が変化する.例えば,モデルは最初に簡単な例で学習し,後に難しい例で学習する.これを行う方法の一つに,訓練が進むにつれて特定の例の集合に関連付けられた例の重みを動的に変化させるというものがある.
回帰に対する例の重み
例に重みの付いていない簡単な線形回帰モデルを訓練し,例に重みの付いた訓練と比べることのできる基準とする.損失関数としてMeanSquaredLossLayerを使っている点に注意する.実のところ,これはすでにデフォルトであるが,後で訓練ネットを明示的に構築しなければならないので,ここで損失関数の選択について強調する.
NetTrainを使ってこのモデルを訓練する:
次に重み付き訓練を実行する.原点の左側および右側の例をそれぞれ強調する2つのデータ集合を作成する.先に使った平均二乗誤差に訓練の重みを掛ける訓練ネットを構築する.この乗算により,NetTrainはより大きい重みを持つ例に対する最適化を優先するようになる.
入力空間の左側あるいは右側のどちらかにバイアスを掛けるために,Exp関数を使って重み付きのデータ集合を作成する:
結果のネットの動作をプロットすると,左に重みのあるネットは入力空間の左半分で,右に重みのあるネットは入力空間の右半分でよい近似を学習し,重みのないネットはどちらにも偏らない近似を学習したことが分かる.
分類の例の重み付け
NetTrainに適した訓練データを作成する:
例に重みの付いていない簡単なロジスティック回帰モデルを訓練し,例に重みの付いた訓練と比較できる基準とする.損失関数としてCrossEntropyLossLayerを使っている点に注意する.実のところ,これはすでにデフォルトであるが,後で訓練ネットを明示的に構築しなければならないため,ここで強調しておく.
次に重み付き訓練を行う.これには,最初のクラスタに属する例を強調するデータの訓練と,先に使った交差エントロピー誤差に訓練の重みを掛ける訓練ネットの構築が必要である.この乗算により,NetTrainは,より大きい重みを持つ例(ここでは最初のクラスタからの例)を優先的に最適化するようになる.
回帰ネットが訓練ネットに埋め込まれたときに失われた"Class"デコーダを加える:
重み付きネットによって学習された確率をプロットすることにより,重み付きデータはネットの予測を1つ目のクラスタの方にバイアス付けしており,2つのクラスが同等にあり得る閾値がずっと右に寄っていることが分かる.
検出率と混同行列を見ることによって差分を観察することもできる.重みのないネットは2つのクラスに対してほぼ同等の検出率と対称な混同行列を持つ.重み付きネットは,クラス2を犠牲にして,クラス1のより高い検出率と非対称な混同行列を持つ.
NetMeasurementsを使って,検出率と混同行列のプロットを計算する: