2022. 1. 12. 13:52ㆍData Analysis/Deep Learning
안녕하세요.
데이터 분석하는 랩장 대학원생, 석사 3학기 고니입니다. 새해가 밝으면서 제가 랩장이 되었습니다. 얼마 전까지만 해도 새내기 대학원생으로 살아가다가 갑자기 랩장이 되니 기분이 묘하기도 하면서 뿌듯합니다.
딥러닝 관련 마지막 게시글이 작년 5월 11일이라는 사실에 충격을 받았습니다. 반 년이 넘는 시간동안 포스팅을 하지 않고 있었다니 너무나도 반성합니다. 도대체 저는 무엇이 그리도 바빴던 것일까요?😥 자신의 일에도 최선을 다하시며 포스팅도 꾸준히 하시는 분들 정말 존경합니다...! 다들 정말 대단하신 분들 같습니다.
아주 먼 옛날이지만 지난 시간에는 다층 퍼셉트론에 대한 이야기를 나누어보았습니다. 더 나아가 이야기의 말미에는 활성화 함수에 대해 언급했었는데 다들 기억나시나요? 사실 활성화 함수라는 단어는 「대학원생이 알려주는 친절한 딥러닝 (3) - 퍼셉트론의 등장과 인공지능의 1차 겨울」에서 처음으로 언급했습니다.
잠시 그때로 돌아가 볼까요? 당시에 저는 계단 함수처럼 입력된 값을 특정한 값으로 변환시켜주는 함수를 활성화 함수라고 부른다고 표현했었습니다. 이번 시간에는 이 활성화 함수에 대해서 더 깊은 이야기를 나누어보려고 합니다. 도대체 활성화 함수란 무엇이고 어떠한 종류가 있는지 함께 살펴볼까요?
# 활성화 함수란
퍼셉트론의 구조를 살펴보면 아래의 그림과 같습니다. 각각의 Input들이 자신만의 고유한 가중치(Weight)와 곱해진 후 더해집니다. 이렇게 구해진 값 즉, W1*X1 + W2*X2이 Threshold(θ)를 넘는지의 여부를 따집니다. 이때 예를 들어 값이 Threshold보다 크면 1을, 작으면 0을 반환하는 것과 같이 입력 신호를 출력 신호로 변환해주는
함수를 바로 활성화 함수라고 합니다. 활성화 함수에는 계단 함수, 시그모이드 함수, ReLu 함수와 같이 여러 종류가 있습니다. 하나씩 살펴보겠습니다.
# 계단 함수 (Step Function)
계단 함수는 값이 Threshold보다 크면 1을, 작으면 0을 반환하는 활성화 함수입니다. 즉, 출력값이 0 또는 1만 출력되는 형태입니다. 퍼셉트론 알고리즘에서는 바로 이 계단 함수를 활성화 함수로 채택합니다.
계단 함수는 직관적으로 이해하기 쉽다는 장점이 있으나 불연속하다는 단점을 가지고 있습니다. 다음 포스팅에서 다룰 역전파 과정에서 살펴볼 예정이지만 신경망은 미분을 통해 학습을 진행합니다. 그러나 계단 함수는 Threshold에서는 미분이 불가능하다는 문제가 있습니다. 이러한 문제점을 해결할 수 있는 활성화 함수가 바로 시그모이드 함수 (Sigmoid Function) 입니다.
# 시그모이드 함수 (Sigmoid Function)
시그모이드 함수는 0과 1 사이의 값을 출력하는 비선형 함수입니다. 아래 그림과 같이 S자 형태의 그래프를 가지며, 값이 클수록 1에 수렴하고 값이 작을수록 0에 수렴합니다. 0과 1 사이의 값을 가진다는 점은 계단 함수와 동일하지만, 시그모이드 함수는 0 또는 1의 값이 아니라 0과 1 사이의 연속된 값을 출력한다는 점이 다릅니다. 이를 통해 계단 함수의 치명적인 단점이었던 불연속을 해결했습니다. 퍼셉트론과 신경망의 주된 차이는 바로 활성화 함수로 계단 함수를 채택하느냐, 시그모이드 함수를 채택하느냐입니다.
그러나 시그모이드 함수도 치명적인 문제를 가지고 있습니다. 바로, 기울기가 0이 되는 점들이 너무 많다는 것입니다. 기울기 즉, 미분값이 0이 되는 점들이 많다는 것은 다시 말해 미분을 통해 정상적인 학습을 수행하기가 어렵다는 것을 의미합니다. 이는 기울기 소실 즉, Vanishing Gradient 문제로 이어집니다.
# ReLU 함수 (ReLU Function)
시그모이드 함수가 가지고 있던 기울기 소실 문제를 해결할 수 있는 함수가 바로 ReLU 함수입니다. ReLU 함수는 입력값이 0보다 작거나 같을 경우에는 0을 반환하고, 0보다 클 경우에는 입력값을 그대로 반환합니다. 이를 그래프와 수식으로 표현하면 아래와 같습니다.
ReLU 함수는 연산이 빠르고 0보다 큰 값에 대해서는 손실 없이 정보를 전달할 수 있다는 장점이 있으나 0 이하의 값에 대해서는 값이 버려진다는 문제가 있습니다. 이를 해결하기 위해 Leaky ReLU 함수가 고안되어 사용되고 있습니다.
# Leaky ReLU 함수 (Leaky ReLU Function)
Leaky ReLU 함수는 0 이하의 값에서는 값이 버려지는 ReLU 함수의 문제점을 해결하기 위해 고안된 함수입니다. 기본적인 틀은 ReLU 함수와 동일합니다. 따라서 ReLU 함수가 가지고 있는 장점은 Leaky ReLU 함수도 모두 가지고 있습니다. 여기에 추가로 Leaky ReLU 함수는 0 이하의 값에 대해서도 값이 주어진다는 특징을 가지고 있습니다. Leaky ReLU 함수의 수식과 그래프를 살펴보면 이해가 쉽습니다.
Leaky ReLU 함수는 기존의 ReLU 함수의 음수 부분을 보완한 함수입니다. 0보다 작거나 같은 값의 경우에는 입력값에 a를 곱해주는 형태입니다. 일반적으로는 a=0.01을 사용합니다.
# 활성화 함수 요약 정리
활성화 함수란 무엇이며, 어떠한 종류의 활성화 함수들이 있는지 이해가 되셨나요? 여러분의 이해에 조금이나마 도움이 되었으면 합니다. 본 게시글에서 다룬 활성화 함수들 외에도 정말 많은 종류의 활성화 함수들이 존재합니다. 제 글에 대해 추가로 궁금하신 점이나 지적해주실 부분이 있으시다면 언제든지 댓글 부탁드립니다! 다음 시간에는 드디어 딥러닝에서 정말 중요한 부분이라고 할 수 있는 역전파(Backpropagation)를 다룰 예정입니다!
'Data Analysis > Deep Learning' 카테고리의 다른 글
대학원생이 알려주는 친절한 딥러닝 (4) - 다층 퍼셉트론 (0) | 2021.05.11 |
---|---|
대학원생이 알려주는 친절한 딥러닝 (3) - 퍼셉트론의 등장과 인공지능의 1차 겨울 (3) | 2021.04.18 |
대학원생이 알려주는 친절한 딥러닝 (2) - 인공신경망의 출발 (0) | 2021.04.09 |
대학원생이 알려주는 친절한 딥러닝 (1) - 딥러닝이란 (0) | 2021.04.08 |