안녕하세요.
오늘의 파이썬 코딩 독학 주제는 활성화 함수(Activation Function) 입니다.
지난 포스팅에서 활성화 함수에 어떤 것들이 있는지만 알려드렸는데
오늘은 각 활성화 함수가 어떤 역할을 하는지까지 알아보려고 합니다.
1. 활성화 함수란?
인공신경망에서는 각 노드로 데이터가 들어오면
다음 레이어로 전달하기 전에 특정 함수를 거치도록 하는데
이때 데이터들이 거쳐가는 함수를 활성화 함수라고 합니다.
2. 활성화 함수의 종류
활성화 함수는 정말 많은 종류가 있지만
가장 흔히 접할 수 있는 6가지를 우선 정리해보고자 합니다.
(1) 시그모이드(Sigmoid) 함수
로지스틱 함수(Logistic Function)라고도 불리며
0과 1사이의 연속적인 값을 가지는 비선형 함수입니다.
*경사소실(Gradient Vanishing)
아주 작은 값을 가질 경우 0에 근사한 값을 가지게 되며
경사하강법으로 역전파하면 레이어가 많을 수록
그 값이 0으로 수렴하게되므로 sigmoid가 잘 작동하지 않게됩니다.
*편향이동(Bias Shift)
원점이 0이 아닌 0.5이기 때문에 항상 양수를 출력
출력의 가중치 합이 입력의 가중치 합보다 커질 가능성이 높은 현상을 뜻하며
레이어를 지날때마다 값이 더 분산됩니다.
결국 가장 높은 레이어는 활성화 함수의 출력이
0이나 1로 수렴하게되어 경사소실 문제가 발생하게됩니다.
(2) 하이퍼볼릭 탄젠트[Hyperbolic Tangent(tanh)]함수
시그모이드 함수를 변형시켜 얻을 수 있으며
그렇기에 시그모이드 함수와 유사한 특성을 지닙니다.
시그모이드 함수와 가장 큰 차이점은
0과 1사이의 값을 출력하는게 아닌 -1과1사이의 값을 출력한다는 점이며
원점을 중심으로 두므로 편향이동도 없습니다.
다만 값들이 -1이나 1로 수렴하게되므로
경사소실 문제는 여전히 존재합니다.
(3) 정류된 선형 유닛[Rectified Linear Unit(ReLU)] 함수
간단하고 사용이 쉽기때문에
최근 가장 인기있는 활성화함수이며
입력값이 0을 넘으면 그대로 출력값으로 나오고
0을 넘지 않으면 0을 반환해주는 함수입니다.
0이상의 구간에서는 수렴구간이 없어 경사소실 문제가 해결되며
입력값=출력값이므로 계산속도도 빠릅니다.
다만 일부 뉴런이 0만을 출력하게되어 활성화되지않는 문제인
Dying ReLU현상이 발생하게 되는데,
입력값이 0을 넘지 않으면 출력값이 0으로 고정되기 때문에 발생하는 문제입니다.
아래의 두 함수는 ReLU함수를 보완한 함수들입니다.
(3-1) Leaky ReLU 함수
X축이 0이하인 입력값에 대해서
0.01 혹은 α만큼 곱해진 값을 출력하여
Dying ReLU를 해결한 함수입니다.
(3-2) Exponential Linear Unit(ELU) 함수
X축이 0이하인 입력값에 대하여
지수함수를 이용한 값을 반환하여
Dying ReLU를 해결한 함수입니다.
경사소실도 해결가능 하지만
연산량이 많다는 단점이 있습니다.
(4) Maxout 함수
ReLU와 Leaky ReLU를 일반화한 함수로써
W와 b 중에서 큰 값이 나온 것을 사용하는 함수입니다.
여러 단점들을 극복한 함수이지만
복잡한 수식을 사용하기 때문에 계산량이 많다는 단점이 있습니다.
오늘은 활성화함수에 대해 알아보았습니다.
어서 예쩨를 보여드리고싶은데
알아야 되는 지식들이 너무 많네요.
더 분발해보겠습니다.
'코딩 > 텐서플로우' 카테고리의 다른 글
비전공자의 코딩 독학 - 파이썬&텐서플로우(6) <예제2 신경망> (0) | 2020.01.06 |
---|---|
비전공자의 코딩 독학 - 파이썬&텐서플로우(5) <예제1 선형회귀함수> (1) | 2020.01.05 |
비전공자의 코딩 독학 - 파이썬&텐서플로우(3) <선형회귀> (0) | 2019.12.29 |
비전공자의 코딩 독학 - 파이썬&텐서플로우(2) <딥러닝> (0) | 2019.12.28 |
비전공자의 코딩 독학 - 파이썬&텐서플로우(1) (0) | 2019.12.27 |