활성화 함수
1. 개요
활성화 함수는 인공 신경망에서 입력 신호의 총합을 처리하여 출력 신호를 생성하는 함수로, 초기에는 계단 함수가 사용되었으나, 역전파 알고리즘의 등장과 함께 시그모이드 함수가 널리 사용되었다. 이후 기울기 소실 문제를 해결하기 위해 ReLU 함수가 제안되었으며, Leaky ReLU, Swish 등 다양한 활성화 함수가 개발되었다. 활성화 함수는 릿지 함수, 방사형 함수, 폴딩 함수 등으로 분류되며, 비선형성, 범위, 연속 미분 가능성, 포화 등의 수학적 속성을 갖는다. 출력층의 활성화 함수와 오차 함수는 문제의 종류에 따라 다르게 설계되며, 회귀, 이진 분류, 다중 클래스 분류 문제에 각각 적합한 함수가 사용된다.
| 정의 | 인공 신경망의 노드에서 출력값을 결정하는 함수 |
|---|---|
| 다른 이름 | 전달 함수 (transfer function) |
| 선형 함수 | 계산이 단순하지만 복잡한 패턴 학습에 제한적임 |
|---|---|
| 시그모이드 함수 | 출력 범위가 (0, 1) 또는 (-1, 1) 사이로 제한되어 기울기 소실 문제 발생 가능 |
| ReLU 함수 | 경사 소실 문제를 완화하고 학습 속도를 향상시키지만, dying ReLU 문제 발생 가능 |
| tanh 함수 | 시그모이드 함수와 유사하지만 출력 범위가 (-1, 1)로 중심화되어 학습 효율이 높음 |
| 소프트맥스 함수 | 다중 클래스 분류 문제에서 각 클래스에 대한 확률을 출력하는 데 사용됨 |
| GELU 함수 | 정규 분포의 누적 분포 함수를 사용하여 입력에 따라 가중치를 부여하는 함수 |
| 역할 | 신경망의 비선형성을 추가하여 복잡한 패턴 학습을 가능하게 함 |
|---|---|
| 선택 | 신경망의 성능에 큰 영향을 미치므로 문제 유형과 신경망 구조에 따라 적절한 함수를 선택해야 함 |
2. 역사적 배경
활성화 함수는 인공신경망의 역사와 함께 발전해왔다. 인공 신경망 모델에서 인공 뉴런은 하나 이상의 입력을 받아들여 이들의 가중 합에 활성화 함수를 적용하여 출력을 생성한다. 수식으로 표현하면 다음과 같다.
:
여기서 가 활성화 함수이다.
고전적으로는 계단 함수가 제안되었으나, 1986년 데이비드 러멜하트, 제프리 힌튼 등이 역전파 알고리즘을 발표한 이후 시그모이드 함수가 널리 사용되기 시작했다. 현재는 ReLU (램프 함수)가 더 좋은 성능을 보이는 것으로 알려져 있다.
2.1. 초기 모델
--
인공 신경망의 초기 모델에서는 활성화 함수로 다음 함수들이 제안되었다.
* 계단 함수: 1943년 워렌 맥컬록과 월터 피츠가 제안한 최초의 인공신경망 모델인 매컬록-피츠 모델에서 사용되었다.
* 선형 함수: 1958년 프랭크 로젠블랫이 제안한 퍼셉트론 모델에서 사용되었다. 입력값에 바이어스 b를 더한 값을 출력한다.
:
:
:일반적으로 이러한 선형 함수는 회귀 분석에서 사용되며, 이진 분류에서는 출력값의 부호를 통해 0 또는 1로 구분한다.
2.2. 역전파 알고리즘과 시그모이드 함수
데이비드 러멜하트, 제프리 힌튼 등이 역전파 알고리즘을 발표한 1986년 이후, 시그모이드 함수가 활성화 함수로 널리 사용되기 시작했다. 시그모이드 함수는 비교적 단순한 비선형 함수이며 미분 계산이 용이하여 역전파를 동반하는 신경망에서 사용된다. 시뮬레이션 계산 부하를 줄이고 싶었던 초기 연구자들은 네트워크를 수학적으로 다루기 용이한 시그모이드 함수를 앞다투어 채택했다.
:
2.3. ReLU와 현대적 활성화 함수
2011년, 자비에 글로로(Xavier Glorot) 등은 은닉층의 활성화 함수로 max(0, x)를 사용하는 것이 tanh나 소프트플러스보다 개선된다는 것을 발표했다. 이는 일반적으로 램프 함수라고 불리지만, 신경망 세계에서는 ReLU (Rectified Linear Unit, Rectifier영어)라고 불린다. 얀 르쿤이나 제프리 힌튼 등이 잡지 네이처에 쓴 논문에서는 2015년 5월 현재 이것이 최선이라고 하고 있다. 발상으로는 구간 선형 함수를 사용한 1차 스플라인 보간법이며, 선형 보간을 참조하면 관련 내용을 확인할 수 있다. ReLU 함수의 수식은 다음과 같다.
:
2013년에는 max(0.01x, x) 가 LReL (leaky rectified linear)로 명명되었으나, 명명자는 이 활성화 함수를 사용할 의미는 없었다고 보고하고 있다.
2018년에는 x*sigmoid(x) 가 Swish (혹은 SiLU, sigmoid weighted linear)로 명명되었다. 이 함수는 ReLU보다 높은 분류 정확도를 얻을 수 있다고 제시되었다.
3. 활성화 함수의 종류
활성화 함수는 크게 릿지 함수, 방사형 함수, 폴드 함수의 세 가지 범주로 나눌 수 있다.
활성화 함수 가 이면 포화 상태라고 하고, 이면 비포화 상태라고 한다. ReLU와 같은 비포화 활성화 함수는 기울기 소실 문제를 겪을 가능성이 적기 때문에 포화 활성화 함수보다 더 나을 수 있다.
인공 신경망에서 널리 사용되는 모델에서 인공 뉴런은 하나 이상의 입력을 받아들여 (하나 이상의 수상돌기에 해당), 이들의 가중 합으로부터 활성화 함수를 거쳐 출력을 생성한다. 수식으로 표현하면, 아래의 가 활성화 함수이다.
--
:
고전적으로는 계단 함수가 제안되었다. 1986년 역전파 발표 이후에는 시그모이드 함수가 가장 일반적이었다. 현재는 ReLU (램프 함수)가 더 좋다고 여겨진다。활성화 함수는 단조 증가 함수가 사용되는 경우가 많지만, 방사 기저 함수 등도 사용된다.
인공 신경의 활성화 함수는 네트워크를 강화하거나 단순화하는 특성을 가진 것이 선택된다. 실제로 선형 전달 함수를 사용한 다층 퍼셉트론에는 완전히 등가인 단층 네트워크가 반드시 존재한다. 따라서 다층 네트워크의 이점을 살리기 위해서는 비선형 함수가 필수적이다.
다음 단계 함수와 선형 결합 설명에서는 인공 신경에 대한 모든 입력의 가중 합을 u로 나타내고, 입력 수를 n으로 나타낸다.
:
여기서 w는 시냅스 가중치 벡터이고, x는 입력 벡터이다. 이것은 바이어스 항을 더하기 전의 값이다.
3.1. 릿지 함수 (Ridge Function)
릿지 함수는 입력 변수들의 선형 결합에 작용하는 다변수 함수이다.
* 선형 활성화 함수:
* ReLU 활성화 함수:
* 헤비사이드 활성화 함수:
* 로지스틱 활성화 함수:
3.2. 방사형 함수 (Radial Basis Function)
방사 기저 함수(RBF)는 RBF 네트워크에서 사용되는 특별한 종류의 활성화 함수이다. 이러한 함수는 중심 벡터와의 거리에 따라 값을 출력하며, 다양한 형태를 취할 수 있지만 일반적으로 다음 함수 중 하나로 나타난다.
* 가우시안:
* 다중 이차 함수:
* 역 다중 이차 함수:
여기서 는 함수의 중심을 나타내는 벡터이고 와 는 반경의 확산에 영향을 미치는 매개변수이다.
1988년 데이비드 S. 브룸헤드 등은 활성화 함수로 방사 기저 함수를 사용하는 것을 방사 기저 함수 네트워크(RBF 네트워크)라고 명명했다.
3.3. 폴딩 함수 (Folding Function)
폴딩 활성화 함수는 풀링 계층 및 다중 클래스 분류 네트워크의 출력 계층에서 광범위하게 사용된다. 이러한 활성화는 입력을 집계하며, 예를 들어 평균, 최소 또는 최대를 취한다. 다중 클래스 분류에서는 소프트맥스 활성화가 자주 사용된다.
Maxout은 2013년에 이안 J. 굿펠로우(Ian J. Goodfellow) 등이 발표한 활성화 함수이다. 일반적인 활성화 함수는 실수에서 실수로 사상(mapping)하지만, Maxout 활성화 함수는 (선형 변환 후의) 복수의 실수 값에 대한 최댓값을 출력한다. 발표자는 드롭아웃(dropout, 층 내를 완전 연결로 만들지 않는 기법)과의 병용으로 논문을 작성했다.
3.4. 기타 활성화 함수
* 하이퍼볼릭 탄젠트 (Hyperbolic Tangent영어, tanh): 시그모이드 함수를 선형 변환한 형태로, 원점을 지나도록 되어 있다. 1990년대에는 표준 시그모이드 함수보다 tanh가 더 좋다고 제안되었다.
:
* Softsign: 2010년 자비에 글로로(Xavier Glorot) 등의 연구에서 하이퍼볼릭 탄젠트(tanh)와 비슷한 성능을 보였다.
:
--
* Softplus (소프트플러스):
:
* ReLU (램프 함수, 정규화 선형 함수, Rectified Linear Unit, Rectifier영어): 2011년 자비에 글로로(Xavier Glorot) 등은 은닉층의 활성화 함수로 max(0, x)를 사용하는 것이 tanh나 소프트플러스보다 개선된다는 것을 발표했다. 얀 르쿤이나 제프리 힌튼 등이 잡지 네이처에 쓴 논문에서는 2015년 5월 현재 이것이 최선이라고 하고 있다.
:
* LReL (leaky rectified linear영어): 2013년에 max(0.01x, x) 가 LReL로 명명되었다. 단, 명명자는 이 활성화 함수를 사용할 의미는 없었다고 보고하고 있다.
* Swish (혹은 SiLU, sigmoid weighted linear영어): 2018년에 x*sigmoid(x) 가 Swish로 명명되었다. 이 함수는 ReLU보다 높은 분류 정확도를 얻을 수 있다고 제시되었다.
* Snake: 2020년에 류쯔인 등이 제안한 함수는 사인 함수를 사용한 단조 증가 함수이며, ReLU 등에 비해 주기적인 입력에 대해 보다 견고해질 것으로 기대된다.
:
* SIREN (Sinusoidal representation networks영어): 2020년에 빈센트 시츠만(Vincent Sitzmann) 등이 활성화 함수로 삼각 함수를 사용하는 것을 SIREN이라고 명명했다. 이미지나 음성 등의 정보를 신경망에 부호화하는 과제에서 다른 활성화 함수보다 더 높은 정밀도를 얻을 수 있음을 확인했다.
:
4. 활성화 함수의 수학적 속성
활성화 함수는 경험적 성능 외에도 다음과 같은 다양한 수학적 속성을 갖는다.
* 비선형성: 활성화 함수가 비선형인 경우, 2층 신경망은 만능 함수 근사기임을 증명할 수 있다. 이는 만능 근사 정리라고 알려져 있다. 항등 활성화 함수는 이 속성을 만족하지 않는다. 여러 층에서 항등 활성화 함수를 사용하는 경우, 전체 네트워크는 단일 층 모델과 동일하다.
* 범위: 활성화 함수의 범위가 유한할 경우, 기울기 기반 훈련 방법은 패턴 제시가 제한된 가중치에만 유의미한 영향을 미치기 때문에 더 안정적인 경향이 있다. 범위가 무한대일 경우, 패턴 제시가 대부분의 가중치에 유의미한 영향을 미치기 때문에 일반적으로 훈련 효율이 더 높다. 후자의 경우, 일반적으로 더 작은 학습률이 필요하다.
* 연속 미분 가능성: 이 속성은 기울기 기반 최적화 방법을 가능하게 하므로 바람직하다. (ReLU는 연속 미분 가능하지 않으며 기울기 기반 최적화에 일부 문제가 있지만, 여전히 가능하다.) 이진 스텝 활성화 함수는 0에서 미분 가능하지 않으며, 다른 모든 값에 대해 0으로 미분되므로 기울기 기반 방법으로는 진행할 수 없다.
* 포화: 활성화 함수 가 이면 포화 상태라고 한다. 이면 비포화 상태이다. ReLU와 같은 비포화 활성화 함수는 기울기 소실 문제를 겪을 가능성이 적기 때문에 포화 활성화 함수보다 더 나을 수 있다.
5. 출력층의 활성화 함수와 오차 함수
출력층은 은닉층과 구분하여 설계하며, 활성화 함수와 오차 함수는 세트로 설계해야 한다. 문제 종류에 따라 그것들은 다르다. 여기서 제시된 기법은 오차 함수의 편미분이 모두 출력과 목표값의 차이가 되어 다루기 쉽다.
변수 사용법은 다음과 같다.
* : 훈련 데이터의 개수
* : n번째 훈련 데이터의 목표값
* : n번째 훈련 데이터의 출력
5.1. 회귀 (Regression)
회귀 분석에서 사용되는 활성화 함수와 오차 함수는 다음과 같다.
* 활성화 함수: 항등 함수
* 오차 함수: 평균 제곱 오차
* 오차 함수의 편미분:
5.2. 이진 분류 (Binary Classification)
활성화 함수는 시그모이드 함수 ()를 사용하며, 출력은 1개로 확률로 해석한다. 여기서 은 0 또는 1이거나 확률이다. 오차 함수는 최대 우도 추정으로 유도할 수 있다.
* 활성화 함수:
* 오차 함수:
* 오차 함수의 편미분:
5.3. 다중 클래스 분류 (Multi-class Classification)
K개의 클래스로 분류한다. 출력은 K개이며, 총합은 1이고, 해당 클래스에 속할 확률로 해석한다. 는 0 또는 1, 혹은 확률이며, n번째 훈련 데이터가 클래스 k에 속할 때 1이다. . 교차 엔트로피를 사용한다. 이 활성화 함수는 소프트맥스 함수라고 불린다. 이대로 계산하면 부동 소수점 숫자에 들어가지 않아 오버플로가 자주 발생하지만, 에서 모두 같은 수를 빼면 결과가 같아지는 점을 이용하여, 를 모두에서 빼서 활성화 함수를 계산하는 것이 좋다.
* 활성화 함수:
* 오차 함수:
* 오차 함수의 편미분: