Cập nhật sai lệch với RBM (Máy Boltzmann bị hạn chế)


8

Rất mới đối với RBM, cố gắng viết chương trình RBM ngay bây giờ. Xin lỗi nếu đây là một câu hỏi ngớ ngẩn và / hoặc đã trả lời ở đây rồi.

Tôi đã đọc một vài bài báo trực tuyến và các câu hỏi ở đây, nhưng tôi không thể tìm thấy bất cứ điều gì về cách cập nhật các thành kiến ​​(hoặc trọng số thiên vị.) Tôi đã đọc về việc đặt chúng ban đầu. Tham khảo thoáng qua mà họ sẽ được cập nhật. Dĩ nhiên Geoff Hinton đề cập đến sự thiên vị, và nó có đặc điểm trong các phương trình của anh ấy, (tôi đã đọc một vài bài báo của anh ấy, thấy một vài bài thuyết trình bằng video) nhưng tôi không thể tìm thấy bất kỳ đề cập nào trong các bài báo về sự thiên vị của anh ấy đã bị thay đổi một lần hoặc làm thế nào / khi / tại sao để làm như vậy. Chắc chắn là tôi đang thiếu gì đó!

Bài viết của Edwin Chen được đề xuất ở đây: http://blog.echen.me/2011/07/18/int sinhtion-to-restricted-boltzmann-machines / Ông không đề cập đến cách cập nhật / 'tìm hiểu' những thành kiến; chúng bị thay đổi trong chương trình của anh ấy nhưng tôi không hiểu mã của anh ấy. (Anh ta có một bảng đưa ra các trọng số cập nhật có vẻ không đúng - kỳ lạ là nó mang lại trọng số thiên vị, bất cứ điều gì có thể có nghĩa.)

Ừm, vậy nên tôi không chắc tại sao cái này lại khó tìm tài liệu đến thế !! Cảm ơn vì bất kì sự giúp đỡ.


Nhìn vào đây: image.diku.dk/igel/apers/AItRBM-proof.pdf trong phần 4.1 (để lấy đạo hàm của khả năng viết các thuật ngữ sai lệch) và 5 (cho các thuật toán phù hợp gần đúng).
Shadowtalker

Cảm ơn bạn rất nhiều! Chà, chủ yếu là toán học vượt qua đầu tôi, nhưng tôi hiểu dòng về cách cập nhật sai lệch trên p28 :-) và sẽ thật tuyệt khi tôi muốn tìm hiểu sâu hơn về lý thuyết. ps Tôi đã làm cho nó hoạt động tốt ngày hôm nay mà không có bất kỳ đơn vị thiên vị hoặc trọng lượng nào cả. (Smolenksy, người đã phát minh ra chúng gọi chúng là Harmonium, một cái tên đẹp hơn nhiều, tôi nghĩ tôi sẽ gọi chúng như vậy.)
Adam P

thật tuyệt khi nghe Tôi đề nghị viết lên những gì bạn tìm thấy và trả lời câu hỏi của riêng bạn ở đây. Bằng cách đó, những người khác có thể tìm kiếm ở đây và tìm thấy nó một cách dễ dàng (bình luận không được tìm kiếm, chỉ có câu hỏi và câu trả lời)
Shadowtalker

Ngoài ra tôi cá là nếu bạn thực sự đọc kỹ bài toán bạn sẽ thấy nó không quá phức tạp. Nó thực sự chỉ là một loạt các dẫn xuất. Rất nhiều thời gian họ chỉ ném rất nhiều trên trang cùng một lúc và bỏ qua các bước, nhưng những bài viết này thường không quá bí truyền trừ khi chứng minh những thứ như định lý tồn tại và hội tụ
Shadowtalker

Câu trả lời:


5

TLD

Đối với phân kỳ tương phản -step, hãy cập nhật độ lệch hiển thị b j , dựa trên vectơ dữ liệu d bằng cách sử dụng:nbjd

bj(t)bj(t-1)+η(dj-v^j(n))

Cập nhật ẩn thiên vị sử dụng:hTôi

cTôi(t)cTôi(t-1)+η(h^Tôi(0)-h^Tôi(n))

bj(t)cTôi(t)ηdjjh^j(n)v^j(n)Tôijnkk


Giải thích đầy đủ

Tôi đã gặp rắc rối tương tự. Một cách tốt để nghĩ về nó là những thành kiến ​​chỉ là trọng lượng. Thông thường trong các mô hình mạng thần kinh, độ lệch của một đơn vị được mô hình là trọng số của một liên kết kết nối đơn vị được đề cập đến một đơn vị "luôn bật", tức là một đơn vị tưởng tượng có kích hoạt luôn là 1.

Trong trường hợp RBM, điều đó có nghĩa là bạn nghĩ rằng có thêm một đơn vị hiển thị bổ sung có đầu ra luôn là 1. Đơn vị hiển thị này gắn với mỗi đơn vị ẩn (giống như bất kỳ đơn vị hiển thị nào khác) và trọng lượng của các kết nối này là những sai lệch của các đơn vị ẩn tương ứng. Tương tự, các thiên vị của các đơn vị hiển thị có thể được mô hình hóa bằng cách tưởng tượng một đơn vị ẩn thêm, có giá trị luôn là một và kết nối với từng đơn vị hiển thị, với trọng số của các kết nối này là các thiên vị nhìn thấy được.

Bạn thậm chí có thể thực hiện RBM của mình theo cách này, nhưng tôi không nghĩ mọi người thường làm điều đó. Vấn đề là, nghĩ về nó theo cách này, bạn có thể sử dụng (về cơ bản) quy tắc cập nhật tương tự cho các thành kiến ​​như bạn làm cho các trọng số, vì các thiên vị chỉ là các trọng số kết nối với các đơn vị "luôn luôn bật".

nkk

WTôi,j(t)WTôi,j(t-1)+η(h^Tôi(0)dj-h^Tôi(n)vj(n))
  • WTôi,j(t)vjhTôit
  • η
  • h^Tôi(n)Tôidn
    • h^Tôi(0)Tôi
  • djjd
  • vj(n)jn

TôijWTôi,j

hTôi(n)vj(n)h^Tôi(n)v^Tôi(n)

§3


Edward Newell Cảm ơn rất nhiều vì lời giải thích rõ ràng! Bạn có thể có mã MATLAB cho ví dụ này (như được mô tả trong blog của Edwin Chan) và bạn có thể chia sẻ không?
Bill Ancalagon màu đen

Vui vì nó đã giúp. Thật không may, tôi chỉ có một thực hiện python. Và tại thời điểm này, việc triển khai của tôi khác với ở trên (tôi đã thử nghiệm các quy tắc cập nhật khác nhau ...). Chúc may mắn!
Edward Newell
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.