표현 학습을 위한 오토인코더
인코더-디코더 아키텍처, 병목 구간, 재구성 손실, 이상 탐지 응용을 다룹니다.
표현 학습을 위한 오토인코더은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
오토인코더란 무엇인가요?
오토인코더는 데이터를 작은 코드로 압축한 뒤 다시 복원하는 방법을 학습합니다. 두 부분으로 구성됩니다. 압축하는 인코더와 다시 구성하는 디코더입니다. 가운데에서 정보를 압축하면 중요한 정보가 무엇인지 학습하도록 강제할 수 있습니다.
import torch
import torch.nn as nn병목 개념
가운데의 좁은 계층을 병목 또는 잠재 코드라고 합니다. 모든 정보를 몇 개의 숫자로 통과시키면 네트워크는 잡음을 버리고 데이터의 핵심 구조를 유지해야 합니다.
인코더 구축하기
28x28 이미지(784픽셀)의 경우 인코더는 입력을 단계적으로 줄입니다. 784에서 256을 거쳐 64차원 잠재 코드로 축소합니다. 각 Linear 계층 뒤에는 ReLU 비선형성이 이어집니다.
encoder = nn.Sequential(
nn.Linear(784, 256),
nn.ReLU(),
nn.Linear(256, 64)
)디코더 구축
디코더는 인코더를 그대로 반영하며, 64차원 코드를 다시 784개의 픽셀로 확장합니다. 마지막 Sigmoid는 출력을 [0,1] 범위로 압축해 정규화된 픽셀 값에 맞춥니다.
decoder = nn.Sequential(
nn.Linear(64, 256),
nn.ReLU(),
nn.Linear(256, 784),
nn.Sigmoid()
)전체 오토인코더
인코더와 디코더를 하나의 모듈로 연결합니다. 순전파(forward)는 인코딩한 다음 디코딩하고, 입력과 동일한 형태의 재구성 결과를 반환합니다.
class AutoEncoder(nn.Module):
def __init__(self, enc, dec):
super().__init__()
self.enc, self.dec = enc, dec
def forward(self, x):
z = self.enc(x)
return self.dec(z)재구성 손실(MSE)
학습 대상은 입력 자체입니다. 평균 제곱 오차는 재구성 결과가 원본과 픽셀마다 얼마나 다른지 측정합니다. 이 값을 최소화하면 원본에 충실한 압축을 학습할 수 있습니다.
criterion = nn.MSELoss()
x_flat = x.view(x.size(0), -1)
recon = model(x_flat)
loss = criterion(recon, x_flat)오토인코더 학습
학습은 비지도 방식입니다. 레이블 없이 입력만 사용합니다. 루프는 표준적인 zero_grad, forward, backward, step 순서로 진행되지만, 손실은 출력을 입력과 비교합니다.
optimizer.zero_grad()
recon = model(x_flat)
loss = criterion(recon, x_flat)
loss.backward()
optimizer.step()잠재 공간
학습이 끝나면 인코더는 각 입력을 잠재 공간의 한 점으로 매핑합니다. 유사한 입력은 서로 가까운 위치에 놓이므로, 이 64차원 코드는 데이터에서 학습한 압축 표현이 됩니다.
z = model.enc(x_flat)
print(z.shape) # [batch, 64]t-SNE로 시각화
64차원 잠재 공간은 한눈에 보기 어렵습니다. t-SNE는 이를 2차원으로 투영해 그래프로 나타냅니다. 그래프의 군집은 오토인코더가 레이블을 전혀 보지 않고도 유사한 항목을 함께 묶었다는 사실을 보여 줍니다.
from sklearn.manifold import TSNE
codes = model.enc(all_data).detach().numpy()
proj = TSNE(n_components=2).fit_transform(codes)
# scatter plot proj colored by true label이상 탐지
정상 데이터로 학습한 오토인코더는 정상 데이터를 잘 재구성하지만, 한 번도 보지 못한 이상 데이터는 잘 처리하지 못합니다. 높은 재구성 오류는 이상치를 알려 주므로, 강력한 비지도 이상 탐지기가 됩니다.
errors = ((model(data) - data) ** 2).mean(dim=1)
anomalies = errors > threshold표현 학습이 중요한 이유
진정한 핵심은 잠재 코드입니다. 잠재 코드는 군집화, 시각화, 이상 탐지에 사용하거나 다른 모델의 입력으로 사용할 수 있는 학습된 특징 벡터이며, 이 모든 것을 레이블 없이 학습할 수 있습니다.
빠른 확인
오토인코더에 대한 이해도를 확인해 보세요.
요약: 오토인코더
인코더(784에서 256을 거쳐 64로)와 이를 반영한 디코더를 만들고, 레이블 없이 MSE 재구성 손실로 학습했습니다. 잠재 코드를 표현 학습에 사용하고, t-SNE로 시각화했으며, 높은 재구성 오류를 통해 이상을 탐지했습니다.
자주 묻는 질문
“표현 학습을 위한 오토인코더” 강의는 무료인가요?
네 — “표현 학습을 위한 오토인코더” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
“표현 학습을 위한 오토인코더”에서 뭘 배우나요?
인코더-디코더 아키텍처, 병목 구간, 재구성 손실, 이상 탐지 응용을 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“표현 학습을 위한 오토인코더” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 표현 학습을 위한 오토인코더
- 변분 오토인코더(VAE)
- GAN: 생성자와 판별자
- 조건부 GAN과 스타일 전이