【Diffusion】李宏毅2023機器學習Diffusion筆記

文章目錄

  • 1 想法概述
  • 2 實際過程
    • 階段1 Add Noise
    • 階段2 Denoise
  • 3 數學原理
  • 4 為什么推理時要額外加入noise
  • 5 一些不知道對不對的Summary

1 想法概述

從一張充滿噪聲的圖中不斷denoise,最終得到一張clear的圖片。為了確定當前圖片中噪聲占比的大小,同時輸入原圖片和參數 t t t,參數 t t t用于標識一張圖片中的噪聲占比含量。

顯然迭代第1次時圖片的噪聲含量和迭代第999次是不同的,因此需要輸入這種信息t來進行標識。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-7CjpzYoX-1692290104065)(【Diffusion】李宏毅2023機器學習Diffusion筆記/image-20230814190229199.png)]

2 實際過程

階段1 Add Noise

首先,準備好一組確定的參數 α 1 ˉ , α 2 ˉ , … , α T ˉ \bar{\alpha_1},\bar{\alpha_2},\dots,\bar{\alpha_T} α1?ˉ?,α2?ˉ?,,αT?ˉ?,用以表示時間步 t t t下樣本和噪聲的混合情況, t t t越大,噪聲占比越高。然后重復以下過程直至收斂:

  1. 采樣

    1. 從真實樣本集中取出一個樣本 x 0 x_0 x0?

    2. [ 1 , T ] [1,T] [1,T]的整數中采樣出 t t t來表示時間步

    3. 從標準正態分布中采樣出噪聲 ? \epsilon ?

  2. 構造帶噪聲樣本 x = α t ˉ x 0 + 1 ? α t ˉ ? x=\sqrt{\bar{\alpha_t}}x_0+ \sqrt{1-\bar{\alpha_t}} \epsilon x=αt?ˉ? ?x0?+1?αt?ˉ? ??

  3. 將構造樣本 x x x和時間步 t t t一同輸入噪聲預測器 ? θ ( ) \epsilon_\theta() ?θ?(),得到預測噪聲 ? θ ( x , t ) \epsilon_\theta(x,t) ?θ?(x,t)

  4. 目標函數為 ? θ ( x , t ) \epsilon_\theta(x,t) ?θ?(x,t)和采樣出的真實噪聲 ? \epsilon ? M S E MSE MSE

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-D7mqKw6q-1692290104066)(【Diffusion】李宏毅2023機器學習Diffusion筆記/image-20230814194524251.png)]

階段2 Denoise

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-21zUXHgj-1692290104066)(【Diffusion】李宏毅2023機器學習Diffusion筆記/image-20230814201251917.png)]

3 數學原理

  1. 極大似然估計近似等價于最小化KL散度(表示兩個分布的相似性):

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-S3lKC0VE-1692290104066)(【Diffusion】李宏毅2023機器學習Diffusion筆記/image-20230817221857642.png)]

  1. 對任何分布 q ( z ∣ x ) q(z|x) q(zx),有:

log ? P θ ( x ) ≥ ∫ z q ( z ∣ x ) log ? P ( z , x ) q ( z ∣ x ) d z = E q ( z ∣ x ) [ log ? P ( z , x ) q ( z ∣ x ) ] \log P_\theta(x) \ge \int_{z}q(z|x)\log \frac{P(z,x)}{q(z|x)}dz = E_{q(z|x)}[\log \frac{P(z,x)}{q(z|x)}] logPθ?(x)z?q(zx)logq(zx)P(z,x)?dz=Eq(zx)?[logq(zx)P(z,x)?]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-EMBIDtfT-1692290104067)(【Diffusion】李宏毅2023機器學習Diffusion筆記/image-20230817222057765.png)]

  1. 所以對DDPM來說:

log ? P θ ( x ) ≥ E q ( x 1 : x T ∣ x 0 ) [ log ? P ( x 0 : x T ) q ( x 1 : x T ∣ x 0 ) ] \log P_\theta(x) \ge E_{q(x_1:x_T|x_0)}[\log \frac{P(x_0:x_T)}{q(x_1:x_T|x_0)}] logPθ?(x)Eq(x1?:xT?x0?)?[logq(x1?:xT?x0?)P(x0?:xT?)?]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FqgMWPQQ-1692290104067)(【Diffusion】李宏毅2023機器學習Diffusion筆記/image-20230817222642961.png)]

  1. 結合正態分布的可加性:做N次獨立的正態sampling,可能通過一次的sampling就能解決。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-oyzChf3t-1692290104067)(【Diffusion】李宏毅2023機器學習Diffusion筆記/image-20230817225900399.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-w4gtTsG6-1692290104067)(【Diffusion】李宏毅2023機器學習Diffusion筆記/image-20230817231727538.png)]

  1. 對式3不斷變換,最后可得(這個式子的過程可以不用看,也并不復雜,但是麻煩,理解結論就好):

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SY9fKeIh-1692290104068)(【Diffusion】李宏毅2023機器學習Diffusion筆記/image-20230817232929967.png)]

然后再經過一系列的運算求出來 q ( x t ? 1 ∣ x t , x 0 ) q(x_{t-1|x_t,x_0}) q(xt?1∣xt?,x0??)依然是高斯分布,表示首尾 x 0 , x T x_0,x_T x0?,xT?固定住,產生 x t ? 1 x_{t-1} xt?1?的概率,是一個和network無關的分布。而 P ( x t ? 1 ∣ x t ) P(x_{t-1}|x_t) P(xt?1?xt?)是由網絡決定的,我們不考慮它的variance,只考慮mean。如果我們希望這兩個分布越接近越好,那就想辦法讓兩個分布的mean越接近越好。
在這里插入圖片描述

化簡:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-B0OFKfc5-1692290104068)(【Diffusion】李宏毅2023機器學習Diffusion筆記/image-20230817233152037.png)]

實際需要預測出的部分:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-OpE6Y02O-1692290104069)(【Diffusion】李宏毅2023機器學習Diffusion筆記/image-20230817234731710.png)]

4 為什么推理時要額外加入noise

李宏毅老師的一點Guess,生成式任務,概率最大的結果,未必就是最好的結果。人寫的文章用詞可能更suprising。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-BxAIdBaQ-1692290104069)(【Diffusion】李宏毅2023機器學習Diffusion筆記/image-20230817235534101.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-w8wYcaVO-1692290104069)(【Diffusion】李宏毅2023機器學習Diffusion筆記/image-20230817235706919.png)][外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-vmK39t6D-1692290104069)(【Diffusion】李宏毅2023機器學習Diffusion筆記/ab7e3c6482dc90f4bfc5857991f4375.jpg)]

5 一些不知道對不對的Summary

  • 希望近似 P d a t a ( x ) P_{data}(x) Pdata?(x) P θ ( x ) P_\theta(x) Pθ?(x)的分布,而對給定的 x x x,使 P θ ( x ) P_\theta(x) Pθ?(x)最大化可以轉換為使其下界最大化,從而轉換為使 E q ( x 1 : x T ∣ x 0 ) [ log ? P ( x 0 : x T ) q ( x 1 : x T ∣ x 0 ) ] E_{q(x_1:x_T|x_0)}[\log \frac{P(x_0:x_T)}{q(x_1:x_T|x_0)}] Eq(x1?:xT?x0?)?[logq(x1?:xT?x0?)P(x0?:xT?)?]最大化。

  • 在假設 x t = β t x t ? 1 + 1 ? β t z t ? 1 x_t=\sqrt{\beta_t}x_{t-1}+\sqrt{1-\beta_t}z_{t-1} xt?=βt? ?xt?1?+1?βt? ?zt?1?的前提下,可以推出 x t = α t ˉ x 0 + 1 ? α t ˉ z x_t=\sqrt{\bar{\alpha_t}}x_{0}+\sqrt{1-\bar{\alpha_t}}z xt?=αt?ˉ? ?x0?+1?αt?ˉ? ?z

  • 從而可以進一步化簡 E q ( x 1 : x T ∣ x 0 ) [ log ? P ( x 0 : x T ) q ( x 1 : x T ∣ x 0 ) ] E_{q(x_1:x_T|x_0)}[\log \frac{P(x_0:x_T)}{q(x_1:x_T|x_0)}] Eq(x1?:xT?x0?)?[logq(x1?:xT?x0?)P(x0?:xT?)?]為三項,其余兩項與Network無關,可只考慮中間一項,該項由 q ( x t ? 1 ∣ x t , x 0 ) q(x_{t-1|x_t,x_0}) q(xt?1∣xt?,x0??) P ( x t ? 1 ∣ x t ) P(x_{t-1}|x_t) P(xt?1?xt?)的KL散度之和組成,

  • q ( x t ? 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt?1?xt?,x0?)表示首尾 x 0 , x T x_0,x_T x0?,xT?固定住產生 x t ? 1 x_{t-1} xt?1?的概率,可求得是一個和network無關的高斯分布,均值可以表示為:

  • P ( x t ? 1 ∣ x t ) P(x_{t-1}|x_t) P(xt?1?xt?)是由網絡決定的,我們不考慮它的variance,只考慮mean。

  • 如果我們希望這兩個分布越接近越好,那就想辦法讓兩個分布的mean越接近越好。而上式中,僅有 ? \epsilon ?需要確定,因此我們希望網絡能夠預測這個值,從而完成推理。預測出這一項 ? \epsilon ?的過程,可以看作為從 x 0 x_0 x0? x t x_t xt?預測出 x t ? 1 x_{t-1} xt?1?的過程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43133.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

rust踩雷筆記(1)——切片傳參和解引用賦值

最近學習rust,網上資料還是很有限,做題遇到的問題,有時需要自己試驗。把自己做題過程遇到的問題,和試驗的結論,做一些簡單記錄。 閱讀下列文字和代碼 用切片(的引用)做參數要非常小心&#xff…

LVS負載均衡之--Keepalived模式(超詳細)

一.Keepalived概述 Keepalived起初是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換和健康檢查功能-----判斷LVS負載調度器,節點服務器的可用性,及時隔離并替換為新的服務器,當故障主機恢復后將其重新加入群集中Keep…

【數據結構】二叉樹

🐇 🔥博客主頁: 云曦 📋系列專欄:數據結構 💨吾生也有涯,而知也無涯 💛 感謝大家👍點贊 😋關注📝評論 文章目錄 前言一、樹的概念及結構&#x…

簡單理解Python中的深拷貝與淺拷貝

I. 簡介 深拷貝會遞歸的創建一個完全獨立的對象副本,包括所有嵌套的對象,而淺拷貝只復制嵌套對象的引用,不復制嵌套對象本身。 簡單來說就是兩者都對原對象進行了復制,因此使用is運算符來比較新舊對象時,返回的都是F…

java把數字轉換成漢字 java 數字轉漢字

使用java將數字轉化為中文漢字_java數字轉中文_javaerly的博客-CSDN博客 package com.unicom.apartment.utils;public class NumUtil {public static String convert(int number) {if(number < 0){return "";}if(number 1){return "當天";}//數字對應的…

C#實現普通的語音播報

Windows有文字轉語音功能&#xff0c;C#提供了調用的類庫Interop.SpeechLib.dll 使用方法很簡單&#xff0c;在你的項目中添加Interop.SpeechLib.dll引用&#xff0c;在類中引用&#xff1a; using SpeechLib;這里提供一個CVoice類 幫助實現語音播報 public class CVoice{pri…

【5G 核心網】5G 多PDU會話錨點技術介紹

博主未授權任何人或組織機構轉載博主任何原創文章&#xff0c;感謝各位對原創的支持&#xff01; 博主鏈接 本人就職于國際知名終端廠商&#xff0c;負責modem芯片研發。 在5G早期負責終端數據業務層、核心網相關的開發工作&#xff0c;目前牽頭6G算力網絡技術標準研究。 博客…

Spring Boot(六十四):SpringBoot集成Gzip壓縮數據

1 實現思路 2 實現 2.1 創建springboot項目 2.2 編寫一個接口,功能很簡單就是傳入一個Json對象并返回 package com.example.demo.controller;import com.example.demo.entity.Advertising; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframewo…

LeetCode150道面試經典題-- 加一(簡單)

1.題目 給定一個由 整數 組成的 非空 數組所表示的非負整數&#xff0c;在該數的基礎上加一。 最高位數字存放在數組的首位&#xff0c; 數組中每個元素只存儲單個數字。 你可以假設除了整數 0 之外&#xff0c;這個整數不會以零開頭。 2.示例 示例 1&#xff1a; 輸入&am…

excel提示更新外部引用文件 這個提示能手動禁用

是的&#xff0c;你可以手動禁用 Excel 中的更新外部引用文件的提示。這些步驟可能因 Excel 版本而有所不同&#xff0c;以下是一般的步驟&#xff1a; 1. **打開 Excel**&#xff1a; 2. **進入“選項”**&#xff1a; - 在 Excel 中&#xff0c;點擊頂部菜單中的“文件”…

網絡通信原理傳輸層TCP三次建立連接(第四十八課)

ACK :確認號 。 是期望收到對方的下一個報文段的數據的第1個字節的序號,即上次已成功接收到的數據字節序號加1。只有ACK標識為1,此字段有效。確認號X+1SEQ:序號字段。 TCP鏈接中傳輸的數據流中每個字節都編上一個序號。序號字段的值指的是本報文段所發送的數據的第一個字節的…

「UG/NX」Block UI 面收集器FaceCollector

?博客主頁何曾參靜謐的博客??文章專欄「UG/NX」BlockUI集合??全部專欄「UG/NX」NX二次開發「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序設計「C/C+&#

LangChain手記 Question Answer 問答系統

整理并翻譯自DeepLearning.AILangChain的官方課程&#xff1a;Question Answer&#xff08;源代碼可見&#xff09; 本節介紹使用LangChian構建文檔上的問答系統&#xff0c;可以實現給定一個PDF文檔&#xff0c;詢問關于文檔上出現過的某個信息點&#xff0c;LLM可以給出關于該…

【vue】項目基礎環境搭建、css樣式重置與公用

nodejs環境 nodejs是當下前端工程化開發必不可少的環境, 使用 nodejs的 npm功能來管理依賴包 查看node 和 npm的版本 node -v #查看node版本npm -v #查看npm版本 git版本控制 git版本控制工具是目前最為流行的分布式版本管理工具,代碼的**提交, 檢出, 日志**, 都需要通過git完…

Matplotlib數據可視化(二)

目錄 1.rc參數設置 1.1 lines.linestype取值 1.2 lines.marker參數的取值 1.3 繪圖中文預設 1.4 示例 1.4.1 示例1 1.4.2 示例2 1.rc參數設置 利用matplotlib繪圖時為了讓繪制出的圖形更加好看&#xff0c;需要對參數進行設置rc參數設置。可以通過以下代碼查看matplotli…

C++11并發與多線程筆記(8) condition_variable、wait、notify_one、notify_all

C11并發與多線程筆記&#xff08;8&#xff09; condition_variable、wait、notify_one、notify_all 1、條件變量condition_variable、wait、notify_one、notify_all1.1 std::condition_variable1.2 wait()1.3 notify_one()1.4 notify_all() 2、深入思考 1、條件變量condition_…

JS內存泄漏

JS內存泄漏 1.意外的全局變量 全局變量的生命周期很長&#xff0c;直到頁面關閉&#xff0c;它都存活&#xff0c;所以全局變量上的內存一直都不會被回收 當全局變量使用不當&#xff0c;沒有及時回收&#xff08;手動賦值null&#xff09;&#xff0c;或者拼寫錯誤等將某個變…

[Machine Learning] decision tree 決策樹

&#xff08;為了節約時間&#xff0c;后面關于機器學習和有關內容哦就是用中文進行書寫了&#xff0c;如果有需要的話&#xff0c;我在目前手頭項目交工以后&#xff0c;用英文重寫一遍&#xff09; &#xff08;祝&#xff0c;本文同時用于比賽學習筆記和機器學習基礎課程&a…

【算法學習】兩數之和II - 輸入有序數組

題目描述 原題鏈接 給你一個下標從 1 開始的整數數組 numbers &#xff0c;該數組已按 非遞減順序排列 &#xff0c;請你從數組中找出滿足相加之和等于目標數 target 的兩個數。如果設這兩個數分別是 numbers[index1] 和 numbers[index2] &#xff0c;則 1 < index1 < …

Springboot MultipartFile文件上傳與下載

yml文件配置是否可以上傳及上傳附件大小 servlet:multipart:# 允許文件上傳enabled: true# 單個文件大小max-file-size: 20MB# 設置總上傳的文件大小max-request-size: 50MB /*** param files* param request* Description 上傳文件* Throws* Return java.util.List* Date 202…