隠れ層ニューロンとしてのRelu vs Sigmoid vs Softmax


22

Tensorflowを使用して、1つの隠れ層のみを持つ単純なニューラルネットワークで遊んでいた後、隠れ層に対して異なるアクティベーションを試みました。

  • レルー
  • シグモイド
  • ソフトマックス(まあ、通常ソフトマックスは最後のレイヤーで使用されます。.)

Reluは、最高の列車精度と検証精度を提供します。これを説明する方法がわかりません。

Reluには、勾配のない消失などのスパース性などの優れた特性があることがわかっていますが、

Q:Reluニューロンはシグモイド/ソフトマックスニューロンよりも一般的に優れていますか?ほとんど常にNN(またはCNNでも)Reluニューロンを使用する必要がありますか? 複雑すぎるニューロンはより良い結果をもたらすだろうと考えました。少なくともオーバーフィットを心配する場合は、精度を訓練します。

PS:コードは基本的に「Udacity-Machine learning -assignment2」からのものです。これは、単純な1-hidden-layer-NNを使用したnotMNISTの認識です。

batch_size = 128
graph = tf.Graph()
with graph.as_default():
  # Input data. 
  tf_train_dataset = tf.placeholder(tf.float32, shape=(batch_size, image_size * image_size))
  tf_train_labels = tf.placeholder(tf.float32, shape=(batch_size, num_labels))
  tf_valid_dataset = tf.constant(valid_dataset)
  tf_test_dataset = tf.constant(test_dataset)

  # hidden layer
  hidden_nodes = 1024
  hidden_weights = tf.Variable( tf.truncated_normal([image_size * image_size, hidden_nodes]) )
  hidden_biases = tf.Variable( tf.zeros([hidden_nodes]))
  hidden_layer = **tf.nn.relu**( tf.matmul( tf_train_dataset, hidden_weights) + hidden_biases)

  # Variables.
  weights = tf.Variable( tf.truncated_normal([hidden_nodes, num_labels])) 
  biases = tf.Variable(tf.zeros([num_labels]))

  # Training computation.
  logits = tf.matmul(hidden_layer, weights) + biases
  loss = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits, tf_train_labels) )

  # Optimizer.
  optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)

  # Predictions for the training, validation, and test data.
  train_prediction = tf.nn.softmax(logits)
  valid_relu = **tf.nn.relu**(  tf.matmul(tf_valid_dataset, hidden_weights) + hidden_biases)
  valid_prediction = tf.nn.softmax( tf.matmul(valid_relu, weights) + biases) 

  test_relu = **tf.nn.relu**( tf.matmul( tf_test_dataset, hidden_weights) + hidden_biases)
  test_prediction = tf.nn.softmax(tf.matmul(test_relu, weights) + biases)

回答:


12

@Bhagyesh_Vikaniに加えて:

  • Reluは線形単位に近い動作をします
  • Reluは線形性のスイッチのようなものです。必要ない場合は、「オフ」にします。必要な場合は、「オン」にします。したがって、線形性の利点は得られますが、それをまったく使用しないという選択肢があります。
  • 導関数は、アクティブのとき1です。関数の2次導関数はほぼすべて0です。したがって、これは非常に単純な関数です。これにより、最適化がはるかに簡単になります。
  • グラデーションはいつでも大きく、飽和しない

修正された線形単位の一般化もあります。整流線形単位とその一般化は、線形モデルの最適化がより簡単であるという原則に基づいています。

シグモイド/ソフトマックスの両方は、バニラフィードフォワード実装では推奨されていません(第6章:Ian Goodfellow)。リカレントネットワーク、確率モデル、および一部のオートエンコーダーには、区分的線形アクティベーション関数の使用を除外する追加要件があります。

単純なNNがある場合(それが質問です)、Reluが最初の設定です。


5

Reluには長所と短所があります。

長所:
1.(+ ve領域で)飽和しない
2.計算上、非常に効率的
3.一般的に、reluニューロンを含むモデルは、他の活性化関数を含むニューロンよりもはるかに速く収束します。

短所:
1.それらに対処する際の1つの問題は、彼らが死ぬ場所、すなわち死んだRelusです。いずれかのreluニューロンの活性化がゼロになると、その伝播は逆伝播でゼロにクリップされるためです。重みの初期化と学習率の調整に非常に注意すれば、これを回避できます。

詳細については、CS231nのこの講義5を参照してください。


ELUユニットは、計算の効率性と不滅性(死に強い)を犠牲にしていることに注意してください。arxiv.org/abs/1511.07289
Sycoraxによると、

それを取り入れてくれてありがとう。はい、ELUを使用できますが、RELUがELUよりも一般的に使用されている理由は、ELUの使用中に新しいハイパーパラメータが導入されたためです。
バギーシュヴィカニ

1
その特定のパラメーターを調整する必要がある理由は基本的にありません。
Sycoraxが復活モニカ言う

4

http://cs231n.github.io/neural-networks-1/

シグモイド

シグモイドは飽和し、勾配を殺します。シグモイド出力はゼロ中心ではありません。

タン

シグモイドニューロンと同様に、その活性化は飽和しますが、シグモイドニューロンとは異なり、その出力はゼロ中心になります。したがって、実際には、シグモイドの非線形性よりもタンの非線形性が常に優先されます。

ReLU

ReLUの非線形性を使用し、学習率に注意し、ネットワーク内の「デッド」ユニットの割合を監視する可能性があります。これが懸念される場合は、Leaky ReLUまたはMaxoutを試してください。シグモイドを使用しないでください。tanhを試してみてください。ただし、ReLU / Maxoutよりも動作が悪くなることが予想されます。


2
バイアスノードが一方を上下にシフトしてもう一方のように見える場合、シグモイドとtanhがどのように大きく異なるかはわかりません。
エンドリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.