ウェブサイト検索

深層学習ニューラル ネットワークをトレーニングするための損失関数と損失関数


ニューラル ネットワークは確率的勾配降下法を使用してトレーニングされるため、モデルの設計および構成時に損失関数を選択する必要があります。

選択できる損失関数は数多くあり、何を選択すればよいのか、さらには損失関数とは何なのか、ニューラル ネットワークをトレーニングする際に損失関数が果たす役割を知るのは難しい場合があります。

この投稿では、ディープ ラーニング ニューラル ネットワークのトレーニングにおける損失と損失関数の役割と、予測モデリングの問題に適切な損失関数を選択する方法を説明します。

この投稿を読むと、次のことがわかります。

  • ニューラル ネットワークは、モデル誤差を計算するために損失関数を必要とする最適化プロセスを使用してトレーニングされます。
  • 最尤法は、一般にニューラル ネットワークと機械学習モデルをトレーニングするときに損失関数を選択するためのフレームワークを提供します。
  • クロスエントロピーと平均二乗誤差は、ニューラル ネットワーク モデルをトレーニングするときに使用する 2 つの主なタイプの損失関数です。

すべての例のステップバイステップのチュートリアルPython ソース コードファイルを含む、私の新しい本『Better Deep Learning』 でプロジェクトを開始してください。 。

始めましょう。

概要

このチュートリアルは 7 つの部分に分かれています。彼らです:

  1. 最適化としてのニューラルネットワーク学習
  2. 損失関数と損失とは何ですか?
  3. 最尤度
  4. 最尤度とクロスエントロピー
  5. どのような損失関数を使用すればよいでしょうか?
  6. 損失関数の実装方法
  7. 損失関数と報告されたモデルのパフォーマンス

損失関数の背後にある理論に焦点を当てます。

さまざまな損失関数の選択と実装については、次の投稿を参照してください。

  • 深層学習ニューラル ネットワークをトレーニングする際の損失関数の選択方法

最適化としてのニューラルネットワーク学習

深層学習ニューラル ネットワークは、トレーニング データからの一連の入力を一連の出力にマッピングすることを学習します。

ニューラル ネットワークの完璧な重みを計算することはできません。未知のことが多すぎる。代わりに、学習の問題は検索または最適化の問題としてキャストされ、アルゴリズムを使用して、適切な、または十分な予測を行うためにモデルが使用する可能性のある重みのセットの空間をナビゲートします。

通常、ニューラル ネットワーク モデルは確率的勾配降下最適化アルゴリズムを使用してトレーニングされ、重みは誤差逆伝播アルゴリズムを使用して更新されます。

勾配降下法の「勾配」は誤差勾配を指します。指定された一連の重みを持つモデルを使用して予測が行われ、それらの予測の誤差が計算されます。

勾配降下法アルゴリズムは、次の評価で誤差が減少するように重みを変更しようとします。これは、最適化アルゴリズムが誤差の勾配 (または傾き) に沿ってナビゲートしていることを意味します。

ニューラル ネットのトレーニングによって最適化問題が解決されることがわかったので、次は特定の重みセットの誤差がどのように計算されるかを見てみましょう。

損失関数と損失とは何ですか?

最適化アルゴリズムのコンテキストでは、候補解 (つまり、重みのセット) を評価するために使用される関数は、目的関数と呼ばれます。

目的関数を最大化または最小化しようとする場合があります。これは、それぞれ最高または最低のスコアを持つ候補解を検索していることを意味します。

通常、ニューラル ネットワークでは、エラーを最小限に抑えるよう努めます。そのため、目的関数はコスト関数または損失関数と呼ばれることが多く、損失関数によって計算された値は単に「損失」と呼ばれます。

最小化または最大化したい関数は、目的関数または基準と呼ばれます。最小化する場合、それをコスト関数、損失関数、または誤差関数と呼ぶこともあります。

— 82 ページ、ディープラーニング、2016 年。

コストまたは損失関数は、モデルのすべての側面を忠実に単一の数値に絞り込み、その数値の改善がより良いモデルの兆候となるようにするという重要な役割を果たします。

コスト関数は、おそらく複雑なシステムのさまざまな良い側面と悪い側面をすべて 1 つの数値 (スカラー値) に落とし込み、候補ソリューションをランク付けして比較できるようにします。

— 155 ページ、ニューラルスミス: フィードフォワード人工ニューラル ネットワークにおける教師あり学習、1999 年。

最適化プロセス中にモデルの誤差を計算する際には、損失関数を選択する必要があります。

関数は問題の特性を捉え、プロジェクトと利害関係者にとって重要な関心事によって動機付けられる必要があるため、これは困難な問題になる可能性があります。

したがって、関数が設計目標を忠実に表すことが重要です。不適切な誤差関数を選択し、満足のいく結果が得られなかった場合、その責任は検索の目標の指定が間違っていたことになります。

— 155 ページ、ニューラルスミス: フィードフォワード人工ニューラル ネットワークにおける教師あり学習、1999 年。

損失関数と損失について理解したので、次はどの関数を使用するかを知る必要があります。

最尤度

ニューラル ネットワーク内の一連の重みの誤差を推定するために使用できる関数は数多くあります。

私たちは、最適化アルゴリズムがモデルの重みの反復更新を通じて合理的にナビゲートできる、候補解の空間が滑らかな (ただし高次元の) ランドスケープにマッピングされる関数を好みます。

最尤推定 (MLE) は、過去のトレーニング データからパラメータの最良の統計的推定値を見つけるための推論のフレームワークであり、まさにニューラル ネットワークで行おうとしているものです。

最尤法では、トレーニング データから導出された尤度関数を最大化することで、パラメーターの最適な値を見つけようとします。

— 39 ページ、パターン認識のためのニューラル ネットワーク、1995 年。

1 つ以上の入力変数を含むトレーニング データセットがあり、入力の例を出力変数またはターゲット変数に最適にマッピングするモデルの重みパラメーターを推定するモデルが必要です。

入力が与えられると、モデルはターゲット変数のデータ分布に一致する予測を行おうとします。最尤法では、損失関数は、モデルによって行われた予測の分布がトレーニング データ内のターゲット変数の分布とどの程度一致しているかを推定します。

最尤推定を解釈する 1 つの方法は、トレーニング セットによって定義された経験的分布 […] とモデル分布の間の非類似性を、KL 発散によって測定される 2 つの間の非類似度とともに最小化するものとみなすことです。 […] この KL 発散を最小限に抑えることは、分布間のクロスエントロピーを最小限に抑えることに正確に対応します。

— 132 ページ、ディープラーニング、2016 年。

ニューラル ネットワークおよび機械学習一般のモデル パラメーター (重み) を推定するためのフレームワークとして最尤法を使用する利点は、トレーニング データセット内の例の数が増加するにつれて、モデル パラメーターの推定が向上することです。これは「一貫性」の性質と呼ばれます。

適切な条件下では、最尤推定量には一貫性という特性があります […]。これは、トレーニング例の数が無限に近づくにつれて、パラメーターの最尤推定値がパラメーターの真の値に収束することを意味します。

— 134 ページ、ディープラーニング、2016 年。

最尤法の一般的なアプローチについては理解したので、誤差関数を見てみましょう。

最尤度とクロスエントロピー

最尤度のフレームワークでは、クロスエントロピーを使用して 2 つの確率分布間の誤差が測定されます。

入力変数をクラス ラベルにマッピングすることに関心がある分類問題をモデル化する場合、各クラスに属する例の確率を予測するものとして問題をモデル化できます。バイナリ分類問題では 2 つのクラスが存在するため、例が最初のクラスに属する確率を予測できます。複数のクラス分類の場合、各クラスに属する例の確率を予測できます。

トレーニング データセット内の各サンプルはドメインの既知の例であるため、トレーニング データセットでは、サンプルが特定のクラスに属する確率は 1 または 0 になります。私たちは答えを知っています。

したがって、最尤推定では、データセットを考慮したモデルの予測確率分布とトレーニング データセットの確率分布との差を最小化するモデルの重みのセットを求めます。これをクロスエントロピーと呼びます。

ほとんどの場合、パラメトリック モデルは分布を定義し […]、単純に最尤の原理を使用します。これは、トレーニング データとモデルの予測の間のクロス エントロピーをコスト関数として使用することを意味します。

— 178 ページ、ディープラーニング、2016 年。

技術的には、クロスエントロピーは情報理論の分野から来ており、「ビット」という単位を持ちます。これは、推定確率分布と予測確率分布の差を推定するために使用されます。

量が予測される回帰問題の場合、代わりに平均二乗誤差 (MSE) 損失関数を使用するのが一般的です。

いくつかの基本関数は非常によく使用されます。平均二乗誤差は、関数近似 (回帰) 問題でよく使用されます […] クロスエントロピー誤差関数は、出力が指定されたクラスのメンバーシップの確率として解釈される場合の分類問題でよく使用されます。

— ページ 155-156、ニューラルスミス: フィードフォワード人工ニューラル ネットワークにおける教師あり学習、1999 年。

それにもかかわらず、最尤推定の枠組みとターゲット変数のガウス分布の仮定の下では、平均二乗誤差はモデル予測の分布とターゲット変数の分布の間のクロスエントロピーと考えることができます。

多くの著者は、特にベルヌーイ分布またはソフトマックス分布の負の対数尤度を特定するために「クロスエントロピー」という用語を使用していますが、これは誤った呼び方です。負の対数尤度からなる損失は、トレーニング セットによって定義された経験的分布とモデルによって定義された確率分布の間のクロス エントロピーです。たとえば、平均二乗誤差は、経験的分布とガウス モデル間のクロス エントロピーです。

— 132 ページ、ディープラーニング、2016 年。

したがって、最尤推定のフレームワークを使用する場合、クロスエントロピー損失関数を実装します。これは、多くの場合、実際には、分類問題の場合はクロスエントロピー損失関数、回帰問題の場合は平均二乗誤差損失関数を意味します。

ほぼ普遍的に、深層学習ニューラル ネットワークは、損失関数としてクロス エントロピーを使用する最尤のフレームワークの下でトレーニングされます。

最新のニューラル ネットワークのほとんどは、最尤法を使用してトレーニングされます。これは、コスト関数がトレーニング データとモデル分布の間のクロス エントロピーとして記述されることを意味します。

— ページ 178-179、ディープラーニング、2016 年。

実際、完全に形式化される前は、分類用のニューラル ネットワークが平均二乗誤差損失関数を使用するのが一般的であったため、このフレームワークの採用はディープ ラーニングのマイルストーンと考えられるかもしれません。

これらのアルゴリズム変更の 1 つは、平均二乗誤差を損失関数のクロスエントロピー ファミリに置き換えることでした。平均二乗誤差は 1980 年代と 1990 年代に普及しましたが、統計コミュニティと機械学習コミュニティの間でアイデアが広がるにつれて、クロスエントロピー損失と最尤原則に徐々に置き換えられました。

— 226 ページ、ディープラーニング、2016 年。

最尤法アプローチは、理論的枠組みのためだけでなく、主にそれが生み出す結果のため、ほぼ普遍的に採用されました。具体的には、出力層でシグモイドまたはソフトマックス活性化関数を使用する分類用のニューラル ネットワークは、クロスエントロピー損失関数を使用して、より高速かつより堅牢に学習します。

クロスエントロピー損失の使用により、平均二乗誤差損失を使用した場合に飽和と学習の遅さに悩まされていたシグモイド出力とソフトマックス出力を備えたモデルのパフォーマンスが大幅に向上しました。

— 226 ページ、ディープラーニング、2016 年。

どのような損失関数を使用すればよいでしょうか?

前のセクションを要約し、最尤のフレームワークの下で使用する必要がある損失関数を直接提案できます。

重要なのは、損失関数の選択は、ニューラル ネットワークの出力層で使用される活性化関数に直接関係していることです。これら 2 つのデザイン要素は接続されています。

出力層の構成は、予測問題の枠組みに関する選択として考えられ、損失関数の選択は、問題の特定の枠組みに対する誤差を計算する方法として考えてください。

コスト関数の選択は、出力単位の選択と密接に関係しています。ほとんどの場合、データ分布とモデル分布の間のクロスエントロピーを単純に使用します。出力を表現する方法の選択によって、クロスエントロピー関数の形式が決まります。

— 181 ページ、ディープラーニング、2016 年。

出力層と損失関数に関して、問題の種類ごとにベスト プラクティスまたはデフォルト値を確認します。

回帰問題

実数値の量を予測する問題。

  • 出力層構成: 線形アクティベーション ユニットを備えた 1 つのノード。
  • 損失関数: 平均二乗誤差 (MSE)。

二項分類問題

例を 2 つのクラスのいずれかに分類する問題。

この問題は、クラス 1 に属する例の可能性を予測するものとして構成されています。整数値 1 を割り当てるクラスに対して、他のクラスには値 0 を割り当てます。

  • 出力層構成: シグモイド アクティベーション ユニットを備えた 1 つのノード。
  • 損失関数: クロスエントロピー。対数損失とも呼ばれます。

複数クラス分類問題

サンプルを 3 つ以上のクラスのいずれかに属するものとして分類する問題。

この問題は、各クラスに属する例の可能性を予測するものとして構成されています。

  • 出力層構成: ソフトマックス アクティベーション関数を使用するクラスごとに 1 つのノード。
  • 損失関数: クロスエントロピー。対数損失とも呼ばれます。

損失関数の実装方法

損失関数を具体的にするために、このセクションでは、主要な種類の損失関数がどのように機能するか、および Python でスコアを計算する方法について説明します。

平均二乗誤差損失

平均二乗誤差損失 (略して MSE) は、予測値と実際の値の間の二乗差の平均として計算されます。

結果は、予測値と実際の値の符号に関係なく常に正であり、完全な値は 0.0 です。損失値は最小化されますが、スコアを負にすることで最大化最適化プロセスで使用できます。

以下の Python 関数は、実際の量のリストと予測される実数値の量のリストの平均二乗誤差を計算するための関数の擬似コードのような動作する実装を提供します。

# calculate mean squared error
def mean_squared_error(actual, predicted):
	sum_square_error = 0.0
	for i in range(len(actual)):
		sum_square_error += (actual[i] - predicted[i])**2.0
	mean_square_error = 1.0 / len(actual) * sum_square_error
	return mean_square_error

効率的に実装するには、scikit-learn means_squared_error() 関数を使用することをお勧めします。

クロスエントロピー損失 (または対数損失)

クロスエントロピー損失は、単に「クロスエントロピー」、「対数損失」、「ロジスティック損失」、または「<」と呼ばれることがよくあります。対数損失」の略称。

各予測確率は実際のクラス出力値 (0 または 1) と比較され、期待値からの距離に基づいて確率にペナルティを与えるスコアが計算されます。ペナルティは対数的であり、小さな差 (0.1 または 0.2) に対しては小さなスコアが与えられ、大きな差 (0.9 または 1.0) に対しては大きなスコアが与えられます。

クロスエントロピー損失は最小限に抑えられ、値が小さいほど、値が大きいよりも優れたモデルを表します。完全な確率を予測するモデルのクロス エントロピーまたは対数損失は 0.0 です。

バイナリまたは 2 クラスの予測問題のクロス エントロピーは、実際にはすべての例にわたる平均クロス エントロピーとして計算されます。

以下の Python 関数は、クラス 1 の予測確率と比較して、実際の 0 と 1 の値のリストのクロス エントロピーを計算するための関数の擬似コードのような動作する実装を提供します。

from math import log

# calculate binary cross entropy
def binary_cross_entropy(actual, predicted):
	sum_score = 0.0
	for i in range(len(actual)):
		sum_score += actual[i] * log(1e-15 + predicted[i])
	mean_sum_score = 1.0 / len(actual) * sum_score
	return -mean_sum_score

0.0 の対数が計算されないようにするために、予測確率に非常に小さな値 (この場合は 1E-15) を追加していることに注意してください。これは、実際には、考えられる最大の損失はゼロに非常に近い値になりますが、完全にゼロではないことを意味します。

クロスエントロピーは、複数のクラス分類に対して計算できます。クラスはワン ホット エンコードされています。これは、各クラス値にバイナリ特徴があり、予測には各クラスの予測確率が含まれている必要があることを意味します。次に、クロス エントロピーが各バイナリ フィーチャにわたって合計され、データセット内のすべてのサンプルにわたって平均化されます。

以下の Python 関数は、実際のワン ホット エンコード値のリストのクロス エントロピーを各クラスの予測確率と比較して計算するための関数の擬似コードのような動作する実装を提供します。

from math import log

# calculate categorical cross entropy
def categorical_cross_entropy(actual, predicted):
	sum_score = 0.0
	for i in range(len(actual)):
		for j in range(len(actual[i])):
			sum_score += actual[i][j] * log(1e-15 + predicted[i][j])
	mean_sum_score = 1.0 / len(actual) * sum_score
	return -mean_sum_score

効率的に実装するには、scikit-learn log_loss() 関数を使用することをお勧めします。

損失関数と報告されたモデルのパフォーマンス

最尤のフレームワークを考慮すると、確率的勾配降下下でクロスエントロピーまたは平均二乗誤差損失関数を使用する必要があることがわかります。

それにもかかわらず、損失関数を使用してモデルのパフォーマンスを報告したい場合とそうでない場合があります。

たとえば、対数損失は、特に機械学習の専門家ではない関係者にとって解釈が困難です。平均二乗誤差についても同じことが言えます。代わりに、分類と回帰にそれぞれ使用されるモデルの精度と二乗平均平方根誤差を報告することの方が重要である可能性があります。

損失ではなく、これらの指標に基づいてモデルを選択することも望ましい場合があります。損失が最小のモデルが、プロジェクトの関係者にとって重要な最良のメトリクスを備えたモデルではない可能性があるため、これは重要な考慮事項です。

考慮すべき適切な区分は、損失を使用してモデルがどの程度学習しているかを評価および診断することです。これには、過剰適合、過小適合、収束などの最適化プロセスのすべての考慮事項が含まれます。その後、プロジェクトの関係者にとってモデルのパフォーマンスの評価とモデルの選択の両方に意味のある代替メトリックを選択できます。

  • 損失: モデルの最適化の評価と診断にのみ使用されます。
  • メトリクス: プロジェクトのコンテキストでモデルを評価および選択するために使用されます。

両方の懸念事項に同じメトリックを使用できますが、最適化プロセスの懸念事項がプロジェクトの目標とは異なる可能性が高く、異なるスコアが必要となります。それにもかかわらず、多くの場合、損失を改善することで目的のメトリクスが改善されるか、最悪の場合、影響がありません。

さらに読む

さらに詳しく知りたい場合は、このセクションでこのトピックに関するさらなるリソースを提供します。

  • ディープラーニング、2016 年。
  • ニューラルスミス:フィードフォワード人工ニューラルネットワークにおける教師あり学習、1999年。
  • パターン認識のためのニューラル ネットワーク、1995 年。

記事

  • 最尤推定、ウィキペディア。
  • カルバックとライブラーの発散、ウィキペディア。
  • クロスエントロピー、ウィキペディア。
  • 平均二乗誤差、ウィキペディア。
  • ログ損失、FastAI Wiki。

まとめ

この投稿では、ディープ ラーニング ニューラル ネットワークのトレーニングにおける損失と損失関数の役割と、予測モデリングの問題に適切な損失関数を選択する方法を発見しました。

具体的には、次のことを学びました。

  • ニューラル ネットワークは、モデル誤差を計算するために損失関数を必要とする最適化プロセスを使用してトレーニングされます。
  • 最尤法は、一般にニューラル ネットワークと機械学習モデルをトレーニングするときに損失関数を選択するためのフレームワークを提供します。
  • クロスエントロピーと平均二乗誤差は、ニューラル ネットワーク モデルをトレーニングするときに使用する 2 つの主なタイプの損失関数です。

ご質問はありますか?
以下のコメント欄にご質問ください。できる限りお答えいたします。

関連記事