- 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·âm và lấ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
- Giai đoạn dương: lấy mẫu lớp ẩn h(0) từ P(h | v(0)=dữ liệu)
- 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
Ý 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
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
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)
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
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”
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