半监督学习笔记(四):熵最小化、代理变量
半監(jiān)督學(xué)習(xí)筆記(四)
昨天的更新中,我們學(xué)習(xí)了幾種基于對(duì)抗方法的一致性正則化的策略,接下來(lái)讓我們做一個(gè)簡(jiǎn)單的復(fù)習(xí):
1、 Fast-SWA:采用了退火算法的思想,逼近多個(gè)最小值點(diǎn)后求平均。
2、 Virtual Adversarial Training:通過(guò)找到網(wǎng)絡(luò)的薄弱點(diǎn),選擇性的挑取噪聲進(jìn)行訓(xùn)練。
3、 Adversarial Dropout:采用對(duì)抗性的方法找到最弱的隨機(jī)丟棄層,其中運(yùn)用了元素級(jí)丟棄和通道級(jí)丟棄的方法。
4、 Interpolation Consitency training:插值一致性訓(xùn)練,體現(xiàn)了奧卡姆剃刀準(zhǔn)則。
5、 Unsuperviesd Data Augmentation:從數(shù)據(jù)本身的角度對(duì)數(shù)據(jù)進(jìn)行增強(qiáng)。
之前更新的兩篇文章已經(jīng)結(jié)束了對(duì)一致性正則化方法的闡述,我們可以從中找到核心思路:主要利用了集成學(xué)習(xí)和對(duì)抗訓(xùn)練的思想,使得模型更加平滑。接下來(lái)我們來(lái)學(xué)習(xí)一些新的半監(jiān)督學(xué)習(xí)的知識(shí)。
三、Entropy Minimization(熵最小化)
由于半監(jiān)督學(xué)習(xí)的樣本過(guò)少,所以一種比較好的思路就是再本次訓(xùn)練中將網(wǎng)絡(luò)在上一次產(chǎn)生的,自信程度比較高的預(yù)測(cè)(我們就當(dāng)他是預(yù)測(cè)對(duì)了的)加入到本次的訓(xùn)練中,這樣反復(fù)的迭代,就從中體現(xiàn)了聚類的思想,使得決策邊界能更加趨于真實(shí)。因此,在訓(xùn)練的時(shí)候我們需要讓網(wǎng)絡(luò)的預(yù)測(cè)更加自信,而不是比較猶豫。而熵最小化這套理論則是希望讓網(wǎng)絡(luò)的預(yù)測(cè)更加自信,也就是進(jìn)行低熵預(yù)測(cè)。
所以,我們基于絕大部分?jǐn)?shù)據(jù)點(diǎn)都遠(yuǎn)離決策邊界的假設(shè)下,我們需要阻止網(wǎng)絡(luò)的決策邊界在數(shù)據(jù)點(diǎn)附近。這個(gè)方法我們可以通過(guò)增加一個(gè)對(duì)于預(yù)測(cè)的損失項(xiàng)來(lái)實(shí)現(xiàn):
L=?∑k=1cfθ(x)klogfθ(x)kL=-\sum_{k=1}^cf_{\theta}(x)_{k}logf_{\theta}(x)_{k} L=?k=1∑c?fθ?(x)k?logfθ?(x)k?
對(duì)于分類問(wèn)題,網(wǎng)絡(luò)最后必然是通過(guò)一個(gè)softmax來(lái)輸出,而softmax是所有的類別經(jīng)過(guò)歸一化之后自信程度。假設(shè)網(wǎng)絡(luò)對(duì)每一個(gè)類的自信程度都相近,那么整體的熵值就會(huì)越大,反之則越小。通過(guò)添加這一項(xiàng)正則化項(xiàng)就能實(shí)現(xiàn)讓網(wǎng)絡(luò)的預(yù)測(cè)更加自信。當(dāng)然,這也有不好的情況:倘若網(wǎng)絡(luò)預(yù)測(cè)錯(cuò)了,那人家對(duì)自己的錯(cuò)誤答案也會(huì)十分自信。
四、Proxy-label Methods(代理變量方法)
代理變量方法的定義之前已經(jīng)說(shuō)過(guò),我們來(lái)復(fù)習(xí)一下:通過(guò)給沒(méi)有標(biāo)簽的數(shù)據(jù)提供標(biāo)簽的方法利用無(wú)標(biāo)簽數(shù)據(jù),從而優(yōu)化網(wǎng)絡(luò)的訓(xùn)練。代理變量的方法可以分為兩類。
1、 自訓(xùn)練(self-training):每一個(gè)數(shù)據(jù)的標(biāo)簽由網(wǎng)絡(luò)自己提供。
2、 多視角學(xué)習(xí)(Multi-view learning):代理變量由對(duì)數(shù)據(jù)的不同觀測(cè)訓(xùn)練出的模型提供。
首先,我們先介紹自訓(xùn)練。
4.1 self-training
整體概念開頭已經(jīng)提過(guò)了,算法表述如下:給定數(shù)據(jù)集,利用有標(biāo)記的數(shù)據(jù)訓(xùn)練網(wǎng)絡(luò),再讓網(wǎng)絡(luò)對(duì)未標(biāo)記的數(shù)據(jù)進(jìn)行預(yù)測(cè),取自信程度最大的數(shù)據(jù)和預(yù)測(cè),和原本有標(biāo)記的數(shù)據(jù)整合作為新的訓(xùn)練集,再訓(xùn)練網(wǎng)絡(luò),如此循環(huán)。自訓(xùn)練也可以和熵最小化的方法結(jié)合,畢竟從目標(biāo)上來(lái)說(shuō),都是希望網(wǎng)絡(luò)不管預(yù)測(cè)的結(jié)果是對(duì)是錯(cuò),都能讓網(wǎng)絡(luò)的判斷更加自信。
#### 代理標(biāo)簽Shi 提出了一種“自適應(yīng)傳輸半監(jiān)督學(xué)習(xí)”的方法,通過(guò)將未標(biāo)記的樣本的標(biāo)簽作為變量,并且通過(guò)迭代訓(xùn)練過(guò)程層最小化損失函數(shù),嘗試確定其標(biāo)簽和最好的模型參數(shù)。對(duì)于生成的代理標(biāo)簽的處理方法如下:將所有的標(biāo)簽視作“硬標(biāo)簽”。對(duì)所有的沒(méi)有標(biāo)記的樣本,對(duì)其引入不確定性權(quán)重,這包括類間不確定性權(quán)重和類內(nèi)一致性權(quán)重。以及具有不同擾動(dòng)的樣本之間的一致性項(xiàng)。
Iscen等人在偽標(biāo)簽中集成了標(biāo)簽傳播算法,該方法交替使用了標(biāo)記示例和偽標(biāo)簽訓(xùn)練網(wǎng)絡(luò),然后利用學(xué)習(xí)到的表示構(gòu)建最近鄰圖,在該圖中應(yīng)用標(biāo)簽傳播來(lái)優(yōu)化偽標(biāo)簽。他們還引入了兩個(gè)不確定性分?jǐn)?shù),一個(gè)是基于輸出概率熵的每個(gè)樣本的不確定性分?jǐn)?shù),以克服預(yù)測(cè)中的不平等置信度;另一個(gè)是基于類的頻率都類間分?jǐn)?shù),來(lái)處理類間的不平衡。
這段話的重點(diǎn)是標(biāo)簽傳播算法,從概念上來(lái)理解,這十分的簡(jiǎn)單:A和B有一定的相似度,B和C有一定的相似度。此時(shí)我們確定了C是什么,那么B和A在類別上和C就可能會(huì)一致。標(biāo)簽傳播算法的應(yīng)用也可以使得網(wǎng)絡(luò)學(xué)到更好的表示。
Arazo表明了,一個(gè)未經(jīng)充分訓(xùn)練的偽標(biāo)記算法,通常會(huì)因?yàn)榇_認(rèn)性偏差(Confirmation bias)會(huì)產(chǎn)生過(guò)擬合,以至于沒(méi)有良好的性能。另外也證明了MixUp和設(shè)定每一個(gè)采樣的minibatch數(shù)量中的樣本最少數(shù)是一個(gè)減小確認(rèn)性偏差(Confirmation bias)的好方法。
這段話該怎么理解呢?有兩個(gè)重點(diǎn),一個(gè)是確認(rèn)性偏差,另一個(gè)是MixUp。首先我們先解釋確認(rèn)性偏差:
Overfitting to incorrect pseudo-labels Predicted by the network is known as confirmation bias(摘自Arazo原文)
這表明,對(duì)錯(cuò)誤代理標(biāo)簽的過(guò)擬合就是確認(rèn)性偏差。簡(jiǎn)單的來(lái)說(shuō),就是老師教了你一個(gè)錯(cuò)的東西,你還把他學(xué)過(guò)來(lái)了。
MixUp是什么呢?簡(jiǎn)單的說(shuō),就是把兩個(gè)訓(xùn)練樣本做一個(gè)插值,應(yīng)用公式如下:
x~=λxi+(1?λ)xj\tilde{x}=\lambda x_{i}+(1-\lambda)x_{j}x~=λxi?+(1?λ)xj?, where xix_{i}xi?,xjx_{j}xj? are raw input vectors.
y~=λyi+(1?λ)yj\tilde{y}=\lambda y_{i}+(1-\lambda)y_{j}y~?=λyi?+(1?λ)yj?, where yiy_{i}yi?,yjy_jyj? are one-hot label encodings.
因此,MixUP就是對(duì)兩個(gè)數(shù)據(jù)做一個(gè)插值,假設(shè)對(duì)一個(gè)二元分類問(wèn)題而言,如果兩個(gè)數(shù)據(jù)的labelyyy相同,那么他們數(shù)據(jù)的中間值應(yīng)該也會(huì)接近。對(duì)于獨(dú)熱編碼的標(biāo)簽yyy而言,這也引入了軟標(biāo)簽的概念。
To sum up,代理標(biāo)簽的關(guān)鍵詞如下:自適應(yīng)傳輸半監(jiān)督學(xué)習(xí)、標(biāo)簽傳播算法、確認(rèn)性偏差與校正。
Meta Pseudo Labels(元代理標(biāo)簽,MPL)
這里首先要解釋一個(gè)概念:元學(xué)習(xí)(Meta learning)
元學(xué)習(xí),簡(jiǎn)單的來(lái)說(shuō),就是“讓機(jī)器學(xué)習(xí)去學(xué)習(xí)”。我們可以去想,假設(shè)讓機(jī)器去擬合一個(gè)函數(shù),我們需要自己設(shè)定學(xué)習(xí)率,超參數(shù),甚至網(wǎng)絡(luò)的架構(gòu)(幾層隱藏層)等。但是元學(xué)習(xí)就是訓(xùn)練一個(gè)函數(shù),讓這個(gè)函數(shù)觀察了所要求解的問(wèn)題之后,自己生成一個(gè)函數(shù)的架構(gòu),來(lái)最好的適應(yīng)這個(gè)學(xué)習(xí)任務(wù)。
簡(jiǎn)單的來(lái)說(shuō),就是套娃。
好了,那么Meta Pseudo label是什么意思呢?
首先還是一個(gè)teacher和一個(gè)student。teacher生成代理標(biāo)簽給student學(xué)習(xí),然后teacher根據(jù)student學(xué)習(xí)的反饋更新自己的參數(shù),然后在下一次生成一批新的標(biāo)簽(按理說(shuō)是更好的標(biāo)簽)給student繼續(xù)學(xué)習(xí)。這是不是有點(diǎn)強(qiáng)化學(xué)習(xí)的味道?
一個(gè)MPL的步驟包括下面兩步:
-
phase1:student從teacher這邊學(xué)習(xí),首先給定一個(gè)樣本集x∈Dlx\in{D_{l}}x∈Dl?,teacherfθ′f_{\theta '}fθ′? 生成目標(biāo)的類別分布區(qū)訓(xùn)練學(xué)生,每一個(gè)樣本(xi,fθ′(x))(x_i,f_{\theta'}(x))(xi?,fθ′?(x))作為一個(gè)訓(xùn)練數(shù)據(jù),然后通過(guò)正常的機(jī)器學(xué)習(xí)算法來(lái)學(xué)習(xí)。
-
phase2:teacher收集到學(xué)生的測(cè)試損失(通俗的來(lái)說(shuō),就是答卷)來(lái)更新自己的參數(shù),得到θ′(t+1)\theta ' (t+1)θ′(t+1),從上述過(guò)程可以得知,θ′(t+1)\theta '(t+1)θ′(t+1)都是從學(xué)生訓(xùn)練得到的參數(shù)中得出來(lái)的,因此也可以用梯度下降來(lái)求解。
也就是說(shuō),老師可以通過(guò)學(xué)生的表現(xiàn)進(jìn)行調(diào)整,就是師生相互學(xué)習(xí),共同進(jìn)步。
4.2 Multi-view training(多視角訓(xùn)練,MVL)
多視角訓(xùn)練利用了在現(xiàn)實(shí)中非常常見的多視角數(shù)據(jù),這是什么意思呢?比如針對(duì)一個(gè)實(shí)踐,我們要寫調(diào)研,我們需要圖片數(shù)據(jù)、文本數(shù)據(jù)等多元的數(shù)據(jù)。當(dāng)同一個(gè)問(wèn)題能收集到的數(shù)據(jù)形式多種多樣,且每一種數(shù)據(jù)形式的樣本數(shù)量都十分的有限時(shí),MVL就希望學(xué)得一個(gè)函數(shù)集,函數(shù)集中的函數(shù)能對(duì)對(duì)這些真實(shí)數(shù)據(jù)xxx對(duì)應(yīng)的視角數(shù)據(jù)vi(x)v_i(x)vi?(x)進(jìn)行建模,并且同時(shí)優(yōu)化這些函數(shù),以讓最后的性能更好。當(dāng)然,我們也希望這些函數(shù)集中的函數(shù)能夠相互影響,互相學(xué)習(xí),用來(lái)提高整體和彼此的預(yù)測(cè)性能。
4.2.1 Co-training(聯(lián)合訓(xùn)練)
聯(lián)合訓(xùn)練就是每一個(gè)數(shù)據(jù)xxx有兩個(gè)視角v1(x)v_1(x)v1?(x)和v2(x)v_2(x)v2?(x),并且每一個(gè)視角收集到的數(shù)據(jù)都足夠多,能來(lái)訓(xùn)練一個(gè)函數(shù)。在兩個(gè)預(yù)測(cè)函數(shù)fθ1f_{\theta _1}fθ1??和fθ2f_{\theta _2}fθ2??訓(xùn)練成功之后,接下來(lái)進(jìn)入循環(huán):如果模型A對(duì)一個(gè)數(shù)據(jù)點(diǎn)有足夠自信的預(yù)測(cè)(超過(guò)某個(gè)閾值),那么這個(gè)數(shù)據(jù)點(diǎn)就被用來(lái)作為另一個(gè)模型的訓(xùn)練集對(duì)模型B進(jìn)行訓(xùn)練。簡(jiǎn)單的來(lái)說(shuō),就是一個(gè)模型能給另外一個(gè)模型提供該模型不確定的數(shù)據(jù)。
但是多數(shù)情況下,xxx只有一個(gè)視角v(x)v(x)v(x),那么我們就可以使用不同的學(xué)習(xí)算法,或者不同的參數(shù)設(shè)定來(lái)訓(xùn)練兩個(gè)分類器,然后執(zhí)行相同的迭代過(guò)程。我們還可以對(duì)視角v(x)v(x)v(x)加入噪聲或者通過(guò)不同的增強(qiáng)方法來(lái)生成不同的視角。
Democratic Co-training
這就是把2個(gè)模型變成多個(gè)模型來(lái)替換對(duì)輸入數(shù)據(jù)的不同視圖,不過(guò)說(shuō)來(lái),這不就是集成學(xué)習(xí)的思想嘛?
4.2.2 Tri-Training (三重訓(xùn)練)
首先,有標(biāo)記的數(shù)據(jù)集DlD_lDl?被用來(lái)訓(xùn)練三個(gè)模型:fθ1f_{\theta_1}fθ1??fθ2f_{\theta_2}fθ2??fθ3f_{\theta_{3}}fθ3??.對(duì)于一個(gè)給定的未標(biāo)記數(shù)據(jù)x∈Dux\in{D_{u}}x∈Du?,如果有兩個(gè)模型對(duì)他們的分類都是一致的,那么這個(gè)數(shù)據(jù)就加入用來(lái)訓(xùn)練另一個(gè)函數(shù)的監(jiān)督學(xué)習(xí)數(shù)據(jù)集。直到?jīng)]有數(shù)據(jù)被放入任何模型的監(jiān)督學(xué)習(xí)訓(xùn)練集中,訓(xùn)練結(jié)束。三重訓(xùn)練集不需要多視角,也不需要獨(dú)特的學(xué)習(xí)算法,因此這樣的訓(xùn)練方法更加普遍。但是這樣的問(wèn)題在于:訓(xùn)練的開銷太大了。每一次對(duì)一個(gè)樣本進(jìn)行預(yù)測(cè),都需要三個(gè)模型來(lái)共同執(zhí)行前向傳播。
Multi-task tri-training(多任務(wù)三重訓(xùn)練)
當(dāng)然,對(duì)于分類問(wèn)題,我們可以通過(guò)讓三個(gè)分類器都共享一個(gè)特征提取層來(lái)減少訓(xùn)練時(shí)間和采樣的復(fù)雜性。比如對(duì)于圖像,我們都可以用VGG16的骨架。在這種方法中,每一個(gè)模型在訓(xùn)練時(shí),都需要增加一個(gè)正則化損失項(xiàng)來(lái)保證自己和另外兩個(gè)模型是正交的。以防止模型出現(xiàn)相似性,最后以至于走向了自訓(xùn)練的路。Tri-Net就采取了上述方法,但是還額外加了一個(gè)輸出涂抹去初始化這些模塊。在代理標(biāo)簽迭代完成后,最后還增加了一個(gè)微調(diào)步驟,以用來(lái)消除可疑的偽標(biāo)簽。
Cross-View Training(交叉視角訓(xùn)練)
在自訓(xùn)練中,模型起了雙重作用:自己又當(dāng)老師又當(dāng)學(xué)生,在交叉視角訓(xùn)練中,也有一種更好的解決方法:根據(jù)一個(gè)數(shù)據(jù)的不同視角,不同的模型被訓(xùn)練去嘗試生成一致性的預(yù)測(cè)。首先,所有的模型共享編碼層,然后增加一些輔助預(yù)測(cè)模塊,用來(lái)將編碼的表示轉(zhuǎn)移成預(yù)測(cè)。這些模塊被分成學(xué)生預(yù)測(cè)模塊和主要的教室模塊。每一個(gè)學(xué)生的預(yù)測(cè)都是模型的一部分。參考LSTM/雙向LSTM層。這樣所有的學(xué)生就會(huì)相互影響。主要教室模型只會(huì)被有標(biāo)記的數(shù)據(jù)訓(xùn)練,并且教室模型需要根據(jù)所有的無(wú)標(biāo)簽輸入的視角生成為標(biāo)簽。學(xué)生被按照跟教師產(chǎn)生一致性預(yù)測(cè)的方式被訓(xùn)練。
其中,給定一個(gè)編碼器eee,一個(gè)教師模塊ttt和KKK個(gè)學(xué)生模塊sis_{i}si?,i∈[0,K]i\in{[0,K]}i∈[0,K],每一個(gè)學(xué)生都收到了一個(gè)輸入的有限視角。損失函數(shù)如下:
L=Lu+Ls=1∣Du∣∑x∈Du∑i=1KdMSE(t(e(x)),si(e(x)))+1∣Dl∣∑x,y∈DlH(t(e(x)),y)L=L_u+L_s=\frac{1}{|D_u|}\sum_{x\in{D_{u}}}\sum_{i=1}^K d_{MSE}(t(e(x)),s_i(e(x)))+\frac{1}{|D_l|}\sum_{x,y\in{D_l}}H(t(e(x)),y) L=Lu?+Ls?=∣Du?∣1?x∈Du?∑?i=1∑K?dMSE?(t(e(x)),si?(e(x)))+∣Dl?∣1?x,y∈Dl?∑?H(t(e(x)),y)
其中LuL_uLu?是無(wú)監(jiān)督學(xué)習(xí)損失,LsL_sLs?是有監(jiān)督學(xué)習(xí)損失。
交叉視圖訓(xùn)練通過(guò)改進(jìn)編碼器的表示學(xué)習(xí)來(lái)利用未標(biāo)記的數(shù)據(jù)。學(xué)生預(yù)測(cè)模塊可以從教師模塊的預(yù)測(cè)中學(xué)習(xí),因?yàn)樵撝饕K對(duì)輸入有更好的、不受限制的視圖。當(dāng)學(xué)生模塊學(xué)習(xí)在輸入視圖受限的情況下做出準(zhǔn)確預(yù)測(cè)時(shí),他們提高了編碼器生成的表示的質(zhì)量,這反過(guò)來(lái)又改進(jìn)了使用相同共享表示的完整模型。
總結(jié)
以上是生活随笔為你收集整理的半监督学习笔记(四):熵最小化、代理变量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 细思极恐-你真的会写java吗?
- 下一篇: 奶茶妹妹章泽天加入微软Bing团队