제한된 볼츠 만 기계의 파생 및 적용 (2024 노벨상) | Ryan D ‘Cunha | 2025 년 1 월

제한된 볼츠 만 기계의 파생 및 적용 (2024 노벨상) | Ryan D ‘Cunha | 2025 년 1 월

Geoffrey Hinton의 노벨상 우승 작품 조사 및 Pytorch를 사용하여 처음부터 구축

Ryan D 'Cunha
데이터 과학으로

2024 년 노벨 물리학상을 수상한 사람은 Geoffrey Hinton이 AI와 기계 학습 분야에 기여한 것에 대해 Geoffrey Hinton이었습니다. 많은 사람들이 자신이 신경망에서 일했고“AI의 대부”라고 불립니다. 그러나 그의 작품을 이해하는 사람은 거의 없습니다. 특히, 그는 수십 년 전에 제한된 Boltzmann 기계 (RBMS)를 개척했습니다.

이 기사는 RBMS의 연습이 될 것이며이 복잡한 수학 기계 뒤에 약간의 직관을 제공 할 것입니다. 파생물을 통과 한 후 Pytorch에서 RBM을 처음부터 구현하는 방법에 대한 코드를 제공 할 것입니다.

RBM은 감독되지 않은 학습의 한 형태입니다 (입력 만 사용하여 출력 라벨이 사용되지 않습니다). 즉, 출력에 의존하지 않고 데이터에서 의미있는 기능을 자동으로 추출 할 수 있습니다. RBM은 이진 입력이있는 두 가지 유형의 뉴런이있는 네트워크입니다 : 가시, 엑스그리고 숨겨져 시간. 가시 뉴런은 입력 데이터를 취하고 숨겨진 뉴런은 특징/패턴을 감지하는 법을 배웁니다.

입력이있는 RBM 엑스 그리고 숨겨진 층 와이. 원천: [1]

보다 기술적 인 측면에서, 우리는 RBM이 확률 론적 이진 가시 및 숨겨진 변수를 갖춘 변형되지 않은 이중 그래픽 모델이라고 말합니다. RBM의 주요 목표는 조인트 구성의 에너지를 최소화하는 것입니다. 이자형(x, h)) 자주 대조 학습 사용 (나중에 논의).

에너지 기능은 물리적 에너지에 해당하지 않지만 물리/통계에서 나옵니다. 점수 기능처럼 생각하십시오. 에너지 기능 이자형 더 낮은 점수 (에너지)를 구성에 할당합니다 엑스 우리는 우리의 모델이 선호하기를 원하고 피하고 싶은 구성에 대한 점수가 높아집니다. 에너지 기능은 모델 디자이너로 선택할 수있는 것입니다.

RBMS의 경우 에너지 기능은 다음과 같습니다 (Boltzmann 분포 후 모델) :

RBM 에너지 기능. 출처 : 저자

에너지 기능은 3 용어로 구성됩니다. 첫 번째는 숨겨진 층과 가시 층 사이의 상호 작용입니다. W. 두 번째는 가시 단위에 대한 바이어스 항의 합입니다. 세 번째는 숨겨진 단위에 대한 바이어스 항의 합입니다.

에너지 기능을 사용하면 Boltzmann 분포에 의해 주어진 조인트 구성 확률을 계산할 수 있습니다. 이 확률 기능을 사용하면 단위를 모델링 할 수 있습니다.

RBM에 대한 조인트 구성 확률. 출처 : 저자

파티션 함수 (정규화 상수라고도 함)입니다. 가시 및 숨겨진 장치의 가능한 모든 구성에 대한 E^(-e)의 합입니다. Z의 큰 과제는 가능한 모든 구성을 합산해야하기 때문에 일반적으로 계산할 수 없다는 것입니다. 다섯 그리고 시간. 예를 들어, 이진 단위가있는 경우 가시 단위 및 N 숨겨진 유닛은 2^이상을 합산해야합니다.+N) 구성. 따라서 계산을 피할 수있는 방법이 필요합니다 .

이러한 기능과 분포가 정의되면 훈련 및 구현에 대해 이야기하기 전에 추론을위한 일부 파생물을 살펴볼 수 있습니다. 우리는 이미 계산할 수 없다고 언급했습니다 관절 확률 분포에서. 이 문제를 해결하기 위해 Gibbs 샘플링을 사용할 수 있습니다. Gibbs 샘플링은 관절 분포에서 직접 샘플링이 어렵을 때 지정된 다변량 확률 분포에서 샘플링하기위한 Markov 체인 Monte Carlo 알고리즘입니다. [2]. 따라서 조건부 분포가 필요합니다.

a 제한된 볼츠만 대 a 완전히 연결되었습니다 Boltzmann은 층 내에 연결이 없다는 사실입니다. 이는 가시 층이 주어지면 모든 숨겨진 장치는 조건부 독립적이며 그 반대도 마찬가지입니다. 시작으로 무엇을 단순화하는지 살펴 보겠습니다. 피(x | h)):

조건부 분포 p (H | x). 출처 : 저자

조건부 분포가 j가 j row의 sigmoid 함수로 단순화되는 것을 볼 수 있습니다. w. 내가 포함시킨 훨씬 더 엄격한 계산이 있습니다. 충수 이 파생의 첫 번째 줄을 증명합니다. 관심이 있으시면 연락하십시오! 이제 조건부 분포를 관찰합시다 (H | x) :

조건부 분포 p (x | h). 출처 : 저자

우리는이 조건부 분포가 또한 k k k where sigmoid 함수로 단순화되는 것을 볼 수 있습니다. W. RBM의 제한된 기준으로 인해 조건부 분포는 추론 중 깁스 샘플링의 쉬운 계산으로 단순화됩니다. RBM이 정확히 무엇을 배우려고하는지 이해하면 Pytorch에서이를 구현할 것입니다.

대부분의 딥 러닝과 마찬가지로, 우리는 모델을 훈련시키기 위해 NLL (Negative Log-Orcelihood)을 최소화하려고 노력하고 있습니다. RBM의 경우 :

RBM의 NLL. 출처 : 저자

이 수율의 파생물을 취하는 것 :

NLL의 미분. 출처 : 저자

방정식의 왼쪽에있는 첫 번째 용어는 모델이 실제 데이터의 에너지를 낮추도록 밀어 내기 때문에 양의 위상이라고합니다. 이 용어는 숨겨진 유닛에 대한 기대를 취하는 것입니다 시간 실제 교육 데이터가 주어지면 엑스. 긍정적 인 단계는 실제 훈련 데이터 xᵗ가 있고 조건부 독립성으로 인해 H에 대한 기대치를 계산할 수 있기 때문에 계산하기 쉽습니다.

두 번째 용어는 모델이 현재 생각할 가능성이 있다고 생각되는 구성의 에너지를 높이기 때문에 음의 위상이라고합니다. 이 용어는 두 가지에 대한 기대를 포함합니다 엑스 그리고 시간 모델의 현재 분포에 따라 모델의 전체 공동 분포에서 샘플링해야하기 때문에 계산하기가 어렵습니다. (X, H) (이를 수행하려면 훈련에서 반복적으로 수행하는 데 비효율적 인 Markov 체인이 필요합니다). 다른 대안은 컴퓨팅이 필요합니다 우리는 이미 불가능하다고 생각했습니다. 부정적인 단계를 계산하는이 문제를 해결하기 위해 우리는 사용합니다. 대조적 인 발산.

대조적 발산의 핵심 아이디어는 잘린 깁스 샘플링을 사용하여 K 반복 후 포인트 추정치를 얻는 것입니다. 우리는 예상 음의 단계를이 시점 추정치로 바꿀 수 있습니다.

대조적 인 발산. 원천: [3]

일반적으로 k = 1이지만 k가 더 크면 그라디언트의 추정치가 덜 편향됩니다. 나는 음성 위상 (중량/바이어스 업데이트)과 관련하여 다른 부분에 대한 파생물을 보여주지 않지만 부분 파생물을 가져 와서 도출 할 수 있습니다. 이자형(x, h) 변수와 관련하여. 체인을 xᵗ로 초기화하는 대신, 우리는 마지막 반복의 음의 샘플로 체인을 초기화하는 지속적인 대조적 발산의 개념이 있습니다. 그러나 정상적인 대조적 발산이 충분히 작동하기 때문에 나는 깊이 있지 않을 것입니다.

RBM을 처음부터 만들려면 논의한 모든 개념을 하나의 클래스로 결합해야합니다. __init__ 생성자에서, 우리는 가시 층에 대한 가중치, 바이어스 용어, 숨겨진 층의 바이어스 용어 및 대조적 발산을위한 반복 횟수를 초기화합니다. 우리가 필요한 것은 입력 데이터의 크기, 숨겨진 변수의 크기 및 k입니다.

또한 샘플에서 Bernoulli 분포를 정의해야합니다. Bernoulli 분포는 훈련 중 폭발 기울기를 방지하기 위해 클램핑됩니다. 이 두 분포는 전방 패스 (대비 발산)에 사용됩니다.

class RBM(nn.Module):
"""Restricted Boltzmann Machine template."""

def __init__(self, D: int, F: int, k: int):
"""Creates an instance RBM module.

Args:
D: Size of the input data.
F: Size of the hidden variable.
k: Number of MCMC iterations for negative sampling.

The function initializes the weight (W) and biases (c & b).
"""
super().__init__()
self.W = nn.Parameter(torch.randn(F, D) * 1e-2) # Initialized from Normal(mean=0.0, variance=1e-4)
self.c = nn.Parameter(torch.zeros(D)) # Initialized as 0.0
self.b = nn.Parameter(torch.zeros(F)) # Initilaized as 0.0
self.k = k

def sample(self, p):
"""Sample from a bernoulli distribution defined by a given parameter."""
p = torch.clamp(p, 0, 1)
return torch.bernoulli(p)

RBM 클래스를 구축하는 다음 방법은 조건부 분포입니다. 우리는이 두 조건 모두를 앞서 도출했습니다.

def P_h_x(self, x):
"""Stable conditional probability calculation"""
linear = torch.sigmoid(F.linear(x, self.W, self.b))
return linear

def P_x_h(self, h):
"""Stable visible unit activation"""
return self.c + torch.matmul(h, self.W)

최종 방법은 순방향 패스 및 자유 에너지 기능의 구현을 수반합니다. 에너지 기능은 가능한 모든 숨겨진 장치 구성을 요약 한 후 가시 유닛에 대한 효과적인 에너지를 나타냅니다. 전방 기능은 Gibbs 샘플링에 대한 고전적인 대조적 발산입니다. x_negative를 초기화 한 다음 k 반복을 위해 : p_h_x 및 x_negative에서 h_k를 얻고, Bernoulli에서 샘플 h_k를 얻고, p_x_h 및 h_k에서 x_k를 얻은 다음 새로운 x_negative를 얻습니다.

def free_energy(self, x):
"""Numerically stable free energy calculation"""
visible = torch.sum(x * self.c, dim=1)
linear = F.linear(x, self.W, self.b)
hidden = torch.sum(torch.log(1 + torch.exp(linear)), dim=1)
return -visible - hidden

def forward(self, x):
"""Contrastive divergence forward pass"""
x_negative = x.clone()

for _ in range(self.k):
h_k = self.P_h_x(x_negative)
h_k = self.sample(h_k)
x_k = self.P_x_h(h_k)
x_negative = self.sample(x_k)

return x_negative, x_k

RBM을 훈련시키는 데 사용할 수있는 기본 코딩 구현 클래스뿐만 아니라 RBM의 이론에 대한 기초를 제공하기를 바랍니다. 모든 코드 나 추가 지구를 사용하면 더 많은 정보를 얻으려면 자유롭게 연락하십시오!

전반적인 파생 (H | x) 각 개별 조건부 분포의 산물이기 :

출처 : 저자

[1] Montufar, Guido. “제한된 Boltzmann 기계 : 소개 및 검토.” 아카이브 : 1806.0706V1 (2018 년 6 월).

[2] https://en.wikipedia.org/wiki/gibbs_sampling

[3] 힌튼, 제프리 “대조적 인 발산을 최소화함으로써 전문가의 훈련.” 신경 계산 (2002).

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다