밑바닥부터 시작하는 딥러닝 1 - 퍼셉트론에서 신경망으로
퍼셉트론에서 신경망으로 넘어갈 때 책은 같은 계산을 여러 식으로 다시 쓴다. 처음 보면 같은 말을 반복하는 것처럼 보인다.
하지만 이 분리는 중요하다. 입력에 가중치를 곱해 더하는 부분과, 그 결과를 최종 출력으로 바꾸는 부분을 분리해야 활성화 함수를 갈아끼울 수 있기 때문이다.
이번 글에서 잡을 것
- `a = w1*x1 + w2*x2 + b`는 입력 신호를 모아 점수로 만드는 단계다.
- `y = h(a)`는 그 점수를 출력 신호로 바꾸는 단계다.
- 퍼셉트론은 `h` 자리에 계단 함수를 쓴다.
- 신경망은 `h` 자리에 시그모이드, ReLU 같은 비선형 함수를 쓴다.
수식 분리는 부품을 나누는 일이다
가중합은 입력 신호를 하나의 숫자로 모으는 과정이다. 활성화 함수는 그 숫자를 다음 뉴런으로 보낼 신호로 바꾸는 과정이다. 이 둘을 나누면 앞부분은 그대로 두고, 뒤쪽 변환 함수만 바꿀 수 있다.
계단 함수와 시그모이드 함수
| 함수 | 출력 | 변화 방식 | 역할 |
|---|---|---|---|
| 계단 함수 | 0 또는 1 | 딱 끊김 | 퍼셉트론의 판단 |
| 시그모이드 | 0과 1 사이 실수 | 부드러운 S자 | 신경망의 연속적인 신호 |
| ReLU | 0 이하이면 0, 양수면 그대로 | 단순하고 빠름 | 현대 딥러닝에서 자주 사용 |
시그모이드라는 이름
시그모이드는 그래프가 S자 모양이라 붙은 이름이다. 중요한 것은 이름보다, 0과 1 사이 값을 부드럽게 출력한다는 성질이다.
왜 비선형 함수여야 할까
활성화 함수가 선형 함수라면 층을 여러 개 쌓아도 결국 하나의 선형 함수로 합쳐진다. 예를 들어 `h(x)=cx`라면 `h(h(h(x)))`는 결국 `c*c*c*x`이고, 이것은 `ax` 하나로 표현할 수 있다.
선형 함수
층을 많이 쌓아도 하나의 층처럼 줄어든다.
비선형 함수
층을 쌓을수록 더 복잡한 관계를 표현할 수 있다.
핵심
신경망의 깊이는 비선형 활성화 함수가 있어야 의미가 생긴다.
지금은 여기까지만 잡아도 되는 것
시그모이드의 미분식이나 ReLU의 모든 변형까지 외울 필요는 없다. 지금은 활성화 함수가 가중합을 출력 신호로 바꾸는 부품이고, 이 부품이 비선형이어야 층을 쌓는 의미가 생긴다는 점을 잡으면 된다.
작은 숫자로 직접 비교해보기
계단 함수와 시그모이드 함수의 차이는 말보다 값을 넣어보면 더 빨리 보인다. 같은 입력을 넣어도 계단 함수는 0 또는 1만 내고, 시그모이드는 중간값을 낸다.
| 입력 a | 계단 함수 | 시그모이드 출력 | 해석 |
|---|---|---|---|
| -2 | 0 | 0에 가까움 | 거의 비활성 |
| 0 | 0 또는 경계 | 0.5 | 판단 경계 |
| 2 | 1 | 1에 가까움 | 강하게 활성 |
import numpy as np
def step_function(x):
return np.array(x > 0, dtype=int)
def sigmoid(x):
return 1 / (1 + np.exp(-x))
a = np.array([-2.0, 0.0, 2.0])
print(step_function(a))
print(np.round(sigmoid(a), 3))
예상 출력
[0 0 1]
[0.119 0.5 0.881]
ReLU는 왜 단순한데 자주 쓰일까
ReLU는 입력이 0보다 크면 그대로 통과시키고, 0 이하면 0으로 막는다. 시그모이드처럼 모든 값을 0과 1 사이로 눌러 담지 않기 때문에 깊은 신경망에서 계산이 단순하고 기울기 흐름도 비교적 유지하기 쉽다.
시그모이드
부드럽지만 큰 양수/음수에서 출력이 0이나 1 근처로 눌린다.
ReLU
양수는 그대로 통과시켜 계산이 단순하다.
주의
음수 입력은 0으로 막히므로 모든 상황의 만능 답은 아니다.
스스로 점검
- `a = wx + b`와 `y = h(a)`가 각각 무슨 역할인지 말할 수 있는가?
- 계단 함수와 시그모이드 함수의 차이를 출력값 관점에서 설명할 수 있는가?
- 선형 활성화 함수를 쓰면 층을 쌓는 의미가 줄어드는 이유를 말할 수 있는가?
이번 글에서 기억할 것
- `a = w1*x1 + w2*x2 + b`는 입력 신호를 모아 점수로 만드는 단계다.
- `y = h(a)`는 그 점수를 출력 신호로 바꾸는 단계다.
- 퍼셉트론은 `h` 자리에 계단 함수를 쓴다.
- 신경망은 `h` 자리에 시그모이드, ReLU 같은 비선형 함수를 쓴다.
다음 글로 이어지는 질문
다음 글에서는 여러 뉴런의 계산을 행렬 곱으로 한 번에 처리하는 방법을 본다.
한 줄 정리: 활성화 함수는 퍼셉트론의 판단식을 신경망으로 확장하기 위해 분리해낸 핵심 부품이다.