끄적이는 개발노트
260616_강의 정리 (신경망) 본문
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)
· 각 행렬의 원소가 학습 대상 가중치 — 학습이란 이 숫자들을 최적화하는 과정
· 층 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 : 가중치가 예측값에 미치는 영향
∂E/∂ŷ : 예측값이 오차에 미치는 영향 × ∂ŷ/∂w : 가중치가 예측값에 미치는 영향
💡 새 개념
연쇄 법칙 Chain Rule
- 합성 함수의 미분을 각 부분의 미분 곱으로 나타내는 미적분 규칙
- 신경망에서 "출력의 변화 → 은닉층 출력의 변화 → 가중치의 변화"를 연결해 역방향으로 기울기를 전달
기차 칸이 연결된 것처럼, 앞 칸(출력)이 흔들리면 뒤 칸(가중치)까지 얼마나 흔들리는지 계산
학습률 Learning Rate
- 역전파로 계산된 기울기를 가중치에 얼마나 반영할지 결정하는 하이퍼파라미터
- 너무 크면 최솟값을 지나쳐 발산, 너무 작으면 학습이 매우 느림
산을 내려올 때 한 걸음의 크기 — 너무 크면 넘어지고, 너무 작으면 밤새 걸어도 도착 못 함
비틀거림(Oscillation) 문제
· 학습률이 너무 크거나 경사가 가파른 곳에서 가중치가 최솟값 주변을 왔다 갔다 하며 수렴하지 못하는 현상
· 모멘텀(Momentum)으로 이전 방향을 일부 유지하게 해 진동을 줄임
· 학습률이 너무 크거나 경사가 가파른 곳에서 가중치가 최솟값 주변을 왔다 갔다 하며 수렴하지 못하는 현상
· 모멘텀(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 → 기울기 소실 문제를 크게 완화
· 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_rate — constant / invscaling / adaptive 중 선택
lbfgs
L-BFGS (준 뉴턴 방법)
2차 미분(헤시안 행렬) 근사를 활용해 더 정교하게 최솟값 방향을 탐색
- 소규모 데이터셋에서 빠르게 수렴
- 대규모 데이터에는 메모리 부담이 커 비효율적
Solver 선택 기준
· 데이터가 많고 딥러닝 수준의 복잡한 모델 → adam
· 학습률을 직접 세밀하게 조정하고 싶을 때 → sgd
· 소규모 데이터, 빠른 수렴이 필요할 때 → lbfgs
· 데이터가 많고 딥러닝 수준의 복잡한 모델 → adam
· 학습률을 직접 세밀하게 조정하고 싶을 때 → sgd
· 소규모 데이터, 빠른 수렴이 필요할 때 → lbfgs
6. 손실 함수와 경사하강법
"예측이 얼마나 틀렸는지 측정하고, 그 방향으로 모델을 수정한다"
▸ Loss Function vs Cost Function
- Loss Function (손실 함수) — 데이터 샘플 하나에 대한 예측 오차를 측정하는 함수
- Cost Function (비용 함수) — 전체 훈련 데이터의 손실을 평균낸 값 — 모델 전체의 성능 지표
- 학습 목표 = Cost Function을 최소화하는 가중치 찾기
직관적 비유
· Loss = 시험 문제 하나를 틀린 점수
· Cost = 전체 시험의 평균 오답률 — 이 값을 줄이는 방향으로 공부(학습)함
· 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)²
회귀: Loss = (ŷ − y)²
y = 실제값 | ŷ = 예측값 | log = 자연로그
▸ 경사하강법 (Gradient Descent)
Cost Function을 최소화하기 위해 가중치를 반복적으로 조정하는 알고리즘 — MLP 학습의 핵심
- 현재 가중치에서 Cost의 기울기(gradient)를 계산 — 오차가 증가하는 방향
- 기울기의 반대 방향으로 가중치를 조금씩 이동 → 오차가 줄어드는 방향
- 갱신 규칙: w ← w − α·(∂Cost/∂w) (α = 학습률)
- 이 과정을 수백~수천 번 반복하면 Cost가 최솟값에 수렴
직관적 비유 — 눈 감고 산 내려오기
· 현재 위치에서 발 밑의 경사(기울기)를 느낌
· 경사가 내려가는 방향으로 한 발짝(학습률만큼) 이동
· 경사가 0이 되는 평평한 곳(최솟값)에 도달할 때까지 반복
· 현재 위치에서 발 밑의 경사(기울기)를 느낌
· 경사가 내려가는 방향으로 한 발짝(학습률만큼) 이동
· 경사가 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 참조
· 분류: 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
· 단층 퍼셉트론 → 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 |