주제: 1-1 퍼셉트론과 활성함수
문제 설정
신경망의 가장 기본 단위는 퍼셉트론입니다. 퍼셉트론은 입력 벡터를 받아 선형 변환을 수행한 뒤 비선형 함수를 통과시켜 출력 값을 만듭니다.
직관 비유
- x: 입력 정보(특징)
- W: 입력을 중요도에 따라 섞는 가중치
- b: 결과를 미세하게 조정하는 bias
- sigma: 신호를 변형하는 필터(활성함수)
- a: 최종 출력
1. 퍼셉트론 구조
퍼셉트론은 아래 두 단계로 이루어집니다.
입력 x
-> 선형 계산 z = Wx + b
-> 활성함수 a = sigma(z)
-> 출력 a
즉 퍼셉트론은 선형 변환 + 비선형 변환으로 구성됩니다.
왜 필요한가
선형 계산만으로는 복잡한 패턴을 표현하기 어렵습니다. 활성함수가 들어가야 신경망이 복잡한 함수 형태를 학습할 수 있습니다.
주의점
활성함수가 없다면 여러 층을 쌓아도 결국 하나의 선형 변환과 동일해집니다.
2. 선형 연산
퍼셉트론의 첫 단계는 선형 연산입니다.
기호 의미
- x: 입력 벡터 (d 차원)
- W: 가중치 행렬 (k x d)
- b: bias 벡터 (k)
- z: 선형 출력
차원 관계
| 변수 | 차원 |
|---|---|
| x | d |
| W | k x d |
| b | k |
| z | k |
(k x d)(d x 1) -> (k x 1)
3. 활성함수
선형 계산 결과 z를 비선형 함수에 통과시킵니다.
왜 필요한가
비선형성이 없으면 깊은 신경망도 하나의 선형식으로 합쳐집니다.
W2(Wx + b) + b2
= (W2W)x + (W2b + b2)
주의점
활성함수가 없으면 깊은 신경망의 표현력이 크게 떨어집니다.
4. 대표 활성함수
Sigmoid
- 출력 범위: 0~1
- 확률 해석이 필요한 출력에 자주 사용
ReLU
- 계산이 단순하고 빠름
- 딥러닝에서 매우 널리 사용
GELU
- 부드러운 활성화 함수
- Transformer 계열에서 자주 사용
코드-수식 연결
| 수식 | PyTorch 코드 | 설명 |
|---|---|---|
| z = Wx + b | z = W @ x + b |
선형 계산 |
| a = sigma(z) | a = torch.relu(z) |
활성함수 적용 예시 |
| a = sigma(Wx + b) | a = torch.relu(W @ x + b) |
퍼셉트론 연산 |
자주 하는 오해 5개
- 활성함수는 단순한 추가 연산이라고 생각한다
- 선형 레이어만으로 복잡한 패턴을 학습할 수 있다고 생각한다
- 모든 활성함수가 동일한 역할을 한다고 생각한다
- ReLU는 항상 최선의 선택이라고 생각한다
- bias는 중요하지 않다고 생각한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- a = sigma(Wx + b)의 연산 순서는 무엇인가?
- 선형 연산 z = Wx + b의 차원 관계는 무엇인가?
- 활성함수가 왜 필요한가?
- 활성함수가 없으면 신경망에 어떤 문제가 생기는가?
- ReLU와 Sigmoid의 차이는 무엇인가?