Relu vs Sigmoid vs Softmax เป็นเซลล์ประสาทชั้นที่ซ่อนอยู่


22

ฉันกำลังเล่นกับ Neural Network ที่มีเลเยอร์ที่ซ่อนเพียงหนึ่งเดียวโดย Tensorflow และจากนั้นฉันลองเปิดใช้งานที่แตกต่างกันสำหรับเลเยอร์ที่ซ่อนอยู่:

  • Relu
  • sigmoid
  • Softmax (ดีมักจะใช้ softmax ในเลเยอร์สุดท้าย .. )

Relu ให้ความแม่นยำและการตรวจสอบความถูกต้องของรถไฟที่ดีที่สุด ฉันไม่แน่ใจว่าจะอธิบายเรื่องนี้อย่างไร

เรารู้ว่า Relu มีคุณสมบัติที่ดีเช่น sparsity เช่น no-gradient-vanishing เป็นต้น แต่

ถาม: เซลล์ประสาท Relu โดยทั่วไปนั้นดีกว่าเซลล์ประสาท sigmoid / softmax หรือไม่? เราควรใช้เซลล์ประสาท Relu ใน NN (หรือแม้แต่ CNN) เกือบทุกครั้งหรือไม่? ฉันคิดว่าเซลล์ประสาทที่ซับซ้อนมากขึ้นจะแนะนำผลลัพธ์ที่ดีกว่าอย่างน้อยก็ฝึกความแม่นยำถ้าเรากังวลเกี่ยวกับการมีน้ำหนักเกิน

ขอบคุณ PS: โค้ดนั้นมาจาก "Udacity-Machine learning -assignment2" ซึ่งเป็นการรับรู้ของ notMNIST โดยใช้ 1-hidden-layer-NN อย่างง่าย

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 เมื่อมันทำงาน อนุพันธ์อันดับสองของฟังก์ชันคือ 0 เกือบทุกที่ ดังนั้นมันจึงเป็นฟังก์ชั่นที่ง่ายมาก ทำให้การเพิ่มประสิทธิภาพง่ายขึ้นมาก
  • การไล่ระดับสีมีขนาดใหญ่เมื่อใดก็ตามที่คุณต้องการและไม่เคยอิ่มตัว

นอกจากนี้ยังมีข้อสรุปทั่วไปของหน่วยเชิงเส้นที่ถูกแก้ไข หน่วยเชิงเส้นที่ได้รับการแก้ไขและการวางนัยทั่วไปตั้งอยู่บนหลักการที่ว่าตัวแบบเชิงเส้นนั้นง่ายต่อการปรับให้เหมาะสม

sigmoid / softmax ทั้งสองนั้นไม่ได้รับการสนับสนุน (บทที่ 6: Ian Goodfellow) สำหรับการนำไปใช้งานของวานิลลา พวกมันมีประโยชน์มากกว่าสำหรับเครือข่ายที่เกิดขึ้นซ้ำโมเดลความน่าจะเป็นและตัวเข้ารหัสอัตโนมัติบางตัวมีข้อกำหนดเพิ่มเติมที่แยกแยะการใช้ฟังก์ชั่นการเปิดใช้งานเชิงเส้นแบบทีละน้อย

หากคุณมี NN ง่าย (นั่นคือคำถาม), Relu เป็นของคุณตั้งค่าแรก


5

Relu มีข้อดีข้อเสีย:

ข้อดี:
1. ไม่อิ่มตัว (ใน + ภูมิภาค)
2. คำนวณได้อย่างมีประสิทธิภาพมาก
3. โดยทั่วไปรุ่นที่มีเซลล์ประสาท relu รวมตัวกันเร็วกว่าเซลล์ประสาทด้วยฟังก์ชั่นการเปิดใช้งานอื่น ๆ ดังที่อธิบายไว้ที่นี่

ข้อด้อย:
1. ปัญหาหนึ่งในการจัดการกับพวกเขาคือที่ที่พวกเขาตายคือ Relus ที่ตายแล้ว เพราะถ้าการเปิดใช้งานของเซลล์ประสาท relu ใด ๆ กลายเป็นศูนย์แล้วการไล่ระดับสีของมันจะถูกตัดเป็นศูนย์ในการขยายพันธุ์กลับ สิ่งนี้สามารถหลีกเลี่ยงได้ถ้าเราระมัดระวังอย่างมากกับการกำหนดน้ำหนักเริ่มต้นและปรับอัตราการเรียนรู้

สำหรับรายละเอียดเพิ่มเติม: ตรวจสอบการบรรยาย -5 ของ CS231n นี้


เป็นที่น่าสังเกตว่าหน่วย ELU แลกเปลี่ยนประสิทธิภาพการคำนวณเพื่อความเป็นอมตะ - ภูมิคุ้มกันต่อการตาย arxiv.org/abs/1511.07289
Sycorax พูดว่า Reinstate Monica

ขอขอบคุณที่รวมไว้ ใช่ ELU สามารถใช้งานได้ แต่เหตุผลที่ RELU ยังคงได้รับความนิยมและใช้กับ ELU นั้นเป็นเพราะในขณะที่ใช้งาน ELU ระบบจะแนะนำพารามิเตอร์ไฮเปอร์ใหม่
Bhagyesh Vikani

1
ไม่มีเหตุผลใดที่คุณจะต้องปรับแต่งพารามิเตอร์นั้น
Sycorax พูดว่า Reinstate Monica

4

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

Sigmoids

Sigmoids อิ่มตัวและฆ่าการไล่ระดับสี เอาต์พุต Sigmoid ไม่ได้อยู่กึ่งกลาง

tanh

เช่นเดียวกับ sigmoid neuron การเปิดใช้งานของ saturate แต่ต่างจาก sigmoid neuron ที่ออกมาเป็นศูนย์ ดังนั้นในทางปฏิบัติ tanh non-linearity จึงเป็นที่ต้องการของ sigmoid nonlinearity

Relu

ใช้ ReLU ที่ไม่ใช่เชิงเส้นระวังอัตราการเรียนรู้ของคุณและอาจตรวจสอบส่วนของ "ตาย" หน่วยในเครือข่าย หากสิ่งนี้เกี่ยวข้องกับคุณให้ลอง ReLU ที่มีการรั่วไหลหรือ Maxout ห้ามใช้ sigmoid ลอง tanh แต่คาดว่ามันจะทำงานได้แย่กว่า ReLU / Maxout


2
ฉันไม่เข้าใจว่า sigmoid และ tanh แตกต่างกันอย่างไรเมื่อโหนด bias สามารถเลื่อนขึ้นหรือลงเพื่อให้ดูเหมือนกัน
endolith
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.