Bước tới nội dung

Máy Boltzmann

Bách khoa toàn thư mở Wikipedia
Một biểu đồ minh họa về ví dụ của máy Boltzmann.
Biểu đồ minh họa về một ví dụ của máy Boltzmann. Mỗi cạnh không có hướng đại diện cho sự phụ thuộc. Trong ví dụ này, có 3 đơn vị ẩn và 4 đơn vị hiển thị. Đây không phải là máy Boltzmann hạn chế.

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,[1] 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.[2] Nó cũng được phân loại là một trường ngẫu nhiên Markov.[3]

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ế.[4]

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,[2] 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.[5]

Cấu trúc

[sửa | sửa mã nguồn]
Một biểu đồ minh họa về máy Boltzmann với các trọng số.
Biểu đồ minh họa một máy Boltzmann với một số trọng số được đánh dấu. Mỗi cạnh không có hướng đại diện cho sự phụ thuộc và được gán trọng số . Trong ví dụ này, có 3 đơn vị ẩn (màu xanh) và 4 đơn vị hiển thị (màu trắng). Đây không phải là máy Boltzmann hạn chế.

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 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:

Trong đó:

  • là sức mạnh của kết nối giữa đơn vị và đơn vị .
  • là trạng thái, , của đơn vị .
  • là độ lệch của đơn vị trong hàm năng lượng tổng thể. ( là ngưỡng kích hoạt cho đơn vị đó.)

Thông thường, các giá trị trọng số được sắp xếp thành một ma trận đối xứng 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ị

[sửa | sửa mã nguồn]

Khi một đơn vị 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à , có thể tính bằng công thức:

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:

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:

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

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

Ở đây, 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

[sửa | sửa mã nguồn]

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

[sửa | sửa mã nguồ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à .

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à .

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

Tổng này lấy trên tất cả các trạng thái của . 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 . Để tối ưu , 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 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 ). 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 theo trọng số là:[2]

Trong đó:

  • là xác suất mà các đơn vị ij đều bật khi máy đang ở trạng thái cân bằng trong giai đoạn dương.
  • là xác suất mà các đơn vị ij đều bật khi máy đang ở trạng thái cân bằng trong giai đoạn âm.
  • đạ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 của bất kỳ trạng thái toàn cục nào 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:

Vấn đề

[sửa | sửa mã nguồ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.[cần dẫn nguồn] Đ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.[cần dẫn nguồn]
  • 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

[sửa | sửa mã nguồn]

Máy Boltzmann hạn chế

[sửa | sửa mã nguồn]
Biểu diễn đồ họa của một ví dụ về máy Boltzmann hạn chế.
Biểu diễn đồ họa của một máy Boltzmann hạn chế. Bốn đơn vị màu xanh dương đại diện cho các đơn vị ẩn, và ba đơn vị màu đỏ đại diện cho các trạng thái hiển thị. Trong máy Boltzmann hạn chế chỉ có các kết nối (phụ thuộc) giữa các đơn vị ẩn và hiển thị, và không có kết nối giữa các đơn vị cùng loại (không có kết nối ẩn-ẩn hoặc hiển thị-hiển thị).

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.[6]

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

Máy Boltzmann sâu

[sửa | sửa mã nguồn]

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ị và các lớp đơn vị ẩn . 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 DBM, xác suất được gán cho vector ν

trong đó là tập hợp các đơn vị ẩn, và 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.[8] 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.[9][10][11]

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).[8] 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

[sửa | sửa mã nguồn]

RBM dạng spike-and-slab (ssRBM) đượ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.[12] 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;[13] hỗn hợp của chúng tạo ra một phân phối tiên nghiệm.[14]

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

[sửa | sửa mã nguồn]

Trong toán học, phân phối Boltzmann còn được gọi là Phân bố Gibbs. Trong Thống kê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ử

[sửa | sửa mã nguồn]

Máy Boltzmann dựa trên mô hình "spin glass" Sherrington–Kirkpatrick.[15] 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.[16]

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.[17][18][19] 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.[20]

Ý 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.[21][22]

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.[23] 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ínhTrí 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

[sửa | sửa mã nguồn]
  1. ^ Sherrington, David; Kirkpatrick, Scott (1975), “Solvable Model of a Spin-Glass”, Physical Review Letters, 35 (35): 1792–1796, Bibcode:1975PhRvL..35.1792S, doi:10.1103/PhysRevLett.35.1792
  2. ^ a b c Ackley, David H.; Hinton, Geoffrey E.; Sejnowski, Terrence J. (1985). “A Learning Algorithm for Boltzmann Machines” (PDF). Cognitive Science. 9 (1): 147–169. doi:10.1207/s15516709cog0901_7. Bản gốc (PDF) lưu trữ ngày 18 tháng 7 năm 2011.
  3. ^ Hinton, Geoffrey E. (24 tháng 5 năm 2007). “Boltzmann machine”. Scholarpedia (bằng tiếng Anh). 2 (5): 1668. Bibcode:2007SchpJ...2.1668H. doi:10.4249/scholarpedia.1668. ISSN 1941-6016.
  4. ^ Osborn, Thomas R. (1 tháng 1 năm 1990). “Fast Teaching of Boltzmann Machines with Local Inhibition”. International Neural Network Conference. Springer Netherlands. tr. 785. doi:10.1007/978-94-009-0643-3_76. ISBN 978-0-7923-0831-7.
  5. ^ Nijkamp, E.; Hill, M. E; Han, T. (2020), “On the Anatomy of MCMC-Based Maximum Likelihood Learning of Energy-Based Models”, Proceedings of the AAAI Conference on Artificial Intelligence, 4 (34): 5272–5280, arXiv:1903.12370, doi:10.1609/aaai.v34i04.5973
  6. ^ Recent Developments in Deep Learning (bằng tiếng Anh), 22 tháng 3 năm 2010, lưu trữ bản gốc ngày 22 tháng 12 năm 2021, truy cập ngày 17 tháng 2 năm 2020
  7. ^ Yu, Dong; Dahl, George; Acero, Alex; Deng, Li (2011). “Context-Dependent Pre-trained Deep Neural Networks for Large Vocabulary Speech Recognition” (PDF). Microsoft Research. 20.
  8. ^ a b Hinton, Geoffrey; Salakhutdinov, Ruslan (2012). “A better way to pretrain deep Boltzmann machines” (PDF). Advances in Neural. 3: 1–9. Bản gốc (PDF) lưu trữ ngày 13 tháng 8 năm 2017. Truy cập ngày 18 tháng 8 năm 2017.
  9. ^ Hinton, Geoffrey; Salakhutdinov, Ruslan (2009). “Efficient Learning of Deep Boltzmann Machines” (PDF). Proceedings of the Twelfth International Conference on Artificial Intelligence and Statistics. 3. tr. 448–455. Bản gốc (PDF) lưu trữ ngày 6 tháng 11 năm 2015. Truy cập ngày 18 tháng 8 năm 2017.
  10. ^ Bengio, Yoshua; LeCun, Yann (2007). “Scaling Learning Algorithms towards AI” (PDF). Université de Montréal (Preprint).
  11. ^ Larochelle, Hugo; Salakhutdinov, Ruslan (2010). “Efficient Learning of Deep Boltzmann Machines” (PDF). Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics. tr. 693–700. Bản gốc (PDF) lưu trữ ngày 14 tháng 8 năm 2017. Truy cập ngày 18 tháng 8 năm 2017.
  12. ^ Courville, Aaron; Bergstra, James; Bengio, Yoshua (2011). “A Spike and Slab Restricted Boltzmann Machine” (PDF). JMLR: Workshop and Conference Proceeding. 15: 233–241. Bản gốc (PDF) lưu trữ ngày 4 tháng 3 năm 2016. Truy cập ngày 25 tháng 8 năm 2019.
  13. ^ Courville, Aaron; Bergstra, James; Bengio, Yoshua (2011). “Unsupervised Models of Images by Spike-and-Slab RBMs” (PDF). Proceedings of the 28th International Conference on Machine Learning. 10. tr. 1–8. Bản gốc (PDF) lưu trữ ngày 4 tháng 3 năm 2016. Truy cập ngày 25 tháng 8 năm 2019.
  14. ^ Mitchell, T; Beauchamp, J (1988). “Bayesian Variable Selection in Linear Regression”. Journal of the American Statistical Association. 83 (404): 1023–1032. doi:10.1080/01621459.1988.10478694.
  15. ^ Sherrington, David; Kirkpatrick, Scott (29 tháng 12 năm 1975). “Solvable Model of a Spin-Glass”. Physical Review Letters. 35 (26): 1792–1796. Bibcode:1975PhRvL..35.1792S. doi:10.1103/physrevlett.35.1792. ISSN 0031-9007.
  16. ^ Hopfield, J. J. (1982). “Neural networks and physical systems with emergent collective computational abilities”. Proceedings of the National Academy of Sciences of the United States of America. [s.n.] 79 (8): 2554–8. Bibcode:1982PNAS...79.2554H. doi:10.1073/pnas.79.8.2554. OCLC 848771572. PMC 346238. PMID 6953413.
  17. ^ Hinton, Geoffery; Sejnowski, Terrence J. (tháng 5 năm 1983). Analyzing Cooperative Computation. 5th Annual Congress of the Cognitive Science Society. Rochester, New York. Truy cập ngày 17 tháng 2 năm 2020.[liên kết hỏng]
  18. ^ Hinton, Geoffrey E.; Sejnowski, Terrence J. (tháng 6 năm 1983). Optimal Perceptual Inference. IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Washington, D.C.: IEEE Computer Society. tr. 448–453.
  19. ^ Fahlman SE, Hinton GE, Sejnowski TJ. Massively parallel architectures for Al: NETL, Thistle, and Boltzmann machines. In: Genesereth MR, editor. AAAI-83. Washington, DC: AAAI; 1983. pp. 109–113
  20. ^ Chapter 16. Rosenfeld, Edward, and James A. Anderson, eds. 2000. Talking Nets: An Oral History of Neural Networks. Reprint edition. The MIT Press.
  21. ^ Hofstadter, D. R. (tháng 1 năm 1984). The Copycat Project: An Experiment in Nondeterminism and Creative Analogies. Defense Technical Information Center. OCLC 227617764.
  22. ^ Hofstadter, Douglas R. (1988). “A Non-Deterministic Approach to Analogy, Involving the Ising Model of Ferromagnetism”. Trong Caianiello, Eduardo R. (biên tập). Physics of cognitive processes. Teaneck, New Jersey: World Scientific. ISBN 9971-5-0255-0. OCLC 750950619.
  23. ^ Smolensky, Paul. "Information processing in dynamical systems: Foundations of harmony theory." (1986): 194-281.

Đọc thêm

[sửa | sửa mã nguồn]

Liên kết ngoài

[sửa | sửa mã nguồn]