숨겨진 레이어 뉴런으로서 Relu vs Sigmoid vs Softmax


22

Tensorflow에 의해 숨겨진 레이어가 하나 인 간단한 신경망을 가지고 놀고 있었고 숨겨진 레이어에 대해 다른 활성화를 시도했습니다.

  • 렐루
  • 시그 모이 드
  • Softmax (일반적으로 softmax는 마지막 레이어에서 사용됩니다.)

Relu는 최고의 열차 정확도 및 검증 정확도를 제공합니다. 이것을 설명하는 방법을 잘 모르겠습니다.

우리는 Relu가 그라디언트 사라짐과 같은 희소성과 같은 좋은 특성을 가지고 있음을 알고 있지만

Q : Relu 뉴런은 일반적으로 sigmoid / softmax 뉴런보다 낫습니까? 우리는 거의 항상 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입니다. 함수의 두 번째 미분은 거의 모든 곳에서 0입니다. 따라서 매우 간단한 기능입니다. 최적화가 훨씬 쉬워집니다.
  • 그라디언트는 원할 때마다 크고 절대 포화되지 않습니다.

정류 선형 단위의 일반화도 있습니다. 정류 된 선형 단위 및 일반화는 선형 모델을보다 쉽게 ​​최적화 할 수 있다는 원칙을 기반으로합니다.

바닐라 피드 포워드 구현 에는 S 자형 / 소프트 맥스 (6 장 : Ian Goodfellow)를 권장하지 않습니다 . 재귀 네트워크, 확률 모델에 더 유용하며 일부 자동 인코더는 부분 선형 활성화 함수 사용을 배제하는 추가 요구 사항이 있습니다.

간단한 NN (질문)이 있다면 Relu가 가장 우선 입니다.


5

Relu는 장단점이 있습니다.

장점 :
(+이 지역을했습니다에) 1. 포화되지합니까
2. 계산식, 매우 효율적입니다
설명 된 바와 같이, 3. 일반적으로 relu 신경 세포와 모델은 다른 활성화 기능을 가진 신경 세포보다 훨씬 빠른 수렴 여기

단점 :
1. 그들을 다루는 한 가지 문제는 그들이 죽은 곳, 즉 죽은 Relus입니다. relu 뉴런의 활성화가 0이되면 역 전파에서 그 기울기가 0으로 클리핑되기 때문입니다. 가중치 초기화 및 튜닝 학습 속도에 매우주의를 기울이면 피할 수 있습니다.

자세한 내용 은 CS231n 강의 -5를 확인하십시오


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/

시그 모이 드

S 자형은 그라디언트를 포화시키고 죽입니다. S 자형 출력은 0 중심이 아닙니다.

시그 모이 드 뉴런과 마찬가지로 활성화는 포화되지만 시그 모이 드 뉴런과 달리 출력은 0 중심입니다. 따라서, 실제로 탄형 비선형 성은 시그 모이 드 비선형 성보다 항상 바람직하다.

RELU

ReLU 비선형 성을 사용하고, 학습 속도에주의를 기울이고 네트워크에서“죽은”단위의 비율을 모니터링하십시오. 이 문제가 우려된다면 Leaky ReLU 또는 Maxout을 사용해보십시오. S 자형을 사용하지 마십시오. tanh를 시도하지만 ReLU / Maxout보다 더 나빠질 것으로 예상하십시오.


2
바이어스 노드가 위아래로 움직여서 다른 것처럼 보일 때 시그 모이 드와 tanh가 어떻게 다른지 이해하지 못합니다.
endolith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.