TensorflowでleakyRelu操作の詳細解を実現する(効率的)


githubから転じて、本当にすごい考えです。いつか自分でもこの素晴らしいコードが書けたらいいです。
元の住所:簡単で効率的なLeakyReLuを実現しました。
コードは以下の通りです
いくつかの改良をしましたが、本当にtenssorflowで使っていますので、元のabs関数をtf.abs()に変えました。

import tensorflow as tf
def LeakyRelu(x, leak=0.2, name="LeakyRelu"):
   with tf.variable_scope(name):
     f1 = 0.5 * (1 + leak)
     f2 = 0.5 * (1 - leak)
     return f1 * x + f2 * tf.abs(x) #           ,          , tf.abs()     
補足知識:活性化関数ReLU、Leaky ReLU、PReLUとRReLU
「活性化関数」は、「飽和活性化関数」と「非飽和活性化関数」の二つの種類に分けられます。

sigmoidとtanhは「飽和活性化関数」であり、ReLUとその変数は「非飽和活性化関数」である。「非飽和活性化関数」を使う利点は、2点にあります。
1.まず、「非飽和活性化関数」はいわゆる「勾配消失」問題を解決することができます。
2.第二に、収束速度を上げることができます。
Sigmoid関数は、実値入力を[0,1]の範囲に圧縮する必要があります。
σ(x)=1/(1+exp(−x)
tanh関数は、実値入力を「-1,1」の範囲に圧縮する必要があります。
tanh(x)=2σ(2 x)−1
ReLU
ReLU関数は、畳み込み画像を持つ入力xの最大関数(x,o)である「修正線形ユニット」を表しています。ReLU関数は、マトリクスx内のすべての負の値をゼロにし、残りの値は変わらない。ReLU関数の計算は畳み込み後に行われるので、tanh関数やsigmoid関数と同様に「非線形活性化関数」に属する。この内容はGeoff Huntonによって初めて提案された。
ELUs
ELUsは「指数線形要素」であり、活性化関数の平均値をゼロに近づけることで学習速度を向上させようとしています。同時に,勾配消失の問題は正の値の標識によって回避できる。いくつかの研究によると、ELUsの分類精度はReLUsより高い。ELUの詳細について説明します。

Leaky ReLU
ReLUはすべての負の値をゼロに設定します。逆に、Leaky ReLUはすべての負の値にゼロ以外の傾きを与えます。Leaky ReLU活性化関数は音響モデル(2013)で初めて提案された。数学の方式で私達は表してもいいです。

aiは(1、+∞)区間の固定パラメータです。
パラメータ補正リニアユニット(PReLU)
PReLUはLeaky ReLUの変形体と見なされてもよい。PReLUでは、負の部分の傾きは、予め定義されたものではなく、データに基づいて決定される。著者によると、ImageNet分類(2015、Russakovskyなど)において、PReLUは人類の分類レベルを超える鍵となる。
ランダム補正リニアユニット(RReLU)
“ランダム修正線形ユニット”RReLUもLeaky ReLUの変形体である。RReLUでは、負の値の傾きは訓練中にランダムであり、その後のテストでは固定になります。RReLUのハイライトは、トレーニングにおいて、ajiは均一な分布U(I,u)からランダムに抽出した値であることである。形式的には、次のような結果が得られます。

締め括りをつける
下図はReLU、Leaky ReLU、PReLUとRReLUの比較です。

PReLUのaiはデータによって変化します。
Leaky ReLUの中のaiは固定です。
RReLUのajiは与えられた範囲でランダムに抽出された値で、この値はテスト段階で固定されます。
以上のTensorflowでleakyReluの操作の詳細を実現しました。これは小編集が皆さんに共有した内容です。参考にしていただければと思います。どうぞよろしくお願いします。