제한 볼츠만 머신(RBM)이란? AI에서 두 층의 확률 관계로 숨은 특징을 배우는 방법
TL;DR
제한 볼츠만 머신은 관측되는 입력층과 숨은 특징층 사이의 확률 관계를 학습하는 생성 확률 모델입니다. 같은 층 안의 직접 연결을 두지 않는 구조가 이름의 제한입니다. BernoulliRBM은 이진 상태를 가정하지만 transform은 숨은 유닛이 켜질 확률을 반환합니다. 입력 이진화·확률 표본·분류 정답을 구분하고 입력 가정과 학습·검증 분리를 확인합니다.[1][2]
핵심 3줄 요약
- 핵심 1
두 층 사이만 연결합니다. 관측 유닛과 숨은 유닛 사이의 가중치·편향을 자료에서 배웁니다. - 핵심 2
확률과 이진 표본은 다릅니다. 숨은 상태가 0 또는 1이어도 변환 결과에는 0.75 같은 확률이 남습니다. - 핵심 3
특징 학습과 분류를 나눕니다. 비지도 변환 뒤의 분류기는 별도 정답으로 배우며 독립 자료로 평가합니다.
이 글에서 다룰 내용
- 제한 볼츠만 머신의 한 문장 정의
- 두 입력·두 숨은 유닛으로 보는 확률 계산
- 에너지와 교대 표본 추출의 작동 흐름
- PCD 학습·주요 설정·변환과 점수의 구분
- 특징 이진화·일반 신경망·PCA와의 차이
- 분류 연결과 자료 분리의 실전 체크리스트
- 입력 가정·재구성 오차·비용의 주의점
제한 볼츠만 머신을 한 문장으로 정의하면 무엇인가요?
제한 볼츠만 머신은 같은 층 안의 직접 연결 없이 관측 유닛과 숨은 유닛을 연결하고, 두 층의 결합 확률을 학습하는 비지도 모델입니다.
영문명은 Restricted Boltzmann Machine이며 약어는 RBM입니다. 관측층은 실제로 넣은 픽셀이나 특징을 나타내고 숨은 층은 자료의 규칙성을 설명하는 잠재 상태입니다. 양쪽 연결은 한 방향의 전달 경로만 뜻하지 않습니다. 입력을 보고 숨은 상태를 구하고 숨은 상태를 보고 입력 상태도 구합니다.[2][4]
제한은 실행 권한이나 사용량 제한이 아닙니다. 관측 유닛끼리, 숨은 유닛끼리 직접 잇지 않는 그래프 제약입니다. 한 층의 상태를 고정하면 다른 층의 유닛들은 조건부로 독립입니다. 그렇다고 관측 변수들이 아무 관계도 없다는 뜻은 아닙니다.
한 줄 정리: RBM은 관측값과 숨은 상태가 어떤 조합으로 함께 나타나는지 배우는 모델입니다. 이 글은 확인한 scikit-learn 1.9.1의 BernoulliRBM을 중심으로 설명합니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 두 픽셀의 켜짐 여부를 입력한다고 가정해 보겠습니다. 입력 두 칸과 숨은 유닛 두 개를 둡니다. 원리를 보기 위해 학습된 값 대신 설명용 가중치를 직접 정합니다. 첫 숨은 유닛의 가중치는
[log(3), -log(3)]
, 둘째는
[log(3), log(3)]
이고 편향은 모두 0입니다.
숨은 유닛은 입력과 가중치의 곱을 더하고 편향을 더한 점수를 시그모이드로 바꿉니다. 이 예시의
log
는 자연로그이며 시그모이드는
1 / (1 + e−z)
입니다. 점수가 0이면 0.5,
log(3)
이면 0.75,
-log(3)
이면 0.25입니다.
- 입력
[1, 0]에서는 숨은 활성 확률이[0.75, 0.75]입니다. - 입력
[0, 1]에서는[0.25, 0.75]입니다. - 입력
[1, 1]에서는[0.5, 0.9]입니다.
첫 입력의 두 확률을 더하면 1.5입니다. 서로 배타적인 두 정답 클래스의 확률이 아니므로 합이 1일 필요가 없습니다. 각 숫자는 해당 숨은 유닛이 켜질 조건부 확률입니다. 0.75를 숫자 7의 분류 확률처럼 읽지 않습니다.
확률 0.75인 유닛도 표본을 뽑으면 0 또는 1입니다. 설명용 비교값을
[0.8, 0.6]
으로 고정하고 각 값이 확률보다 작을 때만 켜면 첫 입력의 표본은
[0, 1]
입니다. 확률 벡터와 한 번 뽑은 상태는 다른 결과입니다.
이 숫자는 Python 표준 라이브러리로 고정 가중치와 시그모이드를 계산해 확인했습니다. 실제 RBM을 학습한 결과나 scikit-learn 실행 성능은 아닙니다. 예시에서 임의로 정한 가중치에 픽셀의 의미를 붙여 해석하지 않습니다.
쉬운 예시: 입력 두 칸을 숨은 특징 두 칸으로 옮겨도 각 칸의 뜻은 바뀝니다. 켜짐 확률을 계산하는 일과 그 확률로 상태를 추출하는 일을 분리해서 보세요.
왜 AI에서 제한 볼츠만 머신이 중요한가요?
정답 없이 비선형 특징을 배웁니다
입력에서 함께 나타나는 패턴을 잠재 표현으로 만들고 그 표현을 뒤의 분류기에 전달할 수 있습니다. 사용자 가이드는 RBM을 비지도 비선형 특징 학습기로 소개합니다. 변환에는 정답 라벨이 필요하지 않지만 고객 문의나 손글씨의 클래스까지 자동으로 알아내는 것은 아닙니다.[2]
표현을 배우는 목적과 최종 업무를 구별합니다
Hinton의 안내서는 RBM에서 얻은 숨은 특징을 별도 판별 모델의 입력으로 쓰는 경로를 설명합니다. scikit-learn 공식 예제도 RBM과 로지스틱 회귀를 연결합니다. 앞 모델은 자료의 표현을 배우고 뒤 모델은 정답에 맞게 분류합니다. 두 단계의 품질을 지표 하나로 판단하지 않습니다.[3][4]
핵심 인사이트: 라벨이 없는 자료에서 특징을 배우는 일과 그 특징이 실제 분류에 도움이 되는지는 별개입니다. 원본 입력을 쓰는 기준 모델도 함께 남깁니다.
제한 볼츠만 머신은 어떤 순서로 작동하나요?
1. 두 층의 상태에 에너지를 부여합니다
가중치와 편향은 관측 상태·숨은 상태의 조합에 에너지 값을 정합니다. 같은 모델 안에서는 에너지가 낮은 조합에 더 큰 확률이 배정됩니다. 전체 확률을 맞추는 정규화 항은 가능한 조합들을 합쳐야 하므로 큰 모델에서는 정확한 계산이 어렵습니다. 여기서 에너지는 GPU 소비전력이 아닌 확률 모델의 수학적 점수입니다.[4]
2. 한 층을 고정하고 다른 층을 추출합니다
관측값을 고정하면 숨은 유닛의 확률을 계산하고 각 상태를 뽑습니다. 이어 숨은 상태를 고정하고 관측 유닛을 뽑습니다. 이처럼 층을 번갈아 갱신하는 절차가 블록 깁스 샘플링입니다. 한 번 왕복해 얻은 관측 표본이 원래 입력과 정확히 같거나 목표 분포를 충분히 대표한다고 보장하지 않습니다.
3. 자료와 모델 표본의 통계를 비교합니다
학습은 자료에서 관측한 두 층의 관계와 모델이 만든 표본의 관계 차이를 이용해 가중치·편향을 고칩니다. 일반 CD는 자료에서 짧은 표본 추출을 다시 시작하고 PCD는 표본 사슬의 상태를 업데이트 사이에 이어 갑니다. BernoulliRBM은 SML이라고도 부르는 PCD를 사용합니다. 모든 RBM이 같은 CD-1 절차로 학습한다고 설명하지 않습니다.[1][4][5]
실전 팁: 특징을 얻는 transform과 표본을 갱신하는 gibbs를 구분하세요. 전자는 숨은 확률, 후자는 한 번 왕복한 관측 상태를 돌려줍니다.
주요 설정과 결과는 어떻게 읽나요?
숨은 유닛 수는 클래스 수가 아닙니다
n_components
는 숨은 유닛 수이며 기본값은 256입니다. 입력 열 수보다 반드시 작아야 하는 값은 아닙니다.
transform(X)
결과는 표본 수 × 숨은 유닛 수의 확률 배열입니다. 더 적은 유닛을 골랐다고 원래 정보가 모두 보존되거나 수를 늘린다고 분류가 좋아지지는 않습니다.[1]
학습률·배치·반복 횟수를 구별합니다
learning_rate
는 가중치 갱신 크기,
batch_size
는 미니배치 크기,
n_iter
는 훈련 자료를 훑는 횟수입니다. 확인한 API의 기본값은 각각 0.1, 10, 10입니다.
n_iter=10
을 입력 하나마다 깁스 샘플링을 열 번 한다는 뜻으로 읽지 않습니다. 학습률이 너무 크면 불안정해질 수 있으므로 자료에 맞춰 검증합니다.[1][4]
가중치와 두 종류의 편향을 함께 보관합니다
components_
의 모양은 숨은 유닛 수 × 입력 특징 수입니다.
intercept_hidden_
과
intercept_visible_
은 서로 다른 층의 편향입니다.
h_samples_
는 PCD가 이어 가는 숨은 표본 상태로, 모든 훈련 행을 transform한 결과가 아닙니다. 새 자료는 저장한 전처리와 변환기를 그대로 사용합니다.[1][5]
의사우도는 분류 정확도가 아닙니다
score_samples(X)
는 행마다 의사우도의 로그 형태 점수를 계산합니다. 정확한 정규화 우도나 0~1 분류 확률이 아니며 일부 입력을 무작위로 뒤집는 계산이 포함됩니다. 이 메서드의 계약은 모든 값이 불리언이어야 한다고 명시하지만 직접 검사하지는 않습니다. 학습에 허용되는 연속 입력 범위를 점수 메서드에도 그대로 적용하지 않습니다.[1][5]
제한 볼츠만 머신과 헷갈리는 용어는 무엇이 다른가요?
특징 이진화는 입력값을 기준선과 비교합니다
특징 이진화는 숫자를 정해진 임계값과 비교해 0과 1로 바꾸는 전처리입니다. 고정 기준선만 쓰는 변환은 자료의 결합 확률을 배우지 않습니다. RBM은 가중치·편향을 학습하며 숨은 활성 확률을 만듭니다. 입력이 0·1이라는 공통점만으로 두 방법을 같은 개념으로 보지 않습니다.
일반 신경망 설명과 연결 제약이 다릅니다
신경망은 여러 계산 구조를 포함하는 큰 범주입니다. RBM은 두 층의 양방향 확률 관계와 같은 층 안의 연결 금지가 특징입니다. 일반 볼츠만 머신에서 허용될 수 있는 층 내부의 직접 연결을 없앤 구조이므로 어떤 연결을 제한했는지가 핵심입니다.[2][4]
PCA는 직교 축을 찾습니다
주성분 분석은 분산이 큰 직교 방향으로 선형 좌표를 만듭니다. BernoulliRBM은 확률 모델을 학습하고 시그모이드로 숨은 확률을 계산합니다. RBM의 첫 유닛을 가장 큰 설명 분산의 축으로 해석하거나 가중치를 원래 입력의 중요도 순위로 읽지 않습니다.
비교 정리: 이진화는 기준선에 따른 입력 상태, RBM은 학습된 잠재 확률, PCA는 선형 좌표를 만듭니다. 출력 숫자의 범위뿐 아니라 계산 규칙과 뜻을 비교합니다.
실전에서는 어디에 쓰이나요?
손글씨 특징과 선형 분류를 연결합니다
공식 숫자 분류 예제는 픽셀을 RBM으로 변환한 뒤 로지스틱 회귀에 전달하는 파이프라인을 보여 줍니다. 숨은 가중치를 이미지 모양으로 펼쳐 관찰하는 부분도 있습니다. 이는 연결 방식을 확인하는 예제이며 다른 자료의 성능 보장이 아닙니다. 그림에서 보인 패턴의 이름도 사람이 붙인 해석입니다.[3]
생성 확률 모델의 학습 과정을 살펴봅니다
Hinton의 안내서는 이미지·문서·평점 등 여러 자료를 다룬 RBM 연구를 소개합니다. 다만 자료 유형마다 유닛과 분포 가정이 다릅니다. 범용 RBM 연구의 사용처를 scikit-learn BernoulliRBM 하나가 그대로 지원한다고 옮기지 않습니다. 이 글의 이진 예시를 일반 음성값이나 임의의 실수 입력에 바로 적용하지 않습니다.[4]
제한 볼츠만 머신을 적용할 때 어떤 순서로 확인하나요?
1. 입력의 뜻과 자료 분리를 먼저 정합니다
각 열의 0과 1이 부재·존재인지, 중간값이 켜짐 확률로 해석되는지 확인합니다. 훈련·검증·최종 테스트를 먼저 나누고 스케일 범위도 훈련 부분에서만 정합니다. 같은 원본 이미지의 이동·회전 사본은 같은 그룹에 두어 훈련과 테스트 양쪽에 흩어지지 않게 합니다. 이는 독립 평가를 위한 작성자의 점검 순서입니다.
2. 작은 입력에서 확률과 표본을 대조합니다
행 수와 출력 열 수를 확인하고 transform 결과가 확률인지 살핍니다. gibbs 출력은 관측층 크기로 돌아오므로 두 메서드의 배열을 같은 잠재 특징으로 저장하지 않습니다. 모든 숨은 유닛이 거의 같은 값에 붙는지도 봅니다. 예제의 숫자와 맞았다는 사실만으로 학습이 성공했다고 판정하지 않습니다.
3. 전체 파이프라인과 원본 모델을 비교합니다
전처리·RBM·분류기를 하나의 학습 경로로 묶고 전체를 교차 검증 안에서 학습합니다. 숨은 유닛 수·학습률·반복과 뒤 분류기의 규제를 훈련 내부에서 고릅니다. 최종 테스트는 선택 뒤에 남겨 둡니다. 같은 분할에서 원본 입력 기준 모델과 분류 오류·변환 시간·저장 크기를 함께 비교합니다.
사용할 때 무엇을 주의해야 하나요?
0~1 범위만으로 입력 적합성을 보장하지 않습니다. BernoulliRBM은 이진 관측값 또는 각 유닛이 켜질 확률로 해석하는 중간값을 가정합니다. 원래 단위와 분포를 무시하고 모든 자료를 0~1로 축소했다고 같은 가정이 성립하지는 않습니다. 학습 입력과 새 입력의 범위를 따로 검사합니다.[2]
재구성 오차를 학습 품질의 결론으로 쓰지 않습니다. Hinton은 작은 재구성 오차가 자료 분포를 잘 학습했다는 뜻은 아니라고 경고합니다. 표본 사슬이 잘 움직이지 않아도 입력 가까이에 머물며 작은 오차를 보일 수 있습니다. 분류 목적이라면 보지 못한 자료의 분류 품질을 따로 확인합니다.[4]
난수와 재학습의 영향을 기록합니다. 초기 가중치와 표본 추출에는 난수가 들어갑니다. 정수
random_state
와 자료·행 순서·설정·버전을 함께 남깁니다. 다시 학습하면 같은 번호의 숨은 유닛도 다른 패턴을 나타낼 수 있으므로 뒤 모델과 변환기를 한 버전으로 관리합니다.[1][5]
비용과 표현의 한계를 함께 봅니다. 숨은 유닛 수가 커지면 연결 가중치와 변환 출력의 저장 부담도 커집니다. 입력이 희소하다고 잠재 확률 결과까지 희소 형식이라고 가정하지 않습니다. 잠재 표현은 익명화의 증명도 아니며 원자료와 모델에 대한 접근·보관 규칙은 별도로 적용합니다.
주의: 학습이 끝났는지, 확률 모델 가정이 맞는지, 최종 업무가 개선됐는지는 서로 다른 질문입니다. 출력 배열 하나만 보고 세 가지를 모두 통과했다고 판단하지 않습니다.
자주 묻는 질문
Q1. 제한은 사용 권한이나 성능 제한인가요?
아닙니다. 관측층 안과 숨은 층 안의 직접 연결을 두지 않는 구조 제약입니다. 두 층 사이는 연결하며 관측값을 고정했을 때 숨은 유닛들을 조건부로 독립적으로 다루게 됩니다.
Q2. 이름에 Bernoulli가 있으면 결과도 모두 0·1인가요?
상태 표본은 0 또는 1이지만 transform은 숨은 활성 확률을 반환합니다. 0.75 같은 중간값이 정상입니다. 이를 별도 기준으로 자르는 것은 추가 후처리이며 원래 변환과 다릅니다.
Q3. 숨은 유닛 두 개면 두 클래스로 분류하나요?
아닙니다. 두 개의 잠재 특징을 만든다는 뜻입니다. 예시의 두 확률 합은 1.5일 수도 있습니다. 분류 클래스와 클래스 확률은 뒤에 학습한 분류기의 출력에서 확인합니다.
Q4. 0~1로 바꾸면 어떤 연속 자료든 맞나요?
범위를 맞추는 것과 관측 분포의 가정이 맞는 것은 다릅니다. 중간값을 켜짐 확률로 읽을 근거를 살피고 기준 모델과 비교합니다. 다른 유닛을 쓰는 RBM 연구의 조건을 BernoulliRBM에 자동 적용하지 않습니다.
Q5. score_samples는 정확도나 정답 확률인가요?
둘 다 아닙니다. 불리언 관측값에 대한 의사우도 점수입니다. 분류 정확도와 척도가 다르며 정확한 우도라고도 부르지 않습니다. 입력 형식을 메서드별로 확인하고 같은 평가 조건에서 해석합니다.
Q6. n_iter를 늘리면 깁스 왕복 수도 같은 값이 되나요?
n_iter는 훈련 데이터 전체를 훑는 횟수입니다. 개별 갱신의 표본 추출 단계 수와 구분합니다. 반복 횟수만 늘려 학습률 문제나 잘못된 입력 가정이 해결된다고 보장하지 않습니다.
출처
마무리
제한 볼츠만 머신은 같은 층 안의 직접 연결을 없애고 관측값과 숨은 상태의 결합 확률을 배우는 모델입니다. BernoulliRBM의 확률 변환, 이진 표본과 뒤 분류기의 정답 출력을 분리해서 이해하면 입력이 모두 0과 1이어도 서로 다른 단계라는 점이 드러납니다.
처음에는 두 입력·두 숨은 유닛의 계산으로 확률과 표본을 대조해 보세요. 실제 적용에서는 입력 가정과 자료 분리를 먼저 확인하고 전체 파이프라인을 원본 기준 모델과 비교합니다. 재구성 오차나 한 번의 학습 로그보다 독립 평가에서 얻은 품질과 비용으로 사용 여부를 판단합니다.
