[G1-Sync] Manual knowledge update

This commit is contained in:
Antigravity Agent
2026-05-10 22:08:15 +09:00
parent 21ac3ed255
commit 504fd5fb42
3011 changed files with 380280 additions and 206977 deletions
+134 -67
View File
@@ -2,88 +2,155 @@
id: wiki-2026-0508-noise-reduction-in-ai
title: Noise Reduction in AI
category: 10_Wiki/Topics
status: needs_review
status: verified
canonical_id: self
aliases: [AI-Noise-RED-001]
aliases: [Denoising, Noise Suppression, Audio Denoising, Image Denoising, Label Noise]
duplicate_of: none
source_trust_level: A
confidence_score: 1.0
tags: [ai, Deep-Learning, noise-reduction, denoising, signal-Processing, autoencoder]
confidence_score: 0.9
verification_status: applied
tags: [denoising, audio, image, label-noise, signal-processing]
raw_sources: []
last_reinforced: 2026-04-26
last_reinforced: 2026-05-10
github_commit: pending
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
tech_stack:
language: unspecified
framework: unspecified
tech_stack: { language: Python, framework: PyTorch/torchaudio }
---
# Noise Reduction in AI (AI에서의 노이즈 제거)
## 한 줄
오디오/이미지 신호의 노이즈 제거(전통 DSP + DNN)와 학습 데이터의 라벨 노이즈 처리(robust loss, 자가-학습)를 통합 다룬다.
## 📌 한 줄 통찰 (The Karpathy Summary)
> "데이터의 본질을 가리는 불필요한 흔적들을 정교하게 닦아내어, 기계가 가장 순수한 정보에 집중하게 하라" — 이미지, 음성, 텍스트 등 다양한 신호 데이터에 포함된 무작위 노이즈를 식별하고 제거하여 모델의 정확도와 사용자 체감 품질을 높이는 전처리 및 학습 기술.
## 핵심
- **오디오 전통**: spectral subtraction, Wiener filter, MMSE-LSA — 정상 잡음 가정.
- **오디오 DNN (2026)**: RNNoise (모바일 RT), Demucs v4 (음원 분리/디노이즈), DeepFilterNet, NSNet2, Meta's Voicebox.
- **이미지 전통**: BM3D (블록 매칭+3D 변환), NLM (non-local means), wavelet thresholding.
- **이미지 DNN**: DnCNN, Restormer, NAFNet — 합성 가우시안/실세계.
- **라벨 노이즈**: symmetric/asymmetric flip, instance-dependent. 처리: GCE/SCE loss, co-teaching, confident learning, label smoothing.
## 📖 구조화된 지식 (Synthesized Content)
- **추출된 패턴:** "Feature [[Distillation|Distillation]] and Reconstruction" — 원본 데이터를 의도적으로 오염시킨 뒤 이를 원래대로 복원하게 학습시키는 디노이징 오토인코더(Denoising Autoencoder) 기법을 통해, 모델이 데이터의 핵심적인 특징과 구조를 스스로 파악하게 만드는 패턴.
- **주요 적용 분야:**
- **Image Denoising:** 저조도 사진의 노이즈 제거 및 초해상도(Super Re[[Solution|Solution]]) 복원.
- **Speech Enhancement:** 주변 소음 제거 및 목소리 명료도 향상.
- **Text Cleaning:** 오타 교정 및 비정형 텍스트 내 불필요한 특수문자 제거.
- **의의:** 실제 환경에서 수집되는 데이터는 항상 불완전하므로, 노이즈 제거 기술은 AI가 연구실을 넘어 현실 세계에서 안정적으로 작동하게 만드는 방어 기제이자 필수 역량임.
## 💻 패턴
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
- **과거 데이터와의 충돌:** 단순한 필터링 방식에서 벗어나, 이제는 확산 모델(Diffusion Models)의 노이즈 제거 프로세스를 역이용하여 새로운 정보를 생성하거나 고도의 복원 성능을 달성하는 생성적 노이즈 제거 방식으로 고도화됨.
- **정책 변화:** Antigravity 프로젝트는 외부 원시 데이터 수집 시, 텍스트 내의 중복 기호나 광고성 노이즈를 1차적으로 필터링하는 전용 노이즈 리덕션 파이프라인을 가동하여 지식의 순도를 관리함.
```python
# 1) Spectral subtraction (오디오)
import numpy as np
import librosa
## 🔗 지식 연결 (Graph)
- [[Generative-Adversarial-Networks|Generative-Adversarial-Networks]]-GAN, Autoencoders-in-Deep-Learning, [[Pre-processing-Data-for-AI|Pre-processing-Data-for-AI]], [[Signal-Processing-Foundations|Signal-Processing-Foundations]]
- **Raw Source:** 10_Wiki/Topics/AI/Noise-Reduction-in-AI.md
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
**언제 이 지식을 쓰는가:**
- *(TODO)*
**언제 쓰면 안 되는가:**
- *(TODO)*
## 🧪 검증 상태 (Validation)
- **정보 상태:** needs_review
- **출처 신뢰도:** A
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
## 🧬 중복 검사 (Duplicate Check)
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
- **처리 방식:** UPDATE (자동 정규화)
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
## 🕓 변경 이력 (Changelog)
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|------|-----------|-----------|--------|
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
## 💻 코드 패턴 (Code Patterns)
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
```text
# TODO
def spectral_subtract(y, sr, noise_clip, n_fft=512, alpha=2.0, beta=0.01):
S = librosa.stft(y, n_fft=n_fft)
N = np.mean(np.abs(librosa.stft(noise_clip, n_fft=n_fft)) ** 2, axis=1, keepdims=True)
P = np.abs(S) ** 2
P_clean = np.maximum(P - alpha * N, beta * N)
S_clean = np.sqrt(P_clean) * np.exp(1j * np.angle(S))
return librosa.istft(S_clean)
```
## 🤔 의사결정 기준 (Decision Criteria)
```python
# 2) RNNoise (실시간) — 파이썬 바인딩
# pip install pyrnnoise
from pyrnnoise import RNNoise
denoiser = RNNoise(sample_rate=48000)
clean_chunks = [denoiser.process_chunk(chunk) for chunk in audio_chunks_480]
```
**선택 A를 써야 할 때:**
- *(TODO)*
```python
# 3) Demucs v4로 보컬/노이즈 분리
# pip install demucs
import torch, torchaudio
from demucs.pretrained import get_model
from demucs.apply import apply_model
**선택 B를 써야 할 때:**
- *(TODO)*
model = get_model("htdemucs").cpu().eval()
wav, sr = torchaudio.load("noisy.wav")
with torch.no_grad():
sources = apply_model(model, wav.unsqueeze(0), split=True)[0]
# sources: drums/bass/other/vocals
```
**기본값:**
> *(TODO)*
```python
# 4) BM3D (이미지)
# pip install bm3d
import bm3d, numpy as np
clean = bm3d.bm3d(noisy_img.astype(np.float32) / 255.0,
sigma_psd=25/255, stage_arg=bm3d.BM3DStages.ALL_STAGES)
```
## ❌ 안티패턴 (Anti-Patterns)
```python
# 5) DnCNN (잔차 학습 디노이저)
import torch.nn as nn
class DnCNN(nn.Module):
def __init__(self, depth=17, ch=64):
super().__init__()
layers = [nn.Conv2d(3, ch, 3, padding=1), nn.ReLU(inplace=True)]
for _ in range(depth - 2):
layers += [nn.Conv2d(ch, ch, 3, padding=1), nn.BatchNorm2d(ch), nn.ReLU(inplace=True)]
layers += [nn.Conv2d(ch, 3, 3, padding=1)]
self.net = nn.Sequential(*layers)
def forward(self, x):
return x - self.net(x) # residual: predict noise
```
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
```python
# 6) Generalized Cross Entropy (라벨 노이즈에 강건)
import torch, torch.nn.functional as F
def gce_loss(logits, target, q=0.7):
p = F.softmax(logits, dim=-1)
pt = p.gather(1, target.unsqueeze(1)).squeeze(1).clamp(min=1e-7)
return ((1 - pt ** q) / q).mean()
```
```python
# 7) Confident Learning으로 라벨 오류 추정
# pip install cleanlab
from cleanlab.classification import CleanLearning
from sklearn.linear_model import LogisticRegression
cl = CleanLearning(clf=LogisticRegression(max_iter=1000))
cl.fit(X, y_noisy)
issues = cl.find_label_issues(X, y_noisy) # bool mask of suspect labels
```
```python
# 8) Co-teaching (두 네트워크 상호 small-loss 샘플 교환)
def co_teaching_step(net1, net2, x, y, forget_rate, opt1, opt2):
l1 = F.cross_entropy(net1(x), y, reduction="none")
l2 = F.cross_entropy(net2(x), y, reduction="none")
k = int((1 - forget_rate) * len(y))
idx1 = l1.argsort()[:k]; idx2 = l2.argsort()[:k]
# 서로 작은 loss 샘플로 업데이트
opt1.zero_grad(); F.cross_entropy(net1(x[idx2]), y[idx2]).backward(); opt1.step()
opt2.zero_grad(); F.cross_entropy(net2(x[idx1]), y[idx1]).backward(); opt2.step()
```
## 결정 기준
| 상황 | 추천 |
|---|---|
| 음성 통화 RT, 모바일 | RNNoise |
| 오프라인 고품질 음원 분리 | Demucs v4 |
| 가우시안 노이즈 이미지 | BM3D (전통), Restormer (DL) |
| 실세계 카메라 노이즈 | NAFNet, paired data fine-tune |
| 30%+ 라벨 노이즈 | Co-teaching, GCE |
| 적은 라벨 노이즈 (<10%) | label smoothing + early stop |
## 🔗 Graph
- 부모: [[Signal Processing]], [[Computer Vision]], [[Audio ML]]
- 인접: [[Speech Enhancement]], [[Source Separation]], [[Image Restoration]]
- 라벨: [[Label Noise]], [[Robust Loss]], [[Confident Learning]]
- 도구: [[torchaudio]], [[librosa]], [[cleanlab]]
## 🤖 LLM 활용
- 노이즈 유형 분류 (정상/비정상/부르스트) → 알고리즘 추천.
- 라벨 노이즈 패턴 (symmetric vs asymmetric) 진단 → loss 선택.
- 디노이저 하이퍼파라미터 튜닝 가이드.
## ❌ 안티패턴
- spectral subtraction에서 alpha 너무 크게 → musical noise.
- DnCNN을 합성 가우시안으로만 학습 → 실세계에서 실패.
- 라벨 노이즈 무시하고 hard CE만 사용.
- co-teaching에서 forget_rate를 노이즈율과 동기화 안 함.
## 🧪 검증
- 오디오: PESQ, STOI, SI-SDR.
- 이미지: PSNR, SSIM, LPIPS.
- 라벨: clean test set 성능 + 의심 라벨 audit.
## 🕓 Changelog
- 2026-05-08 Phase 1 자동 생성
- 2026-05-10 Manual cleanup — house style 적용