2P by GN⁺ | ★ favorite | 댓글 1개
  • Boltzmann 머신의 구조와 목적에 대한 간략한 소개임
  • 에너지 함수와 확률 분포를 수식으로 정의함
  • 가중치와 바이어스의 업데이트 규칙을 미분을 통해 유도함
  • 긍정·부정 단계Gibbs 샘플링을 통한 모델 기댓값 근사 방법 설명임
  • 최종적으로 대비 발산(Contrastive Divergence) 알고리듬을 전체적으로 정리함

Boltzmann 머신과 Contrastive Divergence 개념

  • Boltzmann 머신에서는 입력층(visible layer)과 숨겨진층(hidden layer), 그리고 이를 연결하는 가중치 행렬과 두 층 각각의 바이어스 벡터를 가짐

에너지 함수와 확률분포

  • 에너지 함수는 행렬 형태로 다음과 같이 정의됨

    E(v, h) = -ΣiΣj wij vi hj - Σi bi vi - Σj cj hj
    • v: 가시층 벡터, h: 숨겨진층 벡터, w: 가중치, b/c: 각 층 바이어스
  • Boltzmann 머신의 결합 분포

    P(v, h) = (1/Z) * exp(-E(v, h))
    • Z(분할 함수)는 확률분포를 정규화하는 역할임

로그 우도(log-likelihood) 및 미분

  • 훈련 데이터의 우도를 최대화하여 학습 진행함

    log(P(v)) = log(Σh exp(-E(v, h))) - log(Z)
  • 가중치 wij에 대한 로그 우도의 편미분은

    ∂(log P(v))/∂wij = <vi hj>데이터 - <vi hj>모델
    • < · >데이터: 실제 데이터에 대한 기댓값
    • < · >모델: 모델이 생성한 데이터에 대한 기댓값

가중치와 바이어스 학습 규칙

  • 가중치와 바이어스는 다음과 같이 갱신함
    • Δwij = η(<vi hj>데이터 - <vi hj>모델)
    • Δbi = η(<vi>데이터 - <vi>모델)
    • Δcj = η(<hj>데이터 - <hj>모델)
    • η는 학습률

Contrastive Divergence 알고리듬

  • 모델 기댓값 < · >모델은 직접 계산이 어려우므로 Gibbs 샘플링을 사용함
  • Contrastive Divergence는 다음의 절차로 근사함
    1. 긍정 단계: 숨겨진층 h(0)을 P(h | v(0)=데이터)로부터 샘플링함
    2. 부정 단계: k번의 Gibbs 샘플링 반복
    • 번갈아가며 v(t+1) ~ P(v | h(t)), h(t+1) ~ P(h | v(t))으로 샘플링
  • 업데이트 시각에서 데이터 기댓값과 모델 기댓값의 차이를 사용함
    • Δwij = η(<vi hj>데이터 - <vi hj>모델)
    • Δbi = η(<vi>데이터 - <vi>모델)
    • Δcj = η(<hj>데이터 - <hj>모델)

요약

  • Boltzmann 머신의 학습 본질은 에너지 기반 모델로서 실제 데이터와 모델이 생성한 분포 간 기댓값 차이를 줄이기 위함임
  • Contrastive Divergence는 이 차이의 근사를 빠르고 효율적으로 가능하게 하는 핵심 훈련법임
  • Gibbs 샘플링을 통해 모델 분포와 실제 데이터를 연결하는 역할을 하며, 이 과정을 반복하여 Boltzmann 머신이 데이터를 잘 표현할 수 있도록 가중치와 바이어스를 업데이트함

댓글과 토론

Hacker News 의견들
  • 1990년에 순수 C에서 void 포인터 배열로 “뉴런”을 만들어 볼츠만 머신과 퍼셉트론을 만들던 때가 떠오름
    당시 “AI”로 하던 일은 MIDI 멜로디의 다음 음을 맞히거나, 5×9 점 격자에서 온음표·2분음표·4분음표·8분음표 모양을 인식하는 정도였고, 85% 정확도면 “충분히 좋다”고 봤음

    • 줄이 그어진 악보에서 음표를 읽는 건 재미있는 프로젝트처럼 들림. 특히 3Blue1Brown의 숫자 신경망 예제[1]처럼 처음부터 직접 만들면 더 그럴 듯함
      Chuck[2] 같은 것과 섞으면 요즘 기술로 완전히 클라이언트 쪽에서만 도는 애플리케이션도 만들 수 있음

      [1] - https://www.3blue1brown.com/lessons/neural-networks

      [2] - https://chuck.stanford.edu/

    • 출력이 음악처럼 들렸는지 궁금함

  • 이해하기로는 Harmonium(Smolensky)이 최초의 제한 볼츠만 머신이었지만, “에너지”를 최소화하는 대신 “조화”를 최대화했음
    Smolensky, Hinton, Rummelhart가 협업하면서는 이를 “적합도”라고 불렀던 듯함. Harmonium 논문[1]은 읽기 정말 좋고, Hinton은 당연히 슈퍼스타가 됐으며 Smolensky는 언어학에 관한 긴 책들을 썼음. 이 역사에 대해 더 아는 사람이 있는지 궁금함

    [1] https://stanford.edu/~jlmcc/papers/PDP/Volume%201/Chap6_PDP8...

  • David Ackley에 관한 재미있는 글: https://news.unm.edu/news/24-nobel-prize-in-physics-cited-gr...
    T2 Tile Project도 꼭 볼 만함

    • 이런 돌파구를 만드는 데는 많은 사람들이 관여한다는 게 핵심임
      대학원생의 가치는 자주 과소평가되지만, 실제로는 엄청나게 기여하고 나중에는 연구를 더 발전시킴. 연구가 그렇게 많은 것을 앞으로 밀어왔는데, 왜 미국은 연구를 낭비처럼 보는지 모르겠음
  • 제목을 “A Tiny Boltzmann Brain”으로 잘못 읽었음[0]
    내 자연적인 마음은 즉시 수수께끼를 풀었음. 아주 작은 모델에 무작위로 생성한 가중치를 넣고, 실제로 유용한 일을 하는지 테스트한 경우라고 생각했음. 결국 모델이 작을수록 단순 무작위 생성이 크기에 비해 흥미로운 것을 만들어낼 가능성이 커짐
    정정은 받아들이지만 낙담하진 않음. “Unbiased-Architecture Instant Boltzmann Model”(UA-IBM)이라는 새 모델 부류를 제안함. 언젠가 충분히 큰 양자컴퓨터가 생기면, 전체 데이터셋을 모든 매개변수와 구조 설정을 나타내는 N개의 직렬화된 값으로 정의된 모델의 고전적 제약으로 설정할 수 있을 것임. 그런 다음 N개의 큐비트를 가진 양자계가 모든 가능한 매개변수와 구조를 양자 중첩 상태로 두고 전체 고전 샘플에 대해 추론 한 단계를 수행하게 한 뒤, 결과를 붕괴시켜 최선 또는 거의 최선인 모델의 매개변수와 구조를 고전적 형태로 돌려받는 식임
    이걸 시도해볼 만한 큐비트 몇 개 남는 사람 있는지 궁금함. 모든 게 양자인데도 너무 미끄러워서 아직 거의 활용하지 못한다는 아이러니가 있음
    SF 설정으로는, 외계 종이 일회성 양자 센서를 진화시켰고, 그게 전체 양자 감각계와 신경계로 이어진 뒤 처음부터 완전한 양자 지능으로 발전한 경우를 상상할 수 있음. 그런 사회와 기술 궤적은 어떤 모습일까. 폭발적 진보가 아직 우리를 위협하지 않도록, 이들이 블랙홀 근처 궤도에 있기를 바람. 그러다 어느 날 중력 우물을 탈출하고…

    [0] https://en.wikipedia.org/wiki/Boltzmann_brain

    • 양자컴퓨터는 그렇게 작동하지 않음
    • 불쌍한 양자 존재들임. 자기 생각보다 빠른 계산 모델에 접근할 수 없어서, 계산이 끝나기를 영원히 오래 기다려야 하는 운명임
  • 설명이 좋음. 참고로 어떤 이유에서인지 마우스 스크롤이 너무 민감함
    모바일에서는 스와이프가 괜찮을 거라고 추정하지만 확인하진 않았음. 스크롤하려 할 때마다 첫 “페이지”에서 마지막 “페이지”로, 다시 반대로 튀어버렸음. 다행히 키보드 입력은 동작해서 전체 글을 읽을 수 있었음

  • 제대로 이해했다면, 요즘 익숙한 신경망처럼 기울기 기반 순전파·역전파를 쓰는 대신 가중치 업데이트 계산에 Gibbs 샘플링이 필요한 듯함
    왜 그런지 이해하는 사람이 있는지 궁금함

    • Gibbs 샘플링은 모델 분포에 대한 기대값을 근사하는 방법으로 쓰이는 것 같음
      이 값은 로그 가능도의 기울기를 계산하는 데 필요하지만, 분포를 적분하는 건 다루기 어렵기 때문임. VAE에서 대표 샘플을 뽑으려고 MCMC를 쓰는 방식과 비슷함. 딥러닝식 신경망에서는 명시적으로 모델링된 확률분포가 아니라 데이터셋의 배치에 대해 기울기를 추정함
    • 전문가는 아니지만, 비슷한 문제를 다루는 베이즈 쪽 정식 교육을 조금 받았음
      보통 Gibbs는 직접적인 기울기가 간단하지 않거나, 점추정이 아니라 분포 자체를 재현하고 싶을 때 쓰임. 대신 샘플링하기 쉬운 주변·조건부 가능도가 있을 때 유용함. 각 가시 노드가 각 은닉 노드에 의존하고 각 은닉 노드가 모든 가시 노드에 영향을 주기 때문에 기울기가 매우 지저분해지고, 그래서 주변 가능도를 바탕으로 조정하는 Gibbs 샘플링이 훨씬 단순해짐
    • 틀렸을 수도 있지만, 이건 부분적으로 RBM의 무방향 구조 때문이라고 생각함
      그래서 순전파 신경망처럼 같은 방식으로 계산 그래프를 만들 수 없음
  • 깔끔하고 좋은 설명임. 옛 기억이 많이 떠오름
    부끄러운 홍보지만, 몇 년 전에 RBM 학습 시각화를 만든 적 있음: https://www.youtube.com/watch?v=lKAy_NONg3g

  • 데모가 멋짐. 15년 전 대학에서 Geoff Hinton의 신경망 강의를 들었고, 그는 몇 강의에 걸쳐 볼츠만 머신을 설명했음
    “제한 볼츠만 머신은 가시 뉴런과 은닉 뉴런이 서로 연결되어 있지 않은 특수한 경우”라는 문구는 틀렸음. 이 표현은 가시 뉴런이 은닉 뉴런과 연결되어 있지 않다는 뜻처럼 들림
    올바른 표현은 “가시 뉴런끼리는 서로 연결되어 있지 않고, 은닉 뉴런끼리도 서로 연결되어 있지 않다”임. 또는 “가시 뉴런과 은닉 뉴런은 각자 자기 유형 내부의 연결을 갖지 않는다”라고 할 수 있음

    • 그렇게 보면 그냥 다층 퍼셉트론과 뭐가 다른지 잘 모르겠음. 볼츠만 머신은 뭐가 다른가?
      수정: 됐음. 입문 개요를 보려면 위로 스크롤해야 한다는 걸 몰랐음
      0xTJ의 [flagged][dead] 댓글처럼, 스크롤을 가로채거나 재발명하려는 시도는 바람직하지 않다는 말이 정확함