Máy Boltzmann hạn chế

**Máy Boltzmann hạn chế** (**restricted Boltzmann machine**, hoặc **RBM**) là một loại mô hình tạo sinh ngẫu nhiên của mạng thần kinh nhân tạo, nó có thể học các mẫu xác suất trên các dữ liệu đầu vào mà nó nhận được.

RBM ban đầu được Paul Smolensky giới thiệu với tên **Harmonium** vào năm 1986. Về sau, nó trở nên phổ biến khi Geoffrey Hinton và nhóm của ông phát triển cách học nhanh hơn cho RBM vào những năm 2000. RBM đã được sử dụng trong nhiều lĩnh vực khác nhau như giảm chiều dữ liệu, phân loại, lọc dữ liệu hợp tác, học đặc trưng, mô hình hóa chủ đề, nghiên cứu miễn dịch học, và thậm chí trong cơ học lượng tử.

RBM có thể được huấn luyện theo cả hai cách có giám sát hoặc không có giám sát, tùy thuộc vào loại nhiệm vụ cần thực hiện.

RBM là một dạng của máy Boltzmann, nhưng có một điểm khác biệt quan trọng: các nơ-ron trong RBM phải sắp xếp thành một mạng lưới hai phía. Điều này có nghĩa là:

* một cặp nút từ mỗi nhóm trong hai nhóm đơn vị (thường được gọi là các đơn vị "nhìn thấy" và "ẩn" tương ứng) có thể có kết nối đối xứng giữa chúng; và
* không có kết nối nào giữa các nút trong cùng một nhóm.

Ngược lại, **máy Boltzmann không bị hạn chế** có thể có các kết nối giữa các đơn vị ẩn. Điều này giúp việc đào tạo hiệu quả hơn bằng các thuật toán so với lớp máy Boltzmann thông thường, đặc biệt là thuật toán **phân kỳ đối nghịch** dựa trên suy giảm độ dốc.

Máy Boltzmann hạn chế cũng có thể được dùng trong các mạng học sâu. Cụ thể, mạng niềm tin sâu được tạo ra bằng cách "xếp chồng" các RBM, và có thể điều chỉnh lại mạng này bằng suy giảm độ dốc và truyền ngược.

## Cấu trúc
Loại RBM chuẩn có các đơn vị ẩn và đơn vị nhìn thấy có giá trị nhị phân (Boolean), với một ma trận trọng số W kích thước m \times n. Mỗi trọng số (w_{i,j}) của ma trận kết nối đơn vị nhìn thấy (đầu vào) v_i và đơn vị ẩn h_j. Ngoài ra, còn có các trọng số bù a_i cho v_i và b_j cho h_j. Với các trọng số và bù, *năng lượng* của một cấu hình (cặp vector Boolean)  được định nghĩa như sau:

:E(v,h) = -\sum_i a_i v_i - \sum_j b_j h_j -\sum_i \sum_j v_i w_{i,j} h_j

hoặc, theo dạng ma trận:

:E(v,h) = -a^{\mathrm{T}} v - b^{\mathrm{T}} h -v^{\mathrm{T}} W h.

Hàm năng lượng này tương tự với của mạng Hopfield. Cũng giống các máy Boltzmann khác, phân phối xác suất đồng thời cho các vector nhìn thấy và ẩn được định nghĩa dựa trên hàm năng lượng:

:P(v,h) = \frac{1}{Z} e^{-E(v,h)}

trong đó Z là một hằng số chuẩn hóa đảm bảo tổng tất cả xác suất là 1. Xác suất biên của một vector nhìn thấy là tổng của P(v,h) trên tất cả các cấu hình của lớp ẩn,

:P(v) = \frac{1}{Z} \sum_{\{h\}} e^{-E(v,h)},

và ngược lại. Vì RBM có cấu trúc đồ thị hai phía (không có kết nối trong cùng một lớp), các đơn vị ẩn hoạt động độc lập khi đã biết các đơn vị nhìn thấy, và ngược lại. Điều này có nghĩa là, với *m* đơn vị nhìn thấy và *n* đơn vị ẩn, xác suất có điều kiện của các đơn vị nhìn thấy , khi biết cấu hình của các đơn vị ẩn , là:

:P(v|h) = \prod_{i=1}^m P(v_i|h).

Ngược lại, xác suất có điều kiện của  khi biết  là:

:P(h|v) = \prod_{j=1}^n P(h_j|v).

Xác suất kích hoạt của từng đơn vị được cho bởi:

:P(h_j=1|v) = \sigma \left(b_j + \sum_{i=1}^m w_{i,j} v_i \right) và \,P(v_i=1|h) = \sigma \left(a_i + \sum_{j=1}^n w_{i,j} h_j \right)

trong đó \sigma là hàm sigmoid logistic.

Các đơn vị nhìn thấy của Máy Boltzmann hạn chế có thể là đa thức, dù các đơn vị ẩn tuân theo phân phối Bernoulli. Khi đó, hàm logistic cho các đơn vị nhìn thấy được thay bằng hàm softmax:

:P(v_i^k = 1|h) = \frac{\exp(a_i^k + \Sigma_j W_{ij}^k h_j)} {\Sigma_{k'=1}^K \exp(a_i^{k'} + \Sigma_j W_{ij}^{k'} h_j)}

trong đó *K* là số giá trị rời rạc mà các giá trị nhìn thấy có. Chúng được sử dụng trong mô hình chủ đề, và hệ thống gợi ý.

### Quan hệ với các mô hình khác
Máy Boltzmann Hạn chế là một dạng đặc biệt của máy Boltzmann và các trường ngẫu nhiên Markov.

Mô hình đồ thị của RBM tương ứng với phân tích nhân tố.

## Thuật toán huấn luyện

Máy Boltzmann hạn chế được huấn luyện để tối đa hóa các xác suất được gán cho một tập huấn luyện V (một ma trận mà mỗi hàng là một vector nhìn thấy v),

:\arg\max_W \prod_{v \in V} P(v)

hoặc tương đương, để tối đa hóa logarit kỳ vọng của một mẫu huấn luyện v được chọn ngẫu nhiên từ V:

:\arg\max_W \mathbb{E} \left[ \log P(v)\right]

Thuật toán phổ biến nhất để huấn luyện RBM, tức là tối ưu hóa ma trận trọng số W, là thuật toán phân kỳ đối nghịch (CD) do Hinton phát triển, ban đầu để huấn luyện các mô hình PoE (product of experts). 
Thuật toán này sử dụng kỹ thuật lấy mẫu Gibbs và nằm trong quy trình suy giảm độ dốc (tương tự như cách truyền ngược hoạt động khi huấn luyện mạng thần kinh tiến thẳng) để tính toán cập nhật trọng số.

Quy trình cơ bản của phân kỳ đối nghịch một bước (CD-1) cho một mẫu đơn lẻ có thể được tóm tắt như sau:

# Lấy một mẫu huấn luyện , tính toán xác suất của các đơn vị ẩn và lấy mẫu một vector kích hoạt ẩn  từ phân phối xác suất này.
# Tính tích ngoài của  và , gọi đó là *gradient dương*.
# Từ , lấy mẫu một bản dựng lại  của các đơn vị nhìn thấy, sau đó lại lấy mẫu các kích hoạt ẩn  từ đó. (Bước lấy mẫu Gibbs)
# Tính tích ngoài của  và  và gọi đó là *gradient âm*.
# Cập nhật ma trận trọng số W bằng cách lấy gradient dương trừ đi gradient âm, nhân với một hệ số học: \Delta W = \epsilon (vh^\mathsf{T} - v'h'^\mathsf{T}).
# Cập nhật các trọng số bù  và  tương tự: \Delta a = \epsilon (v - v'), \Delta b = \epsilon (h - h').

A Practical Guide to Training RBMs (Hướng dẫn Thực hành để Huấn luyện Máy Boltzmann Hạn chế) được viết bởi Hinton có thể được tìm thấy trên trang chủ của ông.

## Máy Boltzmann Hạn chế Xếp chồng

* Sự khác biệt giữa Máy Boltzmann Hạn chế Xếp chồng (Stacked Restricted Boltzmann Machines) và RBM là ở chỗ, trong RBM, các kết nối ngang giữa các nút trong cùng một lớp không được phép, điều này giúp dễ phân tích hơn. Còn Máy Boltzmann Xếp chồng thì kết hợp một mạng ba lớp, trong đó có lớp học tự động (không giám sát) với trọng số đối xứng, và một lớp trên được huấn luyện có giám sát để giúp nhận dạng tốt hơn ba lớp.
* Máy Boltzmann Xếp chồng được dùng để hiểu ngôn ngữ tự nhiên, tìm kiếm tài liệu, tạo ra hình ảnh và phân loại dữ liệu. Những chức năng này được học qua quá trình học không giám sát (học mà không có sự can thiệp của con người) và/hoặc được tinh chỉnh bằng cách học có giám sát (học với hướng dẫn). Khác với mạng có trọng số đối xứng ở lớp trên, RBM có một lớp hai chiều kết nối không đối xứng. Máy Boltzmann Hạn chế có ba lớp với trọng số không đối xứng và kết hợp hai mạng thành một.
* Máy Boltzmann Xếp chồng có một số điểm tương đồng với RBM, như các neuron trong Máy Boltzmann Xếp chồng cũng là các neuron nhị phân giống như trong Máy Boltzmann Hạn chế. Cả Máy Boltzmann Hạn chế và RBM đều dựa trên một hàm gọi là hàm xác suất Gibbs: E = -\frac12\sum_{i,j}{w_{ij}{s_i}{s_j}}+\sum_i{\theta_i}{s_i}. Quá trình huấn luyện của Máy Boltzmann Hạn chế tương tự như RBM, huấn luyện từng lớp một và dùng một quy trình ba bước để ước lượng trạng thái cân bằng, không dùng cách lan truyền ngược. Máy Boltzmann Hạn chế có thể dùng cả phương pháp giám sát và không giám sát để huấn luyện các RBM khác nhau, nhằm phân loại và nhận dạng. Quá trình huấn luyện sử dụng phân kỳ đối nghịch kết hợp với lấy mẫu Gibbs: Δwij = e*(pij - p'ij).
* Ưu điểm của Máy Boltzmann Hạn chế là nó có thể thực hiện biến đổi phi tuyến, dễ mở rộng và tạo ra các lớp đặc trưng theo tầng. Tuy nhiên, nhược điểm là nó tính toán phức tạp hơn khi sử dụng các neuron với giá trị là số nguyên hoặc số thực. Nó không tuân theo gradient của bất kỳ hàm nào, vì vậy cần ước lượng phân kỳ đối nghịch với xác suất cực đại để cải thiện.

## Văn học
* 

## Xem thêm
* Bộ tự mã hóa

## Tham khảo

## Thư mục
* 
* 
* 

## Liên kết ngoài
* Python implementation của Bernoulli RBM và hướng dẫn 
* SimpleRBM là một mã nguồn RBM nhỏ (24kB) hữu ích để học cách các RBM hoạt động và học hỏi.
* Triển khai Julia của máy Boltzmann hạn chế: https://github.com/cossio/RestrictedBoltzmannMachines.jl