끄적이는 개발노트

260616_강의 정리 (신경망) 본문

머신러닝

260616_강의 정리 (신경망)

크런키스틱 2026. 6. 16. 10:00
728x90

 

machine learning · neural network
인공신경망(ANN) 정리
  • 퍼셉트론부터 딥러닝까지, 신경망의 역사적 흐름 이해
  • 순전파·역전파 메커니즘과 가중치 학습 원리
  • 활성화 함수, Solver, scikit-learn MLP 파라미터 정리
🧠
1. 인공신경망의 역사적 흐름

"왜 딥러닝이 필요해졌는가" — 단층 모델의 한계에서 시작된 발전 과정

1
인공신경망(ANN) 등장
인간 뇌의 뉴런 구조를 수학적으로 모방한 계산 모델 제안. 입력 신호를 받아 가중치를 곱하고 활성화 함수를 통해 출력을 냄
2
XOR 문제 발견 — 단층 퍼셉트론의 한계
단층 퍼셉트론(하나의 선형 경계)으로는 XOR 같은 비선형 패턴을 분류할 수 없음이 증명됨. 입력 공간을 직선 하나로 나눌 수 없는 구조적 문제
3
다층 신경망(MLP) 등장
은닉층(Hidden Layer)을 추가해 비선형 경계를 학습 가능하게 됨. 역전파 알고리즘으로 각 층의 가중치를 자동 조정
4
딥러닝(Deep Learning) — 층이 깊어짐
은닉층을 여러 겹 쌓아 고수준의 추상적 특징을 자동 학습. 이미지·음성·자연어 처리에서 획기적 성능 달성
5
기울기 소실 문제 발생
층이 깊어질수록 역전파 시 기울기가 0에 가까워지며 앞쪽 층의 학습이 거의 일어나지 않는 현상. 특히 Sigmoid·Tanh 함수에서 심각하게 발생
6
ReLU · ResNet 등으로 해결
ReLU 활성화 함수와 잔차 연결(ResNet)이 기울기 소실 문제를 완화. 수십~수백 층 학습이 현실적으로 가능해짐
💡 새 개념
퍼셉트론 Perceptron
  • 입력값에 가중치를 곱해 합산 후, 임계값 초과 여부로 0 또는 1을 출력하는 가장 단순한 인공 뉴런 모델
  • 단층(Single-layer)은 선형 분리 가능한 문제만 해결 가능
AND, OR 문제는 풀 수 있지만 XOR은 불가 — 직선 하나로 두 클래스를 나눌 수 없기 때문
기울기 소실 Vanishing Gradient
  • 역전파 과정에서 기울기가 층을 거슬러 올라갈수록 점점 작아지는 현상
  • 앞쪽(입력에 가까운) 층의 가중치가 거의 갱신되지 않아 학습이 멈춤
촛불 빛이 방을 여러 개 통과할수록 희미해지는 것처럼, 신호(기울기)도 층을 거칠수록 약해짐
🔗
2. 다층 퍼셉트론(MLP) 구조

"층마다 행렬 곱셈이 일어난다" — 입력이 변환되며 출력에 도달하는 과정

  • 입력층(Input Layer) — 원본 특징(feature)을 받는 층. 노드 수 = 특징 수
  • 은닉층(Hidden Layer) — 비선형 변환이 일어나는 핵심 층. 층 수와 노드 수가 모델 복잡도를 결정
  • 출력층(Output Layer) — 최종 예측값(분류 확률 또는 회귀 수치)을 내보내는 층
  • 각 층 사이의 연결은 가중치 행렬(Weight Matrix)로 표현 — 행렬 A, B, C의 연속 곱셈
  • 활성화 함수를 거쳐야 층 사이에 비선형성이 생김 — 없으면 아무리 층을 쌓아도 선형 모델과 동일
행렬로 보는 MLP
· 층 A (4×4) × 층 B (4×4) = 층 C (4×4)
· 각 행렬의 원소가 학습 대상 가중치 — 학습이란 이 숫자들을 최적화하는 과정
💡 새 개념
활성화 함수 Activation Function
  • 노드의 출력값을 비선형으로 변환해 신경망이 복잡한 패턴을 학습할 수 있게 만드는 함수
  • 활성화 함수가 없으면 수백 층을 쌓아도 결국 하나의 선형 변환과 같음
전구의 스위치처럼 "이 신호가 충분히 강한가?"를 판단해 다음 층으로 전달 여부를 결정
3. 순전파와 역전파

"앞으로 계산하고, 뒤로 수정한다" — 신경망 학습의 핵심 메커니즘

▸ 순전파 (Forward Propagation)
  • 입력 데이터가 입력층 → 은닉층 → 출력층 방향으로 흐르며 예측값 ŷ 생성
  • 각 층에서 가중치 곱 + 활성화 함수 적용
  • 최종 출력과 실제 정답을 비교해 비용함수(Cost Function) 계산
Cost = (ŷ − y)²
ŷ = 모델 예측값  |  y = 실제 정답값  |  두 값의 차이의 제곱 → 오차 크기
▸ 역전파 (Backpropagation)
  • 비용함수의 기울기(gradient)를 출력층 → 입력층 방향으로 전달하며 가중치 수정
  • 연쇄 법칙(Chain Rule)을 적용해 각 가중치가 오차에 얼마나 기여했는지 계산
  • 계산된 기울기에 학습률(Learning Rate)을 곱해 가중치를 조금씩 갱신
  • 이 과정이 자동으로 반복되며 모델이 점점 정답에 가까워짐
∂E/∂w = (∂E/∂ŷ) × (∂ŷ/∂w)
∂E/∂w : 가중치 w가 오차 E에 미치는 영향
∂E/∂ŷ : 예측값이 오차에 미치는 영향  ×  ∂ŷ/∂w : 가중치가 예측값에 미치는 영향
💡 새 개념
연쇄 법칙 Chain Rule
  • 합성 함수의 미분을 각 부분의 미분 곱으로 나타내는 미적분 규칙
  • 신경망에서 "출력의 변화 → 은닉층 출력의 변화 → 가중치의 변화"를 연결해 역방향으로 기울기를 전달
기차 칸이 연결된 것처럼, 앞 칸(출력)이 흔들리면 뒤 칸(가중치)까지 얼마나 흔들리는지 계산
학습률 Learning Rate
  • 역전파로 계산된 기울기를 가중치에 얼마나 반영할지 결정하는 하이퍼파라미터
  • 너무 크면 최솟값을 지나쳐 발산, 너무 작으면 학습이 매우 느림
산을 내려올 때 한 걸음의 크기 — 너무 크면 넘어지고, 너무 작으면 밤새 걸어도 도착 못 함
비틀거림(Oscillation) 문제
· 학습률이 너무 크거나 경사가 가파른 곳에서 가중치가 최솟값 주변을 왔다 갔다 하며 수렴하지 못하는 현상
· 모멘텀(Momentum)으로 이전 방향을 일부 유지하게 해 진동을 줄임
입력 데이터
순전파 (예측)
비용 계산
역전파 (기울기)
가중치 갱신
📈
4. 활성화 함수 종류

"어떤 함수로 비선형성을 추가할 것인가" — 선택에 따라 학습 속도와 안정성이 달라짐

함수명 수식 출력 범위 특징 및 용도
ReLU max(0, x) [0, ∞) 가장 많이 사용. 기울기 소실 완화. 은닉층 기본 선택
Identity f(x) = x (−∞, ∞) 변환 없음. 회귀 출력층에서 사용
Logistic (Sigmoid) 1 / (1 + e⁻ˣ) (0, 1) 확률 출력. 기울기 소실 취약. 이진 분류 출력층
Tanh (eˣ − e⁻ˣ) / (eˣ + e⁻ˣ) (−1, 1) Sigmoid보다 기울기 소실 덜 심함. 0 중심이라 학습 안정
기울기 소실과 활성화 함수
· Sigmoid·Tanh는 입력이 크거나 작을 때 기울기가 거의 0 → 깊은 망에서 학습 안 됨
· ReLU는 양수 구간에서 기울기가 항상 1 → 기울기 소실 문제를 크게 완화
⚙️
5. Solver (최적화 알고리즘)

"역전파로 기울기를 구한 뒤, 어떻게 가중치를 갱신할 것인가"

adam Adam (Adaptive Moment Estimation)
각 가중치마다 학습률을 자동으로 조정하는 가장 널리 쓰이는 옵티마이저
  • 모멘텀(1차 모멘트)과 기울기 제곱의 누적(2차 모멘트)을 함께 추적
  • 파라미터 beta_1(기본 0.9), beta_2(기본 0.999)로 각 모멘트의 감쇠율 조정
  • 대부분의 상황에서 기본값으로도 좋은 성능 — scikit-learn MLP의 기본 solver
sgd SGD (Stochastic Gradient Descent)
전체 데이터 대신 일부(mini-batch)만 사용해 빠르게 기울기를 계산하고 가중치를 갱신
  • momentum(기본 0.9) — 이전 갱신 방향을 일부 유지해 진동 억제
  • nesterovs_momentum=True — 미래 위치를 예측해 더 정확한 기울기 계산
  • learning_rateconstant / invscaling / adaptive 중 선택
lbfgs L-BFGS (준 뉴턴 방법)
2차 미분(헤시안 행렬) 근사를 활용해 더 정교하게 최솟값 방향을 탐색
  • 소규모 데이터셋에서 빠르게 수렴
  • 대규모 데이터에는 메모리 부담이 커 비효율적
Solver 선택 기준
· 데이터가 많고 딥러닝 수준의 복잡한 모델 → adam
· 학습률을 직접 세밀하게 조정하고 싶을 때 → sgd
· 소규모 데이터, 빠른 수렴이 필요할 때 → lbfgs
📉
6. 손실 함수와 경사하강법

"예측이 얼마나 틀렸는지 측정하고, 그 방향으로 모델을 수정한다"

▸ Loss Function vs Cost Function
  • Loss Function (손실 함수) — 데이터 샘플 하나에 대한 예측 오차를 측정하는 함수
  • Cost Function (비용 함수) — 전체 훈련 데이터의 손실을 평균낸 값 — 모델 전체의 성능 지표
  • 학습 목표 = Cost Function을 최소화하는 가중치 찾기
직관적 비유
· Loss = 시험 문제 하나를 틀린 점수
· Cost = 전체 시험의 평균 오답률 — 이 값을 줄이는 방향으로 공부(학습)함
▸ 문제 유형별 손실 함수
분류 Cross Entropy Loss (교차 엔트로피)
"예측 확률이 정답에서 얼마나 멀리 떨어져 있는가"를 로그 스케일로 측정
  • 모델이 출력한 확률값과 실제 정답(0 또는 1) 사이의 차이를 측정
  • 정답에 높은 확률을 부여할수록 손실이 0에 가까워지고, 틀린 쪽에 높은 확률을 주면 손실이 급격히 커짐
  • 이진 분류: −[y·log(ŷ) + (1−y)·log(1−ŷ)]
  • 다중 분류: 각 클래스에 대해 위 식의 합산 → scikit-learn에서 log_loss 로 표기
"고양이" 사진에 고양이 확률 0.9를 줬을 때보다 0.01을 줬을 때 손실이 훨씬 크게 증가 — 틀릴수록 벌칙이 가파름
회귀 MSE — Mean Squared Error (평균 제곱 오차)
"실제값과 예측값의 차이를 제곱해 평균" — 오차가 클수록 더 크게 벌칙
  • 수식: Cost = (1/n) × Σ(ŷ − y)²
  • 오차를 제곱하기 때문에 큰 오차에 민감 — 이상치(outlier) 영향을 크게 받음
  • 항상 0 이상의 값 → 최솟값이 0이면 완벽한 예측
분류: Loss = −[y·log(ŷ) + (1−y)·log(1−ŷ)]
회귀: Loss = (ŷ − y)²
y = 실제값  |  ŷ = 예측값  |  log = 자연로그
▸ 경사하강법 (Gradient Descent)

Cost Function을 최소화하기 위해 가중치를 반복적으로 조정하는 알고리즘 — MLP 학습의 핵심

  • 현재 가중치에서 Cost의 기울기(gradient)를 계산 — 오차가 증가하는 방향
  • 기울기의 반대 방향으로 가중치를 조금씩 이동 → 오차가 줄어드는 방향
  • 갱신 규칙: w ← w − α·(∂Cost/∂w)   (α = 학습률)
  • 이 과정을 수백~수천 번 반복하면 Cost가 최솟값에 수렴
직관적 비유 — 눈 감고 산 내려오기
· 현재 위치에서 발 밑의 경사(기울기)를 느낌
· 경사가 내려가는 방향으로 한 발짝(학습률만큼) 이동
· 경사가 0이 되는 평평한 곳(최솟값)에 도달할 때까지 반복
💡 새 개념
배치 경사하강법 종류 GD Variants
  • Batch GD — 전체 데이터로 기울기 계산 후 1회 갱신. 정확하지만 느림
  • Stochastic GD (SGD) — 샘플 1개씩 기울기 계산 후 즉시 갱신. 빠르지만 불안정
  • Mini-batch GD — 일부 샘플(batch)로 기울기 계산. 속도와 안정성의 절충 — 실제로 가장 많이 사용
Mini-batch: 시험 100문제를 한꺼번에 채점(Batch)하지 않고 10문제씩 채점하며 즉시 복습
지역 최솟값 문제 Local Minimum
  • 경사하강법이 전체 최솟값(Global Minimum)이 아닌 국소 최솟값(Local Minimum)에 빠질 수 있음
  • 모멘텀, Adam 같은 고급 옵티마이저가 이 문제를 어느 정도 완화
산을 내려오다 작은 웅덩이(Local Min)에 빠져 더 낮은 골짜기(Global Min)를 못 찾는 상황
가중치 초기화
기울기 계산 (역전파)
w ← w − α·grad
수렴 확인
반복
🔧
7. scikit-learn MLP 클래스 & 주요 파라미터

scikit-learn의 sklearn.neural_network 모듈이 제공하는 신경망 클래스

MLPClassifier
분류 문제용 MLP. 출력층에 Softmax 또는 Sigmoid 적용. predict_proba()로 클래스 확률 반환
MLPRegressor
회귀 문제용 MLP. 출력층 활성화 함수로 Identity 사용. 연속값 예측
BernoulliRBM
제한 볼츠만 머신. 비지도 사전 학습(pre-training)에 활용. 딥러닝 초기 방법론
▸ 핵심 파라미터 정리
파라미터 기본값 설명
hidden_layer_sizes (100,) 은닉층 구조. (100, 50)이면 1층 100노드, 2층 50노드
activation relu 은닉층 활성화 함수: relu / identity / logistic / tanh
solver adam 가중치 최적화 알고리즘: adam / sgd / lbfgs
alpha 0.0001 L2 정규화 강도 — 클수록 과적합 억제, 작을수록 복잡한 모델 허용
batch_size auto 미니배치 크기. auto이면 min(200, n_samples)
learning_rate constant 학습률 스케줄: constant / invscaling / adaptive (sgd 전용)
max_iter 200 최대 학습 반복 횟수(에포크)
warm_start False True이면 이전 fit() 결과를 이어서 학습
momentum 0.9 SGD 모멘텀 계수 (sgd 전용)
early_stopping False True이면 검증 손실이 개선되지 않을 때 학습 조기 종료
validation_fraction 0.1 early_stopping 시 검증 세트로 사용할 비율
손실 함수(Loss)
· 분류: log loss (Cross Entropy) — 예측 확률이 정답에서 멀수록 손실이 급격히 증가
· 회귀: MSE = (1/n)·Σ(ŷ−y)² — 오차 제곱의 평균, 경사하강법으로 최소화
· 상세 내용 → 섹션 6 참조
💡 새 개념
조기 종료 Early Stopping
  • 학습 중 검증 데이터의 손실이 더 이상 줄어들지 않으면 학습을 중단하는 기법
  • 과적합(overfitting) 방지 효과 — 최적 시점에서 멈추기
시험 공부를 계속 해도 점수가 오르지 않으면 그 시점이 최선 — 더 하면 오히려 암기에 치우침
L2 정규화 L2 Regularization (Ridge)
  • 가중치의 제곱합을 비용함수에 더해 가중치가 지나치게 커지는 것을 억제
  • alpha 값이 클수록 정규화 강도가 높아져 단순한 모델로 유도
답안이 너무 복잡하면 감점 — 모델이 훈련 데이터에만 지나치게 맞추는 것을 방지
8. 핵심 정리
ANN/MLP 핵심 흐름 요약
· 단층 퍼셉트론 → XOR 한계 → 다층(MLP)으로 해결
· 순전파로 예측 → Loss 계산(분류: Cross Entropy / 회귀: MSE) → 역전파(체인 룰)로 가중치 자동 수정
· 경사하강법으로 Cost Function 최소화 — Mini-batch 방식이 실무 표준
· 층이 깊어지면 기울기 소실 → ReLU로 완화
· scikit-learn: MLPClassifier / MLPRegressor / BernoulliRBM
MLP 순전파 역전파 체인 룰 활성화 함수 학습률 모멘텀 기울기 소실 ReLU Cross Entropy MSE 경사하강법 Adam Early Stopping
728x90

'머신러닝' 카테고리의 다른 글

260702_강의 정리 (Tensorflow, Keras)  (0) 2026.07.02
260701_강의 정리 (Tensorflow, FFNN)  (0) 2026.07.01
260615_강의 정리 (Text Mining)  (0) 2026.06.15
260612_강의 정리 (SVM)  (0) 2026.06.12
260611_강의 정리 (차원 축소)  (0) 2026.06.11