softmax関数とクロスエントロピー損失関数
3334 ワード
CNNでは全接続層にソフトmax関数が付加され,損失関数としてクロスエントロピー関数が一般的に用いられる.この文章は主にsoftmaxがCNNの出力を確率に変える過程と交差エントロピーが最適化過程にどのようにメトリックを提供しpythonで実現するかを記録する.
ソフトmax関数
softmax関数は、1つのN次元ベクトルの入力の各次元を区間次元(0,1)間の実数に変換し、pi=eaiΣNk=1 eak p i=e a iΣk=1 N e k a softmaxは、全接続層の出力を確率分布にマッピングすることができ、我々の訓練目標は、k番目のクラスに属するサンプルをsoftmax関数を通過させた後、k番目のクラスの確率は大きいほど良い.pythonを使用してsoftmax関数を実装します.
numpyにおける浮動小数点タイプには数値的な制限があるため,指数関数にとってオンライン戻りnanを破ることは容易である.nanの発生を回避するために、通常、分子と分母に定数Cを同時に乗じ、pj=eaiΣNk=1 eak=CeaiCΣNk=1 eak=eai+log(C)ΣNk=1 eak+log(C)pj=e a iΣk=1 N e a k=C e a i CΣk=1 N e a k=e a i+l o g(C)Σk=1 N e a k+l o g(C)理論上、log(C)として任意の値を選択することができる.しかし一般的にlog(C)=−max(a)を選択し,nanの発生を回避するために,従来の非常に大きな指数結果を0にすることができる.pythonで改善されたsoftmax関数を実装します.
softmax関数の導関数の逆転過程
softmax関数は試料出力を確率密度関数に変えることができ,この特性のためニューラルネットワークの最後の層に置くことができ,最も理想的な出力は試料カテゴリone−hotの表現形式である.次にソフトmax関数の勾配を計算する方法について説明します.まずsoftmax関数について導出する:∂pj∂aj=∂eaiΣNk=1 eak∂aj∂aj∂aj=∂aj=∂eaj=1 N e a k∂ajは導出法則f(x)=g(x)h(x)f(x)f(x)=g(x)h(x)=g(x)h(x)h(x)の導数f′(x)=g′(x)=g′(x)h(x)h(x)g(x)h(x)h(x)2 f(x)f(x)f(x)f(x)f(x)f(x)f(x)f(x(x)=g′(x)h(x)−h′(x)g(x)h(x)2.ソフトmax関数では、g(x)=eai g(x)=e a i,h(x)=ΣNk=1 eak h(x)=Σk=1 N e a kである.h(x)にとって、∂∂aj∂ajはeaj e a jであり、g(x)にとって、i=jの場合、∂aj∂a jこそeaj e a jである.以下にsoftmax関数の導出の具体的な過程を示す:if i=j:∂eaiΣNk=1 eak∂aj=eaiΣNk=1 eak−eajeaai(ΣNk=1 eak)2(ΣNk=1 eak)2=eai(ΣNk=1 eak−eaj)(ΣNk=1 eak)2=eak×(∑Nk=1eak−eaj)∑Nk=1eak=pi(1−pj) ∂ e a i ∑ k = 1 N e a k ∂ a j = e a i ∑ k = 1 N e a k − e a j e a i ( ∑ k = 1 N e a k ) 2 ( ∑ k = 1 N e a k ) 2 = e a i ( ∑ k = 1 N e a k − e a j ) ( ∑ k = 1 N e a k ) 2 = e a j ∑ k = 1 N e a k × ( ∑ k = 1 N e a k − e a j ) ∑ k = 1 N e a k = p i ( 1 − p j )
if i≠j i ≠ j ∂eai∑Nk=1eak∂aj=0−eajeai(∑Nk=1eak)2=−eaj∑Nk=1eak×eai∑Nk=1eak=−pj⋅pi ∂ e a i ∑ k = 1 N e a k ∂ a j = 0 − e a j e a i ( ∑ k = 1 N e k a ) 2 = − e a j ∑ k = 1 N e k a × e a i ∑ k = 1 N e k a = − p j ⋅ p i
したがって、softmax関数は、∂pj∂aj={pi(1−pj)ifi=j−pj⋅piifi≠j∂pj∂aj={p i(1−pj)i f i=j−pj⋅pi i i f≠j
クロスエントロピー損失関数
クロスエントロピー損失関数はモデル出力の確率と試料の真の確率との類似度を示し,foftmax関数として活性化されたニューラルネットワークの損失関数として,H(y,p)=−Σiyilog(pi)H(y,p)=−Σi l o g(p i)を定義できる.
クロスエントロピー損失関数の導出過程
L=−∑Iyilog(pi) L = − ∑ I y i l o g ( p i ) ∂L∂oi=−∑kyk∂log(pk)∂oi=−∑kyk∂log(pk)∂pk×∂pk∂oi=−∑yk1pk×∂pk∂oi ∂ L ∂ o i = − ∑ k y k ∂ l o g ( p k ) ∂ o i = − ∑ k y k ∂ l o g ( p k ) ∂ p k × ∂ p k ∂ o i = − ∑ y k 1 p k × ∂p k∂o iにソフトmax関数を加えた導関数:∂L∂oi=−yi(1−pi)−Σk≠jyk 1 pk(−pkpi)=−yi(1−pi)+Σk≠k≠1 yk⋅pi=−yi+yi+yi+yi+yi+yi+yi+yi+yi+yi+Σk≠1 yk⋅pi= pi( yi+Σk≠1 yk≠1 yk−yk)=pi( yy+k≠k≠k≠1 yk≠k≠1 yk(yk≠k≠k≠1 yk≠k≠1 yk≠)−yi∂L∂o i=−y i(1−p i)−Σk≠j y k 1 pk(−p k p i)=−y i(1−p i)+Σk≠1 y k⋅p i=−y i+y i p i+Σk≠1 y k⋅p i=p i(y i+Σk≠1 y k−y i)=p i(y i+Σk≠1 y k)−y iはラベルのone−hot符号化を表すのでΣkyk=1Σk y=1,yi+Σk≠1 yi+Σk≠1 y k≠1 y k=1 y従って,∂L∂oi=pi−yj∂L∂o i=p i−y jを得ることができる.
ソフトmax関数
softmax関数は、1つのN次元ベクトルの入力の各次元を区間次元(0,1)間の実数に変換し、pi=eaiΣNk=1 eak p i=e a iΣk=1 N e k a softmaxは、全接続層の出力を確率分布にマッピングすることができ、我々の訓練目標は、k番目のクラスに属するサンプルをsoftmax関数を通過させた後、k番目のクラスの確率は大きいほど良い.pythonを使用してsoftmax関数を実装します.
def softmax(x):
exps = np.exp(x)
return exps / np.sum(exps)
numpyにおける浮動小数点タイプには数値的な制限があるため,指数関数にとってオンライン戻りnanを破ることは容易である.nanの発生を回避するために、通常、分子と分母に定数Cを同時に乗じ、pj=eaiΣNk=1 eak=CeaiCΣNk=1 eak=eai+log(C)ΣNk=1 eak+log(C)pj=e a iΣk=1 N e a k=C e a i CΣk=1 N e a k=e a i+l o g(C)Σk=1 N e a k+l o g(C)理論上、log(C)として任意の値を選択することができる.しかし一般的にlog(C)=−max(a)を選択し,nanの発生を回避するために,従来の非常に大きな指数結果を0にすることができる.pythonで改善されたsoftmax関数を実装します.
def stable_softmax(x):
exps = np.exp(x-np.max(x))
return exps / np.sum(exps)
softmax関数の導関数の逆転過程
softmax関数は試料出力を確率密度関数に変えることができ,この特性のためニューラルネットワークの最後の層に置くことができ,最も理想的な出力は試料カテゴリone−hotの表現形式である.次にソフトmax関数の勾配を計算する方法について説明します.まずsoftmax関数について導出する:∂pj∂aj=∂eaiΣNk=1 eak∂aj∂aj∂aj=∂aj=∂eaj=1 N e a k∂ajは導出法則f(x)=g(x)h(x)f(x)f(x)=g(x)h(x)=g(x)h(x)h(x)の導数f′(x)=g′(x)=g′(x)h(x)h(x)g(x)h(x)h(x)2 f(x)f(x)f(x)f(x)f(x)f(x)f(x)f(x(x)=g′(x)h(x)−h′(x)g(x)h(x)2.ソフトmax関数では、g(x)=eai g(x)=e a i,h(x)=ΣNk=1 eak h(x)=Σk=1 N e a kである.h(x)にとって、∂∂aj∂ajはeaj e a jであり、g(x)にとって、i=jの場合、∂aj∂a jこそeaj e a jである.以下にsoftmax関数の導出の具体的な過程を示す:if i=j:∂eaiΣNk=1 eak∂aj=eaiΣNk=1 eak−eajeaai(ΣNk=1 eak)2(ΣNk=1 eak)2=eai(ΣNk=1 eak−eaj)(ΣNk=1 eak)2=eak×(∑Nk=1eak−eaj)∑Nk=1eak=pi(1−pj) ∂ e a i ∑ k = 1 N e a k ∂ a j = e a i ∑ k = 1 N e a k − e a j e a i ( ∑ k = 1 N e a k ) 2 ( ∑ k = 1 N e a k ) 2 = e a i ( ∑ k = 1 N e a k − e a j ) ( ∑ k = 1 N e a k ) 2 = e a j ∑ k = 1 N e a k × ( ∑ k = 1 N e a k − e a j ) ∑ k = 1 N e a k = p i ( 1 − p j )
if i≠j i ≠ j ∂eai∑Nk=1eak∂aj=0−eajeai(∑Nk=1eak)2=−eaj∑Nk=1eak×eai∑Nk=1eak=−pj⋅pi ∂ e a i ∑ k = 1 N e a k ∂ a j = 0 − e a j e a i ( ∑ k = 1 N e k a ) 2 = − e a j ∑ k = 1 N e k a × e a i ∑ k = 1 N e k a = − p j ⋅ p i
したがって、softmax関数は、∂pj∂aj={pi(1−pj)ifi=j−pj⋅piifi≠j∂pj∂aj={p i(1−pj)i f i=j−pj⋅pi i i f≠j
クロスエントロピー損失関数
クロスエントロピー損失関数はモデル出力の確率と試料の真の確率との類似度を示し,foftmax関数として活性化されたニューラルネットワークの損失関数として,H(y,p)=−Σiyilog(pi)H(y,p)=−Σi l o g(p i)を定義できる.
クロスエントロピー損失関数の導出過程
L=−∑Iyilog(pi) L = − ∑ I y i l o g ( p i ) ∂L∂oi=−∑kyk∂log(pk)∂oi=−∑kyk∂log(pk)∂pk×∂pk∂oi=−∑yk1pk×∂pk∂oi ∂ L ∂ o i = − ∑ k y k ∂ l o g ( p k ) ∂ o i = − ∑ k y k ∂ l o g ( p k ) ∂ p k × ∂ p k ∂ o i = − ∑ y k 1 p k × ∂p k∂o iにソフトmax関数を加えた導関数:∂L∂oi=−yi(1−pi)−Σk≠jyk 1 pk(−pkpi)=−yi(1−pi)+Σk≠k≠1 yk⋅pi=−yi+yi+yi+yi+yi+yi+yi+yi+yi+yi+Σk≠1 yk⋅pi= pi( yi+Σk≠1 yk≠1 yk−yk)=pi( yy+k≠k≠k≠1 yk≠k≠1 yk(yk≠k≠k≠1 yk≠k≠1 yk≠)−yi∂L∂o i=−y i(1−p i)−Σk≠j y k 1 pk(−p k p i)=−y i(1−p i)+Σk≠1 y k⋅p i=−y i+y i p i+Σk≠1 y k⋅p i=p i(y i+Σk≠1 y k−y i)=p i(y i+Σk≠1 y k)−y iはラベルのone−hot符号化を表すのでΣkyk=1Σk y=1,yi+Σk≠1 yi+Σk≠1 y k≠1 y k=1 y従って,∂L∂oi=pi−yj∂L∂o i=p i−y jを得ることができる.