Những ý tưởng để hình thành nên mô hình diffussion model đã có từ rất lâu về trước nhưng đến tận năm 2021 chúng mới được phát triển mạnh mẽ .Trong bài viết này mình sẽ nói chung nguyên tắc cơ bản của diffussion_model .
Diffussion model được biết đến sớm nhất về ý tưởng này là dựa trên paper năm 2015 Deep Unsupervised Learning using Nonequilibrium Thermodynamics by Jascha Sohl-Dickstein et al. from Stanford University and UC Berkeley đã có từ 7 năm trước tức đã có từ rất rất lâu . Mọi ý tưởng chính bắt đầu từ nhiệt động lực học ( thermodynamics) , nếu bạn chưa biết nhiệt động lực học thì mình sẽ lấy một ví dụ đơn giản như sau:
Giả sử ta pha một tách cà phê với nước nóng quá trình trộn cà phê với nước đến khi cà phê hòa tan hoàn toàn đây được gọi là khuyếc tán thuận . Sau đó ta sẽ cố gắng tách cà phê ra khỏi nước nóng đây được gọi là khuyếc tán ngược . Tuy nhiên đây chỉ là câu nói mang tính chất giải trí vì hầu như ta không thể tách cà phê ra khỏi nước sau khi đã hòa tan hoàn toàn được nữa.
Mọi chuyện về ý tưởng khuyến tán vẫn tiếp tục sau 5 năm vắng bóng tất cả nguyên nhân là do sự áp đảo của GAN đã khiến mô hình khuyếc tán bị lu mờ trong những năm tháng qua đi . Mãi cho đến năm 2020by Jonathan Ho et al., also from UC Berkeley với tên gọi Denoising Diffusion Probabilistic Models (DDPM) tuy nhiên chúng chưa đủ mạnh mẽ để có thể thực sự đánh bại GAN . Sau một năm qua đi 2021 Improved Denoising Diffusion Probabilistic Models by OpenAI researchers Alex Nichol and Prafulla Dhariwal đã tạo nên một cú hích lớn để từ đó ta có các mô hình text2img nổi tiếng như bây giờ . Họ nhận thấy rằng diffussion model dễ đào tạo hơn GAN , hình ảnh đa dạng hơn và chất lượng ảnh cao hơn . Nhược điểm là chúng tồn rất nhiều thời gian để tạo ảnh do vấn đề T( Gaussian tiêu chuẩn ) số bước cần phải lớn như trong ví dụ trên đến khi cà phê thực sự hòa tan với nước.
1.2 Bắt đầu với khuyến tán thuận và khuyến tán ngược
Tiếp túc từ series (1) chúng ta sẽ bắt đầu tìm hiểu thêm về quá trình khuyến tán dữ liệu .Như chúng ta đã biết về mô hình phân cấp VAE(Hierar-chical Variational Autoencode) thì chúng có ba điểm chính.
1 . Layer tiềm ẩn z bằng với layer đầu vào x hay như trên hình tức là số nút ẩn z bằng số nút đầu vào x
2 . Cấu trúc các layer tiềm ẩn z ở mỗi bước T không được học mà chỉ quanh quanh đầu ra trước đó tức là ví dụ z2 thì chúng chỉ hoạt đông dựa trên gaussion z3
3 . Các tham số của layer z sẽ thay đổi theo thời gian T , T là gaussian tiêu chuẩn
Miêu tả lại công thức quá trình decoder từ series 1:
p(x0,T)=p(xT)t=1∏Tpθ(xt−1∣xt)
Hình 1
Hình 2
Dựa trên hình 2 ta sẽ xem xét điểm thứ nhất với một số điều chỉnh thay vì z là layer tiềm ẩn ở đây ta sẽ thay đổi xt là layer tiềm ẩn ở mội bước thời gian T với t=0 là ảnh input và t=[1,T] là các layer tiềm ẩn , vì vậy ta có thể viết lại chúng thành.
1.2.1 Forward process (Khuyến tán thuận )
(1)
q(x1:T∣x0)=t=1∏Tq(xt∣xt−1)
Tiếp theo xét điểm thứ hai diffussion model . Chúng là một gaussian tuyến tính với trung bình và phương sai đôi có thể được đặt như hyparameter . Ở diffussion model chúng tôi sẽ học tham số ở mỗi bước thời gian T luôn với giá trị trung bình .
Đặt αt=1−βt trong đó βt với t=[1,T] là một hyparameter sau đó được học thành parameter chính là lịch trình phương sai , nếu chúng hoạt động tốt chắc chắn xT sẽ là một gaussian tiêu chuẩn với phương sai là 1 và trung bình là 0 .
Suy ra trung bình tổng thể:
(2)
μt(xt)=αtxt−1
Phương sai:
(3)
Σt(xt)=(1−αt)I
Quá trình encoder hay khuyến tán thuận ở mỗi layer tiềm ẩn luôn bảo toàn phương sai ( phương sai không hề thay đổi ở mỗi zt) . Từ đó ta có thể nhận thấy rằng tỉ lệ noise ở mỗi bước t thời gian là như nhau và α giống như β đều là một hyparameter sau đó đươc học thành parameter với các parameter thay đổi theo thời gian t. Từ giờ ta sẽ sử dụng αt thay vì βt , nhiều hướng dẫn hay bài báo để sử dụng β chúng vẫn là như nhau đều là lịch trình phương sai thay đổi theo thời gian t.
Gói gọn từ phương trình (1) (2) (3) ta được
(4)
q(xt∣xt−1)=N(xt;αtxt−1,(1−αt)I)
Tuy nhiên mặc dù ta đã biết đầu vào ảnh xt với t=0 là ảnh gốc tuy nhiên việc tính xt với t=[1,T] khi noise ảnh đầu vào chưa có thông tin . Điều này mình sẽ giải thích một chút .
Ta có thể tượng tượng từ hình ảnh 2 và phương trình 4 giả sử rằng x1 sẽ là ảnh đầu vào và x0 kết hợp với một gaussian với trung bình sẽ tạo ra ảnh x1 noise. Dựa trên câu nói trên ta biết được rằng.
(5)
xt∼N(xt−1,1)⇔xt=Xt−1+N(0,1)
ta biết rằng phân phối gaussian được viết là:
N(x;μ,σ)=σ2π1exp(−21(σx−μ)2)
Chứng minh công thức (5) với tích phân luật xác suất toàn phần:
Nghĩa là nếu xt−1... sẽ tạo thành một không gian liên tục . Khi đó xt sẽ là:
pXt(xt)=∫p(xt∣xt−1)p(xt−1)dxt−1
Sau đó, chúng tôi thay thế phân phối có điều kiện bằng dạng Gaussian đã biết của nó
=∫N(xt;xt−1,1)p(xt−1)dxt−1
Bây giờ chúng ta sẽ xắp xếp lại quy hoạch chúng như một phân phối gaussian chuẩn
Từ (6) ta chứng minh được điều rằng là phân phối ở mỗi bước thời gian t sẽ thông qua gausian trung bình và phân phối t−1 thời gian trước đó như đã nói ở điểm thứ 2 .Tuy nhiên lưu ý một điều rằng là mình chưa sử dụng các tham số α lịch trình phương sai . Vì đây chỉ là một lời giải thích ngắn gọn trước khi chúng ta kết hợp các trung bình và gaussian có α. Đây chính là nguyên nhân tại sao có reparameter trick.Điều này cực kỳ quan trọng
1.2.2 Reverse process(Khuyến tán ngược)
Xét điểm thứ 3 Các tham số của layer z sẽ thay đổi theo thời gian T (T là gaussian tiêu chuẩn) của HVAE nếu chuyển sang diffussion thì αt cập nhật lịch trình phương sai và p(xT) vẫn là một gaussian tiêu chuẩn và được viết lại theo toán học thành
(7)
p(x0:T)=p(xT)t=1∏Tpθ(xt−1∣xt)
khi đó
p(xT)=N(xT;0,I)
Lưu ý rằng các phân phối bộ encoder q(xt∣xt−1) của chúng tôi không còn được tham số hóa bởi ϕ nữa, vì chúng hoàn toàn được mô hình hóa dưới dạng Gaussian với các parameter trung bình và phương sai xác định tại mỗi bước thời gian. Do đó, trong một VDM, chúng ta chỉ quan tâm đến việc học các điều kiện pθ(xt−1∣xt) , để chúng ta có thể mô phỏng dữ liệu mới. Sau khi tối ưu hóa VDM, quy trình lấy mẫu đơn giản như lấy mẫu nhiễu Gaussian từ p(xT) và chạy lặp đi lặp lại các bước chuyển đổi làm giảm pθ(xt−1∣xt) cho T bước để tạo ra một x0 mới.
Giống như HVAE ta sẽ tối ưu hóa ELBO để cập nhật được các tham số θ tốt nhất , mọi quy tắc thức hiện giống y như series 1 đã viết.
Trong phương trình 18 có 3 đoạn tuy nhiên hãy để ý rằng Eq(x1:T∣x0) đã được thay đổi tùy theo các đoạn khác nhau sẽ có một chút thác mắc với bạn đọc , vậy nên tôi sẽ giải theo ý hiểu của bản thân rằng là. Giả sử đoạn 1.
Eq(x1∣x0)[logpθ(x0∣x1)]
Do ta nhận thấy rằng pθ(x0∣x1) không tồn tại trong encoder khuyến tán thuận q(x0∣x1) tuy nhiên để ý rằng trong hình 2 q(x1∣x0) và p(x0∣x1) chắc chắn rằng chúng phải thỏa mãn với điều kiện bằng nhau(tương đương với nhau) nên ở đây mới có q(x0∣x1). Hơn nữa x0 là giá trị ảnh đầu vào tức luôn luôn có điều kiện x0 mọi yếu tố của các bước thời gian t khi khuyến tán thuận luôn có điều kiện quan trọng ảnh đầu vào , x0 luôn luôn liên kết liên tiếp với các ảnh noise theo thời gian t.Tương tự với các đoạn còn lai cũng giải thích như vậy.
1.3 Loss Function
(19) Từ phương trình (18)
Ta sẽ giải thích 3 đoạn của phương trình (19) như sau:
Đoạn 1: reconstruction term :dự đoán log xác suất của ảnh dựa trên ảnh noise đầu tiên
Đoạn 2 : prior matching term : Mặc định bằng 0 do không có parameter khoảng cách phân phối khuyến tán thuận qT cuối cùng và khuyến tán ngược pT đầu tiên và do cả hai chắc chắn là một gaussian tiêu chuẩn nên chắc chắn là bằng 0
Đoạn 3: consistency term : Khoảng cách giữa các layer tiềm ẩn khi khuyến tán thuận và các layer tiềm ẩn khi khuyến tán ngược chúng phải cố gắng tối ưu hóa sao cho chúng bằng nhau tức nhỏ nhất 0. Mình sẽ cố gắng giải thích bằng hình minh họa sau:
Tôi ưu hóa : Optimizers và sử dụng xấp xỉ để ấm chỉ hai thứ đó gần bằng nhau và đều bằng 0 đó chính xác là mục tiêu mà chúng ta muốn tối ưu hóa và trên hết decoder khuyến tán ngược có tham số theta sẽ cập nhật
Sau đây mình sẽ chia sẻ nốt về KL dùng để đo khoảng cách giữa hai phân phối.
DKL(P∣∣Q)=∫−∞∞p(x)log(q(x)p(x))dx
Dưới đây, bạn có thể thấy sự phân kỳ KL của một phân phối thay đổi P (xanh lam) từ một phân phối tham chiếu Q (đỏ). Đường cong màu xanh lá cây biểu thị hàm trong tích phân trong định nghĩa cho phân kỳ KL ở trên và tổng diện tích dưới đường cong biểu thị giá trị của phân kỳ KL của P từ Q tại bất kỳ thời điểm nào, một giá trị cũng được hiển thị bằng số.
Mặc dù phương trình số (18) đã đem lại cho chúng ta một hàm tối ưu hóa ELBO nhưng thực sự có phải vậy chăng , đó có chinh xác là một thuật ngữ tối ưu hóa cho ELBO . Không hãy để ý đoạn 3 của phương trình 18 có 2 biến ngẫu nhiên {xt−1 và xt+1} mà ước tính Monte Carlo chỉ có khả năng dự đoán tốt với duy nhất 1 biến ngẫu nhiên , đối với T lớn ELBO
có khả năng mang lại phương sai cao tức là ovefting . Vậy nên ở đây ta tạo ra một hình vẽ minh họa cho diffussion model tiếp theo để chỉnh sửa chút về ELBO. Tìm hiểu thêm về Monte carlo tham khảo
Hình 3:
Mục tiêu lần này của chúng ta sẽ cố gắng để cho consistency term kỳ vọng duy nhất vào một biến ngẫu nhiên đây sẽ là mục tiêu của chúng tôi. Ở đây ta áp dụng đinh lý bayess để viết lại encoder khuyến tán thuận như sau , lưu ý :
Ở đây chúng tôi đã viết ại ELBO một cách khiến có phương sai thấp hơn , hơn nữa chúng ta đã làm được một điều đó là khiến các kỳ vọng ở mỗi đoạn có đúng một biến ngẫu nhiên. Đây chính là Loss function của diffussion mà chúng ta cần tìm
Ta sẽ tiếp tục giải thích phương trình (33) như sau:
Đoạn 1 : reconstruction term (tái tạo ) dự đoán log xác suất của ảnh dựa trên ảnh noise đầu tiên tối ưu hóa bằng cách sử dụng ước tính Monte Carlo
Đoạn 2: prior matching term : Mặc định bằng 0 do không có parameter khoảng cách phân phối khuyến tán thuận qT cuối cùng và khuyến tán ngược pT đầu tiên và do cả hai chắc chắn là một gaussian tiêu chuẩn nên chắc chắn là bằng 0
Đoạn 3: denoising matching term:Khoảng cách giữa các layer tiềm ẩn khi khuyến tán thuận và các layer tiềm ẩn khi khuyến tán ngược chúng phải cố gắng tối ưu hóa sao cho chúng bằng nhau tức nhỏ nhất 0. Nhìn vào hình 5 ta biết được rằng đường màu hồng và đường màu xanh q(xt−1∣xt,x0=p(xt−1∣xt) (điều kiện tối ưu hóa mong muốn) hay q(xt∣xt+1,x0=p(xt∣xt+1)
Hình 5:
Trong phương trình (33) phần lớn khả năng tính toán dựa vào reconstruction term trong khi denoising matching term rất khó để học chúng do sự phức tạp giữa chúng khi phải tính tham số decoder p(xt−1∣xt) và cả bộ encoder mặc dù encoder không có parameter . Vậy nên ta sẽ tiếp tục đào sâu về gaussian chuyển tiếp để tối ưu hóa chúng , áp dụng đinh lý bayess:
Từ kết luận từ phương trình số (6) ta biết được tại sao có reparameter trick:
xt∼q(xt∣xt−1)
có thể viết lại thành (36)
xt=αtxt−1+1−αtϵ with ϵ∼N(ϵ;0,I)
Rất giống với phương trình số (6) duy nhất có sự thay đổi ở đây là các parameter alpha lịch trình học tập tương ứng với trung bình mẫu và phương sai
Tương tự như vậy thì:
xt−1∼q(xt−1∣xt−2)
có thể viết lượng thành (37)
xt−1=αt−1xt−2+1−αt−1ϵ with ϵ∼N(ϵ;0,I)
Hình 5 miêu tả một cách phương sai thấp hơn để tối ưu hóa Diffussion model , tính toán các layer tiềm ẩn khuyến tán thuận q(xt−1∣xt,x0) bằng cách sử dụng quy tắc Bayes và giảm thiểu Phân kỳ KL của nó sao cho gần đúng pθ(xt−1∣xt). Hiển thị bằng các mũi tên màu xanh lá cây với các phân bố của các mũi tên màu hồng.,mỗi mũi tên màu hồng cũng phải xuất phát từ x0, vì nó cũng là một thuật ngữ denoising matching term.
Khi đó q(xt−1∣xt,x0) với
{ϵt∗,ϵt}t=0T∼N(ϵ;0,I)
Ta sẽ tính mọi ảnh noise theo thời gian t dựa trên đầu vào ảnh, điều này cực kỳ quan trọng vì nó chính là mọi quy tắc của ảnh noise tiếp theo của khuyến tán thuận. Ta sẽ ký hiệu chúng là:
Do mọi ϵ đều có phân phối chuản nên khi nhân với nhau chúng vẫn giữ nguyên mặc định nên ở đây tôi gói gọn trong ϵt−3
(53) rút gọn về thành:
=i=1∏tαix0+1−i=1∏tαiϵ0
(54)
=αtx0+1−αtϵ0
(55)
∼N(xt;αtx0,(1−αt)I)
Đây chính là reparameterization trick của Diffussion model
Do đó, chúng tôi suy ra Gaussian của q(xt∣x0). Đạo hàm của chúng có thể biến thành parameterization Gaussian q(xt−1∣x0). Bây giờ, khi biết q(xt∣x0) và q(xt−1∣x0) từ (*) chúng ta có thể tiến hành tính dạng của q(xt−1∣xt,x0) bằng cách thay thế vào khai triển quy tắc Bayes:
Trong đó C(xt,xo) bằng với μq(xt,x0)2 bình phương hãy để ý vế trái phương trình (68) là một hằng đẳng thức. Từ đó ta biết được rằng
xt−1∼q(xt−1∣xt,x0)
với trung bình mẫu μq(xt,x0) và phương sai ∑q(t). Ta có thể viết lại ∑q(t)=σq2(t)
(70)
σq2(t)=1−αt(1−αt)(1−αt−t)
Mục tiêu quan trọng thứ hai chính là denoising matching term đây chính là điều mà ta muốn khám phá. Chúng ta sẽ xét khoảng cách phân phối giữa khuyến tán thuận noise layer ẩn và khuyến tạn đảo ngược . Mọi thứ nằm trong phương trình (33) denoising matching term .
Chúng ta sẽ tối ưu khoảng cách giữa hai phân phối đó ( lưu ý quan trọng là hai khoảng cách đó có cùng chiều với nhau ta giả sử ký hiệu là d) do đều quan tâm đến xt các tiềm ẩn dữ liệu noise.
tr : Trace (vết matrix) là tổng các đường chéo trong matrix vuông.
Từ đó ta sẽ tối ưu hóa khoảng cách giữa khuyến tán thuận noise xt và khuyến tán ngược tiềm ẩn noise xt.
Trong đó μq viết tắt của μq(xt,x0) và μθ viết tắt của μq(xt,t) . Nói cách khác ta muốn tối ưu khoảng cách giữa μq và μθ .
Dựa vào phương trình (69) ta biết:
Tuy nhiên việc tính toán các trung bình và phương sai có parameter α có rất nhiều cách thực hiện khác nhau . Như dựa trên điểm số score-based,..vv nhưng ở đây chúng ta sẽ giới thiệu về dựa trên tỷ lệ nhiễu của ảnh:
Thay thế phương trình (70) vào (84):
Tỷ lệ nhiễu trong đoạn này ta sẽ sử dụng tỷ lệ nhiễu để giảm thiểu phân kỳ KL giữa chúng , như đã biết từ (*) và (55) và SNR=σ2μ2 ta viết lại:
(94)
SNR(t)=1−αtαt
Áp dụng vào (93) suy ra được:
(95)
Như tên của nó, SNR đại diện cho tỷ lệ giữa tín hiệu gốc và lượng nhiễu hiện có; SNR cao hơn biểu thị nhiều tín hiệu hơn và SNR thấp hơn biểu thị nhiều nhiễu hơn. Trong mô hình khuếch tán, chúng tôi yêu cầu SNR giảm đơn điệu khi bước thời gian t tăng lên; điều này chính thức hóa khái niệm rằng đầu vào xáo trộn xt ngày càng trở nên ồn ào theo thời gian, cho đến khi nó trở nên giống hệt với một Gaussian tiêu chuẩn tại t = T
Dựa trên sự đơn giảnPhương trình 95, chúng ta có thể học trực tiếp SNR tại mỗi bước thời gian bằng cách sử dụng mạng nơ-ron và tìm hiểu nó cùng với mô hình khuếch tán. Vì SNR phải giảm đơn điệu theo thời gian, chúng ta có thể biểu diễn nó là:
(96)
SNR^(t)=exp(−ωη(t))
Trong đó ωη (t) mạng nơ ron theo thời gian t với tham số n . Tối ưu hóa tham số n dựa trên phương trình (94) và (96) Khi đó ta có thể tính ra các trung bình mẫu α và phương sai 1−α .
(97)
.
2. Tổng Kết
(97)
Nhìn lại tất cả mọi thứ kết hơp phương trình (33) Đoạn 1.
Phần pθ(0∣x1) với tham số θ bạn có thể luôn để ý ảnh là các số nguyên [0,255] chia tỷ lệ thành [-1,1 ] sau đó thành các phạm vi [x-1/255,x+1/255] , được mô tả với hình vẽ như sau:
Đoạn 2 trong phương trình (33) do không có tham số cho nên ta bỏ qua chúng.
Đây là cơ sở căn bản của hàm Loss bạn có thể sẽ thấy ngặc nhiên so với paper gốc của Diffussion model, tuy nhiên trong series 3 bạn sẽ học cách triển khai chúng và gới gọn hàm loss hơn nữa.
Tóm tắt tổng kết
Mô hình khuếch tán của chúng tôi được tham số hóa dưới dạng chuỗi Markov , có nghĩa là các xt noise của chúng tôi chỉ phụ thuộc vào bước thời gian trước (hoặc sau).
2 .Các phân phối chuyển tiếp trong chuỗi Markov là Gaussian , trong đó quá trình thuận yêu cầu một lịch trình phương sai và các tham số của quá trình ngược lại được học ở đây là alpha
Quá trình khuếch tán đảm bảo rằng xT được phân phối tiệm cận như một Gaussian đẳng hướng cho T đủ lớn
Trong trường hợp của chúng tôi, lịch trình phương sai đã được cố định , nhưng nó cũng có thể được học. Đối với các lịch trình cố định, việc tuân theo một tiến trình hình học có thể mang lại kết quả tốt hơn so với một tiến trình tuyến tính. Trong cả hai trường hợp, các phương sai thường tăng dần theo thời gian trong chuỗi
Mô hình khuếch tán có tính linh hoạt cao và cho phép sử dụng bất kỳ kiến trúc nào có kích thước đầu vào và đầu ra giống nhau. Tiêu biểu Unet
Mục tiêu gồm có 2 thứ là argmin khoảng cách giữa noise khuyến tán thuận xt và decoder khuyến tán ngược xt và argmax làm sao để log sát xuất khuyến tán ngược giữa x0 lớn nhất dựa trên noise decoder.
Có nhiều cách thưc để tối ưu hóa tham số ngoài SNR ví dụ như dựa trên điểm số ,..vv tuy nhiên ở đây chúng ta chỉ nói về SNR giới hạn trong series 2 vì chúng đã quá dài.
Sau đây là kết thúc series 2 rất rất dài , khó có thể nói ngắn gọn được . Series 3 sẽ bao gồm nhiều cách huấn luyện và mô hình dựa trên điểm số , động lực học , có lẽ có thể dài hơn nhiều so vs series 2.
Trong bài này chúng ta sẽ xây dựng một hệ thống sử dụng YOLOv3 kết hợp với DeepSORT để tracking được các đối tượng trên camera, YOLO là một thuật toán deep learning ra đời vào tháng 5 năm 2016 và nó nhanh chóng trở nên phổ biến vì nó quá nhanh so với thuật toán deep learning trước đó, sử dụng YOLO t
Với những công nghệ hiện đại của thế kỷ 21 chúng ta đã có những phần cứng cũng như phần mềm mạnh mẽ để giải quyết những vấn đề và bài toán nan giải như face recognition, object detection, NLP,... Một trong những vấn đề nan giải cũng được mọi người chú ý ko kém những chủ đề trên là Object Tracking, v
Giới thiệu. fastai là 1 thư viện deep learning hiện đại, cung cấp API bậc cao để giúp các lập trình viên AI cài đặt các mô hình deep learning cho các bài toán như classification, segmentation... và nhanh chóng đạt được kết quả tốt chỉ bằng vài dòng code. Bên cạnh đó, nhờ được phát triển trên nền tản
Mục tiêu bài viết. Phân tích câu hỏi là pha đầu tiên trong kiến trúc chung của một hệ thống hỏi đáp, có nhiệm vụ tìm ra các thông tin cần thiết làm đầu vào cho quá trình xử lý của các pha sau (trích c
Khi mới học Machine Learning và sau này là Deep Learning chúng ta gặp phải các khái niệm như Epoch, Batch size và Iterations. Để khỏi nhầm lẫn mình xin chia sẻ với các bạn sự khác nhau giữa các khái n