끄적이는 개발노트
260701_강의 정리 (Tensorflow, FFNN) 본문
728x90
deep learning · tensorflow
TensorFlow 2.x와 FFNN 구조 정리
- Eager mode와 Graph mode의 차이 및 사용 배경
- XOR 문제로 보는 은닉층의 필요성과 완전연결 구조
- 출력층 activation·cost function 매칭과 학습 파이프라인 전체 흐름
1. 실행 모드 — Eager vs Graph
"연산을 즉시 실행할 것인가, 그래프로 미리 짜둘 것인가" — TensorFlow 2.x 실행 방식의 핵심 선택
- TensorFlow 2.x는 Keras를 기본 API로 채택함
- Dynamic mode(eager mode): 연산을 코드 작성 즉시 실행 → 디버깅이 쉬워 기본 모드로 사용됨
- Static mode(graph mode): tf.function으로 연산을 그래프 형태로 컴파일 → 실행 속도가 최적화됨
- PyTorch도 compile을 지원하며 유사한 그래프 최적화 방식을 제공함
💡 새 개념
Eager mode 즉시 실행 모드
- 한 줄씩 코드가 실행되는 순간 바로 계산됨
- Python 인터프리터처럼 동작해 디버깅이 직관적임
print()로 중간 텐서 값을 바로 확인할 수 있는 것과 같은 방식
Graph mode 그래프 컴파일 모드
- 연산들을 먼저 그래프로 구성한 뒤 한 번에 실행됨
- 불필요한 연산 제거, 병렬화 등 최적화가 가능해 속도가 빠름
여행 계획 전체를 미리 짜두고 한 번에 실행하는 것 vs 그때그때 즉흥적으로 움직이는 것의 차이
참고
· 개발·디버깅 단계는 eager mode, 배포·성능 최적화 단계는 graph mode로 전환하는 것이 일반적인 흐름임
· 개발·디버깅 단계는 eager mode, 배포·성능 최적화 단계는 graph mode로 전환하는 것이 일반적인 흐름임
2. FFNN 구조 — XOR 문제로 보는 은닉층
"왜 은닉층이 필요한가" — 단층 퍼셉트론의 한계를 보여주는 대표 사례
- XOR 문제는 하나의 직선으로 두 클래스를 나눌 수 없는 대표적인 선형 분리 불가능 문제임
- 단층 퍼셉트론으로는 해결 불가 → 은닉층을 쌓아 비선형 결정 경계를 만들어야 해결 가능함
- Fully-connected(완전연결): 각 층의 모든 뉴런이 다음 층의 모든 뉴런과 연결되는 구조
- Feeding: 준비된 입력 데이터를 신경망에 순차적으로 공급하는 과정
- 층과 층 사이의 연산은 가중치 행렬과 입력 벡터의 행렬곱으로 이루어짐
Input layer
→
Hidden layer 1
→
Hidden layer 2
→
Hidden layer 3
→
Output layer
비유
· 은닉층은 원본 좌표계에서는 안 보이던 패턴을 뒤틀어서 잘 보이게 만드는 렌즈와 같음 → XOR도 은닉층을 거치면 직선으로 나눌 수 있는 형태로 변환됨
· 은닉층은 원본 좌표계에서는 안 보이던 패턴을 뒤틀어서 잘 보이게 만드는 렌즈와 같음 → XOR도 은닉층을 거치면 직선으로 나눌 수 있는 형태로 변환됨
3. 가중치 초기화 방법
초기 가중치를 어떻게 설정하느냐에 따라 학습 안정성이 크게 달라짐
| 초기화 방법 | 궁합이 좋은 activation | 특징 |
|---|---|---|
| GlorotNormal | sigmoid, tanh | 입력·출력 분산을 균형 있게 유지 (Xavier 초기화) |
| HeNormal | ReLU 계열 | ReLU의 절반이 0이 되는 특성을 고려해 분산을 더 크게 설정 |
| LeCunNormal | SELU | self-normalizing 신경망에서 안정적인 분산 유지에 사용됨 |
선택 기준
· activation 함수와 초기화 방법을 잘못 조합하면 gradient vanishing/exploding이 발생하기 쉬움 → 사용하는 activation에 맞는 초기화 방법을 선택하는 것이 중요함
· activation 함수와 초기화 방법을 잘못 조합하면 gradient vanishing/exploding이 발생하기 쉬움 → 사용하는 activation에 맞는 초기화 방법을 선택하는 것이 중요함
4. 출력층 Activation과 Cost Function
문제 유형(회귀/분류)에 따라 출력층 activation과 cost function이 짝을 이뤄 결정됨
| 문제 유형 | Output activation | Cost function |
|---|---|---|
| 회귀 | Identity | MSE |
| 이진분류 | Logistic(sigmoid) | Binary Cross-Entropy |
| 다중분류 | Softmax | Categorical Cross-Entropy |
💡 새 개념
logit 로짓
- activation 함수를 통과하기 전, 은닉층 출력이 선형결합된 원시 값
softmax를 적용하기 직전의 점수 벡터가 logit
MSE = (1/N) Σ (ŷ − y)²
N
배치에 포함된 샘플 개수
ŷ
모델이 예측한 값
y
실제 정답값
→ 예측과 정답의 차이를 제곱해 평균낸 값. 오차가 클수록 벌점이 기하급수적으로 커짐
H(p, q) = − Σ p(x) log(q(x))
p(x)
실제 정답 분포 (one-hot 라벨)
q(x)
모델이 예측한 확률 분포
→ 정답 클래스에 모델이 낮은 확률을 줄수록 손실이 커짐. 다중분류에서 softmax 출력과 함께 사용됨
5. 학습 파이프라인
데이터가 들어와서 가중치가 업데이트되기까지의 한 사이클
1
Epoch + Batchsize 설정
전체 데이터를 몇 번 반복 학습할지(epoch), 한 번에 처리할 데이터 크기(batchsize)를 정함
2
Forward pass
입력이 층을 거쳐 출력까지 전달되며 예측값이 계산됨
3
GradientTape로 미분 계산
forward 연산 과정을 기록해두었다가, cost function 기준으로 각 가중치에 대한 gradient(기울기)를 자동 계산함
4
Optimizer가 가중치 업데이트
Adam, SGD 등 Optimizer(solver)가 계산된 gradient를 바탕으로 미니배치 단위 backpropagation을 수행, 실제 가중치 값을 조정함
구분 포인트
· GradientTape는 미분값을 계산하는 도구, Optimizer는 그 미분값으로 가중치를 실제로 갱신하는 알고리즘 — 역할이 다름
· GradientTape는 미분값을 계산하는 도구, Optimizer는 그 미분값으로 가중치를 실제로 갱신하는 알고리즘 — 역할이 다름
6. 신경망과 행렬 연산 (CPU → GPU)
신경망 연산은 결국 대규모 행렬곱이며, 이를 빠르게 처리하기 위해 GPU 병렬 연산 계층을 활용함
- CUDA: GPU에서 범용 병렬 연산을 수행하도록 해주는 저수준 플랫폼
- cuDNN: CUDA 위에서 동작하는 신경망 연산(합성곱, 행렬곱 등) 전용 최적화 라이브러리
- Graph mode에서는 연산 그래프가 CPU와 GPU 등 여러 디바이스에 분산 배치되어 Send/Recv 방식으로 데이터를 주고받으며 실행됨
비유
· CUDA가 '공사 현장의 인부들'이라면, cuDNN은 '신경망 공사에 특화된 숙련 인부팀' — 같은 GPU 자원을 더 효율적으로 씀
· CUDA가 '공사 현장의 인부들'이라면, cuDNN은 '신경망 공사에 특화된 숙련 인부팀' — 같은 GPU 자원을 더 효율적으로 씀
7. 데이터 형식과 플랫폼
데이터를 저장하고 모델에 공급하는 방식에 관한 개념들
💡 새 개념
TFRecord TensorFlow 저장 포맷
- 대용량 데이터를 효율적으로 저장·순차 읽기 하기 위한 TensorFlow 전용 바이너리 포맷
대량의 이미지·텍스트 데이터를 낱개 파일 대신 하나의 압축 묶음으로 관리하는 방식
Tensor ↔ numpy 배열 상호 변환
- TensorFlow의 Tensor와 numpy 배열은 서로 변환 가능한 자료구조임
- TFRecord와는 별개의 개념 — 하나는 저장 포맷, 하나는 연산용 자료구조
- End to end platform: 데이터 입력부터 모델 학습, 배포까지 하나의 플랫폼(TensorFlow)에서 처리 가능함을 의미
728x90
'머신러닝' 카테고리의 다른 글
| 260702_강의 정리 (Optimizer) (0) | 2026.07.02 |
|---|---|
| 260702_강의 정리 (Tensorflow, Keras) (0) | 2026.07.02 |
| 260616_강의 정리 (신경망) (0) | 2026.06.16 |
| 260615_강의 정리 (Text Mining) (0) | 2026.06.15 |
| 260612_강의 정리 (SVM) (0) | 2026.06.12 |