這篇文章是關于逆強化學習的應用,主要是實作了人臉的老化,是最近發表在arxiv上的文章。
論文位址
本文主要是對這篇文章閱讀過程的筆記。
一、論文筆記
0 摘要:
(1)本文提出的方法為Subject-dependent Deep Aging Path(SDAP),依賴目标的深度老化方法,結合了産生式模型和逆強化學習模型的優點。該模型能生成面部的結構并給出該目标縱向的老化過程。 longitudinal:縱向的。
(2)SDAP通過采用深度特征提取網絡來實作對數似然函數的可處理性。
(3)相比固定的人臉老化過程,SDAP采用最優的老化獎勵函數實作對不同的人臉進行最佳的老化過程。
(4)SDAP可以接受多張圖檔作為輸入,擷取目标相同或者不同的年齡資訊,進而給出最佳的老化過程。
(5)該模型在人臉老化合成和交叉年齡人臉驗證。
face verification 人臉驗證 1:1比對問題,給定人臉圖檔和身份,在人臉資料庫進行人臉比對,驗證該人臉是不是該身份。
face recognition 人臉識别 1:n比對問題,給定人臉圖檔,從人臉資料庫中找到與其相似度最高的人臉,确定其身份。
1 引言:
(1)人臉老化合成可以應用在年齡無關的人臉驗證、尋找失蹤兒童、美容美妝行業。
(2)傳統的深度學習方法大多集中在兩個方向:直接老化合成和循序漸進的老化合成。
對于第一種方向,通過訓練集與對應的年齡标簽之間的關系進行合成。例如傳統方法(prototyping approaches)利用年齡标簽将人臉進行分組,計算不同年齡組人臉的平均值,然後将源年齡和目标年齡組之間的差異應用到輸入的人臉,進而得到目标年齡的人臉。此外,GAN的方法是通過擷取輸入人臉高維的表示與年齡标簽之間關系,根據年齡标簽通過生成器合成老化人臉。
直接合成方法的缺點在于隻能合成訓練集中年齡範圍的人臉,無法生成更老的照片。而且合成效果不是很好。
對于第二種方向,是将長期的老化過程進行分解,重點關注兩個連續年齡階段之間人臉老化的轉化。通過學得的轉化方式,将輸入人臉從一個年齡階段處理到下一個階段直到目标年齡階段。這種方式可以有效地學習暫時的資訊(temporal information)并且提供更多的年齡變化細節,即使目标年齡距離輸入年齡很遠。 這種方法最大的局限性在于缺少縱向的人臉老化資料庫,訓練的過程通常隻有每個人的三四張人臉圖檔。
對于以前方法與作者提出方法比較如下圖所示:
文中作者對比較的結果進行總結:
1.非線性。人臉老化是複雜且是高度非線性的過程,采用線性的方法如基于原型法、AAMs、3DMM是有局限性的。
2.深度學習架構的損失函數。采用固定的損失函數會産生模糊的結果。
3. 可處理性。 采用機率圖模型(Probabilistic Graphical Models,PGM)可以更好地完成人臉老化任務。
PGM基本可以分為兩個類别:貝葉斯網絡(有向圖)和馬爾科夫随機場(無向圖),通過機率圖來描述變量之間的關系,以此模組化來推導求解問題。
4.資料利用情況。往往隻會用同一年齡的一張圖檔,造成其他圖檔的浪費。
5.固定的老化發展路徑。 學得的老化發展路徑應用所有人在實際情況是不合理的,應該每個個體都有自己的年齡老化發展路徑。
(3)本文的貢獻:
1.對老化轉換嵌入過程進行修改。(aging transformation embedding,應該是人臉老化合成中的方法,是專有的叫法。)具體而言,可計算的對數似然估計、采用CNN卷積網絡、age controller年齡控制器來反應年齡改變了多少次。
是以,SDAP提供了平滑的合成過程,并且能夠最大化人臉年齡資料的使用率,同一個體不同年齡或者相同年齡的所有照片都可以進行利用。
2.為每一個個體尋找最佳年齡發展路徑。這個目标可以通過逆強化學習(IRL)實作。
3.在訓練中通過資料驅動的政策(data driven strategy)自動得出最優的目标函數和參數。
2 相關工作:
1.人臉年齡問題包括年齡估計(age estimation)和年齡程序(age progression)問題。
2.年齡程序(Age Progression)解決方法可以分為四類:模型法(modeling)、重建法(reconstruction)、原型法(prototyping)、基于深度學習的方法(deep learning-based methods)。文章對四種方法進行簡要介紹,有需要可以自行看原論文。
個人了解這種問題是為展示人臉老化的過程,針對不同年齡組之間的差異進行分析,逐漸将輸入人臉向目标年齡靠近。
3.年齡估計(Age Estimation),目前的年齡估計方法通常包括兩部分:年齡特征提取子產品和年齡預測子產品。
個人覺得age progression包含age estimation,想要完成從輸入人臉轉化成目标年齡人臉需要進行年齡估計的操作。
3 SDAP介紹:
1.先是講TNVP的不足,畢竟SDAP是在TNVP的基礎上發展而來,TNVP的不足一是在于沒有關注老化過程長期的關系,二是沒有針對不同的個體進行不同的老化過程。
其實,SDAP最大的亮點為不同的個體選擇不同的老化的過程。
2.age controller提供了主要的功能,在合成過程中判斷多少年齡差異需要添加,進而為不同的個體選擇不同的老化過程。
3.采用逆強化學習的方法将老化轉化方法嵌入到長期的年齡序列中,進而有效反映主體的長期老化發展過程。
圖檔合成部分: Aging Embedding with Age Controller :
三部分組成,潛在空間映射、老化轉化、年齡控制器。
mapping function就是潛在空間映射;aging transformation是老化轉化過程;a就是年齡控制器(age controller)。
結合公式講一下大體流程:
x屬于輸入人臉,f1和f2是映射函數,τ是x編碼後的表示(個人覺得沒必要格外強調),z就是潛在變量,G是轉化過程。
x1輸入經過f1得到潛在變量z1,x2經過f2得到潛在變量z‘2(還不是完全的z2)。【映射過程】
z1和a1經過G得到g1,g1與z'2結合得到真正的潛在變量z2。【轉化過程,同時年齡控制器發揮作用】。
對于年齡控制器與aging transformation的結合單獨進行了講解:
和
經過G(aging transformation)為:
之後,對于
有:
以上便是一個合成單元的流程,相當于由x1最終得到了z2。
年齡控制器(公式2) 起到的作用:1、a為one-hot變量,起到了控制不同參數的作用。是以,能夠決定多少的年齡資訊嵌入到老化的過程中。2、給定年齡控制器,模型能夠使用同一目标的所有照片來進行訓練,增強模型的表現能力。
在實際操作中,三維矩陣的參數太多,是以,w可以由三維矩陣分解為三個矩陣。
由
變成
是以,公式2可以轉換成:
代表Hadamard product(哈達瑪積),簡單而言就是A矩陣和B矩陣的對應元素相乘得到一個新矩陣。
對數-似然函數(the log-likelihood):
了解:對于似然函數
,有上面的流程可知,
取決于
。其中
是映射F和G的參數。
公式右邊從第一步到第二步為機率分布映射後需要乘一個雅克比矩陣。
第二步到第三步就是條件機率的推導。
是以,對數-似然函數可以表示為:
聯合分布機率:
論文看到這有個疑問,怎麼感覺用到了流模型呢?
為了確定對老化流過程模組化,将高斯分布作為pz的先驗分布。年齡控制器變量a也設定為高斯分布,使用
來表示a。
潛在變量組合
都為高斯分布,均值為
,方差為
是以,潛在變量
表示為:
公式(5)結合公式(3)會好了解一點,就是将公式(3)拆分成均值方差的形式再加上
的均值方差形式。
因為
屬于不同的高斯分布,作者假設他們的聯合分布仍然是高斯分布。是以有:
目标函數:
最大化對數似然函數,找到其值最大時的θ參數值。等式右邊第二項是限制條件,令年齡限制器a為高斯分布。
逆強化學習部分:年齡序列中的逆強化學習部分(IRL Learning from Aging Sequence):
1、通過定義個體獨立的老化政策網絡(subject-dependent deep aging policy network)來為年齡控制器提供一個可計劃的老化路徑(planning aging path)。進而保證輸入圖檔x都能有最佳的老化發展過程。
2、能量函數(energy function)多次見過這個函數的出現,這次隻是從容易了解的角度來解釋,不涉及數學原理。
首先是通過能量函數能引入一系列的機率分布函數。為什麼呢?首先了解能量模型,在能量模型中,個體所處的狀态對應着一個能量,這個能量由能量函數來定義。這個個體處于某種狀态的機率可以通過該狀态下具有的能量來定義。是以能量和機率有了聯系。
舉個例子而言,彈玻璃球。在坑坑窪窪的地面上,彈一下玻璃球,它最終停下的位置有很多種可能性,在能量模型中,每個不同的位置對應一個能量,而玻璃球有着不同的機率最終停在不同的位置,是以可以用該位置下的能量來表示對應的機率。這就是我的了解。
對于能量函數,系統越有序或機率分布越集中,系統的能量越小。相反,系統越無序或機率分布越均勻,系統的能量越大。能量函數的最小值對應系統最穩定的狀态。
這是文中給出的能量函數與機率分布的公式。其基本公式形式就是如此,變化的是他們的變量。
其中:
代表第i個個體的觀測到的年齡序列,共M個年齡序列;
代表能量函數,參數為τ;
為歸一化因子,也稱為配分函數(partition function)。
此時的P(ζ)相當于待優化的似然函數。
是以,目标是學得最大化似然函數時的參數τ。
3、為何是逆強化學習(IRL)而不是強化學習(RL)
在公式8中,能量函數E(ζ)如果被認為是獎勵函數的一種形式,那麼問題等價于給定一系列的年齡序列ζ,進而強化學習一個政策。
獎勵函數是基于政策的強化學習中的關鍵元素,但是對于人臉老化過程而言,預先定義一個合理的獎勵函數是不現實的。事實上,即使給定某一個體所有年齡的照片也是很難去度量一個最優的年齡老化過程。是以,與其定義一個add-hoc(點對點?也不知道什麼意思)的年齡獎勵函數,不如令E(ζ)能量函數作為非線性的損失函數,轉化為逆強化學習的問題。
在這個逆強化學習系統中,參數τ可以直接從觀測到的年齡序列ξ學到。給定一系列的年齡序列作為示範,通過最大化給定的年齡序列的對數似然,不僅可以優化損失函數,還可以優化政策,為每個個體預測最佳的老化路徑。
上圖代表加入逆強化學習的流程圖。
4、逆強化學習過程可以進行以下描述。馬爾科夫決策過程為M{S,A,T,ζ,E} 。其中{S,A,T}代表狀态空間、動作空間、轉換過程。ζ代表給定的年齡序列(專家示範)。E代表損失函數。我們的目标是通過示範ξ發現損失函數E,同時最小化損失函數得到最佳的政策 。
State:
,兩部分:x輸入人臉;age年齡标簽。
Action:與年齡控制器類似,對于狀态s,動作a定義為對s執行多大程度的老化變化。 a是從動作機率分布中随機取樣。在測試過程,給定目前狀态,選取最高機率的動作進行合成操作。因為使用的資料集年齡最大的跨度為15,是以選擇Na = 16.
Cost Function:對于輸入s和a,損失函數将其映射為
,是以,損失函數為
Policy: 政策可以表示為高斯軌迹分布。如公式9所示。
結合公式7和8,損失函數為:
計算過程為将公式7代入公式8,然後累乘展開之後變成累加,就能得到公式10。
因為計算配分函數是困難的,(因為計算所有的可能情況是困難的,給出的專家示範本身就是某個目标老化的一部分,是以相當于進行采樣。)是以采用基于采樣的方式來估計配分函數(公式右側第二項)的值。是以有:
采樣的分布為q(ζ),N代表取樣的個數。是以待求梯度(對τ求導)可以表示為:
是以,q的分布如何選擇是十分關鍵的。它可以是通過調節進行優化,首先初始化一個均勻分布,然後通過三個步驟的優化過程疊代進行優化。過程為:1、根據初始分布生成一系列的老化序列ζ;2、通過公式11優化損失函數;3、 通過公式12重新定義分布q 。
對于公式12的解決方法采用了論文Learning Neural Network Policies with Guided Policy Search under Unknown Dynamics的方法,是一種政策搜尋方法。
算法1展示了整個政策學習的步驟:
上圖展示了整個拟強化學習的流程。簡單而言,就是給出專家示範,同時根據示範的第一個狀态進行合成,然後通過專家示範序列和合成序列對參數和采樣的序列分布進行更新。
5 讨論:
第4部分講的是模型的優點,其實第5部分也算是進一步介紹優點,隻不過是加上了對比。
與基于GAN方法的比較:
第一,SDAP對非線性的變換提供了更強的控制能力。
第二,為不同的個體提供不同的老化過程。傳統的方法有可能将相同的老化特征放在不同的目标上,導緻生成圖檔品質不佳。
第三,基于GAN方法的年齡判别器隻能分辨年輕和年老的差別,隻是粗糙地将合成圖檔和年齡标簽結合在一起。在SDAP的逆強化學習過程中,年齡标簽(精确到年)是被包含在狀态的定義中,是以合成圖檔和标簽的關系會緊密地結合在一起。在整個學習過程中發揮作用。
6 實驗:
資料集選取了好多個,并且進行處理,隻用了正面人臉。
模型的設定大體可以分為兩個網絡,生成網絡和政策網絡。
對于強化學習的模型提到了rllab,是一個發展和評估強化學習算法的架構。之後會好好看一下。
二、個人感受
合成的流程感覺比較像流模型,但是加上了逆強化學習進行控制,保證不同目标可以有不同的發展路徑。确實思路比較好,可以考慮應用一下。