Relu vs Sigmoid vs Softmax як нейрони прихованого шару


22

Я грав у простій Нейронній мережі з лише одним прихованим шаром, від Tensorflow, і тоді я спробував різні активації для прихованого шару:

  • Relu
  • Сигмоїдний
  • Softmax (ну зазвичай softmax використовується в останньому шарі ..)

Relu забезпечує найкращу точність поїздів та точність перевірки. Я не впевнений, як це пояснити.

Ми знаємо, що Relu має хороші якості, такі як рідкість, такі як відсутність градієнта тощо, але

Питання: чи нейрон Relu в цілому кращий за сигмоподібні / софтмаксні нейрони? Чи слід майже завжди використовувати нейрони Relu в NN (або навіть CNN)? Я думав, що більш складний нейрон принесе кращий результат, принаймні, точність тренуватися, якщо ми будемо турбуватися про надмірне оснащення.

Дякую PS: Код в основному з "Udacity-Machine learning-Assignment2", що є розпізнаванням notMNIST за допомогою простого 1-прихованого шару-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 майже всюди. Таким чином, це дуже проста функція. Це значно спрощує оптимізацію.
  • Градієнт великий, коли хочеться, щоб він був і ніколи не насичувався

Існують також узагальнення випрямлених лінійних одиниць. Випрямлені лінійні одиниці та її узагальнення базуються на принципі, що лінійні моделі легше оптимізувати.

Обидва сигмоподібні / софтмакси не рекомендують (глава 6: Іан Гудффеллоу) для подальшої реалізації ванілі. Вони є більш корисними для періодичних мереж, імовірнісних моделей, а деякі автокодери мають додаткові вимоги, що виключають використання кусково-лінійних функцій активації.

Якщо у вас є простий NN (це питання), Relu - це ваше перше уподобання .


5

У Relu є свої плюси і мінуси:

Плюси:
1. Не насичує (у + регіоні)
2. Обчислено, це дуже ефективно
3. В основному моделі з нейронами relu сходяться набагато швидше, ніж нейрони з іншими функціями активації, як описано тут

Мінуси:
1. Одне питання щодо поводження з ними - це те, де вони помирають, тобто мертвий Релюс. Тому що, якщо активація будь-яких нейронів relu стане нульовою, то його градієнти будуть обрізані до нуля при зворотному поширенні. Цього можна уникнути, якщо ми дуже обережні з ініціалізацією ваг та налаштуванням швидкості навчання.

Для отримання більш детальної інформації: Перевірте цю лекцію-5 CS231n


Варто зазначити, що підрозділи ELU торгують обчислювальною ефективністю для безсмертя - імунітетом до вмирання. arxiv.org/abs/1511.07289
Sycorax повідомляє про відновлення Моніки

Дякуємо, що включили це. Так, ELU можна використовувати, але причина, чому RELU все ще популярні та використовуються над ELU, полягає в тому, що під час використання ELU вводиться новий гіперпараметр.
Bhagyesh Vikani

1
По суті, немає жодної причини , щоб вам довелося налаштовуватися на цей конкретний параметр.
Sycorax каже, що відновіть Моніку

4

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

Сигмоїди

Сигмоїди насичують і вбивають градієнти. Сигмоїдні виходи не орієнтовані на нуль.

тан

Як і у сигмоїдного нейрона, його активація насичується, але на відміну від сигмовидного нейрона його вихід нульовий. Тому на практиці тен нелінійність завжди віддається перевазі сигмоїдної нелінійності.

ReLU

Використовуйте нелінійність ReLU, будьте уважні до рівня навчання та, можливо, стежте за часткою "мертвих" одиниць у мережі. Якщо це стосується вас, спробуйте Leaky ReLU або Maxout. Ніколи не використовуйте сигмоподібні. Спробуйте tanh, але очікуйте, що він буде працювати гірше, ніж ReLU / Maxout.


2
Я не розумію, наскільки сигмоподібні та танг значно відрізняються, коли вузли зміщення можуть зміщувати один вгору або вниз, щоб виглядати як інший.
ендоліт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.