コンボリューションニューラルネットワークの活性化関数

        現在、すべてのニューラルネットワークの基礎とサポートベクターマシンは、パーセプトロン1957によって提唱されています。パーセプトロン(パーセプトロン)は+1と-1の2値をとる、入力特徴ベクトルの一例である第二クラス分類線形分類モデル、クラスのインスタンスの出力です。入力パーセプトロン(特徴空間)に対応する空間はプラスまたはマイナス2つの超平面判別モデルの別のインスタンス属しに分割されます。しかし、パーセプトロンは、この単純なブール演算分割XORすることはできません。そして、後にアクティベーション機能を参加のみだけですぐに戻って、だけでなく、ニューラルネットワークの多様性を保存するためにマシンを知覚します。

        ニューラルネットワークのニューロンの特定の部分を活性化する活性化関数(活性化関数)は、ニューラルネットワークの層の下に戻さ起動情報が実行されています。非線形ニューラル・ネットワークは、問題を解決することができた、本質的には、非線形要素が表現線形モデル、構成する接合機能を活性化することである「におけるニューロンの機能の活性化を」予約機能を介して、次のレベルにマッピングされました。

        ニューラルネットワークの数学的基礎はどこにでも微分可能であるため、そのデータの入力と出力が微分可能であることを保証することができるように活性化機能を選択してください。そして、TensorFlowで活性化機能は、それを表現する方法ですか?活性化関数はつまり、入力と出力の次元が同じで、入力データの大きさを変更しません。TensorFlowは、シグモイド、TANH、ELU、softplusとsoftsign、微分連続関数relu、relu6、creluとrelu_xどこでも含めなく、ランダム正則化関数ドロップアウトとして滑らかな非線形活性化関数を含んでいました。

        活性化関数への入力を計算するためにX(テンソル)であり、xは同じ出力データ型テンソルされています。一般的な活性化関数はシグモイド、双曲線正接、reluを持っており、これら4つsoftplus。ここでは、一つ一つを説明する必要があります。

(1)シグモイド関数

        これは、伝統的な活性化関数最も一般的に使用されるニューラルネットワーク(他方はTANHである)、及び下記式に対応する画像の一つです。


        次のように使用します。

import tensorflow as tf

a = tf.constant([[1.0, 2.0], [1.0, 2.0], [1.0, 2.0]])
sess = tf.Session()
print(sess.run(tf.sigmoid(a)))

        結果は以下の通りであります:

[[0.7310586 0.880797 ]
 [0.7310586 0.880797 ]
 [0.7310586 0.880797 ]]

        利点は、その出力(0,1)内にマッピングされたシグモイド関数は、単調連続、出力層、及び比較的容易に導出としての使用に適しているということです。しかし、それはまた欠点を有する、ソフト飽和入力が飽和領域内に入ると、F「(x)が0に近くなると、それはやすい勾配が消えます

    软饱和是指激活函数 h(x)在取值趋于无穷大时,它的一阶导数趋于 0。硬饱和是指当|x| > c 时,其中 c 为常数,f '(x)=0。relu 就是一类左侧硬饱和激活函数。

    梯度消失是指在更新模型参数时采用链式求导法则反向求导,越往前梯度越小。最终的结果是到达一定深度后梯度对模型的更新就没有任何贡献了。

(2)TANH関数

        以下に示すように、画像が式に対応します。

        双曲線正接関数は、ソフト飽和を有することができます。その出力は、収束速度速いシグモイドより0を中心としているため。しかし、これは勾配が消える問題を解決していません。

 (3)relu機能は、最も人気のある機能が動作しています

        ReLUアレックス機能、前方に置かないで初めてかかわらず、しかしAlexNetセッション画像の認識コンテストの優勝者は、公衆に知られて作られたとき、それは、2012年にありました。softplusはReLUの平滑化バージョンとして見ることができます。Fとして定義relu(X)= MAX(X、0)。softplus Fとして定義される(X)=ログ(1 + EXP(X))。

        x <0のハード飽和で図、Reluからわかります。X> 0ので誘導体は1であるので、relu>が、それはまた、より収束することができ、従って勾配は問題が消え緩和、減衰しないX 0勾配にとどまることができ、そしてスパースニューラルネットワークを発現する能力を提供します。しかし、訓練が進むにつれて、入力の一部が硬い飽和領域に分類されます、対応する重みにつながるするとして知られ、更新することができない「神経細胞死。」

a = tf.constant([-1.0, 2.0])
with tf.Session() as sess:
    b = tf.nn.relu(a)
    print(sess.run(b))

        結果:

[0. 2.]

(4)ドロップアウト機能。

        ニューロン確率keep_probが抑制されるかどうかを決定します。阻害された場合、ニューロンの出力は0であることが、抑制されない場合には、ニューロン出力値は、元の1 / keep_prob倍に増幅されます。

        在默认情况下,每个神经元是否被抑制是相互独立的。但是否被抑制也可以通过 noise_shape 来调节。当 noise_shape[i] == shape(x)[i]时, x 中的元素是相互独立的。如果 shape(x) = [k, l, m, n],x 中的维度的顺序分别为批、行、列和通道,如果 noise_shape = [k, 1, 1, n],那么每个批和通道都是相互独立的,但是每行和每列的数据都是关联的,也就是说,要不都为 0,要不都还是原来的值。使用示例如下:
 

a = tf.constant([[-1.0, 2.0, 3.0, 4.0]])
print(a)
with tf.Session() as sess:
    b1 = tf.nn.dropout(a, 0.5, noise_shape = [1,4])
    print(sess.run(b1))
    b1 = tf.nn.dropout(a, 0.5, noise_shape = [1,4])
    print(sess.run(b1))
    
    b2 = tf.nn.dropout(a, 0.5, noise_shape = [1,1])
    print(sess.run(b2))
    b2 = tf.nn.dropout(a, 0.5, noise_shape = [1,1])
    print(sess.run(b2))

        结果:

Tensor("Const_26:0", shape=(1, 4), dtype=float32)
[[-0.  0.  0.  0.]]
[[-2.  0.  0.  0.]]
[[-2.  4.  6.  8.]]
[[-0.  0.  0.  0.]]

激活函数的选择:

        当输入数据特征相差明显时,用 tanh 的效果会很好,且在循环过程中会不断扩大特征效果并显示出来。当特征相差不明显时, sigmoid 效果比较好。同时,用 sigmoid 和 tanh 作为激活函数时,需要对输入进行规范化,否则激活后的值全部都进入平坦区,隐层的输出会全部趋同,丧失原有的特征表达。而 relu 会好很多,有时可以不需要输入规范化来避免上述情况。因此,现在大部分的卷积神经网络都采用 relu 作为激活函数。

PS:全部摘自李嘉璇的<<TensorFlow 技术解析与实战>>第四章4.7.1节

おすすめ

転載: blog.csdn.net/a857553315/article/details/93378086