Gizli katman nöronları olarak Relmo vs Sigmoid Softmax


22

Tensorflow tarafından yalnızca bir gizli katmana sahip basit bir Sinir Ağı ile oynuyordum ve sonra gizli katman için farklı aktivasyonlar denedim:

  • relu
  • sigmoid
  • Softmax (peki, genellikle softmax son katmanda kullanılır ..)

Relu en iyi tren doğruluğunu ve doğrulama doğruluğunu verir. Bunu nasıl açıklayacağımdan emin değilim.

Relu’nun gradyan-yok oluşu gibi seyreklik gibi iyi niteliklere sahip olduğunu biliyoruz.

S: Relu nöronu genel olarak sigmoid / softmax nöronlarından daha mı iyidir? Neredeyse her zaman NN'de Relu nöronları kullanmalı mıyız (hatta CNN)? Daha karmaşık bir nöronun daha iyi sonuç vereceğini düşündüm, en azından fazla uydurma konusunda endişelenirsek en azından tren doğruluğunu.

Teşekkürler PS: Kod temelde "Udacity-Machine learning-atama2" dan geliyor, ki bu basit bir 1-gizli-katmanlı-NN kullanarak not almamış.

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)

Yanıtlar:


12

@Bhagyesh_Vikani ek olarak:

  • Relu doğrusal bir birime yakın davranıyor
  • Relu doğrusallık için bir anahtar gibidir. İhtiyacınız yoksa, onu "kapatın". İhtiyacınız olursa, onu "açarsınız". Böylece, doğrusallık avantajlarından yararlanırız, ancak kendimizi daha fazla kullanmamak için bir seçenek ayırırız.
  • Aktif olduğunda, türev 1'dir. Fonksiyonun ikinci türevi hemen hemen her yerde 0'dır. Böylece, çok basit bir fonksiyon. Bu optimizasyon çok daha kolay hale getirir.
  • Degrade, istediğiniz zaman ve asla doymadığında istediğiniz kadar büyük

Doğrultulmuş doğrusal birimlerin genellemeleri de vardır. Doğrultulmuş doğrusal birimler ve genellemeleri doğrusal modellerin optimize edilmesinin daha kolay olduğu ilkesine dayanır.

Her iki sigmoid / softmax vanilya feedforward uygulaması için tavsiye edilmez (bölüm 6: Ian Goodfellow). Tekrarlayan ağlar, olasılıksal modeller için daha kullanışlıdır ve bazı otomatik kodlayıcılar parçalı doğrusal aktivasyon fonksiyonlarının kullanımını dışlayan ek gereksinimlere sahiptir.

Basit bir NN'niz varsa (soru bu), Relu ilk tercihiniz .


5

Relu'nun kendi artıları ve eksileri var:

Artıları:
1. Doymaz (+ ve bölgesinde)
2. Hesaplamalı olarak çok etkilidir
3. Genellikle relu nöronlu modeller, burada açıklandığı gibi, diğer aktivasyon işlevlerine sahip nöronlardan çok daha hızlı birleşir.

Eksileri:
1. Onlarla başa çıkma ile ilgili bir sorun nerede öldükleri, yani ölü Relus'tur. Çünkü herhangi bir relu nöronunun aktivasyonu sıfır olursa, o zaman gradyanları geri yayılma sırasında sıfıra kırpılır. Ağırlıkları başlatma ve öğrenme hızını ayarlama konusunda çok dikkatli olursak, bu önlenebilir.

Daha fazla ayrıntı için: CS231n'in 5. dersini inceleyiniz.


ELU birimlerinin ölümsüzlük - ölüme karşı bağışıklık için hesaplamalı verimlilik ticareti yaptığını belirtmek gerekir. arxiv.org/abs/1511.07289
Sycorax,

Katıldığın için teşekkürler. Evet, ELU kullanılabilir, ancak RELU'ların hala ELU'da popüler olmasının ve kullanılmasının nedeni, ELU kullanırken yeni bir hiper parametresi ortaya çıkmasıdır.
Bhagyesh Vikani

1
Temelde bu belirli parametreyi ayarlamanız için hiçbir neden yok .
Sycorax diyor Reinstate Monica

4

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

sigmoidleri

Sigmoids doymuş ve degradeleri öldürür. Sigmoid çıkışları sıfır merkezli değildir.

tanh

Sigmoid nöron gibi aktivasyonları da doyurucudur, ancak sigmoid nöronun aksine çıkışı sıfır merkezlidir. Bu nedenle pratikte tanh doğrusal olmayanlık daima sigmoid doğrusal olmayanlık için tercih edilir.

relu

ReLU nonlineeriteyi kullanın, öğrenme oranlarınıza dikkat edin ve muhtemelen “ölü” birimlerin bir ağdaki payını izleyin. Bu sizi ilgilendirirse, Leaky ReLU veya Maxout'u deneyin. Asla sigmoid kullanmayın. Tanh'ı deneyin, ancak ReLU / Maxout'tan daha kötü çalışmasını bekleyin.


2
Önyargılı düğümler diğeri gibi görünmek için birini aşağı veya yukarı kaydırırken sigmoid ve tanh'ın ne kadar önemli olduğunu anlamıyorum.
Endolit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.