딥러닝 기초 - Foward Propagation

Yujin Jung·2026년 9월 7일

DeepLearning

신경망 Layer와 Shape 변화

예:

3 → 8 → 4 → 2

의미:

  • Input Feature 3개
  • Hidden Feature 8개
  • Hidden Feature 4개
  • Output Feature 2개

각 Layer를 지날 때 x가 누적되는 게 아니라 새로운 값으로 변환된다.

(3,)
 ↓
(8,)
 ↓
(4,)
 ↓
(2,)

Batch가 1개라면:

[1,3]
 ↓
[1,8]
 ↓
[1,4]
 ↓
[1,2]

앞 숫자 = Batch Size
뒤 숫자 = Feature 수


nn.Linear

nn.Linear(3, 4)

의미:

Feature 3개를 받아 Feature 4개로 변환

Weight Shape:

[out_features, in_features]

따라서:

Linear(3,4)
→ Weight Shape = [4,3]
→ Bias Shape   = [4]

ReLU와 Shape

x = self.relu(x)

ReLU는 값은 바꾸지만 Shape는 바꾸지 않는다.

[1,4]
 ↓ ReLU
[1,4]

Bias

기본 Linear 계산:

z = wx + b

PyTorch에서는 기본적으로:

nn.Linear(3, 4, bias=True)

Bias를 사용한다.

Bias 역할:

Weighted Sum 전체를 이동시키는 값

일부 Batch Normalization 구조에서는 Bias를 생략하기도 한다.


Hidden Size

예:

3 → 4 → 2
3 → 6 → 2
3 → 8 → 2

Hidden Size가 증가하면:

  • 중간 Feature 수 증가
  • Weight 수 증가
  • Bias 수 증가
  • 전체 Parameter 수 증가

하지만 마지막 Output Feature가 같으면 최종 Output Shape도 같다.


Width와 Depth

3 → 8 → 2

→ Hidden Size 증가
→ 모델의 폭(Width) 증가

3 → 4 → 4 → 2

→ Hidden Layer 추가
→ 모델의 깊이(Depth) 증가


Parameter

신경망에서 학습되는 대표적인 값:

  • Weight
  • Bias

Parameter 개수 예:

Linear(3,4)

Weight = 4×3 = 12
Bias   = 4

총 16개

.named_parameters()

for name, param in model.named_parameters():

PyTorch nn.Module에 이미 정의되어 있는 메서드.

모델 내부의 학습 가능한 Parameter를 찾아:

이름 + Parameter

를 반환한다.

예:

fc1.weight
fc1.bias
fc2.weight
fc2.bias

.parameters()

model.parameters()

Parameter만 반환한다.

차이:

named_parameters()
→ 이름 + Parameter

parameters()
→ Parameter

Optimizer에서 중요:

optimizer = torch.optim.Adam(
    model.parameters()
)

.numel()

Tensor 안에 있는 전체 원소 개수.

Shape [4,3]
→ 4 × 3
→ 12개

전체 모델 Parameter 수:

sum(
    p.numel()
    for p in model.parameters()
)

nn.Sequential

model = nn.Sequential(
    nn.Linear(3, 4),
    nn.ReLU(),
    nn.Linear(4, 1)
)

Layer를 적어놓은 순서대로 실행해주는 PyTorch 컨테이너.

Input
 ↓
Linear
 ↓
ReLU
 ↓
Linear
 ↓
Output

간단한 모델이라면 별도의 forward()를 직접 작성하지 않아도 된다.


Input / Prediction / Target

Input
→ 모델에 넣는 데이터

Prediction
→ 모델이 계산한 예측값

Target
→ 실제 정답

기본 흐름:

Input
 ↓
Model
 ↓
Prediction
 ↓
Target과 비교

torch.no_grad()

with torch.no_grad():
    prediction = model(x)

의미:

Gradient 계산을 위한 기록을 만들지 않고 계산

주로:

  • 테스트
  • 추론
  • 결과 확인
  • Weight 수동 변경

등에 사용.


.item()

원소 하나짜리 Tensor에서 실제 Python 숫자를 꺼낸다.

tensor([[0.35]])
 ↓
.item()
 ↓
0.35

torch.abs()

절댓값.

difference = torch.abs(
    prediction - target
)

예:

Prediction = 0.3
Target     = 1.0

차이 = |-0.7|
     = 0.7

이번 실습에서는 정식 Loss가 아니라 단순 차이 확인용.


Weight 변경과 Prediction

model[0].weight += 0.1

처럼 Weight를 바꾸면 같은 Input이어도 Prediction이 달라진다.

같은 Input
+
다른 Weight
↓
다른 Prediction

이게 실제 학습 원리와 연결된다.


실제 AI 학습 흐름

Input
 ↓
Model
 ↓
Prediction
 ↓
Target과 비교
 ↓
Loss
 ↓
Gradient
 ↓
Optimizer
 ↓
Weight / Bias 수정
 ↓
다시 Prediction

오늘까지 배운 내용이 다음 단계인:

Loss
→ backward()
→ Gradient
→ Optimizer

로 이어진다.


Batch

여러 데이터를 한꺼번에 모델에 넣는 것.

예:

Input Shape = [3,3]

의미:

데이터 3개
각 데이터 Feature 3개

모델:

3 → 4 → 1

이라면:

[3,3]
 ↓
[3,4]
 ↓
[3,1]

이 된다.


일반 IT · 개발 상식

Grafana

Grafana(그라파나)는 오픈소스 시각화·모니터링 대시보드 도구.

주로:

  • 서버 CPU 사용률
  • 메모리 사용률
  • DB 상태
  • 서비스 응답 시간
  • 로그
  • 에러 발생량
  • 실시간 운영 지표

등을 Dashboard로 본다.

핵심:

Grafana = 데이터를 저장하는 DB라기보다 데이터를 가져와 시각화·모니터링하는 도구


Matplotlib과 Grafana 차이

Matplotlib
→ Python에서 분석 결과 그래프 생성
→ 분석/과제/연구

Grafana
→ 지속적으로 변하는 데이터를 Dashboard로 표시
→ 서비스/서버/운영 모니터링

Graphite

Grafana와 별개의 도구.

Graphite
→ 시계열 데이터 저장·조회

Grafana
→ 데이터를 Dashboard로 시각화

둘을 연결해 사용할 수도 있다.

데이터
 ↓
Graphite
 ↓
Grafana
 ↓
Dashboard

DNS

DNS = Domain Name System

역할:

Domain 이름을 IP 주소로 변환

예:

google.com
 ↓
DNS
 ↓
IP 주소
 ↓
Google 서버 접속

비유:

사람 이름 → 전화번호
Domain → IP 주소
profile
이것저것 다 해보는 컴퓨터학부 학부생

0개의 댓글