Relu vs Sigmoid vs Softmax là tế bào thần kinh lớp ẩn


22

Tôi đã chơi với một Mạng thần kinh đơn giản chỉ có một lớp ẩn, bởi Tensorflow, và sau đó tôi đã thử các kích hoạt khác nhau cho lớp ẩn:

  • Relu
  • Sigmoid
  • Softmax (tốt, thường là softmax được sử dụng ở lớp cuối cùng ..)

Relu cung cấp độ chính xác và độ chính xác xác thực tàu tốt nhất. Tôi không chắc làm thế nào để giải thích điều này.

Chúng tôi biết rằng Relu có những phẩm chất tốt, chẳng hạn như độ thưa thớt, chẳng hạn như không biến mất độ dốc, v.v.

Hỏi: nói chung tế bào thần kinh Relu tốt hơn tế bào thần kinh sigmoid / softmax? Chúng ta có nên sử dụng tế bào thần kinh Relu trong NN (hoặc thậm chí CNN) không? Tôi nghĩ rằng một tế bào thần kinh phức tạp hơn sẽ giới thiệu kết quả tốt hơn, ít nhất là đào tạo độ chính xác nếu chúng ta lo lắng về việc cung cấp quá nhiều.

Cảm ơn PS: Mã về cơ bản là từ "Udacity-Machine learning -assocation2", đây là sự công nhận của notMNIST bằng cách sử dụng một lớp ẩn 1 lớp đơn giản.

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)

Câu trả lời:


12

Ngoài @Bhagyesh_Vikani:

  • Relu hành xử gần với một đơn vị tuyến tính
  • Relu giống như một công tắc cho tuyến tính. Nếu bạn không cần nó, bạn "tắt" nó đi. Nếu bạn cần nó, bạn "bật" nó lên. Do đó, chúng tôi nhận được các lợi ích tuyến tính nhưng bảo lưu chính chúng tôi một tùy chọn không sử dụng nó hoàn toàn.
  • Đạo hàm là 1 khi nó hoạt động. Đạo hàm thứ hai của hàm là 0 gần như ở mọi nơi. Vì vậy, nó là một chức năng rất đơn giản. Điều đó làm cho tối ưu hóa dễ dàng hơn nhiều.
  • Độ dốc lớn bất cứ khi nào bạn muốn và không bao giờ bão hòa

Ngoài ra còn có khái quát của các đơn vị tuyến tính chỉnh lưu. Các đơn vị tuyến tính được chỉnh lưu và các khái quát của nó dựa trên nguyên tắc các mô hình tuyến tính dễ dàng tối ưu hóa hơn.

Cả sigmoid / softmax đều không được khuyến khích (chương 6: Ian Goodfellow) để thực hiện vanilla feedforward. Chúng hữu ích hơn cho các mạng lặp lại, các mô hình xác suất và một số bộ tự động có các yêu cầu bổ sung loại trừ việc sử dụng các hàm kích hoạt tuyến tính từng phần.

Nếu bạn có một NN đơn giản (đó là câu hỏi), Relu là ưu tiên hàng đầu của bạn .


5

Relu có những ưu và nhược điểm riêng:

Ưu điểm:
1. Không bão hòa (trong vùng + ve)
2. Tính toán, nó rất hiệu quả
3. Nói chung các mô hình với tế bào thần kinh Relu hội tụ nhanh hơn nhiều so với tế bào thần kinh có chức năng kích hoạt khác, như được mô tả ở đây

Nhược điểm:
1. Một vấn đề khi đối phó với chúng là nơi chúng chết, tức là Relus đã chết. Bởi vì nếu kích hoạt bất kỳ tế bào thần kinh Relu nào trở thành số 0 thì độ dốc của nó sẽ bị cắt về 0 trong quá trình truyền ngược. Điều này có thể tránh được nếu chúng ta rất cẩn thận với việc khởi tạo trọng số và điều chỉnh tốc độ học tập.

Để biết thêm chi tiết: Kiểm tra bài giảng này -5 của CS231n


Điều đáng chú ý là các đơn vị ELU đánh đổi hiệu quả tính toán cho sự bất tử - miễn nhiễm với cái chết. arxiv.org/abs/1511,07289
Sycorax nói Phục hồi lại

Cảm ơn đã kết hợp điều đó. Có, ELU có thể được sử dụng nhưng lý do tại sao RELU vẫn phổ biến và được sử dụng trên ELU là vì trong khi sử dụng ELU, một siêu tham số mới được giới thiệu.
Bhagyesh Vikani

1
Về cơ bản không có lý do gì bạn phải điều chỉnh thông số cụ thể đó.
Sycorax nói Phục hồi lại

4

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

Sigmoids

Sigmoids bão hòa và tiêu diệt gradient. Đầu ra Sigmoid không phải là trung tâm không.

tanh

Giống như tế bào thần kinh sigmoid, kích hoạt của nó bão hòa, nhưng không giống như tế bào thần kinh sigmoid, đầu ra của nó là không tập trung. Do đó, trong thực tế, phi tuyến tanh luôn được ưa thích hơn so với phi tuyến sigmoid.

ReLU

Sử dụng tính phi tuyến tính của ReLU, hãy cẩn thận với tốc độ học tập của bạn và có thể theo dõi phần nhỏ của các đơn vị chết chết trong mạng. Nếu điều này làm bạn lo lắng, hãy thử Leaky ReLU hoặc Maxout. Không bao giờ sử dụng sigmoid. Hãy thử tanh, nhưng hy vọng nó hoạt động kém hơn ReLU / Maxout.


2
Tôi không hiểu sigmoid và tanh khác nhau đáng kể như thế nào, khi các nút thiên vị có thể dịch chuyển cái này lên hoặc xuống để trông giống cái kia.
endolith
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.