Máy Boltzmann

**Máy Boltzmann** (còn gọi là **mô hình Sherrington–Kirkpatrick với trường ngoài** hoặc **mô hình Ising ngẫu nhiên**), được đặt tên theo Ludwig Boltzmann, là một mô hình "kính xoay" với trường ngoài, tức là mô hình Sherrington–Kirkpatrick, một dạng mô hình Ising ngẫu nhiên. Đây là một kỹ thuật từ cơ học thống kê được áp dụng trong khoa học nhận thức. Nó cũng được phân loại là một trường ngẫu nhiên Markov.

Máy Boltzmann có ý nghĩa lý thuyết đặc biệt vì cách hoạt động theo quy tắc Hebb, một quy tắc học tập mô phỏng sự liên kết giữa các tế bào thần kinh. Thuật toán huấn luyện của nó dựa trên cách các tế bào thần kinh kết nối với nhau. Ngoài ra, máy Boltzmann có thể hoạt động song song và có những điểm tương đồng với các quá trình vật lý đơn giản. Mặc dù máy Boltzmann với các kết nối không giới hạn chưa được chứng minh là có ích trong các bài toán thực tế của học máy hoặc suy luận, nếu các kết nối được giới hạn một cách hợp lý, nó có thể giúp giải quyết được các vấn đề thực tế.

Tên gọi "Máy Boltzmann" bắt nguồn từ phân phối Boltzmann trong cơ học thống kê, được sử dụng trong quá trình lấy mẫu của máy này. Máy Boltzmann trở nên nổi tiếng nhờ Geoffrey Hinton, Terry Sejnowski và Yann LeCun trong cộng đồng khoa học nhận thức, đặc biệt là trong học máy, như một phần của "mô hình dựa trên năng lượng" (EBM). Họ sử dụng khái niệm Hamilton từ các mô hình vật lý để định nghĩa cách máy học.

## Cấu trúc

Máy Boltzmann, giống như mô hình Sherrington–Kirkpatrick, là một mạng lưới các đơn vị (giống như các tế bào thần kinh) được liên kết với nhau. Năng lượng tổng thể (Hamilton) của toàn mạng lưới được xác định theo một công thức. Kết quả của mỗi đơn vị là nhị phân, tức là nó có thể có hai trạng thái: "bật" hoặc "tắt" (0 hoặc 1). Các kết nối giữa các đơn vị được chọn ngẫu nhiên. Năng lượng toàn cục E trong máy Boltzmann được tính như sau, tương tự với cách tính trong mạng Hopfield và mô hình Ising:

:E = -\left(\sum_{i

Trong đó:
* w_{ij} là sức mạnh của kết nối giữa đơn vị j và đơn vị i.
* s_i là trạng thái, s_i \in \{0,1\}, của đơn vị i.
* \theta_i là độ lệch của đơn vị i trong hàm năng lượng tổng thể. (-\theta_i là ngưỡng kích hoạt cho đơn vị đó.)

Thông thường, các giá trị trọng số w_{ij} được sắp xếp thành một ma trận đối xứng W=[w_{ij}] và các giá trị trên đường chéo của ma trận sẽ bằng 0.

## Xác suất trạng thái của đơn vị

Khi một đơn vị i chuyển từ trạng thái 0 (tắt) sang trạng thái 1 (bật), sự thay đổi năng lượng của hệ thống, ký hiệu là \Delta E_i, có thể tính bằng công thức:

:\Delta E_i = \sum_{j>i} w_{ij} \, s_j + \sum_{j

Công thức này cho ta biết sự khác biệt giữa năng lượng khi đơn vị tắt và khi bật:

:\Delta E_i = E_\text{i=off} - E_\text{i=on}

Bây giờ, ta dùng tính chất Boltzmann để liên kết năng lượng của một trạng thái với xác suất của nó. Năng lượng càng thấp thì xác suất trạng thái đó xảy ra càng cao:

:\Delta E_i = -k_B\,T\ln(p_\text{i=off}) - (-k_B\,T\ln(p_\text{i=on}))

Ở đây, k_B là hằng số Boltzmann, và T là nhiệt độ giả định. Ta có thể đơn giản hóa:

:\frac{\Delta E_i}{T} = \ln(p_\text{i=on}) - \ln(p_\text{i=off})
:\frac{\Delta E_i}{T} = \ln(p_\text{i=on}) - \ln(1 - p_\text{i=on})
:\frac{\Delta E_i}{T} = \ln\left(\frac{p_\text{i=on}}{1 - p_\text{i=on}}\right)
:-\frac{\Delta E_i}{T} = \ln\left(\frac{1 - p_\text{i=on}}{p_\text{i=on}}\right)
:-\frac{\Delta E_i}{T} = \ln\left(\frac{1}{p_\text{i=on}} - 1\right)
:\exp\left(-\frac{\Delta E_i}{T}\right) = \frac{1}{p_\text{i=on}} - 1

Giải phương trình này, ta tìm được xác suất mà đơn vị i đang bật:

:p_\text{i=on} = \frac{1}{1+\exp(-\frac{\Delta E_i}{T})}

Ở đây, T gọi là nhiệt độ của hệ thống. Công thức trên chính là cách tạo ra hàm logistic dùng để tính xác suất trong máy Boltzmann.

## Trạng thái cân bằng

Mạng hoạt động bằng cách chọn một đơn vị và thay đổi trạng thái của nó nhiều lần. Khi mạng đã chạy đủ lâu ở một nhiệt độ cố định, xác suất của mỗi trạng thái mạng chỉ phụ thuộc vào năng lượng của nó theo phân phối Boltzmann. Điều này có nghĩa là log của xác suất các trạng thái mạng sẽ tuyến tính với năng lượng của chúng. Khi mạng đạt đến "trạng thái cân bằng nhiệt", các xác suất này không còn phụ thuộc vào trạng thái ban đầu.

Nếu mạng chạy từ nhiệt độ cao và từ từ giảm xuống, nó có thể hội tụ về một trạng thái mà năng lượng của nó nằm gần mức tối thiểu. Quá trình này gọi là làm nguội mô phỏng (simulated annealing).

Để huấn luyện mạng, ta cần điều chỉnh các trọng số sao cho các trạng thái tổng thể có xác suất cao nhất cũng có năng lượng thấp nhất. Điều này được thực hiện qua quá trình huấn luyện.

## Huấn luyện

Các đơn vị trong máy Boltzmann được chia thành "hiển thị" (visible), V, và "ẩn" (hidden), H. Các đơn vị hiển thị là những đơn vị nhận thông tin từ bên ngoài. Tập huấn luyện là tập hợp các vector nhị phân trên tập V. Phân phối xác suất trên tập huấn luyện được ký hiệu là P^{+}(V).

Phân phối trên các trạng thái tổng thể của mạng, khi mạng đã đạt trạng thái cân bằng, ký hiệu là P^{-}(V).

Mục tiêu là làm sao cho phân phối do máy sinh ra P^{-}(V) gần giống với phân phối "thực" P^{+}(V). Mức độ giống nhau này được đo bằng Phân kỳ Kullback–Leibler, ký hiệu là G:

:G = \sum_{v}{P^{+}(v)\ln\left({\frac{P^{+}(v)}{P^{-}(v)}}\right)}

Tổng này lấy trên tất cả các trạng thái của V. G phụ thuộc vào các trọng số vì chúng quyết định năng lượng, mà năng lượng lại quyết định P^{-}(v). Để tối ưu G, ta sử dụng thuật toán suy giảm độ dốc, điều chỉnh từng trọng số bằng cách trừ đi đạo hàm riêng của G theo trọng số đó.

Quá trình huấn luyện máy Boltzmann có hai giai đoạn luân phiên nhau. Giai đoạn đầu gọi là "giai đoạn dương" (positive phase), ở đó các đơn vị hiển thị được ghim vào các vector từ tập huấn luyện (theo P^{+}). Giai đoạn còn lại gọi là "giai đoạn âm" (negative phase), khi mạng được phép chạy tự do, nghĩa là chỉ có các đơn vị đầu vào bị cố định, còn các đơn vị khác thì tự do thay đổi. Đạo hàm riêng của G theo trọng số w_{ij} là:

:\frac{\partial{G}}{\partial{w_{ij}}} = -\frac{1}{R}[p_{ij}^{+}-p_{ij}^{-}]

Trong đó:
* p_{ij}^{+} là xác suất mà các đơn vị *i* và *j* đều bật khi máy đang ở trạng thái cân bằng trong giai đoạn dương.
* p_{ij}^{-} là xác suất mà các đơn vị *i* và *j* đều bật khi máy đang ở trạng thái cân bằng trong giai đoạn âm.
* R đại diện cho tốc độ học.

Kết quả này dựa trên thực tế rằng ở trạng thái cân bằng nhiệt, xác suất P^{-}(s) của bất kỳ trạng thái toàn cục nào s khi mạng tự chạy là phân phối Boltzmann.

Quy tắc học này có tính khả thi sinh học vì chỉ cần thông tin "cục bộ" để thay đổi các trọng số. Tức là, kết nối (synap, theo sinh học) không cần thông tin gì khác ngoài hai neuron mà nó kết nối. Điều này thực tế hơn về mặt sinh học so với thông tin mà một kết nối cần trong nhiều thuật toán huấn luyện mạng nơ-ron khác, chẳng hạn như truyền ngược.

Việc huấn luyện máy Boltzmann không sử dụng thuật toán EM, vốn được sử dụng nhiều trong học máy. Bằng cách tối thiểu hóa phân kỳ KL, nó tương đương với việc tối đa hóa xác suất log của dữ liệu. Do đó, quy trình huấn luyện thực hiện suy giảm độ dốc trên xác suất log của dữ liệu quan sát. Điều này trái ngược với thuật toán EM, nơi phân phối hậu nghiệm của các nút ẩn phải được tính trước khi tối đa hóa giá trị kỳ vọng của xác suất đầy đủ của dữ liệu trong bước M.

Huấn luyện các độ lệch cũng tương tự, nhưng chỉ sử dụng hoạt động của một nút duy nhất:

:\frac{\partial{G}}{\partial{\theta_{i}}} = -\frac{1}{R}[p_{i}^{+}-p_{i}^{-}]

## Vấn đề
Về mặt lý thuyết, máy Boltzmann là một môi trường tính toán khá chung. Ví dụ, nếu được huấn luyện trên các bức ảnh, máy sẽ mô hình hóa phân phối của các bức ảnh và có thể sử dụng mô hình đó để hoàn thiện một bức ảnh bị thiếu.

Tuy nhiên, máy Boltzmann gặp phải một vấn đề thực tế nghiêm trọng, cụ thể là dường như nó ngừng học đúng cách khi máy được mở rộng lên kích thước lớn hơn một kích thước tầm thường. Điều này là do những hiệu ứng quan trọng, cụ thể là:

* Thời gian cần thiết để thu thập thống kê cân bằng tăng theo cấp số nhân với kích thước của máy, và với độ lớn của các trọng số kết nối.
* Trọng số kết nối trở nên dễ thay đổi hơn khi các đơn vị được kết nối có xác suất kích hoạt nằm giữa không và một, dẫn đến một cái bẫy phương sai. Hiệu ứng tổng thể là tiếng ồn khiến các trọng số kết nối đi theo một đường đi ngẫu nhiên cho đến khi các hoạt động đạt đến trạng thái bão hòa.

## Các loại
### Máy Boltzmann hạn chế

Mặc dù việc học là không thực tế trong các máy Boltzmann thông thường, nó có thể trở nên hiệu quả trong một máy Boltzmann hạn chế (RBM) không cho phép có các kết nối nội lớp giữa các đơn vị ẩn và hiển thị, tức là không có kết nối giữa các đơn vị hiển thị với nhau và các đơn vị ẩn với nhau. Sau khi huấn luyện một RBM, hoạt động của các đơn vị ẩn có thể được xử lý như dữ liệu để huấn luyện một RBM cấp cao hơn. Phương pháp xếp chồng RBM này cho phép huấn luyện nhiều lớp đơn vị ẩn một cách hiệu quả và là một trong những chiến lược học sâu phổ biến nhất. Mỗi lớp mới được thêm vào sẽ cải thiện mô hình tạo sinh.

Một phần mở rộng của máy Boltzmann hạn chế cho phép sử dụng dữ liệu thực thay vì dữ liệu nhị phân.

Một ví dụ về ứng dụng thực tế của RBM là trong nhận dạng giọng nói.

### Máy Boltzmann sâu
Máy Boltzmann sâu (DBM) là một loại trường ngẫu nhiên Markov cặp nhị phân (đồ thị phi hướng xác suất dạng đồ thị) với nhiều lớp ẩn ngẫu nhiên. Đây là một mạng lưới các đơn vị nhị phân đối xứng liên kết ngẫu nhiên. Nó bao gồm một tập hợp các đơn vị hiển thị \boldsymbol{\nu} \in \{0,1\}^D và các lớp đơn vị ẩn \boldsymbol{h}^{(1)} \in \{0,1\}^{F_1}, \boldsymbol{h}^{(2)} \in \{0,1\}^{F_2}, \ldots, \boldsymbol{h}^{(L)} \in \{0,1\}^{F_L}. Không có kết nối nào liên kết các đơn vị của cùng một lớp (giống như RBM). Đối với , xác suất được gán cho vector  là
: p(\boldsymbol{\nu}) = \frac{1}{Z}\sum_h e^{\sum_{ij}W_{ij}^{(1)}\nu_i h_j^{(1)} + \sum_{jl}W_{jl}^{(2)}h_j^{(1)}h_l^{(2)}+\sum_{lm}W_{lm}^{(3)}h_l^{(2)}h_m^{(3)}},
trong đó \boldsymbol{h} = \{\boldsymbol{h}^{(1)}, \boldsymbol{h}^{(2)}, \boldsymbol{h}^{(3)} \} là tập hợp các đơn vị ẩn, và \theta = \{\boldsymbol{W}^{(1)}, \boldsymbol{W}^{(2)}, \boldsymbol{W}^{(3)} \}  là các tham số của mô hình, đại diện cho tương tác giữa các đơn vị hiển thị và ẩn, cũng như tương tác giữa các đơn vị ẩn với nhau. Trong một DBN (deep belief network) chỉ có hai lớp trên cùng tạo thành một máy Boltzmann hạn chế (là một mô hình đồ thị dạng đồ thị phi hướng), trong khi các lớp dưới tạo thành một mô hình tạo sinh theo hướng. Trong DBM, tất cả các lớp đều đối xứng và phi hướng.

Giống như các mạng niềm tin sâu (DBNs), máy Boltzmann sâu (DBMs) có thể học các biểu diễn phức tạp và trừu tượng từ dữ liệu, giúp ích cho các nhiệm vụ như nhận dạng giọng nói. DBMs sử dụng dữ liệu nhãn ít để tinh chỉnh kết quả từ một lượng lớn dữ liệu không nhãn. Khác với DBNs và mạng thần kinh tích chập sâu, DBMs học theo cả hai hướng: từ dưới lên và từ trên xuống. Điều này giúp DBMs hiểu rõ hơn về cấu trúc của dữ liệu đầu vào.

Tuy nhiên, DBMs có tốc độ học rất chậm, ảnh hưởng đến hiệu quả và khả năng của chúng. Vì việc học tối ưu chính xác là không thể, DBMs chỉ có thể sử dụng phương pháp học xấp xỉ. Một cách khác là dùng suy luận trường trung bình để dự đoán dữ liệu, bằng cách dùng Markov chain Monte Carlo (MCMC). Suy luận xấp xỉ này chậm hơn từ 25 đến 50 lần so với cách truyền từ dưới lên trong DBMs, làm cho việc tối ưu với dữ liệu lớn rất khó khăn và hạn chế khả năng của DBMs trong việc tạo biểu diễn đặc trưng.

### RBMs dạng spike-and-slab
RBM dạng spike-and-slab (*ss*RBM) được phát triển để học với các đầu vào có giá trị thực, giống như Gaussian RBMs. Mô hình này sử dụng các biến tiềm ẩn nhị phân để mô phỏng dữ liệu có giá trị liên tục. Giống như các RBMs cơ bản, ssRBM cũng là một đồ thị hai phía, nhưng các đơn vị đầu vào (hiển thị) có giá trị thực. Sự khác biệt nằm ở lớp ẩn: mỗi đơn vị ẩn có một biến spike nhị phân và một biến slab giá trị thực. Một spike là một khối xác suất rời rạc ở 0, trong khi slab là một mật độ trên miền liên tục; hỗn hợp của chúng tạo ra một phân phối tiên nghiệm.

Một phiên bản mở rộng của ssRBM được gọi là μ-ssRBM, cung cấp khả năng mô hình hóa mạnh hơn nhờ thêm các thành phần vào hàm năng lượng. Một trong các thành phần này cho phép mô hình dự đoán biến spike bằng cách tính trung bình các biến slab dựa trên một quan sát.

### Trong toán học

Trong toán học, phân phối Boltzmann còn được gọi là Phân bố Gibbs. Trong Thống kê và Học máy, nó được gọi là mô hình log-tuyến tính. Trong Học sâu, phân phối Boltzmann được sử dụng để lấy mẫu trong các mạng nơ-ron ngẫu nhiên như máy Boltzmann.

## Lịch sử
Máy Boltzmann dựa trên mô hình "spin glass" Sherrington–Kirkpatrick. John Hopfield là người tiên phong khi ông đã áp dụng các phương pháp từ cơ học thống kê, như lý thuyết "spin glass" (kính xoay), để nghiên cứu bộ nhớ liên kết vào năm 1982.

Những đóng góp ban đầu về việc ứng dụng mô hình dựa trên năng lượng vào khoa học nhận thức được thể hiện trong các bài báo của Hinton và Sejnowski. Trong một cuộc phỏng vấn năm 1995, Hinton cho biết vào đầu năm 1983, ông đã thiết kế một thuật toán học để phục vụ cho buổi thuyết trình về "làm nguội mô phỏng" trong mạng Hopfield, và kết quả là sự ra đời của thuật toán máy Boltzmann.

Ý tưởng dùng mô hình Ising với phương pháp lấy mẫu Gibbs "làm nguội" đã được sử dụng trong dự án Copycat của Douglas Hofstadter vào năm 1984.

Cách trình bày của máy Boltzmann liên quan đến các thuật ngữ từ vật lý như "năng lượng", do mô hình này có sự tương đồng với cơ học thống kê. Việc dùng các thuật ngữ này đã giúp áp dụng nhiều khái niệm và phương pháp từ cơ học thống kê. Các đề xuất sử dụng phương pháp làm nguội mô phỏng để suy luận có vẻ đã xuất hiện độc lập ở nhiều nơi.

Những ý tưởng tương tự, nhưng thay đổi một chút trong hàm năng lượng, cũng được tìm thấy trong "Lý thuyết hòa hợp" (Harmony Theory) của Paul Smolensky. Mô hình Ising có thể được mở rộng thành trường ngẫu nhiên Markov, và được áp dụng rộng rãi trong Ngôn ngữ học, Robot học, Thị giác máy tính và Trí tuệ nhân tạo.

Năm 2024, John J. Hopfield và Geoffrey E. Hinton đã nhận Giải Nobel Vật lý nhờ những đóng góp nền tảng của họ cho Học máy, bao gồm cả máy Boltzmann.

## Tham khảo

## Đọc thêm
* 
* 
* 
* Kothari P (2020): https://www.forbes.com/sites/tomtaulli/2020/02/02/coronavirus-can-ai-artificial-intelligence-make-a-difference/?sh=1eca51e55817
* 

## Liên kết ngoài
*Bài viết Scholarpedia của Hinton về máy Boltzmann 
*Bài nói chuyện tại Google của Geoffrey Hinton