시그모이드 함수(Sigmoid function)
퍼셉트론과 신경망의 주된 차이는 활성화 함수이다.
퍼셉트론에서는 활성화 함수로 계단함수를 이용한다. 계단함수의 코드 구현은 다음과 같다.
def step_function(x):
y=x>0
return y.astype(np.int)
def step_function(x):
return np.array(x>0, dtype=np.int)
반면 신경망에서는 시그모이드 함수를 자주 사용한다.
시그모이드 함수가 어떻게 나왔는지 알아보자.
- 일어날 확률 :
- 일어나지 않을 확률 :
위와 같이 P(X)를 정의 하자. 그러면 Odds Ratio로 나타 낼 수 있다.
위 수식은 해당 사건이 일어날 확률과 일어나지 않을 확률의 비율 즉 odds ratio이다.
위 수식을 그래프로 나타내면 다음과 같이 나타난다. 확률이 높으면 높을 수 록 Odds 값이 무한이 증가하는 그래프의 모양이 나타난다.
우리가 알고 싶은것은 값이 주어졌을 때의 확률을 알고 싶다. 때문에 값과 값을 바꿔본다. 즉, 역함수를 구해본다. 이때, 이것을 구하기 위해 Logit 함수를 이용한다.
X값이 주어졌을 때 y의 확률을 이용한 Log odds를 구하면 다음과 같다.
확률 일 때의 Logit(P)의 값을 구하는 그래프 이다. 하지만, 우리는 값이 주어졌을 때의 확률을 알고 싶기 때문에 역함수를 구해야 한다.
Logit 함수의 역함수로 에 관한 확률로 구하면 다음과 같다.
여기서 값은 위에서 이야기 했던 확률을 의미하는 것이고, 즉 이제 앞으로 구하게 되는 어떤 값을 말한다. 이것을 다시 다음과 같이 변환하면 Logistic 함수를 얻을 수 있다.
이렇게 얻어진 함수를 Logistic 함수라고 하고. 모양이 다음과 같이 S형태로 닮았다고 하여 Sigmoid 함수라고 호칭한다. 이 함수의 가장 중요한 특징은 연속구간에서 미분 가능한 형태를 띈다는 점이다.
def sigmoid(x):
return 1/(1+np.exp(-1))
계단함수와 시그모이드 함수
두 함수를 보고 가장 먼저 느껴지는 차이점은 '매끄러움'의 차이다. 시그모이드 함수는 부드러운 곡선이며 입력에 따라 출력이 연속적으로 변한다. 반면 계단함수는 0을 경계로 출력이 갑자기 바뀐다. 시그모이드 함수의 매끈함은 신경망 학습에서 중요한 역할을 한다.
퍼셉트론에서는 뉴런 사이에 0 혹은 1이 흘렀다면, 신경망에서는 연속적인 실수가 흐른다.
두 함수의 공통점은 입력이 중요하면 큰 값을 출력하고 입력이 중요하지 않으면 작은 값을 출력하는 것이다. 또한 값이 0과 1 사이라는 것도 공통점이다.
가장 중요한 공통점은 두 함수 모두 비선형 함수라는 것이다.
신경망에서는 활성화 함수로 비선형 함수를 사용해야 한다. 선형함수를 이용하면 신경망의 층을 깊게 하는 의미가 없기 때문이다. 아무리 층을 깊게 쌓아도 '은닉층이 없는 네트워크'로도 똑같은 기능을 할 수 있다.
ReLu함수
최근에는 ReLu 함수를 활성화함수로 많이 사용한다.
시그모이드 함수는 출력하는 값의 범위가 0에서 1 사이므로, 레이어를 거칠수록 값이 현저하게 작아지게 되어 기울기 소실(gradient vanishing) 현상이 발생한다. 함수를 미분하면 값이 0인 부분이 더 많이 때문에 미분값 0을 계속 전달해주게 되기 때문이다.
이를 해결하기 위해 ReLu 함수가 제안되었다.
렐루 함수는 양수는 그대로, 음수는 0으로 반환하는데, 그러다 보니 특정 양수 값에 수렴하지 않는다. 따라서 미분 값이 0이 아닌 양수 값으로 전달될 수 있다.
def relu(x):
return np.maximum(0,x)
'AI > Machine Learning' 카테고리의 다른 글
Neural Network 기본 개념 정리 (0) | 2022.06.09 |
---|