끄적이는 개발노트

260701_강의 정리 (Tensorflow, FFNN) 본문

머신러닝

260701_강의 정리 (Tensorflow, FFNN)

크런키스틱 2026. 7. 1. 18:11
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로 전환하는 것이 일반적인 흐름임
🧠
2. FFNN 구조 — XOR 문제로 보는 은닉층

"왜 은닉층이 필요한가" — 단층 퍼셉트론의 한계를 보여주는 대표 사례

  • XOR 문제는 하나의 직선으로 두 클래스를 나눌 수 없는 대표적인 선형 분리 불가능 문제임
  • 단층 퍼셉트론으로는 해결 불가 → 은닉층을 쌓아 비선형 결정 경계를 만들어야 해결 가능함
  • Fully-connected(완전연결): 각 층의 모든 뉴런이 다음 층의 모든 뉴런과 연결되는 구조
  • Feeding: 준비된 입력 데이터를 신경망에 순차적으로 공급하는 과정
  • 층과 층 사이의 연산은 가중치 행렬과 입력 벡터의 행렬곱으로 이루어짐
Input layer
Hidden layer 1
Hidden layer 2
Hidden layer 3
Output layer
비유
· 은닉층은 원본 좌표계에서는 안 보이던 패턴을 뒤틀어서 잘 보이게 만드는 렌즈와 같음 → XOR도 은닉층을 거치면 직선으로 나눌 수 있는 형태로 변환됨
🎲
3. 가중치 초기화 방법

초기 가중치를 어떻게 설정하느냐에 따라 학습 안정성이 크게 달라짐

초기화 방법궁합이 좋은 activation특징
GlorotNormalsigmoid, tanh입력·출력 분산을 균형 있게 유지 (Xavier 초기화)
HeNormalReLU 계열ReLU의 절반이 0이 되는 특성을 고려해 분산을 더 크게 설정
LeCunNormalSELUself-normalizing 신경망에서 안정적인 분산 유지에 사용됨
선택 기준
· activation 함수와 초기화 방법을 잘못 조합하면 gradient vanishing/exploding이 발생하기 쉬움 → 사용하는 activation에 맞는 초기화 방법을 선택하는 것이 중요함
🎯
4. 출력층 Activation과 Cost Function

문제 유형(회귀/분류)에 따라 출력층 activation과 cost function이 짝을 이뤄 결정됨

문제 유형Output activationCost function
회귀IdentityMSE
이진분류Logistic(sigmoid)Binary Cross-Entropy
다중분류SoftmaxCategorical 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는 그 미분값으로 가중치를 실제로 갱신하는 알고리즘 — 역할이 다름
🖥️
6. 신경망과 행렬 연산 (CPU → GPU)

신경망 연산은 결국 대규모 행렬곱이며, 이를 빠르게 처리하기 위해 GPU 병렬 연산 계층을 활용함

  • CUDA: GPU에서 범용 병렬 연산을 수행하도록 해주는 저수준 플랫폼
  • cuDNN: CUDA 위에서 동작하는 신경망 연산(합성곱, 행렬곱 등) 전용 최적화 라이브러리
  • Graph mode에서는 연산 그래프가 CPU와 GPU 등 여러 디바이스에 분산 배치되어 Send/Recv 방식으로 데이터를 주고받으며 실행됨
비유
· 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