2P by GN⁺ 17시간전 | ★ 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 의견
  • 내 이해로는 Harmonium(Smolensky)이 최초의 restricted Boltzmann machine이며, “energy”를 최소화하는 대신 “harmony”를 최대화했던 개념임. Smolensky, Hinton, Rummelhart가 협업할 때는 이를 “goodness of fit”이라고 부름. Harmonium 논문은 정말 인상적인 읽을거리임. Hinton은 인공지능계 슈퍼스타가 되었고, Smolensky는 언어학 관련 긴 책을 집필함. 혹시 이 역사에 대해 더 아는 분이 있는지 궁금함

  • David Ackley에 대한 흥미로운 기사 소개. 또한 T2 Tile Project도 확인해 볼 만함

    • 이런 중요한 발전에는 정말 많은 사람들이 참여한다는 점이 핵심임. 대학원생들이 정말 많은 기여를 하는데, 그들이 한 연구가 나중에 더 발전함. 왜 미국에서는 연구를 낭비라고 생각하는지 모르겠음, 연구가 모든 것을 크게 진전시켰는데도 불구임
  • 글쓴이임. 많은 댓글에 감사함, 이렇게 인기 있을 줄은 몰랐음. 오타, 여백, 스크롤 문제 등 수정 중, 제보해줘서 고마움

    • 오타 수정 완료, 이제 모바일에서 훨씬 보기 좋아짐
  • 제목을 "A Tiny Boltzmann Brain"으로 착각함. 내 자연스러운 두뇌는 즉각적으로 이 혼란을 해결함. 아주 작은 모델에 무작위로 가중치를 부여해서 의미 있는 무언가를 할 수 있는지 테스트하는 실험일 거라고 추측함. 모델이 작을수록 무작위 생성에서 흥미로운 게 나올 확률이 상대적으로 높다는 생각임. 내 추측이 틀렸지만, 여전히 용기를 잃지 않음. “Unbiased-Architecture Instant Boltzmann Model” (UA-IBM)이라는 새로운 모델 계열을 제안함. 언젠가 충분히 큰 양자 컴퓨터가 생기면 데이터셋 전체를 모델의 모든 파라미터와 아키텍처를 양자 상태로 중첩시켜 한 번에 추론할 수 있을 것이라는 상상임. 혹시 이런 실험을 해볼 남는 qubit 있는 사람 있는지? (참고로, 모든 게 양자적이지만 아직은 실제로 제대로 활용하기 어려운 현실이라는 점이 아이러니임. 그리고 외계 문명이 단일 양자 센서부터 발전해 전체 양자 신경계를 가진 존재가 된다면 어떤 사회와 기술적 경로를 가질지 상상해봄)

    • 불쌍한 양자 생명체들. 자기 사고 속도보다 빠른 연산 모델에 접근할 수 없어서 항상 오랜 시간 계산을 기다리는 운명이 됨
    • 양자 컴퓨터가 그렇게 작동하지 않는다는 점을 지적함
  • 설명이 아주 좋음. 참고로 마우스 스크롤이 지나치게 민감함(아마 모바일에서는 괜찮을 것으로 예상). 스크롤할 때마다 첫 페이지와 마지막 페이지로 튀어서 불편했음. 다행히 키보드 입력으로는 정상적으로 전체를 읽을 수 있었음

  • 내 이해가 맞다면, 오늘날 사용하는 신경망과 달리 weight update를 위해 gradient 기반의 forward/backward pass 대신 gibbs sampling이 필요함. 왜 그런지 아는 분이 있는지 궁금함

    • 내 생각에도 gibbs sampling은 모델 분포에 대한 기대값을 근사하기 위해 사용함. log likelihood의 gradient를 계산하려면 분포의 적분이 필요한데, 직접 계산은 불가능함. VAE에서 MCMC로 대표 샘플을 뽑는 것과 비슷함. 딥러닝에서는 데이터셋 배치를 통해 gradient를 추정하지만, RBM에서는 명시적으로 모델링한 확률분포의 기대값이 필요함
    • 전문가 아니지만 Bayesian 분야의 공식 교육을 약간 받아봄. gibbs는 gradient가 명확하지 않거나 분포 자체를 복원하고싶을 때 자주 사용함. 각 visible 노드가 hidden 노드에 의존하고, hidden 노드도 visible 노드에 영향을 주기 때문에 gradient가 매우 복잡해짐. 그래서 marginal likelihood를 기반으로 gibbs 샘플링을 사용하는 것이 훨씬 단순함
    • 내가 틀릴 수도 있지만, RBM의 undirected 구조 때문이라고 생각함. feed-forward network와 다르게 computational graph를 만들 수 없음
  • 이 글을 보니 예전 생각이 남. 1990년에 void pointer로 신경망 노드를 배열로 만든 뒤 C로 Boltzmann machine과 perceptron을 구현함. 그 당시 “AI”의 용도는 MIDI 멜로디에서 다음 음을 예측하거나, 5x9 점 영역에서 minim, crotchet, quaver 같은 음표 모양을 인식하는 것 등임. 85% 인식률이면 충분히 “좋음”으로 여겼음

    • 점이 5x9인 점 영역에서 음표 모양을 인식한다는 게 재미있음. 3Blue1Brown neural network 예제와 비슷하게 완전히 처음부터 직접 구현하는 느낌임. Chuck 같은 것을 조합하면 오늘날엔 브라우저에서 클라이언트 사이드로 이런 프로그램도 만들 수 있음
    • 결과물의 소리가 음악적으로 들렸는지도 궁금함
  • 글이 쉽고 명확했음. 옛 추억이 많이 떠오름. 부끄러운 홍보지만, RBM 학습 과정을 시각화한 영상을 예전에 만든 적 있음

  • 정말 깔끔한 데모임. 예전에 Geoff Hinton의 신경망 강의에서 Boltzmann machine에 대해 여러 강의 듣던 기억이 남. 한 가지 지적할 점은, “restricted Boltzmann machine은 visible과 hidden 뉴런이 서로 연결되어 있지 않다”라는 식의 설명이 잘못된 표현임. 마치 visible 노드와 hidden 노드가 서로 연결되어 있지 않은 것처럼 보일 수 있기 때문임. 정확히는 같은 유형 내에서, 즉 visible끼리 혹은 hidden끼리만 연결이 없다는 것임. 또는 visible과 hidden 노드는 자신과 같은 타입 내에서는 내부 연결이 없다고 설명할 수 있음

    • “visible/hidden 뉴런끼리는 내부 연결이 없음”이라는 말을 듣고, 그럼 그냥 MLP랑 뭐가 다르지 헷갈렸음. 근데 서론 부분을 위로 스크롤해야 한다는 사실을 뒤늦게 깨달았음. 그리고, 스크롤 구현을 새로 만들거나 고치는 것은 그다지 바람직하지 않다는 점이 정확하다고 봄