본문 바로가기
AI, 빅데이터/AI

[AI 개념 다지기] Activation Function(Sigmoid)

by Foxy현 2022. 8. 3.
728x90
반응형

안녕하세요! 오늘은 ANN의 구성 요소 중 하나인 활성화 함수에 대해서 알아보겠습니다!


출력신호를 뉴런에서 내보낼지 말지를 결정을 하는 것을 활성화 함수(Activation Function)라고 부릅니다.

여러 종류의 활성화 함수가 있고, 활성화 함수의 결정이 결과에 큰 영향이 생깁니다.

 

먼저 Odds 함수 입니다.

확률이 1에 가까워질수록 무한대의 값을 갖는 것이 특징입니다.

하지만, 0.5라는 확률에도 odds가 대칭적이지 않기 때문에, 우리는 odds에 새로운 개념을 넣어봅니다..

 

Logit 함수라는 것인데 0.5를 기준으로 위아래로 대칭이 되는 것을 볼 수 있습니다.

이 Logit 함수를 토대로 식을 정리하면,

l의 값이 -무한대부터 +무한대 사이에 값이라고 한다면 출력 결과 p는 0과 1사이의 값이 나오게 됩니다.

이  p라는 함수를 Sigmoid 함수라고 부릅니다. 이 함수의 출력값은 확률을 예측하는 것이라고 볼 수 있겠습니다.

Sigmoid는 Binary Classification(이진 분류)에 많이 사용되고 있습니다.

 

이를 코드로 구현해보겠습니다.

먼저, Numpy 라이브러리를 사용해봅시다.

fig,axes=plt.subplots(2,1,figsize=(15,10),sharex=True)

axes[0].plot(p_np,odds_np)
axes[1].plot(p_np,logit_np)

xticks=np.arange(0,1.1,0.1)
axes[0].tick_params(labelsize=15)
axes[0].set_xticks(xticks)
axes[0].set_ylabel('Odds',fontsize=20,color='darkblue')

axes[1].tick_params(labelsize=15)
axes[1].set_xticks(xticks)
axes[1].set_ylabel('Logit',fontsize=20,color='darkblue')
axes[1].set_xlabel('Probability',fontsize=20,color='darkblue')

numpy를 사용하면 우리가 이론으로 배웠던 모양 그대로 출력이되네요!

 

tensorflow를 사용해서 만들어볼까요?

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
plt.style.use('seaborn')

p_tf=tf.linspace(0.01,0.99,100)
odds_tf=p_tf/(1-p_tf)
logit_tf=tf.math.log(odds_tf)

fig,axes=plt.subplots(2,1,figsize=(15,10),sharex=True)

axes[0].plot(p_tf,odds_tf.numpy())
axes[1].plot(p_tf,logit_tf.numpy())

xticks=np.arange(0,1.1,0.1)
axes[0].tick_params(labelsize=15)
axes[0].set_xticks(xticks)
axes[0].set_ylabel('Odds',fontsize=20,color='darkblue')

axes[1].tick_params(labelsize=15)
axes[1].set_xticks(xticks)
axes[1].set_ylabel('Logit',fontsize=20,color='darkblue')
axes[1].set_xlabel('Probability',fontsize=20,color='darkblue')

무슨 라이브러리를 썼냐의 차이지 코드에는 큰 변화가 없습니다.

이제 Sigmoid 함수를 구현해보겠습니다.

import tensorflow as tf
from tensorflow.keras.layers import Activation

X=tf.linspace(-30,30,100)
sigmoid=Activation('sigmoid')(X)

fig,ax=plt.subplots(figsize=(10,5))
ax.plot(X.numpy(),sigmoid.numpy())

0과 1사이의 어떤 값을 갖고, 가운데를 기준으로 위아래 대칭인 것을 확인할 수 있네요!

 


 

오늘은 이렇게 Sigmoid 함수에 대해 알아보았습니다.

감사합니다

 

728x90
반응형