말랑말랑제리스타일
딥러닝 활성화 함수 중 ReLU 쓰는 이유 본문
딥러닝 활성화 함수에는 크게 Sigmoid(시그모이드),Tanh(하이퍼블릭 탄젠트), ReLU(렐루) 세가지 함수가 있습니다.
이 중 대세는 ReLU라고 하고 자료를 찾아봐도 ReLU를 많이 사용하기에 이유를 알아봤습니다.
세가지 활성화 함수(Sigmoid, Tanh, ReLU)의 특징
일단 세가지 활성화 함수의 특징을 알아봤습니다.
Sigmoid의 경우 1/(1 + e^(-z))로 값을 만들어냅니다.
그래프는 이렇게 되는데요. 0보다 작은 값이 들어가면 0에서 0.5 사이의 값이, 0보타 큰 값이 들어가면 0.5~1 사이의 값으로 대치되겠네요. 세부적으로 설명하면 무지하게 복잡하니까 이쯤 하고 넘어갑니다.
다음으로 tanh 함수의 경우 tanh(x)로 계산이 됩니다. Sigmoid 함수에 입력값을 두배로 주고 결과를 두배로 돌린 뒤 1을 빼주는 연산을 하죠.
결과 값은 -1.0에서 1.0의 값으로 나옵니다. Sigmoid 함수와 비슷하죠?
마지막으로 ReLU 함수입니다.
ReLU 함수는 0보다 작은 입력은 0으로, 큰 값은 해당 값으로 대치됩니다.
되게 간단하죠.
그러다 보니 ReLU 함수는 다른 두개의 활성화 함수에 비해 일단 속도가 매우 빠릅니다.
그리고 성능도 우수한데요.
세가지 활성화 함수(Sigmoid, Tanh, ReLU)의 성능 비교
성능이 왜 우수한지 명확히 답변을 제시하기에는 제가 역량이 부족해 mnist 데이터를 이용해 테스트해봤습니다.
for f in ['sigmoid', 'tanh', 'relu']:
tf.random.set_seed(14)
model = Sequential()
model.add(Dense(64, activation = f, input_shape = (28*28,)))
#레이어
model.add(Dense(32, activation = f))
model.add(Dense(16, activation = f))
model.add(Dense(10, activation = 'softmax'))
model.compile(optimizer= 'adam', loss = 'categorical_crossentropy', metrics = ['acc'])
model.fit(train_x, train_y, epochs=10, batch_size=50, validation_data=(valid_x,valid_y))
활성화 함수별로 모델을 만들어 확인해봤는데요.
epoch 10번째(최종) 기준으로 아래와같은 결과를 얻었습니다.
Sigmoid 함수 사용
acc: 0.9810 - loss: 0.0774 - val_acc: 0.9639 - val_loss: 0.1323
Tanh 함수 사용
acc: 0.9910 - loss: 0.0339 - val_acc: 0.9647 - val_loss: 0.1382
ReLU 함수 사용
acc: 0.9889 - loss: 0.0393 - val_acc: 0.9661 - val_loss: 0.1302
보시다 시피 성능에서 별 차이가 나지 않고 미세하게 ReLU가 좋게 나옵니다.
사실 이정도면 성능이 좋다고는 말할 수 없지만 걸리는 시간 대비 성능은 ReLU가 빠르기에 좋다고 할 수 있죠.
이런 쉽고 빠르고 성능상 별 차이가 없다는 점에서 현재는 학습용으로는 Sigmoid나 Tanh 함수보다는 ReLU 함수를 많이 사용하고 있습니다.
'프로그래밍 > 딥러닝' 카테고리의 다른 글
딥러닝에서 과적합의 의미와 간단한 ANN 모델 성능 평가 방법 (0) | 2024.03.20 |
---|---|
TensorFlow에서 사용되는 3가지 손실함수 (0) | 2024.03.20 |
아나콘다 가상환경 생성과 테스트 (0) | 2024.03.13 |
[딥러닝 입문]딥러닝 모델의 정의 (1) | 2024.01.25 |
[딥러닝 입문] 딥러닝 테스트하기 위한 데이터 전처리 과정 (1) | 2024.01.24 |