揭陽cms建站模板數(shù)據(jù)分析師35歲以后怎么辦
各位佬看文章之前,可以先去看看這個視頻,并給這位up主點贊投幣,這位佬講解的太好了:大白話AI
1.前置知識的學(xué)習(xí)
1.1 正態(tài)分布特性
? (1)正態(tài)分布的概率密度函數(shù)
f ( x ) = 1 2 π σ e ? ( x ? μ ) 2 2 σ 2 , 記為 N ( μ , σ 2 ) f(x) = {1 \over \sqrt{2 \pi } \sigma} e^{-{{(x-\mu)^2} \over {2 \sigma^2}}} ,記為N(\mu, \sigma^2) f(x)=2π?σ1?e?2σ2(x?μ)2?,記為N(μ,σ2)
? 當(dāng) μ = 0 , σ 2 = 1 \mu = 0, \sigma^2=1 μ=0,σ2=1時,則記為標(biāo)準(zhǔn)正態(tài)分布,記為 N ( 0 , 1 ) N(0, 1) N(0,1), 又稱為高斯分布。
? (2)正態(tài)分布的基本性質(zhì)
N ( μ 1 , σ 1 2 ) + N ( μ 2 , σ 2 2 ) = N ( μ 1 + μ 2 , σ 1 2 + σ 2 2 ) a ? N ( μ , σ ) = N ( a ? μ , ( a ? σ ) 2 ) N(\mu_1, \sigma_1^2) + N(\mu_2, \sigma_2^2) = N(\mu_1+\mu2, \sigma_1^2+\sigma_2^2) \\ a*N(\mu, \sigma) = N(a*\mu, (a*\sigma)^2) N(μ1?,σ12?)+N(μ2?,σ22?)=N(μ1?+μ2,σ12?+σ22?)a?N(μ,σ)=N(a?μ,(a?σ)2)
1.2 貝葉斯定理
? A , B A, B A,B是兩個隨機事件, P ( A ) P(A) P(A)表示 事件 A 事件A 事件A發(fā)生的概率, P ( B ∣ A ) P(B|A) P(B∣A)表示A事件發(fā)生的情況下B事件發(fā)生的概率,則貝葉斯定理如下:
P ( A ∣ B ) = P ( B ∣ A ) ? P ( A ) P ( B ) P(A|B) = {{P(B|A) * P(A)} \over P(B)} P(A∣B)=P(B)P(B∣A)?P(A)?
2. 前向過程(加噪)
? 如圖所示,前向過程則是一個加載過程,在每個時間步,都從正態(tài)分布中隨機采樣一個和圖片等大的噪聲(也可以理解為噪聲圖片),則加噪過程:
x 1 = β 1 ? ? 1 + 1 ? β 1 ? x 0 x_1 = \sqrt{\beta_1} * \epsilon_1 + \sqrt{1-\beta_1} * x_0 x1?=β1????1?+1?β1???x0?
? 其中 x 0 x_0 x0?表示原始圖片, ? 1 \epsilon_1 ?1? 表示隨機噪聲, β 1 \beta_1 β1?表示擴散速度, T T T表示擴散的次數(shù),則可以一次推導(dǎo):
x 1 = β 1 ? ? 1 + 1 ? β 1 ? x 0 x 2 = β 2 ? ? 2 + 1 ? β 2 ? x 1 x 3 = β 3 ? ? 3 + 1 ? β 3 ? x 2 ? ? ? ? ? ? x T = β T ? ? T + 1 ? β T ? x T ? 1 前后關(guān)系就可以記為: x t = β t ? ? t + 1 ? β t ? x t ? 1 x_1 = \sqrt{\beta_1} * \epsilon_1 + \sqrt{1-\beta_1} * x_0 \\ x_2 = \sqrt{\beta_2} * \epsilon_2 + \sqrt{1-\beta_2} * x_1 \\ x_3 = \sqrt{\beta_3} * \epsilon_3 + \sqrt{1-\beta_3} * x_2 \\ ······ \\ x_T = \sqrt{\beta_T} * \epsilon_T + \sqrt{1-\beta_T} * x_{T-1} \\ 前后關(guān)系就可以記為: \\ x_t = \sqrt{\beta_t} * \epsilon_t + \sqrt{1-\beta_t} * x_{t-1} \\ x1?=β1????1?+1?β1???x0?x2?=β2????2?+1?β2???x1?x3?=β3????3?+1?β3???x2???????xT?=βT????T?+1?βT???xT?1?前后關(guān)系就可以記為:xt?=βt????t?+1?βt???xt?1?
? 為簡化后續(xù)運算,令 α t = 1 ? β t \alpha_t = 1 - \beta_t αt?=1?βt?, 則有:
x t = 1 ? α t ? ? t + α t ? x t ? 1 x_t = \sqrt{1- \alpha_t} * \epsilon_t + \sqrt{\alpha_t} * x_{t-1} xt?=1?αt????t?+αt???xt?1?
? 思考:如何能更快的得到 x T x_T xT??因為如果加噪1000步,豈不是要計算1000次上述的運算!好的,下面介紹怎樣依賴正態(tài)分布的可加性來簡化運算,從而推導(dǎo)出 x 0 x_0 x0?到 x t x_t xt?的關(guān)系:
由: x t = 1 ? α t ? ? t + α t ? x t ? 1 x t ? 1 = 1 ? α t ? 1 ? ? t ? 1 + α t ? 1 ? x t ? 2 把 x t ? 1 代入到 x t 中可以推導(dǎo)出: x t = 1 ? α t ? ? t + α t ? ( 1 ? α t ? 1 ? ? t ? 1 + α t ? 1 ? x t ? 2 ) = a t ( 1 ? a t ? 1 ) ? ? t ? 1 + 1 ? a t ? ? t + a t a t ? 1 ? x t ? 2 其中: ? t ? 1 和 ? t 是兩個隨機噪聲,且兩者是兩個獨立的隨機變量。 打個比喻:我們有一個骰子擲兩次分別得到 ? t ? 1 和 ? t ,完全可以等效 于我們有兩個骰子擲一次。即:一個骰子擲兩次的概率分布等同于兩個骰子擲一次的概率分布,所以 , 如果我們知道兩個骰子擲一次的概率分布,然后進(jìn)行一次采樣即可。 由: \\ x_t = \sqrt{1- \alpha_t} * \epsilon_t + \sqrt{\alpha_t} * x_{t-1} \\ x_{t-1} = \sqrt{1- \alpha_{t-1}} * \epsilon_{t-1} + \sqrt{\alpha_{t-1}} * x_{t-2} \\ 把x_{t-1}代入到x_t中可以推導(dǎo)出: \\ x_t = \sqrt{1- \alpha_t} * \epsilon_t + \sqrt{\alpha_t} * (\sqrt{1- \alpha_{t-1}} * \epsilon_{t-1} + \sqrt{\alpha_{t-1}} * x_{t-2}) \\ = \sqrt{a_t(1-a_{t-1})} * \epsilon_{t-1} + \sqrt{1-a_t} * \epsilon_t + \sqrt{a_t a_{t-1}} * x_{t-2} \\ 其中:\epsilon_{t-1} 和 \epsilon_{t} 是兩個隨機噪聲,且兩者是兩個獨立的隨機變量。\\ 打個比喻:我們有一個骰子擲兩次分別得到\epsilon_{t-1} 和 \epsilon_{t},完全可以等效\\ 于我們有兩個骰子擲一次。即:一個骰子擲兩次的概率分布等同于兩個骰子擲一次的概率分布,所以,\\ 如果我們知道兩個骰子擲一次的概率分布,然后進(jìn)行一次采樣即可。 \\ 由:xt?=1?αt????t?+αt???xt?1?xt?1?=1?αt?1????t?1?+αt?1???xt?2?把xt?1?代入到xt?中可以推導(dǎo)出:xt?=1?αt????t?+αt???(1?αt?1????t?1?+αt?1???xt?2?)=at?(1?at?1?)???t?1?+1?at????t?+at?at?1???xt?2?其中:?t?1?和?t?是兩個隨機噪聲,且兩者是兩個獨立的隨機變量。打個比喻:我們有一個骰子擲兩次分別得到?t?1?和?t?,完全可以等效于我們有兩個骰子擲一次。即:一個骰子擲兩次的概率分布等同于兩個骰子擲一次的概率分布,所以,如果我們知道兩個骰子擲一次的概率分布,然后進(jìn)行一次采樣即可。
由正態(tài)分布的基本性質(zhì)可知: ? t 和 ? t ? 1 服從 N ( 0 , 1 ) , 即: ? t ~ N ( 0 , 1 ) , ? t ? 1 ~ N ( 0 , 1 ) 可以推導(dǎo)出: 1 ? a t ? ? t ~ N ( 0 , 1 ? α t ) a t ( 1 ? a t ? 1 ) ? ? t ? 1 ~ N ( 0 , a t ? a t ? a t ? 1 ) ) 由正態(tài)分布的基本性質(zhì)可知:\\ \epsilon_t和\epsilon_{t-1}服從N(0, 1),即:\epsilon_t \sim N(0,1), \epsilon_{t-1} \sim N(0,1) \\ 可以推導(dǎo)出: \sqrt{1-a_t} * \epsilon_t \sim N(0, 1- \alpha_t) \\ \sqrt{a_t(1-a_{t-1})} * \epsilon_{t-1} \sim N(0, a_t-a_t*a_{t-1})) 由正態(tài)分布的基本性質(zhì)可知:?t?和?t?1?服從N(0,1),即:?t?~N(0,1),?t?1?~N(0,1)可以推導(dǎo)出:1?at????t?~N(0,1?αt?)at?(1?at?1?)???t?1?~N(0,at??at??at?1?))
從而推導(dǎo)出: a t ( 1 ? a t ? 1 ) ? ? t ? 1 + 1 ? a t ? ? t ~ N ( 0 , 1 ? a t ? a t ? 1 ) 從而推導(dǎo)出: \\ \sqrt{a_t(1-a_{t-1})} * \epsilon_{t-1} + \sqrt{1-a_t} * \epsilon_t \sim N(0, 1-a_t*a_{t-1}) 從而推導(dǎo)出:at?(1?at?1?)???t?1?+1?at????t?~N(0,1?at??at?1?)
進(jìn)而推導(dǎo)出: x t = 1 ? a t ? a t ? 1 ? ? + a t ? a t ? 1 ? x t ? 2 , 其中: ? ~ N ( 0 , 1 ? a t ? a t ? 1 ) 進(jìn)而推導(dǎo)出:\\ x_t = \sqrt{1-a_t*a_{t-1}} * \epsilon + \sqrt{a_t*a_{t-1}}*x_{t-2}, 其中:\epsilon \sim N(0, 1-a_t*a_{t-1}) 進(jìn)而推導(dǎo)出:xt?=1?at??at?1????+at??at?1???xt?2?,其中:?~N(0,1?at??at?1?)
這里就可到了 x t 和 x t ? 2 之間的關(guān)系,然后依靠上面的方法就可以一次推導(dǎo)出 x t 到 x 0 的關(guān)系 ( 數(shù)學(xué)歸納法證明 ) ,具體如下: x t = 1 ? a t a t ? 1 a t ? 2 . . . a 1 ? ? + a t a t ? 1 a t ? 2 . . . a 1 ? x 0 其中, ? ~ N ( 0 , 1 ? a t a t ? 1 a t ? 2 . . . a 1 ) 這里就可到了x_t和x_{t-2}之間的關(guān)系,然后依靠上面的方法就可以一次推導(dǎo)出x_t到x_0的關(guān)系(數(shù)學(xué)歸納法證明),具體如下: \\ x_t = \sqrt{1 - a_ta_{t-1}a_{t-2}...a_1} * \epsilon + \sqrt{a_ta_{t-1}a_{t-2}...a1} * x_0 \\ 其中,\epsilon \sim N(0, 1 - a_ta_{t-1}a_{t-2}...a_1) 這里就可到了xt?和xt?2?之間的關(guān)系,然后依靠上面的方法就可以一次推導(dǎo)出xt?到x0?的關(guān)系(數(shù)學(xué)歸納法證明),具體如下:xt?=1?at?at?1?at?2?...a1????+at?at?1?at?2?...a1??x0?其中,?~N(0,1?at?at?1?at?2?...a1?)
為了方便表示 , 記: a ˉ t = a t a t ? 1 a t ? 2 . . . a 1 則: x t = 1 ? a ˉ t ? ? + a ˉ t x 0 為了方便表示,記: \bar{a}_t = a_ta_{t-1}a_{t-2}...a_1 \\ 則: x_t = \sqrt{1 - \bar{a}_t} * \epsilon + \sqrt{\bar{a}_t} x_0 為了方便表示,記:aˉt?=at?at?1?at?2?...a1?則:xt?=1?aˉt????+aˉt??x0?
? 至此,前向過程就記錄完成了,我們得到 x 0 到 x t x_0到x_t x0?到xt?的關(guān)系,并且可以只通過一次采樣就能得到。
3. 反向過程(去噪)
? 去噪過程就是從 x T x_T xT?一步步反推回 x 0 x_0 x0?。
3.1 反向原理推導(dǎo)
? 由貝葉斯定理:
P ( A ∣ B ) = P ( B ∣ A ) ? P ( A ) P ( B ) P(A|B) = {{P(B|A) * P(A)} \over P(B)} P(A∣B)=P(B)P(B∣A)?P(A)?
? 我們可以令:
由于 x t 到 x t ? 1 是一個隨機過程,則令: P ( x t ? 1 ∣ x t ) : 表示在給定 x t 的情況下, x t ? 1 的概率。 套用貝葉斯定理得: P ( x t ? 1 ∣ x t ) = P ( x t ∣ x t ? 1 ) ? P ( x t ? 1 ) P ( x t ) 其中, P ( x t ) 和 P ( x t ? 1 ) 分別表示 x t 和 t t ? 1 的概率 , 也就是從 x 0 原圖得到它們的概率。 由于x_t到x_{t-1}是一個隨機過程,則令: \\ P(x_{t-1}|x_t): 表示在給定x_t的情況下,x_{t-1}的概率。 \\ 套用貝葉斯定理得: \\ P(x_{t-1} | x_t) = { P(x_t | x_{t-1}) * P(x_{t-1}) \over P(x_t)} \\ 其中,P(x_t)和P(x_{t-1})分別表示x_t和t_{t-1}的概率,也就是從x_0原圖得到它們的概率。 由于xt?到xt?1?是一個隨機過程,則令:P(xt?1?∣xt?):表示在給定xt?的情況下,xt?1?的概率。套用貝葉斯定理得:P(xt?1?∣xt?)=P(xt?)P(xt?∣xt?1?)?P(xt?1?)?其中,P(xt?)和P(xt?1?)分別表示xt?和tt?1?的概率,也就是從x0?原圖得到它們的概率。
所以,可以在每個式子后面添加一個先驗 x 0 , 即: P ( x t ? 1 ∣ x t , x 0 ) = P ( x t ∣ x t ? 1 , x 0 ) ? P ( x t ? 1 ∣ x 0 ) P ( x t ∣ x 0 ) 所以,可以在每個式子后面添加一個先驗x0,即: \\ P(x_{t-1} | x_t,x_0) = { P(x_t | x_{t-1},x_0) * P(x_{t-1} | x_0) \over P(x_t | x_0)} \\ 所以,可以在每個式子后面添加一個先驗x0,即:P(xt?1?∣xt?,x0?)=P(xt?∣x0?)P(xt?∣xt?1?,x0?)?P(xt?1?∣x0?)?
有: P ( x t ∣ x t ? 1 , x 0 ) 給定 x t ? 1 到 x t 的概率。 前向過程中可知: x t = 1 ? α t ? ? t + α t ? x t ? 1 x t = 1 ? a ˉ t ? ? + a ˉ t x 0 ? t 和 ? 分別服從 N ( 0 , 1 ) 從而推導(dǎo)出: x t ~ N ( a t x t ? 1 , 1 ? a t ) 或: x t ~ N ( a ˉ t x 0 , 1 ? a ˉ t ) 以及: x t ? 1 ~ N ( a ˉ t ? 1 x 0 , 1 ? a ˉ t ? 1 ) 有: \\ P(x_t|x_{t-1}, x_0) 給定x_{t-1}到x_t的概率。 \\ 前向過程中可知: \\ x_t = \sqrt{1- \alpha_t} * \epsilon_t + \sqrt{\alpha_t} * x_{t-1} \\ x_t = \sqrt{1 - \bar{a}_t} * \epsilon + \sqrt{\bar{a}_t} x_0 \\ \epsilon_t和\epsilon分別服從N(0, 1) \\ 從而推導(dǎo)出: \\ x_t \sim N(\sqrt{a_t} x_{t-1}, 1-a_t) \\ 或: \\ x_t \sim N(\sqrt{\bar{a}_t} x_0, 1-\bar{a}_t) \\ 以及: \\ x_{t-1} \sim N(\sqrt{\bar{a}_{t-1}} x_0, 1-\bar{a}_{t-1}) \\ 有:P(xt?∣xt?1?,x0?)給定xt?1?到xt?的概率。前向過程中可知:xt?=1?αt????t?+αt???xt?1?xt?=1?aˉt????+aˉt??x0??t?和?分別服從N(0,1)從而推導(dǎo)出:xt?~N(at??xt?1?,1?at?)或:xt?~N(aˉt??x0?,1?aˉt?)以及:xt?1?~N(aˉt?1??x0?,1?aˉt?1?)
? 然后就可以把他們分別寫成概率密度形式:
? 然后將概率密度函數(shù)帶入到貝葉斯定理中,就可以得到:
? 化簡成高斯分布得:
? P ( x t ? 1 ∣ x t , x 0 ) P(x_{t-1}|x_t, x_0) P(xt?1?∣xt?,x0?) =
? 由此推導(dǎo)出:
我們的目的是通過 x t 求出 x t ? 1 , 然后由 x t ? 1 推導(dǎo)出 x t ? 2 ? ? ? 直到求出 x 0 , 但現(xiàn)在的式子中出現(xiàn)了 x 0 , 怎么辦? 沒關(guān)系,我們之前由 x t 和 x 0 的關(guān)系: x t = 1 ? a ˉ t ? ? + a ˉ t x 0 我們的目的是通過x_t求出x_{t-1},然后由x_{t-1}推導(dǎo)出x_{t-2}···直到求出x_0,\\ 但現(xiàn)在的式子中出現(xiàn)了x_0,怎么辦? \\ 沒關(guān)系,我們之前由x_t和x_0的關(guān)系: \\ x_t = \sqrt{1 - \bar{a}_t} * \epsilon + \sqrt{\bar{a}_t} x_0 \\ 我們的目的是通過xt?求出xt?1?,然后由xt?1?推導(dǎo)出xt?2????直到求出x0?,但現(xiàn)在的式子中出現(xiàn)了x0?,怎么辦?沒關(guān)系,我們之前由xt?和x0?的關(guān)系:xt?=1?aˉt????+aˉt??x0?
? 變換可以得到:
? 將它帶入到 P ( x t ? 1 ∣ x t , x 0 ) P(x_{t-1}|x_t, x_0) P(xt?1?∣xt?,x0?)的概率密度函數(shù)中可得:
? 它表示的是:對于任意 x t x_t xt?的圖像都可以用 x 0 x_0 x0?加載而來;而只要知道了從 x 0 x_0 x0?到 x t x_t xt?加入的噪聲 ? \epsilon ?,就能得到它前一時刻 x t ? 1 x_{t-1} xt?1?的概率分布,即: P ( x t ? 1 ∣ x t , x 0 ) P(x_{t-1}|x_t, x_0) P(xt?1?∣xt?,x0?) 。
? 這里我們就需要使用神經(jīng)網(wǎng)絡(luò),輸入 x t x_t xt?時刻的圖像,預(yù)測此圖像相對于某個 x 0 x_0 x0?原圖加入的噪聲 ? \epsilon ?。
? 如圖所示,也就是說:
?
Step1: 在神經(jīng)網(wǎng)絡(luò)中,輸入 x t x_t xt?時刻圖像,訓(xùn)練得到此圖像相對于某個 x 0 x_0 x0?原圖加入的噪聲 ? \epsilon ?。
? Step2: 將噪聲 ? \epsilon ?帶入到 x t ? 1 x_{t-1} xt?1?的概率密度函數(shù) P ( x t ? 1 ∣ x t , x 0 ) P(x_{t-1}|x_t, x_0) P(xt?1?∣xt?,x0?)中;
? Step3: 從 x t ? 1 x_{t-1} xt?1?的概率密度函數(shù) P ( x t ? 1 ∣ x t , x 0 ) P(x_{t-1}|x_t, x_0) P(xt?1?∣xt?,x0?)中隨機采樣,得到 x t ? 1 x_{t-1} xt?1?(即t-1時刻對應(yīng)的圖像);
? Step4: 將 x t ? 1 x_{t-1} xt?1?作為神經(jīng)網(wǎng)絡(luò)的輸入,帶入到Step1中,循環(huán)Step1 ~ Step3,知道得到 x 0 x_0 x0?
? DDPM中的神經(jīng)網(wǎng)絡(luò)選用的UNet.
? 至此,結(jié)束!