cuốn sách gpt4 ai đã làm

Suy luận biến thiên (VI), suy luận biến đổi độ dốc ngẫu nhiên (SGVI/SGVB), nhiễu xuyên âm của bộ mã hóa tự động biến thiên (VAE)

In lại Tác giả: Sahara Thời gian cập nhật: 2025-01-04 00:42:47 58 4
mua khóa gpt4 Nike

Tài liệu tham khảo:

  • VI Tham khảo: PRML Chương 10.
  • Văn bản gốc của SGVI: Bayes biến thể mã hóa tự động -- Kingma.
  • VAE Tham khảo 1: Hướng dẫn về Bộ mã hóa tự động biến đổi -- CARL DOERSCH.
  • VAE Tài liệu tham khảo 2: Đại học Stanford CS236: Các mô hình sáng tạo sâu.

Hàm số và phép tính biến phân

Chương này chủ yếu là về sự hiểu biết: Cái tên "biến thể" đến từ đâu.

Chức năng và chức năng

  • Chức năng: ánh xạ giá trị đến giá trị;
  • Chức năng: Ánh xạ các hàm tới các giá trị.

Một hàm điển hình - biểu thức của entropy:

\[H[p] = \int p(x) \ln p(x) \text{d}x \]

  • Đạo hàm của hàm: Sự thay đổi giá trị đầu ra khi giá trị đầu vào thay đổi một chút.
  • Đạo hàm của hàm: sự thay đổi giá trị đầu ra khi hàm đầu vào thay đổi một chút.

giá trị cực trị của hàm số

  • Tìm giá trị cực trị của hàm: duyệt tất cả các hàm có thể để tìm hàm cực đại hóa hoặc cực tiểu hóa hàm.
  • Phép tính biến phân: Nghiên cứuHàm cực trịphương pháp.
  • Trong VI, thay đổi mô hình biến tiềm ẩnsuy raVấn đề được chuyển thànhTìm giá trị cực trị của hàm sốcâu hỏi,Vì vậy chúng tôi gọi chúng là "biến thể".

Suy luận biến phânVI

Chương này thảo luận về một phương pháp suy luận gần đúng - suy luận biến phân.

Câu hỏi--Suy ra hậu nghiệm và bằng chứng của mô hình biến tiềm ẩn

Đại diện biểu tượng.

  • \(Z\): Các biến ẩn, có thể bao gồm các tham số của mô hình.
  • \(X\): Dữ liệu quan sát, các biến biểu hiện.
  • \(P(Z)\): Xác suất trước của biến tiềm ẩn, được biết trong bài toán này.
  • \(P(X\giữa Z)\): Khả năng xảy ra của biến tiềm ẩn đã được biết trong bài toán này.
  • \(P(X,Z)\): Xác suất chung, có thể trực tiếp\(P(X,Z)=P(X\giữa Z)P(Z)\).
  • \(P(Z \giữa X)\): xác suất hậu nghiệm của biến ẩn,Nó cần được yêu cầu.
  • \(P(X)\):Bằng chứng cận biên (hoặc chỉ là Bằng chứng),Nó cần được yêu cầu.

Có thể điều chỉnh và khó điều trị

Các ví dụ điển hình của Tractable là Mô hình Markov ẩn (HMM), có các tính năng chính là:

  • Chỉ có một số lượng hạn chế các trạng thái ẩn.
  • Cấu trúc của mô hình rất đơn giản.

Do đó, khi biết các tham số của mô hình, có thể sử dụng trực tiếp phương pháp suy luận chính xác dựa trên quy hoạch động:

  • ăn xin\(P(X)\): Thuật toán tiến-lùi.
  • ăn xin\(P(Z\giữa X)\): Thuật toán Viterbi.

Khó chữa nhưng trong nhiều trường hợp:

  • Liên quan đến việc tích hợp các biến ngẫu nhiên liên tục.
  • Cấu trúc mô hình rất phức tạp.

Suy luận chính xác tại thời điểm này thường khó thực hiện. Khó khăn chính nằm ở tích phân: \(P(X) = \int P(X,Z)\text{d}Z\).

Vì vậy cần phải sử dụng các phương pháp suy luận gần đúng. Những gì được giới thiệu tiếp theo là một phương pháp suy luận gần đúng - suy luận biến phân.

Đạo hàm của ELBO

Hãy xem xét công thức Bayes và thêm \(\log\) vào cả hai vế của phương trình:

\[\log P(X) = \log \frac{P(X,Z)}{P(Z|X)} =\log P(X,Z) -\log P(Z\mid X) \]

Giới thiệu phân bố xác suất \(q_\phi(Z)\) được tham số hóa bởi \(\phi\)

\[\begin{aligned} \log P(X) &= \log P(X,Z) -\log P(Z\mid X) \\ &= \log \frac{P(X,Z)}{ q_\phi(Z)} - \log \frac{P(Z\mid X)}{q_\phi(Z)} \end{aligned} \]

Đồng thời lấy trung bình phân phối\(q_\phi(Z)\) ở cả hai vế của phương trình, chúng ta có thể nhận được:

\[\int_Z \log P(X) q_\phi(Z) \text{d} Z = \int_Z q_\phi(Z) \log \frac{P(X,Z)}{q_\phi(Z) }\text{d} Z - \int_Z q_\phi(Z) \log \frac{P(Z\mid X)}{q_\phi(Z)} \text{d}Z \]

Vì vế trái\(\log P(X)\) không liên quan gì đến \(Z\), nên nó có thể được đưa ra trực tiếp và \(\int_Z q_\phi(Z) \text{d}Z = 1\), do đó có:

\[\log P(X) = \int_Z q_\phi(Z) \log \frac{P(X,Z)}{q_\phi(Z)}\text{d} Z - \int_Z q_\phi( Z) \log \frac{P(Z\mid X)}{q_\phi(Z)} \text{d}Z \]

Viết số hạng đầu tiên ở vế phải của phương trình ở dạng kỳ vọng và số hạng thứ hai ở dạng phân kỳ KL:

\[\begin{aligned} \log P(X)&= \mathbb E_{Z\sim q_\phi} [\log P(X,Z) - \log q_\phi(Z)] + KL(q_\ phi(Z) \mid\mid P(Z\mid X)) \end{aligned} \]

Quan sát công thức này và chú ý các thuộc tính sau:

  • bởi vì\(KL\ge 0\), vậy luôn có\(\log P(X) \ge \text{Thuật ngữ đầu tiên}\), tức là mục đầu tiên là\(\log\) Giới hạn dưới của Bằng chứng, được gọi là\(ELBO\) (Bằng chứng Hạ BOound).
  • nếu và chỉ nếu\(q_\phi(Z) = P(Z\mid X)\)giờ,\(KL=0\), vào lúc này\(\log P(X) = ELBO\).
  • KEY1: Vậy hãy tìm hiểu nhé\(\arg \max_{q_\phi}ELBO\), có thể làm\(ELBO\to \log P(X)\), đồng thời sẽ có\(KL \to 0\), lúc này có\(q_\phi(Z) \to P(Z\mid X)\).
  • KEY2: Tổng hợp suy luận biến phân trong một câu có nghĩa làBài toán suy diễn mô hình biến tiềm ẩnchuyển thànhTối ưu hóa\(ELBO\)vấn đề.

LƯU Ý1: Coi \(ELBO\) là một hàm số \(\mathcal L(q_\phi)\) và mục tiêu là \(\arg \max_{q_\phi} \mathcal L(q_\phi)\), Tức là tìm điểm cực trị của hàm số (nên gọi là biến phân).

LƯU Ý 2: Phương pháp biến phân vốn không phải là một phương pháp gần đúng, bởi vì nếu tất cả các hàm có thể được tính đến thì xác suất hậu nghiệm có thể được suy ra một cách chính xác. Tuy nhiên, vì chúng ta thường đưa ra các giả định về phạm vi của hàm, chẳng hạn như hàm bậc hai hoặc hàm thỏa mãn các điều kiện phân tách trường trung bình, điều này dẫn đến kết quả là luôn thu được nghiệm gần đúng cuối cùng.

LƯU Ý 3: Ngoài ra còn có giả định \(q(z)\) dựa trên lý thuyết trường trung bình. Trên cơ sở này, phương pháp đi lên tọa độ có thể được sử dụng để tìm giải pháp tối ưu. Để biết chi tiết, vui lòng tham khảo Chương 10 PRML.

Nếu chúng ta xem xét một mẫu duy nhất

  • \(X=\{x^{(1)},...,x^{(n)}\}\): Biến quan sát.
    Giả sử rằng mỗi mẫu được phân phối độc lập và giống hệt nhau thì\(P(X)\)Có thể chia thành các phép nhân liên tiếp:

\[\log P(X) = \log \prod P(x^{(i)}) = \sum \log P(x^{(i)}) \]

Giới thiệu một phân phối \(q_{\phi^{(i)}}(Z\mid x^{(i)})\) được tham số hóa bởi \(\phi^{(i)}\), \(\ log P (x^{(i)})\) cũng có thể được viết dưới dạng \(ELBO+KL\):

\[\begin{aligned} \log P(x^{(i)}) &= \int_Z q_{\phi^{(i)}}(Z\mid x^{(i)}) \log \frac {P(x^{(i)},Z)}{q_{\phi^{(i)}}(Z\mid x^{(i)})}\text{d} Z - \int_Z q_{\phi^{(i)}}(Z\mid x^{(i)}) \log \frac{P(Z\mid x^{(i)})}{q_{\phi^{( i)}}(Z\mid x^{(i)})} \text{d}Z \\ &= \mathbb E_{Z\sim q_{\phi^{(i)}}} [\log P(x^{(i)},Z) - \log q_{\phi^{(i)}}(Z\mid x^{(i)})] + KL(q_{\phi^{(i )}}(Z\mid x^{(i)}) \mid\mid P(Z\mid x^{(i)})) \\ &= ELBO +KL \end{aligned} \]

LƯU Ý: Tham số \(\phi\) của \(q_\phi\) được viết \(\phi^{(i)}\) vì đối với mỗi biến quan sát đơn lẻ, \(P(Z\mid x^) phía sau {(i)})\) thì khác. Trong các chương [[#SGVI]] tiếp theo, để đơn giản, nó vẫn được lược bỏ.

SGVI

Chương trước đã chuyển bài toán suy luận biến tiềm ẩn thành bài toán tối ưu hóa \(ELBO\). Chương này nói về phương pháp ước lượng độ dốc \(ELBO\).

  • SGVI là viết tắt của suy luận biến đổi độ dốc ngẫu nhiên, sử dụng các phương pháp tối ưu hóa dựa trên độ dốc để tối đa hóa\(ELBO\).
  • Sau khi tìm thấy gradient,\(q_\phi(z)\)Cập nhật thông số:\(\phi = \phi + \alpha \nabla_\phi ELBO\).

Công cụ ước tính độ dốc của hàm điểm

Hình dạng chuyển màu của \(ELBO\) đến \(\phi\) là \(\nabla_\phi \mathbb E_{z\sim q_\phi(z)Nif(z)]\). cập nhật đầu tiên dạng tổng quát của gradient:

\[\nabla_\phi \mathbb E_{z\sim q_\phi(z)Nif(z)] = \nabla_\phi \int q_\phi(z) f(z) \text{d}z \ ]

Di chuyển dấu gradient thành dấu tích phân và sau đó vì \(\nabla \log q_\phi=\frac{\nabla q_\phi}{q_\phi}\), chúng ta có thể nhận được:

\[\begin{aligned} \nabla_\phi \mathbb E &= \int \nabla_\phi q_\phi(z) f(z) \text{d}z \\ &= \int q_\phi(z) \nabla_\phi \log q_\phi(z) f(z) \text{d}z \\ &= \mathbb E_{z\sim q_\phi(z)fer(z) \nabla_\phi \log q_\phi(z)] \end{aligned} \]

Kỳ vọng ở vế phải của phương trình có thể được ước tính trực tiếp bằng cách sử dụng mẫu MC:

\[\mathbb E_{z\sim q_\phi(z)fer(f(z) \nabla_\phi \log q_\phi(z)] \approx \frac{1}{L} \sum_{l=1 }^L f(z^{(l)}) \nabla_\phi \log q_\phi(z^{(l)}) \]

  • \(z^{(l)}\sim q_\phi(z)\).
  • Phương pháp ước tính này được gọi là công cụ ước tính độ dốc hàm điểm, trong đó\(\nabla_\phi \log q_\phi(z)\)được gọi là điểm số,\(f(z)\)được gọi là chi phí.
  • Vấn đề với công cụ ước tính này là:Phương sai quá lớn, thường không thể sử dụng được và không phù hợp để ước lượng trực tiếp.\(ELBO\).

LƯU Ý: Chúng tôi thực sự giả định rằng \(q_\phi(z)\) có thể xử lý được, dễ lấy mẫu và tính toán.

BTW: Trong thuật toán REINFORCE trong học tăng cường, công cụ ước tính này được sử dụng để ước tính độ dốc chính sách, vì vậy chúng tôi có thể nói rằng REINFORCE là thuật toán có phương sai lớn.

Thủ thuật tham số lại

Quá trình lấy mẫu \(z\sim q_\phi(z\mid x)\) thường có thể được chia thành hai bước sau:

  1. Đầu tiên hãy chọn nó từ bản phân phối tiếng ồn\(\epsilon \sim p(\epsilon)\).
  2. Sau đó tìm một\(\phi\)hàm tham số hóa\(g_\phi(,)\), làm\(z=g_\phi(\epsilon, x)\).

Ví dụ: lấy mẫu từ phân phối chuẩn \(z\sim \mathcal N(\mu, \sigma)\) có thể được chia thành:

  1. \(\epsilon \sim \mathcal N(0,1)\).
  2. \(z = \mu + \epsilon \sigma\).

Trên đây là kỹ thuật tham số hóa lại.

Công cụ ước tính SGVI

Sau khi sử dụng kỹ thuật tham số hóa lại, biểu thức mong muốn có thể được viết dưới dạng sau:

\[ \mathbb E_{z\sim q_\phi(z\mid x^{(i)})fer(z)]=\mathbb E_{\epsilon \sim p(\epsilon)fer(g_ \phi(\epsilon, x^{(i)}))] \approx \frac{1}{L} \sum_{l=1}^L f(g_\phi(\epsilon^{(l)},x^{(i)})) \]

Đặt \(f=ELBO\), rồi tìm gradient, bạn sẽ nhận được công cụ ước tính SGVI:

\[\nabla_\phi ELBO=\nabla_\phi \mathcal L(\phi,x^{(i)}) = \nabla_\phi \bigl(\frac{1}{L}\sum_{l=1} ^L \log P(x^{(i)},g_\phi(\epsilon^{(l)},x^{(i)})) - \log q_\phi(g_\phi(\epsilon^{(l)},x^{(i)})\mid x^{(i)}) \bigr) \]

ở đâu \(\epsilon^{(l)}\sim p(\epsilon)\).

LƯU Ý: Công cụ ước tính SGVI thường có phương sai nhỏ hơn công cụ ước tính độ dốc hàm điểm.

Bộ mã hóa tự động biến đổi VAE

Chương này thảo luận về cách áp dụng phương pháp VI để suy luận và học các mô hình tạo biến tiềm ẩn.

Phân phối mẫu

Chúng tôi thường muốn tạo các mẫu tương tự với dữ liệu trong tập dữ liệu. Ví dụ: với một tập dữ liệu khuôn mặt, chúng tôi hy vọng rằng mô hình có thể tìm hiểu cách phân phối lô dữ liệu khuôn mặt này theo một cách nào đó và sau đó tạo ra các khuôn mặt theo một cách nào đó.

  • Giả định về mẫu: Người ta thường giả định rằng tập dữ liệu được lấy mẫu từ một phân phối không xác định\(P_{gt}(X)\).

  • Hiểu biết: Nếu một bức ảnh \(X\) trông giống một khuôn mặt thì \(P_{gt}(X)\) là rất lớn; nếu một bức ảnh \(X\) có nhiều nhiễu thì \(P_{ gt }(X)\) rất nhỏ.

  • Mục tiêu của chúng ta: tìm ra một mô hình \(P(X)\) có thể lấy mẫu, đồng thời \(P\) có thể xấp xỉ \(P_{gt}\) càng nhiều càng tốt.

  • Cách tìm hiểu các tham số mô hình: Giả sử rằng mô hình được tham số hóa \(P_\theta(X)\), để tìm hiểu các tham số \(\theta\), là làm cho mô hình có xác suất cao nhất trên dữ liệu được quan sát \(X\ ) , đó là: \(\arg \max_\theta P_\theta(X)\) (Khả năng tối đa).

mô hình tạo biến tiềm ẩn

Hãy cân nhắc việc sử dụng các mô hình tạo biến tiềm ẩn để ước tính \(P_{gt}\ .

Trích dẫn: Lấy việc tạo số làm ví dụ, một cách suy nghĩ.

  1. Xác định mô hình đầu tiên\({0,1,...,9}\)một số trong phạm vi\(z\).
  2. và sau đó dựa vào\(P(X\mid z;\theta)\)từ\(z\)Tạo hình ảnh tương ứng với các con số.

\(z\) đây là biến ẩn.


Khó khăn: Việc xác định các biến ẩn và sau đó xác định mối quan hệ giữa biến ẩn và biến quan sát thực tế có thể rất phức tạp:

  • Ví dụ: trước tiên, mô hình có thể xác định xem có các vòng tròn (0, 8, 9) trong số được tạo hay không, sau đó xác định số vòng tròn.
  • Ngoài ra, có thể cần phải xác định các mối quan hệ phức tạp hơn như độ nghiêng và phông chữ của các con số.

Hãy cân nhắc sử dụng các phương pháp sau để khắc phục sự cố này:

  1. Giả sử trực tiếp rằng các biến tiềm ẩn tuân theo phân phối trước Gaussian\(z \sim \mathcal N(0,I)\).
  2. Giả sử rằng mô hình cũng là một phân phối Gaussian\(P(X\mid z;\theta)=\mathcal N(X\mid \mu_\theta(z),\sigma_\theta(z))\), có tham số khoảng\(z\)chức năng.
  3. tham số\((\mu_\theta(z), \sigma_\theta(z))\)Sử dụng cả haimạng lưới thần kinhđể làm người mẫu.

Tại sao làm điều này:

  • KEY1: Một phân bố Gauss đơn giản có thể biểu diễn bất kỳ phân bố nào sau khi biến đổi phi tuyến đủ phức tạp.
  • KEY2: Vì mạng lưới thần kinh có thểMô hình hóa các mối quan hệ phi tuyến phức tạp tùy ý, vì vậy cuối cùng nó có thể được thể hiệnBất kỳ sự phân phối nào chúng tôi muốn.
  • Ví dụ: Phép biến đổi phi tuyến của phân bố Gaussian. Bên trái là phân bố Gaussian, bên phải là\(g(z) = \frac{z}{10} + \frac{z}{||z||}\).
    hình ảnh

Vì vậy, chúng tôi nhận được mô hình\(P(X;\theta)\) mà chúng tôi sử dụng để ước tính phân phối dữ liệu thực\(P_{gt}(X)\):

\[P(X;\theta) = \int P(X,z;\theta)\text{d}z =\int P(X\mid z;\theta) P(z) \text{d}z =\int \mathcal N(X\mid \mu_\theta,\sigma_\theta) \mathcal N(0,I)\text{d}z \]

  • Có thể coi khả năng biểu diễn của mô hình này là đủ.
  • \(z\)Đó là một biến ẩn không thể quan sát được đối với chúng tôi, vì vậy chúng tôi cần xem xét tất cả các khả năng\(z\) (Phản ánh ở điểm).
  • Đây là một mô hình rất phức tạp và Bằng chứng cận biên của mô hình được suy ra \(P(X;\theta) = \int P(X,z;\theta)\text{d}z\), tham số mô hình học tập\(\arg \max_\theta P(X;\theta)\), đều khó khăn.

Suy luận gần đúng và học tập của các mô hình

Xem xét các phương pháp gần đúng bằng cách sử dụng suy luận biến phân.

Theo thảo luận trong phần [[#Suy luận biến phân VI]], Bằng chứng \(\log\) của mô hình có thể được viết dưới dạng \(ELBO+KL\):

\[\begin{aligned} \log P(x^{(i)};\theta) &= \mathbb E_{z\sim q_{\phi^{(i)}}} [\log P(x^ {(i)},z;\theta) - \log q_{\phi^{(i)}}(z)] + KL(q_{\phi^{(i)}}(z) \mid\mid P(z\mid x^{(i)};\theta)) \end{aligned} \]

Sự khác biệt chính: các tham số mô hình \(\theta\).

LƯU Ý: Bây giờ để tối đa hóa \(ELBO\), bạn cần xem xét cả tham số \(\phi\) của phân bố gần đúng \(q\) và tham số mô hình \(\theta\). tối đa hóa\ (ELBO\) có hai chức năng cùng một lúc: 1. Suy luận: giảm thiểu \(KL\) sao cho \(q\) tiến đến phân phối sau thực sự; Học tập: Tối đa hóa bằng chứng tương đương với việc thực hiện MLE, làm cho mô hình \(P_\theta\) tiếp cận phân phối dữ liệu thực\(P_{gt}\).

Sau đó, theo thảo luận trong phần [[#SGVI]], hãy sử dụng công cụ ước tính SGVI để ước tính \(ELBO\):

\[\nabla \mathcal L(x^{(i)},\phi^{(i)},\theta)=\nabla \bigl(\frac{1}{L}\sum_{l=1}^ L \log P(x^{(i)},g_{\phi^{(i)}}(\epsilon^{(l)},x^{(i)});\theta) - \log q_{\phi^{(i)}}(g_{\phi^{(i)}}(\epsilon^{(l)},x^{(i)})) \bigr) \]

  • \(g_\phi(\epsilon^{(l)},x^{(i)})\)Đó là sau khi tham số hóa nặng\(z\).
  • \(\epsilon \sim p(\epsilon)\).
  • toán tử gradient\(\nabla = \{\nabla_\phi, \nabla_\theta\}\).

Tại thời điểm thảo luận này, quá trình học tập của mô hình có thể thu được như sau:

Suy luận khấu hao

  • Một nhược điểm của quá trình học tập trên: đối với mỗi\(x\), trước tiên chúng ta phải suy ra một giá trị đủ tốt\(q_{\phi^*}\).
  • CHÌA KHÓA: Xác suất suy luận gần đúng hậu nghiệm = họcCác tham số của xác suất sau (phối cảnh này được cung cấp bởi VI).

Suy luận khấu hao: Hãy cân nhắc việc giới thiệu một hàm được tham số hóa \(f_\lambda: x^i \to \phi^*\), hàm này sẽ tìm hiểu cách xác định một \(\phi^ đủ tốt dựa trên \(x^i\) * \). Tức là, với mỗi \(x^i\), sẽ thu được \(q(z;f_\lambda(x^i))\).

Làm thế nào để học? Điều tương tự là tham số hóa nặng + tăng độ dốc.

Do đó, có được một quy trình học mô hình đơn giản hơn:

LƯU Ý: Phải đến cuối phần [[#Amortized Inference]], nguyên mẫu của cấu trúc Encoding-Decoding mới bắt đầu xuất hiện, tức là \(x^i\to q(z;f_\lambda(x ^i)) \to z \to P(X\mid z;\theta) \to \bar x^i\ .

Phân tích mục tiêu

Mục tiêu của việc đào tạo VAE là tối đa hóa \(ELBO\). Phần này thảo luận về ý nghĩa thực tế của \(ELBO\) từ chính dạng \(ELBO\).

Đạo hàm ở đây sử dụng phiên bản đơn giản hóa một cách tượng trưng của biểu thức \(ELBO\):

\[\begin{aligned} ELBO &= \int q_\phi(Z)\log P(X,Z) - q_\phi(Z)\log q_\phi(Z) \text{d}Z \\ & = \int q_\phi(Z)\log P(X\mid Z) + q_\phi(Z) \log P(Z) - q_\phi(Z)\log q_\phi(Z) \text{d}Z \\ &=\int q_\phi(Z)\log P(X\mid Z) + q_\phi(Z) \log \frac{P(Z)}{q_\phi(Z )}\text{d}Z \\ &= \int q_\phi(Z)\log P(X\mid Z) \text{d}Z + \int q_\phi(Z) \log \frac{P(Z)}{q_\phi(Z)}\text{d}Z \\ &=\mathbb E_{q_\phi}[\log P(X\mid Z)] - KL(q_\ phi(Z)\mid\mid P(Z)) \end{aligned} \]

Bạn có thể thấy ý nghĩa của 2 thuật ngữ \(ELBO\):

  1. mục đầu tiên: có thể được coi là thuật ngữ Mất mát, có nghĩa là khả năng tối đa, cho biết rằng chúng tôi muốn tạo ra\(X\)giống nhất có thể với tập dữ liệu.
  2. Mục thứ hai: có thể được coi là một thuật ngữ chính quy hóa, có nghĩa là chúng tôi hy vọng rằng phần sau càng gần với phần trước đã biết càng tốt\(P(Z)\), điều này cho thấy rằng chúng tôi muốn bắt đầu từ\(P(Z)\)Chọn ngẫu nhiên một\(z\), với khả năng cao tạo ra kết quả có ý nghĩa.

Ví dụ về cấu trúc VAE

Sau đây là sơ đồ cấu trúc sơ đồ của VAE thực hiện Bộ mã hóa và Bộ giải mã bằng cách sử dụng mạng nơ-ron tiếp liệu. Hình ảnh bên trái không có kỹ thuật tham số hóa nặng và hình ảnh bên phải không có kỹ thuật tham số hóa nặng.

Một vài điểm chính:

  • Đầu ra mạng: Bộ giải mã từ các biến ẩn\(z\)tái thiết\(\thanh X\);Đầu ra bộ mã hóa\(q_\phi(z\mid X)\), tức là từ\(X\)Nén thành các biến tiềm ẩn.
  • Tham số lại và Autodiff: Kỹ thuật tham số hóa lại cho phép tự động dò lỗi truyền các lỗi từ Bộ giải mã đến đầu vào.
  • Lựa chọn khách quan: Không nhất thiết phải nghiêm ngặt\(ELBO\)
    1. Mục bị mất: Để phản ánh lỗi Tái tạo, nó có thể được lựa chọn linh hoạt theo các vấn đề khác nhau.
    2. Thuật ngữ thông thường: Ngoài phân kỳ KL, các phân kỳ khác cũng có thể được sử dụng.
  • Về thế hệ: Phần Bộ giải mã là mô hình tạo biến tiềm ẩn của chúng tôi. ngẫu nhiên từ\(\toán học N(0,I)\)Vẽ từ\(z\), sau đó nhập nó vào Bộ giải mã để tạo mẫu.

Mã tham chiếu

Sau đây là cách triển khai VAE dựa trên CNN.

Bộ mã hóa.

class Encode(nn.Module): def __init__(self, num_channels,hidden_size): super(Encoding, self).__init__() # Đầu vào là (batch_size, num_channels, 28, 28), là hình dạng của dữ liệu MNIST đặt self.conv1 = nn.Conv2d(num_channels, 32, 4, 2) # (28 - 4) / 2 + 1 = 13 self.conv2 = nn.Conv2d(32, 64, 4, 2, 1) # (13 - 4 + 1) / 2 + 1 = 6 self.conv3 = nn.Conv2d(64, 128, 4 , 2) # (6 - 4) / 2 + 1 = 2 self.fc_mu = nn.Linear(128 * 2 * 2, Hidden_size) self.fc_logstd = nn.Linear(128 * 2 * 2, Hidden_size) def Forward(self, x): x = F.relu(self.conv1(x)) x = F.relu( self.conv2(x)) x = F.relu(self.conv3(x)) x = torch.flatten(x, start_dim=1) mu = self.fc_mu(x) log_std = self.fc_logstd(x) trả về mu, log_std

Bộ giải mã.

lớp Bộ giải mã(nn.Module): def __init__(self, num_channels,hidden_size): super(Bộ giải mã, self).__init__() self.fc1 = nn.Linear(hidden_size, 512) self.deconv1 = nn.ConvTranspose2d(512, 64, 5, 2) self.deconv2 = nn.ConvTranspose2d(64, 32, 5, 2) self.deconv3 = nn.ConvTranspose2d(32, num_channels, 4, 2) def Forward(self, x): x = F.relu(self.fc1(x)) x = x.unsqueeze(-1).unsqueeze(-1) # num -> [[num]] x = F.relu(self.deconv1(x)) x = F.relu(self.deconv2(x)) tái cấu trúc = F.sigmoid(self.deconv3(x)) # đầu ra (0, 1) trả về tái cấu trúc

VAE.

lớp VAE(nn.Module): def __init__(self, num_channels,hidden_size): super(VAE, self).__init__() self.encode = Bộ mã hóa(num_channels,hidden_size) self.decode = Bộ giải mã(num_channels,hidden_size) def chuyển tiếp (self, x): mu, log_std = self.encode(x) z = self.reparameterize(mu, log_std) tái thiết = self.decode(z) trả về tái thiết, mu, log_std def reparameterize(self, mu, log_std): std = log_std.exp() eps = torch.randn_like(std) return mu + std * eps

Sự mất mát.

def vae_loss(x, xây dựng lại, mu, log_std): # Để tạo hình ảnh, hiệu quả của việc sử dụng BCE sẽ tốt hơn rec_loss = F.binary_cross_entropy(reconstruction, x,rút gọn='sum') # Đây là q và N( được đơn giản hóa) 0, biểu thức phân kỳ KL của I) kl_loss = -0,5 * torch.sum(1 + 2 * log_std - mu.pow(2) - (2*log_std).exp()) trả về rec_loss + kl_loss

Cuối cùng, bài viết này về suy luận biến phân (VI), suy luận biến phân độ dốc ngẫu nhiên (SGVI/SGVB) và bộ mã hóa tự động biến phân (VAE) có ở đây. Nếu bạn muốn biết thêm về suy luận biến phân (VI), Suy luận biến thiên ngẫu nhiên (SGVI/). SGVB), và Bộ mã hóa tự động biến đổi (VAE), vui lòng tìm kiếm các bài viết về CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

58 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress