Cỗ máy Boltzmann rất nhỏ
(eoinmurray.info)- 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
Nhớ lại hồi năm 1990, khi tôi tạo “nơ-ron” bằng mảng con trỏ void trong C thuần để làm máy Boltzmann và perceptron
Những việc được gọi là “AI” lúc đó chỉ ở mức đoán nốt tiếp theo trong giai điệu MIDI, hoặc nhận dạng hình dạng nốt tròn, nốt trắng, nốt đen, nốt móc đơn trên lưới điểm 5×9; đạt độ chính xác 85% là đã được xem là “đủ tốt”
Đọc nốt nhạc từ khuông nhạc có các dòng kẻ nghe như một dự án thú vị. Đặc biệt nếu tự làm từ đầu, giống ví dụ mạng nơ-ron nhận dạng chữ số của 3Blue1Brown[1]
Kết hợp với thứ như Chuck[2] thì với công nghệ hiện nay còn có thể tạo một ứng dụng chạy hoàn toàn phía client
[1] - https://www.3blue1brown.com/lessons/neural-networks
[2] - https://chuck.stanford.edu/
Không biết đầu ra có nghe giống âm nhạc không
Theo tôi hiểu thì Harmonium (Smolensky) là máy Boltzmann hạn chế đầu tiên, nhưng thay vì tối thiểu hóa “năng lượng” thì nó tối đa hóa “sự hài hòa”
Khi Smolensky, Hinton và Rummelhart hợp tác, hình như họ gọi nó là “độ phù hợp”. Bài báo về Harmonium[1] rất đáng đọc; Hinton thì dĩ nhiên đã trở thành siêu sao, còn Smolensky viết những cuốn sách dài về ngôn ngữ học. Không biết có ai biết thêm về lịch sử này không
[1] https://stanford.edu/~jlmcc/papers/PDP/Volume%201/Chap6_PDP8...
Một bài viết thú vị về David Ackley: https://news.unm.edu/news/24-nobel-prize-in-physics-cited-gr...
T2 Tile Project cũng rất đáng xem
Giá trị của nghiên cứu sinh thường bị đánh giá thấp, nhưng thực tế họ đóng góp rất lớn và về sau còn phát triển nghiên cứu xa hơn. Nghiên cứu đã thúc đẩy rất nhiều thứ tiến lên, vậy mà tôi không hiểu vì sao nước Mỹ lại coi nghiên cứu như một sự lãng phí
Tôi đã đọc nhầm tiêu đề thành “A Tiny Boltzmann Brain”[0]
Tâm trí tự nhiên của tôi lập tức giải được câu đố. Tôi nghĩ đây là trường hợp lấy một mô hình rất nhỏ, gán trọng số sinh ngẫu nhiên rồi kiểm tra xem nó có làm được việc gì hữu ích không. Rốt cuộc, mô hình càng nhỏ thì việc sinh ngẫu nhiên thuần túy càng có khả năng tạo ra điều gì đó thú vị so với kích thước của nó
Tôi chấp nhận phần đính chính, nhưng không nản lòng. Tôi đề xuất một lớp mô hình mới tên là “Unbiased-Architecture Instant Boltzmann Model” (UA-IBM). Một ngày nào đó, khi có máy tính lượng tử đủ lớn, ta có thể đặt toàn bộ tập dữ liệu làm ràng buộc cổ điển của một mô hình được định nghĩa bởi N giá trị tuần tự hóa biểu diễn mọi tham số và cấu hình cấu trúc. Sau đó, để một hệ lượng tử có N qubit đặt mọi tham số và cấu trúc khả dĩ vào trạng thái chồng chập lượng tử, thực hiện một bước suy luận trên toàn bộ mẫu cổ điển, rồi làm sụp đổ kết quả để nhận lại các tham số và cấu trúc của mô hình tốt nhất hoặc gần tốt nhất dưới dạng cổ điển
Không biết có ai còn dư vài qubit để thử việc này không. Trớ trêu là mọi thứ đều là lượng tử, nhưng lại trơn tuột đến mức hiện ta gần như chưa tận dụng được
Với bối cảnh khoa học viễn tưởng, có thể tưởng tượng một loài ngoài hành tinh tiến hóa ra cảm biến lượng tử dùng một lần, rồi từ đó dẫn đến cả hệ cảm giác và hệ thần kinh lượng tử, cuối cùng phát triển thành trí tuệ lượng tử hoàn chỉnh ngay từ đầu. Không biết xã hội và quỹ đạo công nghệ như thế sẽ trông ra sao. Hy vọng họ ở trên quỹ đạo gần một hố đen, để tiến bộ bùng nổ chưa đe dọa chúng ta. Rồi một ngày họ thoát khỏi giếng hấp dẫn…
[0] https://en.wikipedia.org/wiki/Boltzmann_brain
Phần giải thích hay. Nhân tiện, vì lý do nào đó cuộn chuột quá nhạy
Tôi đoán thao tác vuốt trên di động có lẽ ổn, nhưng chưa kiểm tra. Mỗi lần định cuộn, nó lại nhảy từ “trang” đầu sang “trang” cuối, rồi ngược lại. May là nhập bằng bàn phím vẫn hoạt động nên tôi đọc được toàn bộ bài
Nếu tôi hiểu đúng, thay vì dùng lan truyền xuôi và lan truyền ngược dựa trên gradient như các mạng nơ-ron quen thuộc ngày nay, có vẻ nó cần lấy mẫu Gibbs để tính cập nhật trọng số
Không biết có ai hiểu vì sao không
Giá trị này cần để tính gradient của log likelihood, nhưng việc tích phân phân phối là khó xử lý. Nó tương tự cách dùng MCMC để rút các mẫu đại diện trong VAE. Trong các mạng nơ-ron kiểu deep learning, ta ước lượng gradient trên các batch của tập dữ liệu, chứ không phải trên một phân phối xác suất được mô hình hóa tường minh
Thông thường Gibbs được dùng khi gradient trực tiếp không đơn giản, hoặc khi bạn muốn tái tạo chính phân phối chứ không chỉ ước lượng điểm. Nó hữu ích khi có likelihood biên/điều kiện dễ lấy mẫu. Vì mỗi nút quan sát phụ thuộc vào từng nút ẩn và mỗi nút ẩn ảnh hưởng đến mọi nút quan sát, gradient trở nên rất lộn xộn; vì vậy lấy mẫu Gibbs để điều chỉnh dựa trên likelihood biên đơn giản hơn nhiều
Vì vậy không thể xây dựng đồ thị tính toán theo cùng cách như mạng nơ-ron lan truyền xuôi
Giải thích gọn gàng và hay. Gợi lại rất nhiều kỷ niệm cũ
Tự quảng cáo hơi ngại, nhưng vài năm trước tôi từng làm một bản trực quan hóa việc huấn luyện RBM: https://www.youtube.com/watch?v=lKAy_NONg3g
Demo rất hay. 15 năm trước ở đại học tôi đã học khóa mạng nơ-ron của Geoff Hinton, và ông ấy giải thích máy Boltzmann trong vài bài giảng
Câu “máy Boltzmann hạn chế là một trường hợp đặc biệt trong đó các nơ-ron quan sát và nơ-ron ẩn không được kết nối với nhau” là sai. Cách diễn đạt này nghe như thể các nơ-ron quan sát không được kết nối với nơ-ron ẩn
Cách đúng là “các nơ-ron quan sát không được kết nối với nhau, và các nơ-ron ẩn cũng không được kết nối với nhau”. Hoặc có thể nói “các nơ-ron quan sát và nơ-ron ẩn không có kết nối nội bộ trong chính loại của mình”
Sửa: được rồi. Tôi không biết là phải cuộn lên trên để xem phần tổng quan nhập môn
Như bình luận [flagged][dead] của 0xTJ, nói rằng việc chặn hoặc cố phát minh lại thao tác cuộn là không nên là hoàn toàn đúng