매일공부

[딥러닝] 퍼셉트론부터 활성화 함수까지 — 개념 정리 본문

IT/ML

[딥러닝] 퍼셉트론부터 활성화 함수까지 — 개념 정리

julian 2023. 4. 25. 23:41

퍼셉트론(Perceptron) — 가장 단순한 신경망

퍼셉트론은 입력값에 각각 가중치를 곱해서 더한 뒤, 그 합이 특정 기준(임계치)을 넘는지에 따라 켜짐/꺼짐을 결정하는 가장 기본적인 신경망 단위다.

  1. 입력 데이터 각각에 가중치를 곱하고, 그 결과를 다 더한다
  2. 활성화 함수가 이 합계를 임계치와 비교한다
  3. 임계치보다 크면 활성화(1), 작으면 비활성화(0)

퍼셉트론 하나로는 선형으로 나뉘는 문제만 풀 수 있다. 데이터를 직선 하나로 두 그룹으로 나눌 수 있는 경우에만 잘 작동하고, XOR처럼 직선 하나로 못 가르는 문제는 풀 수 없다.

이 한계를 넘어서려면 퍼셉트론을 여러 개 쌓으면 된다. 퍼셉트론 두 개를 병렬로 결합하면 원래 공간을 새로운 좌표계로 변환할 수 있고, 그렇게 변환된 공간에서는 원래 직선 하나로 못 나누던 데이터도 나눌 수 있게 된다. XOR 게이트도 기존 AND/NAND/OR 게이트의 조합으로 만들 수 있는 것처럼, 퍼셉트론도 층을 쌓아가면서 점점 복잡한 경계를 표현할 수 있다.

신경망을 층으로 쌓으면 — MLP, DNN

  • MLP(다층 퍼셉트론): 입력층과 출력층 사이에 은닉층을 1개 이상 두는 구조. 비선형 문제를 풀 수 있다
  • DNN(심층 신경망): 은닉층이 2개 이상인 구조. 대용량 데이터에도 적용 가능하고, 여기서 더 확장된 형태가 CNN(이미지), RNN/LSTM(순서가 있는 데이터, 단기/장기 기억), GAN(생성·복원) 등이다

딥러닝 모델을 만드는 일반적인 흐름

  1. 데이터 로드 → 전처리(이상치·결측치 처리, 정규화) → 학습셋/검증셋 분할
  2. 층 구성 (입력층 → 은닉층 → 출력층 순서로 쌓기)
  3. 학습 방식 설정 — 오차를 어떻게 계산하고, 어떻게 줄여나갈지 정의
  4. 모델 학습 실행
  5. 검증셋으로 성능 평가
  6. 실제 데이터에 적용해서 예측

회귀 문제 — 오차를 최소화하는 직선 찾기

가장 단순한 예로, 공부 시간과 성적의 관계를 직선(성적 = 기울기 × 공부시간 + 절편)으로 표현하는 문제를 생각해보자. 이 직선의 기울기와 절편은 최소제곱법으로 구할 수 있다 — 실제값과 예측값의 차이(오차)의 제곱합이 최소가 되는 지점을 찾는 방식이다.

변수가 여러 개(예: 공부 시간 + 과외 시간 → 성적)로 늘어나면 각 변수마다 기울기가 하나씩 붙는 형태로 확장된다. 이때 오차를 측정하는 방법으로 MAE, MSE, RMSE 같은 지표를 쓴다.

신경망 관점에서는 이 과정을 이렇게 본다:

  1. 임의의 기울기·절편으로 선을 긋고 예측한다
  2. 실제값과 예측값의 오차를 계산한다
  3. 오차가 최소가 되도록 기울기와 절편을 반복적으로 업데이트한다 — 미분 기울기를 이용하는 경사하강법을 쓴다

분류 문제 — 시그모이드와 크로스 엔트로피

합격/불합격처럼 결과가 두 갈래로 나뉘는 문제는, 직선이 아니라 **S자 곡선(시그모이드)**으로 표현하는 게 자연스럽다. 이 곡선의 형태(경사도, 위치)도 회귀와 마찬가지로 경사하강법으로 찾아낼 수 있다.

분류 문제에서 오차를 계산할 때는 "실제값과 예측값이 둘 다 1이거나 둘 다 0이면 오차가 0에 가깝다"는 성질을 로그함수로 정의한 **크로스 엔트로피(cross entropy)**를 오차 함수로 쓴다.

  • 이진 분류 (둘 중 하나): binary crossentropy
  • 다항 분류 (여러 개 중 하나): categorical crossentropy

활성화 함수(Activation Function)

활성화 함수는 은닉층과 출력층의 뉴런에서, 입력을 받아 어떤 값을 출력할지 결정하는 함수다. 생물학적 신경세포가 전위가 일정 수준을 넘어야 다음 세포로 신호를 전달하는 것을 본떴다고 알려져 있다.

가장 단순한 형태인 **계단 함수(step function)**는 출력값이 0 아니면 1이 되도록 딱 잘라 결정한다. 다만 신경망을 실제로 학습시키려면 미분이 가능한 매끄러운 함수여야 해서, 실무에서는 비선형이면서 매끄러운 함수들을 쓴다.

시그모이드(Sigmoid) — 그리고 기울기 소실 문제

시그모이드는 입력을 0~1 사이 값으로 부드럽게 압축해주는 함수다. 신경망은 다음 순서로 학습한다:

  1. 입력을 층마다 통과시키며 예측값을 만든다 (순전파, forward propagation)
  2. 예측값과 실제값의 오차를 손실 함수로 계산한다
  3. 그 손실을 미분해서 기울기(gradient)를 구한다
  4. 구한 기울기로 출력층에서 입력층 방향으로 가중치를 업데이트한다 (역전파, backpropagation) — 이때 경사하강법을 쓴다

문제는 시그모이드 함수를 미분한 값이 최대 0.25밖에 안 되고, 출력값이 0이나 1에 가까워질수록(그래프 양 끝) 기울기가 거의 0에 가까워진다는 점이다. 은닉층을 여러 겹 쌓으면, 역전파 과정에서 각 층마다 0.25 이하의 작은 값이 계속 곱해지면서 앞쪽 층(입력에 가까운 층)에는 기울기가 거의 전달되지 않는다. 이게 기울기 소실(Vanishing Gradient) 문제다. 그래서 시그모이드는 은닉층에서는 잘 쓰지 않고, 주로 이진 분류의 출력층에서만 쓴다.

하이퍼볼릭 탄젠트(tanh)

tanh는 입력을 -1~1 사이 값으로 변환한다. 시그모이드처럼 출력이 -1이나 1에 가까워지면 여전히 기울기 소실 문제가 생기지만, 0을 중심으로 대칭이고 미분했을 때 최댓값이 1(시그모이드는 0.25)이라 전반적으로 더 큰 기울기를 전달할 수 있다. 그래서 은닉층에서는 시그모이드보다 tanh가 좀 더 선호된다.

ReLU(Rectified Linear Unit)

ReLU는 훨씬 단순하다 — 음수를 입력하면 0을, 양수를 입력하면 입력값 그대로를 반환한다. 특징:

  • 입력값이 특정 양수값에 수렴(포화)하지 않는다
  • 0 이상의 입력에서는 미분값이 항상 1이라, 기울기가 층을 거쳐도 잘 줄어들지 않는다
  • 시그모이드/tanh처럼 복잡한 연산이 필요 없어서 계산 속도도 빠르다
  • 깊은 신경망의 은닉층에서 시그모이드보다 훨씬 잘 작동한다

다만 단점도 있다: 입력이 음수인 구간에서는 기울기(미분값)가 항상 0이라, 한 번 그 상태에 빠진 뉴런은 다시 회생하기 어렵다. 이걸 죽은 렐루(dying ReLU) 문제라고 부른다.

Leaky ReLU

죽은 렐루 문제를 보완한 변형이다. 입력이 음수일 때 0이 아니라 아주 작은 값(예: 입력값 × 0.001 같은 수준)을 반환하도록 만들어서, 음수 구간에서도 기울기가 완전히 0이 되지 않게 한다. 이때 음수 구간의 기울기 정도를 정하는 계수를 흔히 α(알파)라고 부르고, 보통 0.01 같은 작은 값을 쓴다. 입력이 음수여도 기울기가 0이 아니므로, ReLU와 달리 뉴런이 완전히 죽지 않는다.

순전파와 역전파 — 한 사이클 요약

  1. 순전파: 입력층에서 출력층 방향으로 데이터가 흐르며, 각 층에서 가중합과 활성화 함수를 거쳐 다음 층으로 값이 전달된다
  2. 오차 계산: 최종 출력과 실제값을 비교해서 오차를 구한다
  3. 역전파: 그 오차를 출력층에서 입력층 방향으로 거슬러 보내면서, 각 층의 가중치를 오차에 대한 기울기만큼 조정한다 (뒤쪽 층 가중치부터 먼저, 그다음 앞쪽 층 순서로)

이 순전파 → 오차 계산 → 역전파 과정을 반복하면서 신경망은 점점 더 정확한 가중치를 찾아간다.


예전에 딥러닝을 공부하면서 개인적으로 정리해뒀던 개념 노트를 다시 풀어서 쓴 글입니다.

Comments