시험 전 1장
시험 정보
2026-10-26(월) · 정확한 시각은 공지 확인 (월요일 수업은 12:30 시작)
클로즈드북 · 시험지와 답안지(마킹)로 보는 객관식 약 20문항 · 60~70분 안팎(교수님도 시간 미정) · 개념 설명 / 코드 빈칸 채우기 / 결과 예측
범위 — 2~5주차 자료 — Tensor·GPU, 클래스·nn.Module, Autograd·Loss·Optimizer·학습 5단계, Dataset·DataLoader(Week05는 앞 절반만 준비했다며 '여기까지가 범위'라고 함)
교수님 힌트
- 시험은 클로즈드북 객관식이고 시험지와 답안지가 따로 나가며, 20문항 정도 낼 예정이다. 교수님은 문제를 낼 때 ChatGPT나 Claude 같은 AI의 도움을 받는다며, 학생도 PPT와 ipynb를 AI에 넣어 예상 문제를 뽑아 공부하면 비슷하게 나올 것이라고 했다 (7주차).
- 문제 유형은 세 가지 — 개념 설명, 코드 빈칸 삽입, 실행 결과 예측. 7주차에 샘플 5문제(슬라이싱 shape, 상속·오버라이딩, 모델 정의와 호출 과정, DataLoader 결과, 학습 함수 역할)를 직접 보여 주며 '이 문제가 나온다는 건 아니다'라고 했다.
- 샘플 2번처럼 보기를 하나하나 따져야 하는 '올바른 설명 고르기'는 교수님 본인도 싫어한다고 말했고, 복잡하게 내지는 않겠다는 취지로 말했다. 출력이 여러 개여도 샘플처럼 5지선다에서 고르는 형식이다.
- model(x)를 쓰면 왜 forward가 실행되는지(부모 nn.Module의 __call__), 그리고 nn.Module 상속 → super().__init__() → self에 layer 등록 → forward 구조는 '외우다시피' 알라고 3·4주차에 반복 강조했다. 6주차에는 이 정도 클래스 작성은 시험에 낼 수 있다는 뉘앙스도 있었다.
- gradient 값을 구하는 문제는 chain rule로 풀든 한 번에 미분하든 값만 맞으면 된다(6주차). backward는 grad를 계산·저장만 하고, 값을 바꾸는 건 step이며, grad는 누적되므로 zero_grad가 필요하다는 문장이 핵심이다.
공식 · 숫자
| 항목 | 값 |
|---|---|
| nn.Linear(in, out) 파라미터 수 | weight = out×in, bias = out → 합계 in×out + out. 예 Linear(3,2) = 8 · Linear(5,3) = 18 · Linear(64,16) = 1,040 |
| nn.Linear 모양 | weight (out, in), bias (out,). 입력 (N, in) → 출력 (N, out). 계산은 x @ W.T + b |
| 여러 층 모델의 파라미터 수 | 각 층의 in×out + out을 더한다. TinyMLP(4,8,2) = (32+8) + (16+2) = 58. 수업 PPT의 6×5+3×6+1×3 = 51은 bias 제외 |
| 인덱스와 슬라이싱 | 번호는 0부터. a[1:4]는 1~3번(끝 번호 제외). x[:,1] → 차원이 사라져 (3,), x[:,1:2] → 차원 유지 (3,1) |
| 브로드캐스팅 규칙 | 오른쪽 끝부터 비교해 같거나, 하나가 1이거나, 한쪽에 없으면 가능. (2,3)+(3,) → (2,3) / (4,1)+(1,5) → (4,5) / (2,3)+(2,) → 불가 |
| 이미지 batch 모양 | (N, C, H, W) = (장 수, 채널, 높이, 너비). (8,1,28,28)은 28×28 흑백 8장 |
| cat과 stack | cat은 기존 차원에 이어 붙임(차원 수 그대로), stack은 새 차원을 만들어 쌓음(차원 수 +1). (2,3) 둘 → cat(dim=0) (4,3) / stack (2,2,3) |
| NumPy 변환 | from_numpy · .numpy()는 메모리 공유(한쪽을 바꾸면 같이 바뀜), torch.tensor(arr)는 복사(독립) |
| 학습 5단계 | zero_grad → forward(prediction) → loss → backward → step. batch마다 한 번씩 |
| SGD 업데이트 | w ← w − lr × grad. 예 w=0.7, grad=−2, lr=1 → 2.7 / w=1, grad=−5, lr=0.1 → 1.5. 학습률은 보통 0.001 수준처럼 아주 작게 |
| 외울 gradient 값 | w=3, L=w² → 6 / w=2, L=3w²+1 → 12 / (wx−t)², w=2, x=3, t=10 → −24 / 누적 w=2: 4 → 16 → 32 / W=[1,2,3], X=[2,1,4], L=(W@X)² → [64,32,128] |
| batch 개수와 step 수 | len(loader) = ⌈샘플 수 ÷ batch_size⌉ (drop_last=True면 내림). 10개, batch 4 → 3 ([4,4,2]) 또는 2 ([4,4]). 전체 step = epoch 수 × batch 개수 (90개, batch 20, 30 epoch → 5×30 = 150) |
| epoch 평균 loss | Σ(batch loss × batch 샘플 수) ÷ 전체 샘플 수. 예 (3×4 + 3×4 + 6×2) ÷ 10 = 3.6 |
| MSE 계산 | mean((ŷ−y)²). [3,4] vs [1,5] → 2.5. prediction (3,1)과 target (3,)을 그대로 빼면 3×3으로 브로드캐스팅되어 틀린 값(예 6.0, 맞는 값 2.0) |
| 모양 흐름 예 | Linear(3,2): (4,3) → (4,2) / flatten(start_dim=1) 후 Linear(16,10): (8,1,4,4) → (8,16) → (8,10) / ReLU는 shape 불변 |
용어 · 이름
| 이름 | 뜻 |
|---|---|
| tensor | Tensor (텐서) |
| shape | 모양 (torch.Size) |
| dtype | data type (자료형) |
| device | 장치 |
| ndim / numel() | number of dimensions / elements |
| CPU / GPU | Central / Graphics Processing Unit |
| CUDA | Compute Unified Device Architecture |
| Colab | Google Colaboratory |
| self | 자기 자신 |
| __init__ | initializer (생성자) |
| __call__ | call (호출 가능 객체) |
| super() | super (부모 접근) |
| nn.Module | Neural Network Module |
| nn.Linear | Linear (Fully Connected) layer |
| FC | Fully Connected |
| ReLU | Rectified Linear Unit |
| nn.Parameter | Parameter |
| nn.Sequential | Sequential |
| forward | 순전파 (forward propagation) |
| backward | 역전파 (backpropagation) |
| grad | gradient (기울기) |
| requires_grad | gradient 필요 여부 |
| zero_grad | gradient 초기화 |
| loss | 손실 |
| MSE | Mean Squared Error |
| optimizer | 최적화기 |
| SGD | Stochastic Gradient Descent |
| lr | learning rate (학습률) |
| Dataset | 데이터셋 |
| DataLoader | 데이터 로더 |
| batch_size | 배치 크기 |
| epoch | 에폭 |
| shuffle | 섞기 |
| drop_last | 마지막 버리기 |
시험장에서
쉬운 문제부터 빠르게 → 계산·코드 문제는 손으로 한 줄씩 따라가기 → 서술형은 모르면 정의 한 줄이라도 써서 빈칸 없이.