ニューラルネットワークのパフォーマンスの評価に使用される一般的なコスト関数は何ですか?
詳細
(この質問の残りの部分は自由にスキップしてください。ここでの私の意図は、回答が一般読者に理解しやすくするために使用できる表記法を明確にすることです)
共通のコスト関数のリストを、それらが実際に使用されているいくつかの方法と一緒に持っていると便利だと思います。だから、他の人がこれに興味があるなら、コミュニティwikiがおそらく最良のアプローチだと思うか、トピックから外れている場合は削除することができます。
表記法
まず、これらを説明するときに全員が使用する表記法を定義したいので、回答が互いにうまく適合するようにします。
フィードフォワードニューラルネットワークは、互いに接続されたニューロンの多くの層です。次に、入力を受け取り、その入力はネットワークを「トリクル」し、ニューラルネットワークは出力ベクトルを返します。
より正式には層のニューロンの活性化(別名出力)と呼びます。ここでは入力ベクトルの要素です。 j t h i t h a 1 j j t h
次に、次の関係を介して、次のレイヤーの入力を前のレイヤーの入力に関連付けることができます。
どこ
はアクティベーション関数です。
k t h(i − 1 )t h j t h i t hから重量であるのニューロンにレイヤのニューロン層、
j t h i t hは、層のニューロンのバイアスです。
j t h i t hは、層のニューロンの活性化値を表します。
、つまり、活性化関数を適用する前のニューロンの活性化値を表すを書くことがあります。 Σ K(W I jはK ⋅ I - 1、K)+ B I J
より簡潔な表記については、次のように記述できます。
この式を使用して、入力フィードフォワードネットワークの出力を計算するには、設定し、、...、計算ます、ここでmはレイヤーの数です。1 = I 2 3 メートル
前書き
コスト関数は、与えられたトレーニングサンプルと期待される出力に関して、ニューラルネットワークが「どれだけ良い」かを示す尺度です。また、重みやバイアスなどの変数にも依存する場合があります。
コスト関数は、ベクトルではなく単一の値です。これは、ニューラルネットワーク全体のパフォーマンスを評価するためです。
具体的には、コスト関数は次の形式です
ここで、はニューラルネットワークの重み、はニューラルネットワークのバイアス、は単一のトレーニングサンプルの入力、はそのトレーニングサンプルの望ましい出力です。この関数は、レイヤーニューロンおよびにも依存する可能性があることに注意してください。これらの値は、、および依存しているためです。
バックプロパゲーションでは、費用関数は、私たちの出力層の誤差を計算するために使用される経由して、
これは、次の方法でベクトルとして書き込むこともできます
2番目の方程式の観点からコスト関数の勾配を提供しますが、これらの結果自体を証明したい場合は、作業が簡単なので最初の方程式を使用することをお勧めします。
コスト関数の要件
バックプロパゲーションで使用するには、コスト関数が2つのプロパティを満たしている必要があります。
1:コスト関数は平均として記述できる必要があります
コスト関数の上に個々の訓練例について、。
これにより、1つのトレーニング例の(重みとバイアスに関する)勾配を計算し、勾配降下を実行できます。
2:コスト関数は、出力値以外にニューラルネットワークの活性化値に依存してはなりません。
技術的には、コスト関数はまたは依存する場合がます。最後のレイヤーの勾配を見つけるための方程式は、コスト関数に依存する唯一のものであるため(残りは次のレイヤーに依存するため)、この制限を行って、逆伝播できるようにします。コスト関数が出力以外のアクティベーションレイヤーに依存している場合、「逆方向にトリクルする」という考え方が機能しなくなるため、バックプロパゲーションは無効になります。
また、アクティベーション関数は、すべてのに対して出力を持つ必要があります。したがって、これらのコスト関数はその範囲内でのみ定義する必要があります(たとえば、が保証されてため、は有効です)。 Lのjは ≥0