Thủ thuật tái thông số cho VAE hoạt động như thế nào và tại sao nó quan trọng?


57

Làm thế nào để lừa reparameterization cho autoencoders biến phân (VAE) làm việc? Có một lời giải thích trực quan và dễ dàng mà không đơn giản hóa toán học cơ bản? Và tại sao chúng ta cần 'mánh khóe'?


5
Một phần của câu trả lời là lưu ý rằng tất cả các bản phân phối Bình thường chỉ là các phiên bản được thu nhỏ và dịch của Bình thường (1, 0). Để vẽ từ Bình thường (mu, sigma), bạn có thể vẽ từ Bình thường (1, 0), nhân với sigma (tỷ lệ) và thêm mu (dịch).
tu sĩ

@monk: đáng lẽ nó phải là Bình thường (0,1) thay vì (1,0) phải nếu không nhân và dịch chuyển sẽ hoàn toàn đi dây hay!
Rika

@ Gió Hà! Vâng, tất nhiên, cảm ơn.
nhà sư

Câu trả lời:


57

Sau khi đọc qua các slide hội thảo NIPS 2015 của Kingma , tôi nhận ra rằng chúng ta cần thủ thuật xác định lại thông số để sao lưu thông qua một nút ngẫu nhiên.

Theo trực giác, ở dạng ban đầu, mẫu VAE từ một nút ngẫu nhiên z được xấp xỉ bởi mô hình tham số q(z|φ,x) của hậu thế thật. Backprop không thể chảy qua một nút ngẫu nhiên.

Giới thiệu một tham số mới ε cho phép chúng ta reparameterize z trong một cách mà cho phép backprop chảy qua các nút xác định.

mẫu gốc và thông số lại


3
Tại sao bây giờ xác định ở bên phải? z
bringingdownthegauss

2
Nó không phải, nhưng nó không phải là một "nguồn gốc của tính ngẫu nhiên" - vai trò này đã được thực hiện trên của . ε
quant_dev

Lưu ý rằng phương pháp này đã được đề xuất nhiều lần trước năm 2014: blog.shakirm.com/2015/10/ trên
quant_dev

2
Thật đơn giản, thật trực quan! Câu trả lời chính xác!
Serhiy

2
Thật không may, nó không phải là. Hình thức ban đầu vẫn có thể được sao lưu, tuy nhiên với phương sai cao hơn. Thông tin chi tiết có thể được tìm thấy từ bài viết của tôi .
JP Zhang

56

Giả sử chúng ta có một phân phối chuẩn được tham số hóa bởi θ , đặc biệt là q θ ( x ) = N ( θ , 1 ) . Chúng tôi muốn giải quyết vấn đề dưới đây phút θqθqθ(x)= =VIẾT SAI RỒI(θ,1) Đây là khóa học một vấn đề khá ngớ ngẩn và tối ưu θ là rõ ràng. Tuy nhiên, ở đây chúng tôi chỉ muốn hiểu làm thế nào thủ thuật tái tham số hóa giúp tính toán độ dốc của mục tiêu này E q [ x 2 ] .

tối thiểuθEq[x2]
θEq[x2]

Một cách để tính toán như sau θ E q [ x 2 ] = θq θ ( x ) x 2 d x = x 2 θ q θ ( x ) q θ ( x )θEq[x2]

θEq[x2]= =θqθ(x)x2Cười mở miệngx= =x2θqθ(x)qθ(x)qθ(x)Cười mở miệngx= =qθ(x)θđăng nhậpqθ(x)x2Cười mở miệngx= =Eq[x2θđăng nhậpqθ(x)]

Ví dụ chúng tôi, nơi , phương pháp này mang lại cho θ E q [ x 2 ] = E q [ x 2 ( x - θ ) ]qθ(x)= =VIẾT SAI RỒI(θ,1)

θEq[x2]= =Eq[x2(x-θ)]

Reparameterization Bí quyết là một cách để ghi lại sự mong đợi để phân phối liên quan đến mà chúng tôi đưa gradient không phụ thuộc vào tham số . Để đạt được điều này, chúng ta cần phải thực hiện các yếu tố ngẫu nhiên trong q không phụ thuộc vào θ . Do đó, chúng ta viết xx = θ + ε ,θqθx Sau đó, chúng ta có thể viết E q [ x 2 ] = E p [ ( θ + ε ) 2 ] nơi p là sự phân bố của ε , tức là N ( 0 , 1 ) . Bây giờ chúng ta có thể viết các dẫn xuất của E q [ x 2 ] như sau q E q [ x 2 ] =

x= =θ+ε,ε~VIẾT SAI RỒI(0,1)
Eq[x2]= =Ep[(θ+ε)2]
pεVIẾT SAI RỒI(0,1)Eq[x2]
θEq[x2]= =θEp[(θ+ε)2]= =Ep[2(θ+ε)]

Dưới đây là một máy tính xách tay IPython tôi đã viết mà xem xét phương sai của hai cách tính độ dốc này. http://nbviewer.jupyter.org/github/gokererdogan/Notebooks/blob/master/Reparameterization%20Trick.ipynb


4
Theta "rõ ràng" cho phương trình đầu tiên là gì?
gwg

2
đó là 0. một cách để thấy đó là lưu ý rằng E [x ^ 2] = E [x] ^ 2 + Var (x), đó là theta ^ 2 + 1 trong trường hợp này. Vì vậy, theta = 0 giảm thiểu mục tiêu này.
Goker

Vì vậy, nó phụ thuộc hoàn toàn vào vấn đề? Giả sử min_ \ theta E_q [| x | ^ (1/4)] nó có thể hoàn toàn khác nhau?
Anne van Rossum

Điều gì phụ thuộc vào vấn đề? Theta tối ưu? Nếu vậy, có chắc chắn nó phụ thuộc vào vấn đề.
Goker

θEq[x2]= =Eq[x2(x-θ)qθ(x)]θEq[x2]= =Eq[x2(x-θ)]

17

Một ví dụ hợp lý về toán học của "mẹo tái tham số hóa" được đưa ra trong câu trả lời của goker, nhưng một số động lực có thể hữu ích. (Tôi không có quyền nhận xét về câu trả lời đó; vì vậy đây là một câu trả lời riêng.)

Gθ

Gθ= =θEx~qθ[Giáo dục]

Ex~qθ[GθeSt(x)]

GθeSt(x)= =Giáo dục1qθ(x)θqθ(x)= =Giáo dụcθđăng nhập(qθ(x))

xqθGθeStGθθ

GθeStGθ

Gθxxqθ(x)1qθ(x)xGθqθGθeStxqθθ, có thể cách xa tối ưu (ví dụ: giá trị ban đầu được chọn tùy ý). Nó giống như câu chuyện về người say rượu tìm chìa khóa gần đèn đường (vì đó là nơi anh ta có thể nhìn thấy / mẫu) chứ không phải gần nơi anh ta đánh rơi chúng.

xεpθGθp

Gθ= =θEε~p[J(θ,ε)]= =Eε~p[θJ(θ,ε)]
J(θ,ε)

θJ(θ,ε)pεpθp

θJ(θ,ε)GθGθεppεJ

Tôi hy vọng điều đó sẽ giúp.


"Hệ số 1 / qθ (x) đang tăng tỷ lệ ước tính của bạn để tính đến điều này, nhưng nếu bạn không bao giờ thấy giá trị của x như vậy, thì tỷ lệ đó sẽ không giúp ích gì." Bạn có thể giải thích thêm?
czxttkl

qθxxGθeSt(x)1/qθ

10

Hãy để tôi giải thích trước, tại sao chúng ta cần thủ thuật Xác định lại trong VAE.

VAE có bộ mã hóa và giải mã. Bộ giải mã lấy mẫu ngẫu nhiên từ hậu thế thật Z ~ q (z∣ϕ, x) . Để thực hiện bộ mã hóa và bộ giải mã như một mạng nơ ron, bạn cần sao lưu thông qua lấy mẫu ngẫu nhiên và đó là vấn đề bởi vì backpropogation không thể chảy qua nút ngẫu nhiên; để vượt qua trở ngại này, chúng tôi sử dụng thủ thuật tái thông số.

Bây giờ hãy đến để lừa. Vì hậu thế của chúng ta thường được phân phối, chúng ta có thể ước chừng nó với một phân phối bình thường khác. Chúng tôi xấp xỉ Z với phân phối chuẩn ε .

nhập mô tả hình ảnh ở đây

Nhưng làm thế nào điều này có liên quan?

Bây giờ thay vì nói rằng Z được lấy mẫu từ q (z∣ϕ, x) , chúng ta có thể nói Z là một hàm lấy tham số (ε, (Biệt, L)) và các Lọ, L đến từ mạng thần kinh trên (bộ mã hóa) . Vì vậy trong khi backpropogation tất cả chúng ta cần là hàm riêng wrt μ, Lε là không thích hợp cho việc dẫn xuất.

nhập mô tả hình ảnh ở đây


Video tốt nhất để hiểu khái niệm này. Tôi khuyên bạn nên xem video hoàn chỉnh để hiểu rõ hơn nhưng nếu bạn chỉ muốn hiểu thủ thuật xác định lại thông số thì hãy xem từ 8 phút. youtube.com/channel/UCNIkB2IeJ-6AmZv7bQ1oBYg
Sherlock

9

Tôi nghĩ rằng lời giải thích được tìm thấy trong khóa học Stanford CS228 về các mô hình đồ họa xác suất là rất tốt. Nó có thể được tìm thấy ở đây: https://ermongroup.github.io/cs228-notes/extras/vae/

Tôi đã tóm tắt / sao chép các phần quan trọng ở đây để thuận tiện / hiểu biết của riêng tôi (mặc dù tôi thực sự khuyên bạn chỉ nên kiểm tra liên kết ban đầu).

φEz~q(z|x)[đụ(x,z)]

Nếu bạn quen thuộc với các công cụ ước tính điểm số (tôi tin rằng REINFORCE chỉ là trường hợp đặc biệt của vấn đề này), bạn sẽ nhận thấy đó là vấn đề mà họ giải quyết được khá nhiều. Tuy nhiên, công cụ ước tính điểm số có phương sai cao, dẫn đến khó khăn trong việc học các mô hình phần lớn thời gian.

qφ(z|x)

εp(ε)gφ(ε,x)qφ

Ví dụ, chúng ta hãy sử dụng một q rất đơn giản mà chúng ta lấy mẫu.

z~qμ,σ= =VIẾT SAI RỒI(μ,σ)
q
z= =gμ,σ(ε)= =μ+εσ
ε~VIẾT SAI RỒI(0,1)

p(ε)

φEz~q(z|x)[đụ(x,z)]= =Eε~p(ε)[φđụ(x,g(ε,x))]

Điều này có phương sai thấp hơn, vì imo, lý do không tầm thường. Kiểm tra phần D của phụ lục tại đây để được giải thích: https://arxiv.org/pdf/1401.4082.pdf


Xin chào, bạn có biết, tại sao trong quá trình thực hiện, họ chia std cho 2? (tức là std = Torch.bao (z_var / 2)) trong việc xác định lại thông số?
Rika

4

Chúng tôi có mô hình xác suất của chúng tôi. Và muốn phục hồi các thông số của mô hình. Chúng tôi giảm bớt nhiệm vụ của mình để tối ưu hóa giới hạn dưới biến đổi (VLB). Để làm điều này, chúng ta sẽ có thể làm hai điều:

  • tính toán VLB
  • lấy độ dốc của VLB

Các tác giả đề nghị sử dụng Công cụ ước tính Monte Carlo cho cả hai. Và thực tế họ giới thiệu thủ thuật này để có được Công cụ ước tính độ chính xác Monte Carlo Gradient của VLB.

Đó chỉ là cải tiến của phương pháp số.


2

Thủ thuật xác định lại thông số làm giảm đáng kể phương sai của công cụ ước tính MC cho độ dốc. Vì vậy, đó là một kỹ thuật giảm phương sai :

φEq(z(Tôi)|x(Tôi);φ)[đăng nhậpp(x(Tôi)|z(Tôi),w)]

φEq(z(Tôi)|x(Tôi);φ)[đăng nhậpp(x(Tôi)|z(Tôi),w)]= =Eq(z(Tôi)|x(Tôi);φ)[đăng nhậpp(x(Tôi)|z(Tôi),w)φđăng nhậpqφ(z)]
p(x(Tôi)|z(Tôi),w)đăng nhậpp(x(Tôi)|z(Tôi),w)là rất lớn và bản thân giá trị là âm. Vì vậy, chúng tôi sẽ có phương sai cao.

z(Tôi)= =g(ε(Tôi),x(Tôi),φ)

φEq(z(Tôi)|x(Tôi);φ)[đăng nhậpp(x(Tôi)|z(Tôi),w)]= =Ep(ε(Tôi))[φđăng nhậpp(x(Tôi)|g(ε(Tôi),x(Tôi),φ),w)]

p(ε(Tôi))p(ε(Tôi))φ

z(Tôi)z(Tôi)= =g(ε(Tôi),x(Tôi),φ)

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.