[ 활성화 함수 (Activation Function) ? ]
활성화 함수란? 신경망에서 신호의 총 합을 출력 신호로 변환하는 함수입니다. 퍼셉트론은 인간의 뇌의 뉴런을 모방하여 만든 것이며, 뉴런이 말단에서 다음 뉴런으로 전달 될 때, 어떠한 임계값을 기준으로 신호가 전달된다고 합니다. 퍼셉트론은 뉴런과 같이 입력 받은 수치들을 계싼한 후 출력 전에 활성화 함수를 거치게 하여 출력에 변화를 줍니다.
0. 계단함수/선형함수
퍼셉트론의 가장 기본이 되는 활성화 함수 : 계단 함수(Step Function)를 학습하였으며, 선형 함수(Linear Function)입니다.
선형 함수는 미분봐야 계수이므로, 층을 쌓는 것이 무의미해진다는 단점이 있습니다. 비선형함수 중 하나인 계단 함수는 출력을 0과 1의 이진 값만 반환하기에, 값의 크기에 대한 정보가 소실된다는 단점과 불연속 함수라 미분이 불가능하다는 단점이 있습니다. 이러한 단점이 해결된 비선형 함수 중 하나는 시그모이드 함수입니다. 때문에, 계단함수의 각진부분이 매끄럽게 만든 시그모이드가 고안되었습니다.
1. 시그모이드
시그모이드는 계단함수와 다르게 곡선을 그리는 연속된 함수입니다. 또한 0 or 1이 아니고 0~1사이의 실수로 구성(미분값은 0~0.25사이값)되어 있어 데이터의 손실을 줄였습니다. 하지만 시그모이드 함수는 기울기 소실(Vanishing Gradient)문제를 발생시킵니다. 즉, 입력값이 무한으로 커져도 계층이 많을 수록 기울기가 0에 수렴해 버립니다. ( 모든 값이 1보다 작으므로 계층이 많아지면 0.xxxx가 계속 곱해져 결국 0에 수렴 ) 또한 데이터 중심은 0이 아니기에 함수로 들어오는 데이터가 항상 양수이면 기울기는 모두 양수 또는 음수가 됩니다. 하여, 기울기를 업데이트 할 때 지그재그 변동이 생깁니다. 이에 학습은 느려지고 효율성은 감소합니다.
+)역전파로 결과값에 대한 가중치 계산할 때 전달되는 값이 4분의 1씩 감소하는 현상이 발생하여 출력 값과 멀어질 수록 학습이 잘 안됨
기울기를 업데이트 할 때 지그재그 변동이 생깁니다. 이에 학습은 느려지고 효율성은 감소합니다.
2. 하이퍼볼릭 탄젠트 함수
이를 해결하기 위해 도입된 하이퍼 볼릭 탄젠트 함수는 -1~1사이 범위며 시그모이드와 유사한 형태를 가지고 있으며 평균이 0.5인 시그모이드와 다르게 데이터의 평균이 0입니다(반환값의 변화폭이 커짐). 또한 미분값은 0~1사이의 값을 표현 가능하며, 데이터의 중심이 0이 아니여서 발생하는 문제들을 해결하였습니다만 아직 기울기 소실 문제는 존재하였습니다.
2. ReLu 함수
가장 자주 사용하는 활성화 함수인 ReLu는 0이상엔 그대로, 0이하는 0을 출력하는 함수입니다. ReLu는 0~1사이가 아니기에 0이하 정보는 과감히 무시합니다. 이에, 은닉층이 많이 쌓여도 원할한 학습이 가능해 지며 exp()를 사용하지 않아 연산 속도 또한 빨라지고 기울기 소실 문제를 해결하였습니다. 하지만 ReLu는 0이하의 값들에 대해서는 마땅하게 대처하지 못합니다.
2. Leaky ReLu 함수
위의 ReLu 에서 0이하를 대처하지 못 하는 단점을 보안하여 양수는 같지만 음수는 0.01x에 맞게 0에 매우 가까운 작은 값을 출력시키는 함수입니다. 음수에서 대응할 수 있게 된 것 외에는 ReLu와 같습니다.
이외에도 아래와 같은 다양한 활성화 함수가 존재합니다.
(면접용 축약) Gradient Vanishing · 신경망 학습의 기본인 퍼셉트론에서는 Gradient Descent 등으로 기울기로 값을 찾아가는 과정에서 시그모이드 함수라는 활성화 함수가 쓰임 · 하지만 입력값이 커질 수록 기울기가 0에 수렴하여 제대로 오차가 감소되지 않거나, local minima에 빠지는 문제가 발생하기에 Gradient Vanishing 발생하였음 시그모이드 함수 Sigmoid function · 시그모이드는 로지스틱 회귀와 연관된 함수로, 0과 1 사이의 실수를 출력해주는 함수임 · 문제는, 여러번 미분하면 할수록, 미분계수가 0에 수렴되어 버리는 문제가 발생함 Relu 함수 ReLu function · 이를 해결하기 위해 입력 0이하는 0으로, 0 이상은 들어온 값과 같은 값을 출력으로 주는 ReLU 함수를 사용하게 됨 · ReLU를 사용하면, Vanishing Gradient는 발생하지 않지만, 값이 0이하로 들어오면 뉴런도 0이 되어 학습이 안되는 현상이 발생함 · 이를 위해, 0 이하의 값에 0에 가까운 아주 작은 값을 주는 LeakyReLU를 쓰기도 하나 무조건 성능이 좋은 것은 아님 |
'AI' 카테고리의 다른 글
DenseNet (0) | 2022.07.28 |
---|---|
인공지능(AI)의 1차, 2차 겨울 (0) | 2022.05.10 |
[논문 분석] EAST: An Efficient and Accurate Scene Text Detector (0) | 2022.02.20 |
fit, transform, fit_transform (0) | 2022.02.01 |
Gradient Vanishing(기울기 소실) 문제 간단 설명 (0) | 2021.12.26 |