입력 신호의 총합을 출력 신호로 변환하는 함수를 일반적으로 활성화 함수라고 합니다.
입력 신호의 총합이 활성화를 일으키는지를 정하는 역할입니다.
아래는 신경망 그림으로 가중치(w)가 달린 입력 신호(x)와 편향(b)의 총합을 계산하고 함수 f에 넣어 출력하는 흐름을 보여줍니다.
활성화 함수의 역할
신경망에서 선형 함수를 이용하면 신경망의 층을 깊게하는 의미가 없어집니다 (활성화 함수를 사용하지 않아도 신경망의 층을 깊게 하는 의미가 없어집니다.)
선형 함수의 문제는 층을 아무리 깇게해도 은닉층이 없는 네트워크로도 똑같은 기능을 할 수 있습니다.
만약 h(x) = cx 를 활성화 함수로 사용한 3층 신경망이 있을 때, 이를 식으로 나타내면 y(x)= h(h(h(x))) 입니다.
이 계산은 y(x)=ccc*x 를 수행하지만 사실 y(x)=ax 와 같습니다.
즉 은닉층이 없는 네트워크로 표현 가능한 것입니다.
결론: 선형 함수인 활성화 함수를 이용하면 여러층으로 구성하는 이점을 살릴 수 없기 때문에 층을 쌓기 위해서는 비선형 함수인 활성화 함수를 사용해야 하고, 활성화 함수로는 비선형 함수를 사용해야 합니다.
시그모이드(sigmoid) 함수
시그모이드(sigmoid)란 'S자 모양'이라는 뜻입니다.
식에서 e 마이너스 x제곱에서 e는 자연 상수로 2.7182... 의 값을 갖는 실수입니다.
실수 값을 입력받아 0~1 사이의 값으로 압축합니다.
큰 음수 값일 수록 0에 가까워지고 큰 양수 값일 수록 1이 됩니다.
오래전에 많이 쓰여왔지만 단점이 몇 가지 있습니다.
단점
.기울기 소멸 문제 (Vanishing Gradient Problem)가 발생
시그모이드 함수의 기울기는 입력이 0일 때 가장 크고, |x| 가 클수록 기울기는 0에 수렴합니다. 이는 역전파 중에 이전의 기울기와 현재 기울기를 곱하면서 점점 기울기가 사라지게 됩니다. 그렇게 되면 신경망의 학습 능력이 제한되는 포화(Saturation)가 발생합니다.
시그모이드 함숫값은 0이 중심 (zero-centered)이 아닙니다.
학습 속도가 느려집니다. 만약 x가 입력이고 활성화 함수는 sigmoid를 사용하는 신경망을 그림으로 나타내면 아래와 같습니다.
활성화 함수와 그의 종류인 시그모이드 함수까지 알아봤는데 활성화 함수에는 시그모이드 말고 다른 함수들도 많다고 배웠습니다. 그래서 그 다른 종류의 함수들과 그것을 파이썬으로 얼른 구현해보고 싶다는 생각이 들었습니다.