0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

機器學習算法工程師精選的算法面試這些知識你多了解嗎?

電子工程師 ? 來源:未知 ? 作者:易水寒 ? 2018-08-26 09:55 ? 次閱讀

通往機器學習算法工程師的進階之路是崎嶇險阻的?!毒€性代數(shù)》《統(tǒng)計學習方法》《機器學習》《模式識別》《深度學習》,以及《頸椎病康復指南》,這些書籍將長久地伴隨著你的工作生涯。

除了擁有全面、有條理的知識儲備,我認為,想成為一名優(yōu)秀的算法工程師,更重要的是對算法模型有著發(fā)自心底的熱忱,對研究工作有一種匠心精神。這種匠心精神,直白來講,可以概括為:發(fā)現(xiàn)問題的眼光、解決問題的探索精神,以及對問題究原竟委的執(zhí)著追求。這里,我想給大家分享一個發(fā)生在我身邊的真實情景。

在微信紅包占領家家戶戶年夜飯的那個時代,我們的小伙伴也沒有例外。一群心有猛虎、細嗅薔薇的算法研究員深切意識到自己不僅手速慢,運氣也可謂糟糕。在埋頭瘋點手機屏幕的間隙,他們查閱了搶紅包策略的相關文獻,發(fā)現(xiàn)國內外對這一理論框架的探究極度匱乏。

知識拯救命運,他們決定將紅包機制的公平性提升到理論高度。通過大量的模擬實驗,統(tǒng)計在不同順位領到紅包的大小。數(shù)據(jù)分析顯示,越后面領到紅包的人,雖然紅包金額的期望(均值)和前面的人相同,但方差會更大,這也意味著他們更容易獲得一些大額紅包。從此,掌握這一規(guī)律的研究員們在各個群中“屢試不爽”,再也沒有搶到過紅包,留下的只有“手慢了,紅包派完了”幾個大字。

*編輯配圖

新年鐘聲敲響的時分臨近,Boss級別的人物往往會在群里發(fā)一些超級大額的紅包。最夸張的一次有一位幸運兒在10人紅包中領到2角錢,還沒來得及在心中完成“老板真摳門”的碎碎念,抬頭定睛一看,最佳手氣500多元。判若云泥的手氣雖沒有埋下同事關系間的芥蒂,卻讓這幫算法工程師們產生了新的思考—如果把大額紅包分成多份給大家搶,會減小“人品”因素帶來的“貧富差距”嗎?理論結合實際,他們不僅通過數(shù)學推導確認這一結論,還設計了一系列實驗證明了多個紅包的確會縮小不同人領到紅包金額之間的差異性(方差)。從此,他們組的Leader在發(fā)大紅包的時候都會刻意平均分成幾份,既增加了大家搶紅包的樂趣,又避免了有人因運氣不佳而扼腕興嘆的憤懣。

當然,故事不止于此。他們還利用紅包的特性編寫了一系列面試題——《百面機器學習——算法工程師帶你去面試》,篩選著一批又一批的機器學習算法工程師。

工作中的算法工程師,很多時候,會將生活中轉瞬即逝的靈感,付諸產品化。

將算法研究應用到工作中,與純粹的學術研究有著一點最大的不同,即需要從用戶的角度思考問題。很多時候,你需要明確設計的產品特征、提升的數(shù)據(jù)指標,是不是能真正迎合用戶的需求,這便要求算法工程師能在多個模型間選擇出最合適的那個,然后通過快速迭代達到一個可以走向產品化的結果。這種創(chuàng)新精神與嘗試精神便是“匠心”一詞在工作中的體現(xiàn)。

當然,匠心精神誠可貴,知識儲備作為成功的根底亦必不可少,以下是營長為你精選的算法面試,幫你檢查下自己的技能是否在線。

*編輯配圖

▌1. LDA(線性判別分析) 和 PCA 的區(qū)別與聯(lián)系

首先將LDA 擴展到多類高維的情況,以和問題1 中PCA 的求解對應。假設有N 個類別,并需要最終將特征降維至d 維。因此,我們要找到一個d 維投影超平面,使得投影后的樣本點滿足LDA 的目標—最大化類間距離和最小化類內距離。

回顧兩個散度矩陣, 類內散度矩陣在類別增加至 N 時仍滿足定義, 而之前兩類問題的類間散度矩陣在類別增加后就無法按照原始定義。圖4.6 是三類樣本的分布情況,其中分別表示棕綠黃三類樣本的中心,μ 表示這三個中心的均值(也即全部樣本的中心),Swi表示第i 類的類內散度。我們可以定義一個新的矩陣St,來表示全局整體的散度,稱為全局散度矩陣

如果把全局散度定義為類內散度與類間散度之和,即St=Sb+Sw,那么類間散度矩陣可表示為

其中mj 是第j 個類別中的樣本個數(shù),N 是總的類別個數(shù)。從式(4.29)可以看出,類間散度表示的就是每個類別中心到全局中心的一種加權距離。我們最大化類間散度實際上優(yōu)化的是每個類別的中心經過投影后離全局中心的投影足夠遠。

根據(jù)LDA 的原理,可以將最大化的目標定義為

其中W是需要求解的投影超平面,WTW=I,根據(jù)問題2 和問題3 中的部分結論,我們可以推導出最大化J(W) 對應了以下廣義特征值求解的問題

求解最佳投影平面即求解矩陣特征值前d 大對應的特征向量組成的矩陣,這就將原始的特征空間投影到了新的d 維空間中。至此我們得到了與PCA 步驟類似,但具有多個類別標簽高維數(shù)據(jù)的LDA求解方法。

(1)計算數(shù)據(jù)集中每個類別樣本的均值向量μj,及總體均值向量μ。

(2)計算類內散度矩陣Sw,全局散度矩陣St,并得到類間散度矩陣。

(3)對矩陣行特征值分解,將特征值從大到小排列。

(4)取特征值前 d 大的對應的特征向量,通過以下映射將n 維樣本映射到d 維?

從PCA 和LDA 兩種降維方法的求解過程來看,它們確實有著很大的相似性,但對應的原理卻有所區(qū)別。

首先從目標出發(fā),PCA 選擇的是投影后數(shù)據(jù)方差最大的方向。由于它是無監(jiān)督的,因此PCA 假設方差越大,信息量越多,用主成分來表示原始數(shù)據(jù)可以去除冗余的維度,達到降維。而LDA 選擇的是投影后類內方差小、類間方差大的方向。其用到了類別標簽信息,為了找到數(shù)據(jù)中具有判別性的維度,使得原始數(shù)據(jù)在這些方向上投影后,不同類別盡可能區(qū)分開。

舉一個簡單的例子,在語音識別中,我們想從一段音頻中提取出人的語音信號,這時可以使用PCA 先進行降維,過濾掉一些固定頻率(方差較?。┑谋尘霸肼?。但如果我們的需求是從這段音頻中區(qū)分出聲音屬于哪個人,那么我們應該使用LDA 對數(shù)據(jù)進行降維,使每個人的語音信號具有區(qū)分性。

另外,在人臉識別領域中,PCA 和LDA 都會被頻繁使用?;赑CA 的人臉識別方法也稱為特征臉(Eigenface)方法,該方法將人臉圖像按行展開形成一個高維向量,對多個人臉特征的協(xié)方差矩陣做特征值分解,其中較大特征值對應的特征向量具有與人臉相似的形狀,故稱為特征臉。Eigenface forRecognition 一文中將人臉用7 個特征臉表示(見圖4.7),于是可以把原始65536 維的圖像特征瞬間降到7 維, 人臉識別在降維后的空間上進行。然而由于其利用PCA 進行降維,一般情況下保留的是最佳描述特征(主成分),而非分類特征。如果我們想要達到更好的人臉識別效果,應該用LDA 方法對數(shù)據(jù)集進行降維, 使得不同人臉在投影后的特征具有一定區(qū)分性。

從應用的角度,我們可以掌握一個基本的原則—對無監(jiān)督的任務使用PCA 進行降維,對有監(jiān)督的則應用LDA。

▌2.K-均值算法收斂性的證明

首先,我們需要知道K 均值聚類的迭代算法實際上是一種最大期望算法(Expectation-Maximizationalgorithm),簡稱EM算法。EM算法解決的是在概率模型中含有無法觀測的隱含變量情況下的參數(shù)估計問題。假設有m 個觀察樣本,模型的參數(shù)為θ,最大化對數(shù)似然函數(shù)可以寫成如下形式

當概率模型中含有無法被觀測的隱含變量時,參數(shù)的最大似然估計變?yōu)?/p>

由于z(i) 是未知的, 無法直接通過最大似然估計求解參數(shù),這時就需要利用EM 算法來求解。假設z(i) 對應的分布為,并滿足。利用Jensen 不等式,可以得到?

要使上式中的等號成立,需要滿足

其中c 為常數(shù),且滿足

因此

不等式右側函數(shù)記為r(x|θ)。當?shù)仁匠闪r,我們相當于為待優(yōu)化的函數(shù)找到了一個逼近的下界,然后通過最大化這個下界可以使得待優(yōu)化函數(shù)向更好的方向改進。

圖5.5 是一個θ 為一維的例子,其中棕色的曲線代表我們待優(yōu)化的函數(shù),記為f(θ),優(yōu)化過程即為找到使得f(θ) 取值最大的θ。在當前θ 的取值下(即圖中綠色的位置),可以計算,此時不等式右側的函數(shù)(記為r(x|θ))給出了優(yōu)化函數(shù)的一個下界,如圖中藍色曲線所示,其中在θ 處兩條曲線的取值時相等的。接下來找到使得r(x|θ) 最大化的參數(shù)θ′,即圖中紅色的位置,此時f(θ′) 的取值比f(θ)(綠色的位置處)有所提升??梢宰C明,f(θ′) ≥ r(x|θ)=f(θ),因此函數(shù)是單調的,而且從而函數(shù)是有界的。根據(jù)函數(shù)單調有界必收斂的性質,EM 算法的收斂性得證。但是EM 算法只保證收斂到局部最優(yōu)解。當函數(shù)為非凸時,以圖5.5 為例,如果初始化在左邊的區(qū)域時,則無法找到右側的高點。

由上面的推導,EM 算法框架可以總結如下,由以下兩個步驟交替進行直到收斂。

(1)E 步驟:計算隱變量的期望

(2)M 步驟:最大化

剩下的事情就是說明K 均值算法與EM 算法的關系了。K 均值算法等價于用EM 算法求解以下含隱變量的最大似然問題:

其中是模型的隱變量。直觀地理解,就是當樣本x 離第k個簇的中心點μk 距離最近時,概率正比于,否則為0。

在 E 步驟,計算

這等同于在K 均值算法中對于每一個點x(i) 找到當前最近的簇z(i)。

在M步驟,找到最優(yōu)的參數(shù),使得似然函數(shù)最大:

經過推導可得

因此,這一步驟等同于找到最優(yōu)的中心點,使得損失函數(shù)

達到最小,此時每個樣本x(i) 對應的簇z(i) 已確定,因此每個簇k 對應的最優(yōu)中心點μk 可以由該簇中所有點的平均計算得到,這與K 均值算法中根據(jù)當前簇的分配更新聚類中心的步驟是等同的。

▌3.如何確定 LDA (隱狄利克雷模型) 中主題的個數(shù)

在LDA中,主題的個數(shù)K 是一個預先指定的超參數(shù)。對于模型超參數(shù)的選擇,實踐中的做法一般是將全部數(shù)據(jù)集分成訓練集、驗證集、和測試集3 部分,然后利用驗證集對超參數(shù)進行選擇。例如,在確定LDA 的主題個數(shù)時,我們可以隨機選取60% 的文檔組成訓練集,另外20% 的文檔組成驗證集,剩下20% 的文檔組成測試集。在訓練時,嘗試多組超參數(shù)的取值,并在驗證集上檢驗哪一組超參數(shù)所對應的模型取得了最好的效果。最終,在驗證集上效果最好的一組超參數(shù)和其對應的模型將被選定,并在測試集上進行測試。

為了衡量LDA 模型在驗證集和測試集上的效果,需要尋找一個合適的評估指標。一個常用的評估指標是困惑度(perplexity)。在文檔集合D 上,模型的困惑度被定義為

其中 M 為文檔的總數(shù),wd 為文檔 d 中單詞所組成的詞袋向量,p(wd) 為模型所預測的文檔d 的生成概率,Nd 為文檔d 中單詞的總數(shù)。

一開始,隨著主題個數(shù)的增多,模型在訓練集和驗證集的困惑度呈下降趨勢,但是當主題數(shù)目足夠大的時候,會出現(xiàn)過擬合,導致困惑度指標在訓練集上繼續(xù)下降但在驗證集上反而增長。這時,可以取驗證集的困惑度極小值點所對應的主題個數(shù)作為超參數(shù)。在實踐中,困惑度的極小值點可能出現(xiàn)在主題數(shù)目非常大的時候,然而實際應用并不能承受如此大的主題數(shù)目,這時就需要在實際應用中合理的主題數(shù)目范圍內進行選擇,比如選擇合理范圍內困惑度的下降明顯變慢(拐點)的時候。

另外一種方法是在LDA 基礎之上融入分層狄利克雷過程(Hierarchical Dirichlet Process,HDP),構成一種非參數(shù)主題模型HDP-LDA。非參數(shù)主題模型的好處是不需要預先指定主題的個數(shù),模型可以隨著文檔數(shù)目的變化而自動對主題個數(shù)進行調整;它的缺點是在LDA 基礎上融入HDP 之后使得整個概率圖模型更加復雜,訓練速度也更加緩慢,因此在實際應用中還是經常采用第一種方法確定合適的主題數(shù)目。

▌4.隨機梯度下降法的一些改進算法

隨機梯度下降法本質上是采用迭代方式更新參數(shù),每次迭代在當前位置的基礎上,沿著某一方向邁一小步抵達下一位置,然后在下一位置重復上述步驟。隨機梯度下降法的更新公式表示為

其中,當前估計的負梯度?gt 表示步子的方向,學習速率η 控制步幅。改造的隨機梯度下降法仍然基于這個更新公式。

動量(Momentum)方法

為了解決隨機梯度下降法山谷震蕩和鞍點停滯的問題,我們做一個簡單的思維實驗。想象一下紙團在山谷和鞍點處的運動軌跡,在山谷中紙團受重力作用沿山道滾下,兩邊是不規(guī)則的山壁,紙團不可避免地撞在山壁,由于質量小受山壁彈力的干擾大,從一側山壁反彈回來撞向另一側山壁,結果來回震蕩地滾下;如果當紙團來到鞍點的一片平坦之地時,還是由于質量小,速度很快減為零。紙團的情況和隨機梯度下降法遇到的問題簡直如出一轍。直觀地,如果換成一個鐵球,當沿山谷滾下時,不容易受到途中旁力的干擾,軌跡會更穩(wěn)更直;當來到鞍點中心處,在慣性作用下繼續(xù)前行,從而有機會沖出這片平坦的陷阱。因此,有了動量方法,模型參數(shù)的迭代公式為

具體來說,前進步伐?vt由兩部分組成。一是學習速率η乘以當前估計的梯度gt;二是帶衰減的前一次步伐vt?1。這里,慣性就體現(xiàn)在對前一次步伐信息的重利用上。類比中學物理知識,當前梯度就好比當前時刻受力產生的加速度,前一次步伐好比前一時刻的速度,當前步伐好比當前時刻的速度。為了計算當前時刻的速度,應當考慮前一時刻速度和當前加速度共同作用的結果,因此vt直接依賴于vt?1和gt,而不僅僅是gt。另外,衰減系數(shù)γ扮演了阻力的作用。

中學物理還告訴我們,刻畫慣性的物理量是動量,這也是算法名字的由來。沿山谷滾下的鐵球,會受到沿坡道向下的力和與左右山壁碰撞的彈力。向下的力穩(wěn)定不變,產生的動量不斷累積,速度越來越快;左右的彈力總是在不停切換,動量累積的結果是相互抵消,自然減弱了球的來回震蕩。因此,與隨機梯度下降法相比,動量方法的收斂速度更快,收斂曲線也更穩(wěn)定,如圖7.5 所示。

AdaGrad 方法

慣性的獲得是基于歷史信息的,那么,除了從過去的步伐中獲得一股子向前沖的勁兒,還能獲得什么呢?我們還期待獲得對周圍環(huán)境的感知,即使蒙上雙眼,依靠前幾次邁步的感覺,也應該能判斷出一些信息,比如這個方向總是坑坑洼洼的,那個方向可能很平坦。

隨機梯度下降法對環(huán)境的感知是指在參數(shù)空間中,根據(jù)不同參數(shù)的一些經驗性判斷,自適應地確定參數(shù)的學習速率,不同參數(shù)的更新步幅是不同的。例如,在文本處理中訓練詞嵌入模型的參數(shù)時,有的詞或詞組頻繁出現(xiàn),有的詞或詞組則極少出現(xiàn)。數(shù)據(jù)的稀疏性導致相應參數(shù)的梯度的稀疏性,不頻繁出現(xiàn)的詞或詞組的參數(shù)的梯度在大多數(shù)情況下為零,從而這些參數(shù)被更新的頻率很低。在應用中,我們希望更新頻率低的參數(shù)可以擁有較大的更新步幅,而更新頻率高的參數(shù)的步幅可以減小。

AdaGrad 方法采用“歷史梯度平方和”來衡量不同參數(shù)的梯度的稀疏性,取值越小表明越稀疏,具體的更新公式表示為

其中θt+1,i 表示(t+1)時刻的參數(shù)向量θt+1的第i個參數(shù),gk,i表示k時刻的梯度向量gk 的第i 個維度(方向)。另外,分母中求和的形式實現(xiàn)了退火過程,這是很多優(yōu)化技術中常見的策略,意味著隨著時間推移,學習速率越

來越小,從而保證了算法的最終收斂。

Adam 方法

Adam 方法將慣性保持和環(huán)境感知這兩個優(yōu)點集于一身。一方面, Adam 記錄梯度的一階矩(first moment),即過往梯度與當前梯度的平均,這體現(xiàn)了慣性保持;另一方面,Adam 還記錄梯度的二階矩(second moment),即過往梯度平方與當前梯度平方的平均,這類似AdaGrad 方法,體現(xiàn)了環(huán)境感知能力,為不同參數(shù)產生自適應的學習速率。一階矩和二階矩采用類似于滑動窗口內求平均的思想進行融合,即當前梯度和近一段時間內梯度的平均值,時間久遠的梯度對當前平均值的貢獻呈指數(shù)衰減。具體來說,一階矩和二階矩采用指數(shù)衰退平均(exponential decayaverage)技術,計算公式為

其中β1,β2 為衰減系數(shù),mt 是一階矩,vt 是二階矩。

如何理解一階矩和二階矩呢?一階矩相當于估計:由于當下梯度gt 是隨機采樣得到的估計結果,因此更關注它在統(tǒng)計意義上的期望;二階矩相當于估計,這點與AdaGrad 方法不同,不是gt2從開始到現(xiàn)在的加和,而是它的期望。它們的物理意義是,當||mt||大且vt 大時,梯度大且穩(wěn)定,這表明遇到一個明顯的大坡,前進方向明確;當||mt||趨于零且vt大時,梯度不穩(wěn)定,表明可能遇到一個峽谷,容易引起反彈震蕩;當||mt||大且vt趨于零時,這種情況不可能出現(xiàn);當||mt|| 趨于零且vt 趨于零時,梯度趨于零,可能到達局部最低點,也可能走到一片坡度極緩的平地,此時要避免陷入平原(plateau)。另外,Adam 方法還考慮了mt,vt 在零初始值情況下的偏置矯正。具體來說,Adam 的更新公式為

其中,

▌5.L1正則化產生稀疏性的原因

角度1:解空間形狀

機器學習的經典之作給出的解釋無疑是權威且直觀的,面試者給出的答案多數(shù)也是從這個角度出發(fā)的。在二維的情況下,黃色的部分是L2 和L1 正則項約束后的解空間,綠色的等高線是凸優(yōu)化問題中目標函數(shù)的等高線,如圖7.6 所示。由圖可知,L2 正則項約束后的解空間是圓形,而L1 正則項約束的解空間是多邊形。顯然,多邊形的解空間更容易在尖角處與等高線碰撞出稀疏解。

上述這個解釋無疑是正確的,但卻不夠精確,面試者往往回答過于籠統(tǒng),以至于忽視了幾個關鍵問題。比如,為什么加入正則項就是定義了一個解空間約束?為什么L1 和L2的解空間是不同的?面試官如果深究下去,很多面試者難以給出滿意的答案。其實可以通過KKT條件給出一種解釋。

事實上,“帶正則項”和“帶約束條件”是等價的。為了約束w 的可能取值空間從而防止過擬合,我們?yōu)樵撟顑?yōu)化問題加上一個約束,就是w 的L2 范數(shù)的平方不能大于m:

為了求解帶約束條件的凸優(yōu)化問題,寫出拉格朗日函數(shù)

若w* 和λ* 分別是原問題和對偶問題的最優(yōu)解,則根據(jù)KKT 條件,它們應滿足

仔細一看,第一個式子不就是w* 為帶L2 正則項的優(yōu)化問題的最優(yōu)解的條件嘛,而λ* 就是L2 正則項前面的正則參數(shù)。

這時回頭再看開頭的問題就清晰了。L2 正則化相當于為參數(shù)定義了一個圓形的解空間(因為必須保證L2 范數(shù)不能大于m),而L1 正則化相當于為參數(shù)定義了一個棱形的解空間。如果原問題目標函數(shù)的最優(yōu)解不是恰好落在解空間內,那么約束條件下的最優(yōu)解一定是在解空間的邊界上,而L1“棱角分明”的解空間顯然更容易與目標函數(shù)等高線在角點碰撞,從而產生稀疏解。

角度2:函數(shù)疊加

第二個角度試圖用更直觀的圖示來解釋L1 產生稀疏性這一現(xiàn)象。僅考慮一維的情況,多維情況是類似的,如圖7.7 所示。假設棕線是原始目標函數(shù)L(w) 的曲線圖,顯然最小值點在藍點處,且對應的w* 值非0。

首先,考慮加上L2正則化項,目標函數(shù)變成L(w)+Cw2,其函數(shù)曲線為黃色。此時,最小值點在黃點處,對應的w* 的絕對值減小了,但仍然非0。

然后,考慮加上L1 正則化項,目標函數(shù)變成L(w)+C|w|,其函數(shù)曲線為綠色。此時,最小值點在紅點處,對應的w 是0,產生了稀疏性。

產生上述現(xiàn)象的原因也很直觀。加入L1 正則項后,對帶正則項的目標函數(shù)求導,正則項部分產生的導數(shù)在原點左邊部分是?C,在原點右邊部分是C,因此,只要原目標函數(shù)的導數(shù)絕對值小于C,那么帶正則項的目標函數(shù)在原點左邊部分始終是遞減的,在原點右邊部分始終是遞增的,最小值點自然在原點處。相反,L2 正則項在原點處的導數(shù)是0,只要原目標函數(shù)在原點處的導數(shù)不為0,那么最小值點就不會在原點,所以L2 只有減小w 絕對值的作用,對解空間的稀疏性沒有貢獻。

在一些在線梯度下降算法中,往往會采用截斷梯度法來產生稀疏性, 這同L1 正則項產生稀疏性的原理是類似的。

角度3:貝葉斯先驗

從貝葉斯的角度來理解L1 正則化和L2 正則化,簡單的解釋是, L1 正則化相當于對模型參數(shù)w 引入了拉普拉斯先驗,L2 正則化相當于引入了高斯先驗,而拉普拉斯先驗使參數(shù)為0 的可能性更大。

圖7.8 是高斯分布曲線圖。由圖可見,高斯分布在極值點(0 點)處是平滑的,也就是高斯先驗分布認為w 在極值點附近取不同值的可能性是接近的。這就是L2 正則化只會讓w 更接0點,但不會等于0 的原因。

相反,圖7.9 是拉普拉斯分布曲線圖。由圖可見,拉普拉斯分布在極值點(0 點)處是一個尖峰,所以拉普拉斯先驗分布中參數(shù)w 取值為0 的可能性要更高。在此我們不再給出L1 和L2 正則化分別對應拉普拉斯先驗分布和高斯先驗分布的詳細證明。

▌6.如何對貝葉斯網(wǎng)絡進行采樣

對一個沒有觀測變量的貝葉斯網(wǎng)絡進行采樣,最簡單的方法是祖先采樣(Ancestral Sampling),它的核心思想是根據(jù)有向圖的順序,先對祖先節(jié)點進行采樣,只有當某個節(jié)點的所有父節(jié)點都已完成采樣,才對該節(jié)點進行采樣。以場景描述中的圖8.9 為例,先對Cloudy 變量進行采樣,然后再對Sprinkler 和Rain 變量進行采樣,最后對WetGrass 變量采樣,如圖8.10 所示(圖中綠色表示變量取值為True,紅色表示取值為False)。根據(jù)貝葉斯網(wǎng)絡的全概率公式

可以看出祖先采樣得到的樣本服從貝葉斯網(wǎng)絡的聯(lián)合概率分布。

如果只需要對貝葉斯網(wǎng)絡中一部分隨機變量的邊緣分布進行采樣, 可以用祖先采樣先對全部隨機變量進行采樣,然后直接忽視那些不需要的變量的采樣值即可。由圖可見,如果需要對邊緣分布p(Rain) 進行采樣,先用祖先采樣得到全部變量的一個樣本,如(Cloudy=T, Sprinkler=F,Rain=T,WetGrass=T),然后忽略掉無關變量,直接把這個樣本看成是Cloudy=T 即可。

接下來考慮含有觀測變量的貝葉斯網(wǎng)絡的采樣,如圖8.11 所示。網(wǎng)絡中有觀測變量(Sprikler=T,WetGrass=T)(觀測變量用斜線陰影表示),又該如何采樣呢?最直接的方法是邏輯采樣,還是利用祖先采樣得到所有變量的取值。如果這個樣本在觀測變量上的采樣值與實際觀測值相同,則接受,否則拒絕,重新采樣。這種方法的缺點是采樣效率可能會非常低,隨著觀測變量個數(shù)的增加、每個變量狀態(tài)數(shù)目的上升,邏輯采樣法的采樣效率急劇下降,實際中基本不可用。

因此,在實際應用中,可以參考重要性采樣的思想,不再對觀測變量進行采樣,只對非觀測變量采樣,但是最終得到的樣本需要賦一個重要性權值:

其中E 是觀測變量集合。這種采樣方法稱作似然加權采樣(Likelihood Weighted Sampling),產生的樣本權值可以用于后續(xù)的積分操作。在有觀測變量(Sprikler=T,WetGrass=T)時,可以先對Cloudy 進行采樣,然后對Rain 進行采樣,不再對Sprinkler 和WetGrass 采樣(直接賦觀測值),如圖8.12 所示。這樣得到的樣本的重要性權值為

w ∝ p(Sprinkler=T|Cloudy=T)·p(WetGrass=T|Sprinkler=T,Rain=T)=0.1×0.99=0.099.

除此之外,還可以用MCMC采樣法來進行采樣。具體來說,如果采用Metropolis-Hastings 采樣法的話,如圖8.13所示,只需要在隨機向量(Cloudy, 、Rain)上選擇一個概率轉移矩陣,然后按照概率轉移矩陣不斷進行狀態(tài)轉換,每次轉移有一定概率的接受或拒絕,最終得到的樣本序列會收斂到目標分布。最簡單的概率轉移矩陣可以是:每次獨立地隨機選擇(Cloudy, Rain)的四種狀態(tài)之一。如果采用吉布斯采樣法的話,根據(jù)條件概率p(Cloudy|Rain,Sprinkler, WetGrass) 和p(Rain|Cloudy, Sprinkler,WetGrass), 每次只對(Cloudy, Rain)中的一個變量進行采樣,交替進行即可。

▌7.從方差、偏差角度解釋 Boosting 和 Bagging

簡單回答這個問題就是:Bagging能夠提高弱分類器性能的原因是降低了方差,Boosting能夠提升弱分類器性能的原因是降低了偏差。為什么這么講呢?

首先,Bagging是 Bootstrap Aggregating 的簡稱,意思就是再抽樣,然后在每個樣本上訓練出來的模型取平均。

假設有n 個隨機變量,方差記為σ2,兩兩變量之間的相關性為ρ, 則n 個隨機變量的均值的方差為。在隨機變量完全獨立的情況下,n 個隨機變量的方差為σ2/n,也就是說方差減小到了原來的1/n。

再從模型的角度理解這個問題,對n 個獨立不相關的模型的預測結果取平均,方差是原來單個模型的1/n。這個描述不甚嚴謹,但原理已經講得很清楚了。當然,模型之間不可能完全獨立。為了追求模型的獨立性,諸多Bagging 的方法做了不同的改進。比如在隨機森林算法中,每次選取節(jié)點分裂屬性時,會隨機抽取一個屬性子集,而不是從所有屬性中選取最優(yōu)屬性,這就是為了避免弱分類器之間過強的相關性。通過訓練集的重采樣也能夠帶來弱分類器之間的一定獨立性,從而降低Bagging 后模型的方差。

再看Boosting,大家應該還記得Boosting 的訓練過程。在訓練好一個弱分類器后,我們需要計算弱分類器的錯誤或者殘差,作為下一個分類器的輸入。這個過程本身就是在不斷減小損失函數(shù),來使模型不斷逼近“靶心”,使得模型偏差不斷降低。但Boosting 的過程并不會顯著降低方差。這是因為Boosting 的訓練過程使得各弱分類器之間是強相關的,缺乏獨立性,所以并不會對降低方差有作用。

關于泛化誤差、偏差、方差和模型復雜度的關系如圖12.5 所示。不難看出,方差和偏差是相輔相成,矛盾又統(tǒng)一的,二者并不能完全獨立的存在。對于給定的學習任務和訓練數(shù)據(jù)集,我們需要對模型的復雜度做合理的假設。如果模型復雜度過低,雖然方差很小,但是偏差會很高;如果模型復雜度過高,雖然偏差降低了,但是方差會很高。所以需要綜合考慮偏差和方差選擇合適復雜度的模型進行訓練。

▌8.ResNet的提出背景和核心理論

ResNet的提出背景是解決或緩解深層的神經網(wǎng)絡訓練中的梯度消失問題。假設有一個L 層的深度神經網(wǎng)絡,如果我們在上面加入一層, 直觀來講得到的L+1 層深度神經網(wǎng)絡的效果應該至少不會比L 層的差。因為我們簡單地設最后一層為前一層的拷貝(用一個恒等映射即可實現(xiàn)),并且其他層維持原來的參數(shù)即可。然而在進行反向傳播時,我們很難找到這種形式的解。實際上,通過實驗發(fā)現(xiàn),層數(shù)更深的神經網(wǎng)絡反而會具有更大的訓練誤差。在CIFAR-10 數(shù)據(jù)集上的一個結果如圖9.22 所示,56 層的網(wǎng)絡反而比20 層的網(wǎng)絡訓練誤差更大,這很大程度上歸結于深度神經網(wǎng)絡的梯度消失問題。

為了解釋梯度消失問題是如何產生的?;仡櫟? 節(jié)推導出的誤差傳播公式

將式(9.31)再展開一層,可以得到

可以看到誤差傳播可以寫成參數(shù)以及導數(shù)、連乘的形式。當誤差由第L 層(記為)傳播到除輸入以外的第一個隱含層(記為)的時候,會涉及非常多的參數(shù)和導數(shù)的連乘,這時誤差很容易產生消失或者膨脹,影響對該層參數(shù)的正確學習。因此深度神經網(wǎng)絡的擬合和泛化能力較差,有時甚至不如淺層的神經網(wǎng)絡模型精度更高。

ResNet過調整網(wǎng)絡結構來解決上述問題。首先考慮兩層神經網(wǎng)絡的簡單疊加(見圖9.23(a)),這時輸入x 經過兩個網(wǎng)絡層的變換得到H(x),激活函數(shù)采用ReLU。反向傳播時,梯度將涉及兩層參數(shù)的交叉相乘,可能會在離輸入近的網(wǎng)絡層中產生梯度消失的現(xiàn)象。ResNet 把網(wǎng)絡結構調整為,既然離輸入近的神經網(wǎng)絡層較難訓練,那么我們可以將它短接到更靠近輸出的層,如圖9.23(b)所示。輸入x經過兩個神經網(wǎng)絡的變換得到F(x),同時也短接到兩層之后,最后這個包含兩層的神經網(wǎng)絡模塊輸出H(x)=F(x)+x。

這樣一來,F(xiàn)(x) 被設計為只需要擬合輸入x 與目標輸出的殘差,殘差網(wǎng)絡的名稱也因此而來。如果某一層的輸出已經較好的擬合了期望結果,那么多加入一層不會使得模型變得更差,因為該層的輸出將直接被短接到兩層之后,相當于直接學習了一個恒等映射,而跳過的兩層只需要擬合上層輸出和目標之間的殘差即可。?

ResNet 可以有效改善深層的神經網(wǎng)絡學習問題,使得訓練更深的網(wǎng)絡成為可能,如圖9.24 所示。圖9.24(a)展示的是傳統(tǒng)神經網(wǎng)絡的結果,可以看到隨著模型結構的加深訓練誤差反而上升;而圖9.24(b) 是ResNet 的實驗結果,隨著模型結構的加深,訓練誤差逐漸降低,并且優(yōu)于相同層數(shù)的傳統(tǒng)的神經網(wǎng)絡。

▌9.LSTM是如何實現(xiàn)長短期記憶功能的

有圖有真相,我們首先結合LSTM 結構圖以及更新的計算公式探討這種網(wǎng)絡如何實現(xiàn)其功能,如圖10.2 所示。

與傳統(tǒng)的循環(huán)神經網(wǎng)絡相比,LSTM 仍然是基于xt 和ht?1來計算ht,只不過對內部的結構進行了更加精心的設計,加入了輸入門it、遺忘門ft以及輸出門ot 三個門和一個內部記憶單元ct。輸入門控制當前計算的新狀態(tài)以多大程度更新到記憶單元中;遺忘門控制前一步記憶單元中的信息有多大程度被遺忘掉;輸出門控制當前的輸出有多大程度上取決于當前的記憶單元。

經典的LSTM 中,第t 步的更新計算公式為

其中it是通過輸入xt和上一步的隱含層輸出ht?1進行線性變換,再經過激活函數(shù)σ 得到的。輸入門it的結果是向量,其中每個元素是0 到1 之間的實數(shù),用于控制各維度流過閥門的信息量;Wi、Ui兩個矩陣和向量bi 為輸入門的參數(shù),是在訓練過程中需要學習得到的。遺忘門ft 和輸出門ot 的計算方式與輸入門類似,它們有各自的參數(shù)W、U 和b。與傳統(tǒng)的循環(huán)神經網(wǎng)絡不同的是,從上一個記憶單元的狀態(tài)ct?1 到當前的狀態(tài)ct 的轉移不一定完全取決于激活函數(shù)計算得到的狀態(tài),還由輸入門和遺忘門來共同控制。

在一個訓練好的網(wǎng)絡中,當輸入的序列中沒有重要信息時,LSTM 的遺忘門的值接近于1,輸入門的值接近于0,此時過去的記憶會被保存,從而實現(xiàn)了長期記憶功能;當輸入的序列中出現(xiàn)了重要的信息時, LSTM 應當把其存入記憶中,此時其輸入門的值會接近于1;當輸入的序列中出現(xiàn)了重要信息,且該信息意味著之前的記憶不再重要時,輸入門的值接近1,而遺忘門的值接近于0,這樣舊的記憶被遺忘,新的重要信息被記憶。經過這樣的設計,整個網(wǎng)絡更容易學習到序列之間的長期依賴。

▌10.WGAN解決了原始 GAN 中的什么問題

直覺告訴我們:不要讓生成器在高維空間傻傻地布網(wǎng),讓它直接到低維空間“抓”真實數(shù)據(jù)。道理雖然是這樣,但是在高維空間中藏著無數(shù)的低維子空間,如何找到目標子空間呢?站在大廈頂層,環(huán)眺四周,你可以迅速定位遠處的山巒和高塔,卻很難知曉一個個樓宇間辦公室里的事情。

你需要線索,而不是簡單撒網(wǎng)。處在高維空間,對抗隱秘的低維空間,不能再用粗暴簡陋的方法,需要有特殊武器,這就是Wasserstein 距離(見圖13.7),也稱推土機距離(EarthMover distance)

怎么理解這個公式?想象你有一個很大的院子,院子里有幾處坑坑洼洼需要填平,四個墻角都有一堆沙子,沙子總量正好填平所有坑。搬運沙子很費力,你想知道有沒有一種方案,使得花的力氣最少。直覺上,每個坑都選擇最近的沙堆,搬運的距離最短。但是存在一些問題,如果最近的沙堆用完了,或者填完坑后近處還剩好多沙子,或者坑到幾個沙堆的距離一樣,我們該怎么辦?所以需要設計一個系統(tǒng)的方案,通盤考慮這些問題。最佳方案是上面目標函數(shù)的最優(yōu)解。

可以看到,當沙子分布和坑分布給定時,我們只關心搬運沙子的整體損耗,而不關心每粒沙子的具體擺放,在損耗不變的情況下,沙子擺放可能有很多選擇。對應式(13.16),當你選擇一對(x,y) 時,表示把x 處的一些沙子搬到y(tǒng) 處的坑,可能搬部分沙子,也可能搬全部沙子,可能只把坑填一部分,也可能都填滿了。x 處沙子總量為,y 處坑的大小為,從x 到y(tǒng)的沙子量為γ(x,y),整體上滿足等式

為什么Wasserstein 距離能克服JS 距離解決不了的問題?理論上的解釋很復雜,需要證明當生成器分布隨參數(shù)θ 變化而連續(xù)變化時,生成器分布與真實分布的Wasserstein 距離也隨θ 變化而連續(xù)變化,并且?guī)缀跆幪幙蓪?,而JS 距離不保證隨θ 變化而連續(xù)變化。

通俗的解釋,接著“布網(wǎng)”的比喻,現(xiàn)在生成器不再“布網(wǎng)”,改成“定位追蹤”了,不管真實分布藏在哪個低維子空間里,生成器都能感知它在哪,因為生成器只要將自身分布稍做變化,就會改變它到真實分布的推土機距離;而JS 距離是不敏感的,無論生成器怎么變化,JS 距離都是一個常數(shù)。因此,使用推土機距離,能有效鎖定低維子空間中的真實數(shù)據(jù)分布。

▌11.解釋強化學習中的策略梯度

在策略梯度中,我們考慮前后兩個狀態(tài)之間的關系為,其中st、st+1 是相繼的兩個狀態(tài),at 是t 步時所采取的行動,p 是環(huán)境所決定的下個時刻狀態(tài)分布。而動作at 的生成模型(策略)為,其中πθ 是以θ 為參變量的一個分布,at 從這個分布進行采樣。這樣,在同一個環(huán)境下,強化學習的總收益函數(shù),完全由θ 所決定。策略梯度的基本思想就是,直接用梯度方法來優(yōu)化R(θ)。

可以看出,和Q-learning 不同的是,策略梯度并不估算Q 函數(shù)本身,而是利用當前狀態(tài)直接生成動作at。這有效避免了在連續(xù)狀態(tài)空間上最大化Q 函數(shù)的困難。同時,直接用梯度的方法優(yōu)化R(θ) 可以保證至少是局部收斂的。

要使用梯度法,首先要知道如何計算R(θ) 的導數(shù)。設τ 為某一次0到T 時間所有狀態(tài)及行動的集合(稱作一條軌跡),則R(θ)=E(r(τ)),其中函數(shù)r 計算了軌跡τ的得分。我們有,所以

注意最后一步是因為環(huán)境決定從而與θ 無關,因此。每個軌跡τ 所對應的梯度為?

其中sk,ak 為軌跡τ 上每一步的狀態(tài)和動作。這樣,給定一個策略πθ,我們可以通過模擬獲得一些軌跡,對于每條軌跡,可以獲得其收益r(τ) 以及每一步的<狀態(tài)、行動>對,從而可以通過式(11.2)和式(11.3) 獲得當前參數(shù)下對梯度的估計。一個簡單的算法描述如圖11.7 所示。

注意到,?θR(θ) 實際上是一個隨機變量g(τ) 的期望。我們對g(τ) 進行若干次獨立采樣, 可以獲得對其期望的一個估計。如果能在不改變期望的前提下減少g(τ) 的方差,則能有效提高對其期望估計的效率。我們注意到, 所以有

對于任一個常量b,我們定義一個強化梯度

易知,而維持期望不變。經過計算可以得到最優(yōu)的 b 為

于是,得到一個改良的算法,如圖11.8 所示。

在上述策略梯度算法中,通過估算一個新的強化梯度可以有效縮減原來梯度的方差,從而提高梯度估算的效率,那么如何推出最優(yōu)的b值呢?

我們回到策略梯度算法,

定義隨機變量

即式(11.4)中的結果。

以上內容來自《百面機器學習》,有刪改

本文作者:葫蘆娃

作者:諸葛越 主編,葫蘆娃 著

出版時間:2018年8月

《百面機器學習——算法工程師帶你去面試》學習脈絡圖

該書收錄了超過100道機器學習算法工程師的面試題目和解答,其中大部分源于Hulu算法研究崗位的真實場景。本書從日常工作、生活中各種有趣的現(xiàn)象出發(fā),不僅囊括了機器學習的基本知識,而且還包含了成為優(yōu)秀算法工程師的相關技能。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4551

    瀏覽量

    92017
  • PCA
    PCA
    +關注

    關注

    0

    文章

    88

    瀏覽量

    29478
  • 機器學習
    +關注

    關注

    66

    文章

    8306

    瀏覽量

    131838

原文標題:算法工程師養(yǎng)成記(附精選面試題)

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    高級算法工程師-獵頭職位

    國內某電容芯片公司,業(yè)內領先,急聘高級算法工程師數(shù)枚,待遇豐厚:20K/月左右,上班地點:深圳。詳細要求如下: 主要職責:1、數(shù)據(jù)分析、通信及信號處理算法模型設計、仿真,并輸出相應設計、仿真文檔;2
    發(fā)表于 05-23 17:23

    高級機器學習算法工程師--【北京】

    職位描述:1. 負責計算機視覺&機器學習(包括深度學習算法的開發(fā)與性能提升,負責下述研究課題中的一項或多項,包括但不限于:人臉識別、檢測、活體、跟蹤、分類、語義分割、深度估計、圖像處
    發(fā)表于 12-07 14:34

    干貨 | 這些機器學習算法了解幾個?

    ,廣義線性模型,2,支持向量機,3,最近鄰居法,4,決策樹,5,神經網(wǎng)絡,等等… 但是,從我們的經驗來看,這并不總是算法分組最為實用的方法。那是因為對于應用機器學習,通常不會想,“今
    發(fā)表于 09-22 08:30

    史上最全面Java面試匯總(面試題+答案)精選資料分享

    】Java高級工程師面試(1)Java高級工程師面試(2)Java高級工程師面試(3)BA
    發(fā)表于 07-21 09:39

    一份過冬存糧:算法工程師必備的面試技能雷達圖

    當然,上面只是讓大家體會一下什么是這四項素質,真實的計算廣告算法工程師面試中,不一定要都掌握,也不一定局限于這些內容。如果
    的頭像 發(fā)表于 01-14 09:13 ?2113次閱讀

    如何準備算法工程師面試需要知道哪些知識技能

    今天我們不聊paper,換一個輕松一點的話題,聊一聊如何準備算法工程師面試。所以希望自己的經驗能對有所幫助,也非常歡迎其他面試官能夠多留
    的頭像 發(fā)表于 02-03 09:15 ?5457次閱讀

    怎樣成為一名合格的算法工程師

    成為一名合格的開發(fā)工程師不是一件簡單的事情,需要掌握從開發(fā)到調試到優(yōu)化等一系列能力,這些能力中的每一項掌握起來都需要足夠的努力和經驗。而要成為一名合格的機器學習
    的頭像 發(fā)表于 02-15 11:39 ?3424次閱讀
    怎樣成為一名合格的<b class='flag-5'>算法</b><b class='flag-5'>工程師</b>

    一位算法工程師的筆試及面試總結

    In中國這2個公司的筆試,拿到比較優(yōu)質的offer是京東Star和阿里星2個Offer。應聘的崗位要么是算法工程師,要么是機器學習與數(shù)據(jù)挖掘崗,企業(yè)叫法不同,工作實質都是利用
    的頭像 發(fā)表于 02-15 11:47 ?1.1w次閱讀

    算法工程師的筆試和面試總結

    從16年九月份開始,參加了一些公司的算法工程師/機器學習工程師崗位的校園招聘,做一些總結,希望可以給大家準備這個職位提供些信息。
    的頭像 發(fā)表于 03-22 14:29 ?3576次閱讀

    深信服面算法工程師面試經歷

    深信服面的算法工程師,深信服的面試很專業(yè),不愧是重技術的公司,經歷了三面,雖然掛了難免失落,但是還是很慶幸有這次的經歷。掛的原因是自己沒有準備充分,完全是去裸面的。感覺自己掛在了二面,二面面試
    的頭像 發(fā)表于 03-22 14:38 ?3580次閱讀

    AI工程師算法工程師在應聘時究竟應該怎么準備

    今天我們來討論 AI 工程師算法工程師在應聘方面的問題。一起來看看,作為 AI 工程師,在面試一家公司時,究竟應該怎么準備,有哪些信息是需
    的頭像 發(fā)表于 04-03 16:24 ?4226次閱讀

    機器學習算法工程師的基本素質有哪些

    本來這篇標題我想的是算法工程師的技能,但是我覺得要是加上機器學習在標題上,估計點的人會多一點,所以標題成這樣了,呵呵,而且被搜索引擎收錄的時候多了
    的頭像 發(fā)表于 04-22 16:12 ?2106次閱讀

    算法工程師面試真的是一門玄學嗎

    經常參加面試的同學肯定有過這種感覺,即使面試過程非常順暢,即使本身是一個面霸,甚至god like,也經常有失手的時候。所以很多同學把面試歸結為一門“玄學”。那么
    的頭像 發(fā)表于 07-29 17:29 ?1971次閱讀

    算法工程師面試是一門玄學嗎

    但經常參加面試的同學肯定有過這種感覺,即使面試過程非常順暢,即使本身是一個面霸,甚至god like,也經常有失手的時候。所以很多同學把面試歸結為一門“玄學”。那么
    的頭像 發(fā)表于 08-16 16:40 ?1734次閱讀

    深度學習算法工程師是做什么

    醫(yī)療、金融、自然語言處理、智能交通等等。 作為深度學習算法工程師,他們需要具備一定的技能和知識,包括數(shù)學基礎(如線性代數(shù)、微積分、概率論等)、編程語言(如Python、C++、Matl
    的頭像 發(fā)表于 08-17 16:03 ?1091次閱讀