2 điểm bởi GN⁺ 2025-05-17 | 1 bình luận | Chia sẻ qua WhatsApp
  • Giới thiệu ngắn gọn về cấu trúc và mục đích của máy Boltzmann
  • Định nghĩa hàm năng lượng và phân phối xác suất bằng công thức
  • Suy ra quy tắc cập nhật của trọng số và bias thông qua vi phân
  • Giải thích phương pháp xấp xỉ kỳ vọng của mô hình bằng giai đoạn dương·âmlấy mẫu Gibbs
  • Cuối cùng tổng hợp toàn bộ thuật toán Contrastive Divergence

Khái niệm về máy Boltzmann và Contrastive Divergence

  • Trong máy Boltzmann có lớp đầu vào (visible layer), lớp ẩn (hidden layer), cùng với ma trận trọng số kết nối chúng và vector bias của mỗi lớp

Hàm năng lượng và phân phối xác suất

  • Hàm năng lượng được định nghĩa dưới dạng ma trận như sau

    E(v, h) = -ΣiΣj wij vi hj - Σi bi vi - Σj cj hj
    • v: vector lớp quan sát, h: vector lớp ẩn, w: trọng số, b/c: bias của từng lớp
  • Phân phối kết hợp của máy Boltzmann là

    P(v, h) = (1/Z) * exp(-E(v, h))
    • Z (hàm phân hoạch) có vai trò chuẩn hóa phân phối xác suất

Log-likelihood và vi phân

  • Việc học được tiến hành bằng cách cực đại hóa likelihood của dữ liệu huấn luyện

    log(P(v)) = log(Σh exp(-E(v, h))) - log(Z)
  • Đạo hàm riêng của log-likelihood theo trọng số wij là

    ∂(log P(v))/∂wij = <vi hj>data - <vi hj>model
    • < · >data: kỳ vọng trên dữ liệu thực
    • < · >model: kỳ vọng trên dữ liệu do mô hình tạo ra

Quy tắc học cho trọng số và bias

  • Trọng số và bias được cập nhật như sau
    • Δwij = η(<vi hj>data - <vi hj>model)
    • Δbi = η(<vi>data - <vi>model)
    • Δcj = η(<hj>data - <hj>model)
    • η là tốc độ học

Thuật toán Contrastive Divergence

  • Vì kỳ vọng của mô hình < · >model khó tính trực tiếp nên sử dụng lấy mẫu Gibbs
  • Contrastive Divergence xấp xỉ theo quy trình sau
    1. Giai đoạn dương: lấy mẫu lớp ẩn h(0) từ P(h | v(0)=dữ liệu)
    2. Giai đoạn âm: lặp lại lấy mẫu Gibbs k lần
    • Lần lượt lấy mẫu v(t+1) ~ P(v | h(t)), h(t+1) ~ P(h | v(t))
  • Khi cập nhật, sử dụng chênh lệch giữa kỳ vọng trên dữ liệu và kỳ vọng của mô hình
    • Δwij = η(<vi hj>data - <vi hj>model)
    • Δbi = η(<vi>data - <vi>model)
    • Δcj = η(<hj>data - <hj>model)

Tóm tắt

  • Bản chất việc học của máy Boltzmann là, với vai trò một mô hình dựa trên năng lượng, giảm chênh lệch kỳ vọng giữa dữ liệu thực và phân phối do mô hình sinh ra
  • Contrastive Divergence là phương pháp huấn luyện cốt lõi giúp xấp xỉ chênh lệch này nhanh và hiệu quả
  • Thông qua lấy mẫu Gibbs, nó đóng vai trò kết nối phân phối của mô hình với dữ liệu thực; lặp lại quá trình này để cập nhật trọng số và bias sao cho máy Boltzmann có thể biểu diễn dữ liệu tốt hơn

1 bình luận

 
GN⁺ 2025-05-17
Ý kiến trên Hacker News
  • Theo hiểu biết của tôi, Harmonium (Smolensky) là restricted Boltzmann machine đầu tiên, và đó là một ý tưởng tối đa hóa “harmony” thay vì tối thiểu hóa “energy”. Khi Smolensky, Hinton và Rummelhart cộng tác, họ gọi nó là “goodness of fit”. Bài báo về Harmonium thực sự rất đáng đọc. Hinton đã trở thành một siêu sao trong giới AI, còn Smolensky thì viết một cuốn sách dài liên quan đến ngôn ngữ học. Tôi tò mò không biết có ai biết thêm về lịch sử này không

  • Một bài viết thú vị giới thiệu về David Ackley. Ngoài ra cũng đáng để xem qua T2 Tile Project

    • Điểm mấu chốt là có rất nhiều người tham gia vào những bước tiến quan trọng như thế này. Nghiên cứu sinh sau đại học đóng góp rất nhiều, và công trình họ làm sau này được phát triển thêm. Tôi không hiểu vì sao ở Mỹ người ta lại coi nghiên cứu là lãng phí, trong khi nghiên cứu đã thúc đẩy mọi thứ tiến lên rất nhiều
  • Tôi là tác giả. Cảm ơn vì rất nhiều bình luận, tôi không ngờ nó lại được quan tâm đến vậy. Tôi đang sửa các lỗi chính tả, khoảng trắng, vấn đề cuộn trang, v.v., cảm ơn mọi người đã báo

    • Đã sửa xong lỗi chính tả, giờ nhìn trên di động dễ chịu hơn nhiều
  • Tôi đọc nhầm tiêu đề thành "A Tiny Boltzmann Brain". Bộ não tự nhiên của tôi lập tức giải quyết sự nhầm lẫn này. Tôi đoán đây sẽ là một thí nghiệm kiểm tra xem có thể gán ngẫu nhiên trọng số cho một mô hình cực nhỏ để làm ra thứ gì đó có ý nghĩa hay không. Tôi nghĩ mô hình càng nhỏ thì xác suất xuất hiện thứ gì đó thú vị từ việc sinh ngẫu nhiên càng cao một cách tương đối. Dù đoán sai, tôi vẫn không nản. Tôi đề xuất một họ mô hình mới tên là “Unbiased-Architecture Instant Boltzmann Model” (UA-IBM). Tôi hình dung rằng một ngày nào đó khi có máy tính lượng tử đủ lớn, chúng ta có thể chồng toàn bộ tập dữ liệu cùng mọi tham số và kiến trúc của mô hình vào một trạng thái lượng tử để suy luận tất cả trong một lần. Có ai còn qubit dư để thử thí nghiệm này không? (Mỉa mai ở chỗ mọi thứ đều có tính lượng tử, nhưng hiện tại vẫn rất khó để khai thác cho đúng nghĩa. Và tôi cũng tưởng tượng nếu một nền văn minh ngoài hành tinh phát triển từ một cảm biến lượng tử đơn lẻ thành những sinh thể có toàn bộ hệ thần kinh lượng tử, thì họ sẽ có lộ trình xã hội và công nghệ như thế nào)

    • Tội nghiệp những dạng sống lượng tử. Họ bị định mệnh buộc phải luôn chờ tính toán rất lâu vì không thể tiếp cận các mô hình tính toán nhanh hơn tốc độ tư duy của chính mình
    • Xin lưu ý rằng máy tính lượng tử không hoạt động theo cách đó
  • Phần giải thích rất hay. Tiện nói luôn là thao tác cuộn chuột quá nhạy (có lẽ trên di động thì ổn hơn). Mỗi lần cuộn là nó nhảy về trang đầu hoặc trang cuối nên khá bất tiện. May là tôi vẫn có thể đọc hết bằng bàn phím

  • Nếu tôi hiểu đúng, khác với các mạng nơ-ron ngày nay, việc cập nhật trọng số không dùng forward/backward pass dựa trên gradient mà cần gibbs sampling. Tôi muốn biết vì sao lại như vậy

    • Theo tôi, gibbs sampling được dùng để xấp xỉ kỳ vọng theo phân phối của mô hình. Để tính gradient của log likelihood thì cần tích phân trên phân phối, mà không thể tính trực tiếp được. Nó tương tự như việc lấy các mẫu đại diện bằng MCMC trong VAE. Trong deep learning, ta ước lượng gradient qua các batch của tập dữ liệu, còn với RBM thì cần kỳ vọng của phân phối xác suất được mô hình hóa một cách tường minh
    • Tôi không phải chuyên gia, nhưng có học chính quy một chút về Bayesian. Gibbs thường được dùng khi gradient không rõ ràng hoặc khi muốn khôi phục chính phân phối đó. Mỗi visible node phụ thuộc vào hidden node, và hidden node cũng ảnh hưởng lại visible node, nên gradient trở nên rất phức tạp. Vì thế dùng gibbs sampling dựa trên marginal likelihood đơn giản hơn nhiều
    • Có thể tôi sai, nhưng tôi nghĩ là do cấu trúc vô hướng của RBM. Không giống feed-forward network, ở đây không thể tạo computational graph
  • Bài này khiến tôi nhớ lại chuyện cũ. Năm 1990, tôi từng dùng void pointer để tạo một mảng node mạng nơ-ron rồi cài đặt Boltzmann machine và perceptron bằng C. Hồi đó, ứng dụng của “AI” là dự đoán nốt tiếp theo trong giai điệu MIDI, hoặc nhận diện hình dạng nốt nhạc như minim, crotchet, quaver trong vùng điểm 5x9. Tỷ lệ nhận diện 85% khi ấy đã được xem là đủ “tốt”

    • Việc nhận diện hình nốt nhạc trong vùng điểm 5x9 nghe rất thú vị. Cảm giác như tự tay triển khai mọi thứ từ đầu, giống ví dụ neural network của 3Blue1Brown. Nếu kết hợp với thứ như Chuck thì ngày nay còn có thể làm chương trình kiểu này chạy phía client ngay trong trình duyệt
    • Tôi cũng tò mò không biết âm thanh đầu ra có nghe ra nhạc hay không
  • Bài viết dễ hiểu và rõ ràng. Gợi lại rất nhiều ký ức. Quảng bá hơi ngượng chút, nhưng trước đây tôi từng làm một video trực quan hóa quá trình huấn luyện RBM

  • Một bản demo thực sự gọn gàng. Tôi nhớ hồi xưa từng nghe nhiều bài giảng về Boltzmann machine trong khóa học mạng nơ-ron của Geoff Hinton. Có một điểm cần nói là cách diễn đạt kiểu “restricted Boltzmann machine không có kết nối giữa các nơ-ron visible và hidden” là không chính xác. Nó có thể khiến người đọc tưởng như visible node và hidden node không hề nối với nhau. Nói chính xác hơn là không có kết nối giữa các node cùng loại, tức là visible với visible hoặc hidden với hidden. Hoặc có thể nói rằng visible và hidden node không có kết nối nội bộ trong cùng loại của chính chúng

    • Khi nghe câu “không có kết nối nội bộ giữa các nơ-ron visible/hidden”, tôi đã hơi bối rối kiểu vậy thì khác gì MLP. Nhưng rồi tôi mới nhận ra phải cuộn ngược lên phần mở đầu. Và đúng là việc tự làm mới hoặc sửa cơ chế cuộn trang thường không phải ý hay lắm