반응형

👋 들어가기 전
이전 시간에 배웠던 Numpy의 행렬곱을 통해서, 3층 신경망을 직접 구현해보자.
🏁 학습할 내용
- 표기법
- 3층 신경망 구현
🔎표기법
먼저 간단한 표기법을 정리하고 가자.

- l : 층(레이어) 번호
- j : 앞층 뉴런 인덱스
- i : 다음층 뉴런 인덱스

해석하면, 1층에서 2층으로 갈 때 사용되는 가중치이며, 이전 2번째 뉴런에서, 다음 1층 뉴런에 대해 사용됨
i,j의 위치는 다른데서는 반대로 표기할 수 있음!, 나도 이전 뉴런 인덱스가 왼쪽에 있는게 편한 것 같음..
왜 반대로 쓰지??
또한 편향 = b ,가중치곱의 합 + 편향(a) ,활성화함수(z)는 모두 l과 i만 있음, j는 없음
3️⃣3층 신경망 만들어보기
🎯 목표 신경망

1️⃣ 1층 수식

2️⃣ 2층 수식

3️⃣ 3층 (출력층)

🤖 코드
import numpy as np
import matplotlib.pylab as plt
def sigmoid(x):
return 1 / (1+ np.exp(-x))
def init_network():
network = {}
network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]]) # 2x3, 1층 가중치
network['b1'] = np.array([0.1, 0.2, 0.3]) # 1x3 1층 편향
network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]]) # 3x2, 2층 가중치
network['b2'] = np.array([0.1, 0.2]) # 1x2 2층 편향
network['W3'] = np.array([[0.1, 0.3], [0.2, 0.4]]) # 2x2, 3층 가중치
network['b3'] = np.array([0.1, 0.2]) # 1x2 3층 편향
return network
def forward(network, x):
W1, W2, W3 = network['W1'], network['W2'], network['W3']
b1, b2, b3 = network['b1'], network['b2'], network['b3']
a1 = np.dot(x,W1) + b1 # 1층 행렬곱 + 편향
z1 = sigmoid(a1) # 1층 활성화 함수 = sigmoid
a2 = np.dot(z1,W2) + b2 # 2층 행렬곱 + 편향
z2 = sigmoid(a2) # 2층 활성화 함수 = sigmoid
a3 = np.dot(z2, W3) + b3 # 3층 행렬곱 + 편향
y = a3 # 3층 활성화 함수 = 항등 함수
return y
network = init_network()
x = np.array([1.0, 0.5])
y = forward(network,x)
print(y)
출처
반응형
'AI > 이론' 카테고리의 다른 글
| [신경망-학습] 학습이란? (0) | 2026.01.24 |
|---|---|
| [신경망-MNIST] MNIST 데이터셋 (1) | 2026.01.22 |
| [신경망-활성화 함수] 소프트맥스 함수 (1) | 2026.01.14 |
| [신경망-활성화 함수] 활성화 함수 (0) | 2026.01.12 |
| 퍼셉트론 (0) | 2026.01.10 |