MoのトラブルPyTorchの研究ノート(B) - 活性化機能

1. SIGMOD機能
図の関数式と下のグラフ

 

 

 

 

 


SIGMOD機能では、我々は、出力は(0,1)であり、非常に興味深いです。この開区間を、見ることができる、あなたは可能性を考えることができますが、厳密ではない確率と、話します。SIGMOD機能回より一般には、阻害の非常に緩やかな傾斜ニューロンゾーンの両側に比較的大きな感受性ニューロンスロープの途中には、ニューロンの放電率と考えることができます。
もちろん、ファッション自体に欠陥がある特定の機能があることを示す、今人気です。
1)わずかに座標原点からの入力は、勾配関数が非常に小さくなると、ほぼゼロ。バックプロパゲーションニューラルネットワークの間に、我々は、分化微分の連鎖法則によって算出されたwがそれぞれの重みです。場合SIGMOD機能を介してバックプロパゲーション、更にまた、非常に、非常に小さい、とは、最終的に重量最適化、これに資するものである損失関数にほとんど影響重みwをもたらす、SIGMOD関数の数を通過することができる上にチェーン上の差動問題は、それがまた、拡散勾配と呼ばれることができ、飽和勾配と呼ばれています。
2)を中心として0を出力する関数にしない、これは重み更新効率を低下させるであろう。スタンフォード大学のコースは詳細な説明を持っている。この欠陥について。
3)SIGMODの指数関数が実行されるために、これは比較的遅いコンピュータのためです。
2.tanh機能
TANH曲線次関数式と

 

 

 


TANHは、双曲線正接関数、双曲線正接曲線の関数であり、SIGMOD機能が比較的似ている、のは、それを比較して見てみましょう。大小入力に同じ、これら二つの機能であり、出力はほぼ滑らかであるまず、勾配が非常に小さい、重量更新を助長しないで、異なる出力部、出力部TANH(-1、あります1との間)、および全体の機能は、より良好この機能SIGMOD 0中心です。
一般的なバイナリ分類、隠れ層の機能双曲線正接出力層SIGMOD機能。しかし、これらは活性化関数の特定の使用である、または特定の分析に具体的な質問に応じて、またはデバッグに依存しているものを、不変ではありません。
3.ReLU機能
ReLU曲線次関数式と
 

 

 

 


ReLU(整流リニアユニット)は活性化関数の関数SIGMOD関数とTANH関数よりも火災、それは以下の利点を有します。
1)入力は、飽和勾配問題なく、肯定的である場合。
2)はるかに高速に計算します。ReLUは線形関数だけで、前方またははるかに高速SIGMODよりスプレッドの拡大、および双曲線正接を逆転します。(SIGMODとTANHは遅くなり、インデックス計算速度を計算するために)
もちろん、欠点があります。
ReLUが完全に活性化されると、入力が負の場合1)、一旦負に入力されたことを示唆し、ReLUは死にます。このような将来伝播プロセスでなく、問題ない、と一部の地域では、いくつかの影響を受けない敏感です。しかしながら、バックプロパゲーションプロセス、負の入力に、勾配が0に完全になり、機能SIGMOD、TANH関数は、同じ問題があります。
2)私たちは、出力ReLU関数が0または正の数である見つけ、それはないReLU機能は0を中心機能である、と言うことです。
4.ELU函数
関数式図のグラフを以下ELU。
 

 

 


ELU修正関数は、入力が負の場合、そこに一定の出力であり、この出力部はまた、いくつかのアンチジャミング能力を有する、ReLU関数に比べReLUする機能です。これはReLUは死んだ問題を排除、まだ飽和し、屈折率分布計算問題があります。
5.PReLU機能
関数式図のグラフを以下PReLU。
 

 


PReLUもReLUの改良版のために、負の領域、PReLUにもReLU死者の問題を回避する小さな傾きは、そこにあります。ELUに比べ、PReLUは傾きが小さくてよい、負の領域で線形演算であるが、それの明確な利点と考えることができる、0ない傾向があります。
我々は、一般的に0と1との間にフェッチさPReLU式、パラメータαを参照し、一般的に、依然として等0.0少ない比較的小さいです。ときα= 0.01、我々は特別なケースがそれをPReLUとみなすことが、漏れReLUとしてPReLUを呼び出します。
全体的に、これらの活性化機能は、独自の長所と短所があり、いずれも良い活性化関数が何であるか、すべての善と悪が自分の実験を取得する必要があることショーを言っているわけではありません。
 
励起関数のコードを以下に示します
import torch
from torch.autograd import Variable
import matplotlib.pyplot as plt
import torch.nn.functional as F
x= torch.linspace(-5,5,200)
x= Variable(x)
x_np=x.data.numpy()

y_relu = torch.relu(x).data.numpy()
y_sigmoid =torch.sigmoid(x).data.numpy()
y_tanh = torch.tanh(x).data.numpy()
y_softplus = F.softplus(x).data.numpy()

plt.figure(1,figsize=(8,6))
plt.subplot(221)
plt.plot(x_np,y_relu,c='red',label='relu')
plt.ylim(-1,5)
plt.legend(loc='best')

plt.subplot(222)
plt.plot(x_np,y_sigmoid,c='red',label='sigmoid')
plt.ylim(-0.2,1.2)
plt.legend(loc='best')

plt.subplot(223)
plt.plot(x_np,y_tanh,c='red',label='tanh')
plt.ylim(-1.2,1.2)
plt.legend(loc='best')

plt.subplot(224)
plt.plot(x_np,y_softplus,c='red',label='softplus')
plt.ylim(-0.2,6)
plt.legend(loc='best')
plt.show()

 

 

おすすめ

転載: www.cnblogs.com/henuliulei/p/11364417.html
おすすめ