返學費網(wǎng) > 培訓機構(gòu) > 少兒編程培訓中心
近年來關(guān)注深度學習算法面試的用戶越來越多,小編整理了關(guān)于12個不容錯過的深度學習面試問題(Part 1),基于深度學習的目標檢測算法面試必備(RCNN~YOLOv5),深度學習面試習題總結(jié)(1)(持續(xù)更新中),深度學習面試要點總結(jié)(面試題)??,供您參考
編譯:McGL公眾號:PyVision年前是跳槽的淡季,但卻是尋找新機會的一個很好的時機。因為大多數(shù)人都等著發(fā)了年終獎再走,或者單純的懶過完年再說。所以年前競爭其實遠沒有年后激烈。早準備早收offer。下面的問題包含了batch 等幾乎每個AI面試必問的內(nèi)容,從面試官的角度幫你補充彈藥庫。Enjoy12個不容錯過的深度學習面試問題(Part 2) 3) Deep Learning Interview questions you should not be missed (Part 1) by JP Tech 事實上,并不是所有的面試都需要問所有這些問題,這取決于應(yīng)聘者以前的經(jīng)驗和項目。 通過大量的面試,特別是對學生的面試,我收集了深度學習中12個最令人興奮的面試問題,今天將在這篇文章中與大家分享。 我希望能收到你們的許多評論。 好了,不再啰嗦,開始吧。1. 展示Batch 的意義這被認為是一個非常好的問題,因為它涵蓋了候選人在使用神經(jīng)網(wǎng)絡(luò)模型時需要知道的大部分知識。 你可以用不同的方式回答,但需要闡明以下主要觀點:Batch 是訓練神經(jīng)網(wǎng)絡(luò)模型的一種有效方法。 該方法的目標是將features normalize為0均值且標準方差為1。 所以相反的非0均值現(xiàn)象意味著它是如何影響模型訓練的: 首先,可以理解的是,非0均值是一種數(shù)據(jù)不是圍繞0分布的現(xiàn)象,但是數(shù)據(jù)的大部分值都大于0,或者小于0。 結(jié)合高方差問題,數(shù)據(jù)變得非常大或非常小。 這個問題在訓練深層神經(jīng)網(wǎng)絡(luò)時很常見。 特征沒有在穩(wěn)定的區(qū)間內(nèi)(從小到大)分布的事實將影響網(wǎng)絡(luò)的優(yōu)化過程。 眾所周知,優(yōu)化神經(jīng)網(wǎng)絡(luò)需要使用導數(shù)計算。 假設(shè)一個簡單的層計算公式是 y = (Wx + b) ,y 對 w 的導數(shù)看起來像 dy = dWx。 因此,x 的值直接影響導數(shù)的值(當然,神經(jīng)網(wǎng)絡(luò)模型中梯度的概念不可能這么簡單,但理論上,x 會影響導數(shù))。 因此,如果 x 帶來不穩(wěn)定的變化,導數(shù)可能太大或太小,導致不穩(wěn)定的模型學習。 這也意味著在使用Batch 時,我們可以在訓練期間使用更高的學習率。Batch 可以幫助我們避免 x 值經(jīng)過非線性激活函數(shù)后陷入飽和的現(xiàn)象。 因此,它可以確保沒有激活太高或太低。 不使用BN時,權(quán)重很可能永遠無法學習,使用后則可以正常學習。 這有助于我們減少對參數(shù)初始值的依賴。Batch 還作為一種正則化的形式,有助于最小化過擬合。 使用batch ,我們不需要再用太多的 dropout,這是有意義的,因為我們不需要再擔心drop網(wǎng)絡(luò)時丟失太多的信息。 但是將兩種技術(shù)結(jié)合使用仍然是明智的。2. 介紹偏差(bias)和方差(variance)的概念和trade-off?什么是偏差? 可以理解,偏差是當前模型的平均預測和我們需要預測的實際結(jié)果之間的差異。 一個高偏差的模型表明它不太注重訓練數(shù)據(jù)。 這使得模型過于簡單,在訓練和測試中都不能達到很好的準確率。 這種現(xiàn)象也被稱為欠擬合()。方差可以簡單的理解為數(shù)據(jù)點上模型輸出的分布(或聚類)。 方差越大,模型越有可能密切關(guān)注訓練數(shù)據(jù),而不能在從未遇到的數(shù)據(jù)上泛化。 結(jié)果表明,該模型在訓練數(shù)據(jù)集上取得了很好的效果,但在測試數(shù)據(jù)集上效果很差。 這就是過擬合()現(xiàn)象。這兩個概念之間的相互關(guān)系可以從下圖中看出:在上面的圖表中,圓的中心是一個模型,它完美的預測了準確的值。 事實上,你從來沒有找到過這么好的模型。 當我們離圓心越來越遠時,我們的預測就會越來越差。我們可以改變模型,這樣我們就可以盡可能地增加模型猜測命中圓心的次數(shù)。 偏差和方差值之間的平衡是必要的。 如果我們的模型過于簡單,只有很少的參數(shù),那么它可能有很高的偏差和低方差。另一方面,如果我們的模型有大量的參數(shù),那么它將有高的方差和低的偏差。 這是我們在設(shè)計算法時計算模型復雜度的基礎(chǔ)。3. 假設(shè)深度學習模型已經(jīng)找到了1000萬個人臉向量。 如何通過查詢快速找到新面孔。這個問題是關(guān)于深度學習算法在實踐中的應(yīng)用,關(guān)鍵是數(shù)據(jù)的索引方法。 這是將One Shot Learning應(yīng)用于人臉識別問題的最后一步,也是使這個應(yīng)用易于在實踐中部署的最重要的一步?;旧?,這個問題,你應(yīng)該首先概述One Shot Learning人臉識別方法。 它可以簡單的理解為將每個人臉轉(zhuǎn)換成一個向量,而新的人臉識別就是尋找最接近(最相似)輸入人臉的向量。 通常,人們會使用一個自定義損失為triplet loss的深度學習模型。然而,隨著開頭提到的圖像數(shù)量的增加,計算每個身份標識到1000萬個向量的距離并不是一個聰明的解決方案,會使系統(tǒng)變得很慢。 為了使查詢更加方便,需要考慮在真實向量空間上對數(shù)據(jù)進行索引的方法。這些方法的主要思想是將數(shù)據(jù)劃分為便于查詢新數(shù)據(jù)的結(jié)構(gòu)(可能類似于樹結(jié)構(gòu))。 當新數(shù)據(jù)可用時,在樹中查詢有助于快速找到距離最近的向量。有幾種方法可以用于這一目的,如Locality Sensitive Hashing — LSH, Nearest Neighbors Oh Yeah — Annoy Indexing, Faiss…4. 在分類問題上,準確率指標是否完全可靠? 你通常使用哪些指標來評估你的模型?對于一個分類問題,有許多不同的評價方法。 在準確率方面,公式簡單地采用正確預測數(shù)據(jù)點數(shù)除以總數(shù)據(jù)的方法。 這聽起來很合理,但是在現(xiàn)實中,對于不平衡的數(shù)據(jù)問題,這個數(shù)量是不夠明顯的。 假設(shè)我們正在構(gòu)建一個網(wǎng)絡(luò)攻擊的預測模型(假設(shè)攻擊請求約占1 / 100000個請求)。如果模型預測所有請求都是正常的,那么準確率也高達99.9999% ,而這個數(shù)字在分類模型中常常是不可靠的。 上面的準確率計算通常向我們顯示有多少百分比的數(shù)據(jù)被正確預測,但不能說明每一類的詳細分類表現(xiàn)。 相反,我們可以使用混淆矩陣(Confusion matrix)。 基本上,混淆矩陣顯示了有多少數(shù)據(jù)點實際上屬于一個類別,并被預測屬于一個類別。 它的形式如下:除了表達對應(yīng)于定義分類的每個閾值的True Positive 和 False Positive指數(shù)的變化,我們還有一個名為ROC (Receiver Operating )的圖表。 以 ROC 為例,我們可以知道這個模型是否有效。一個理想的 ROC 是橙色線越接近左上角(即,True Positive越高,F(xiàn)alse Positive越低)越好。
整體框架目標檢測算法主要包括:【兩階段】目標檢測算法、【多階段】目標檢測算法、【單階段】目標檢測算法什么是兩階段目標檢測算法,與單階段目標檢測有什么區(qū)別?兩階段目標檢測算法因需要進行兩階段的處理:1)候選區(qū)域的獲取,2)候選區(qū)域分類和回歸,也稱為基于區(qū)域(Region-based)的方。與單階段目標檢測算法的區(qū)別:通過聯(lián)合解碼同時獲取候選區(qū)域、類別什么是多階段目標檢測算法?【兩階段】和【多階段】目標檢測算法統(tǒng)稱級聯(lián)目標檢測算法,【多階段】目標檢測算法通過多次重復進行步驟:1)候選區(qū)域的獲取,2)候選區(qū)域分類和回歸,反復修正候選區(qū)域根據(jù)是否屬于錨框分為:1、Anchor-Free:(注意)2、Anchor-based:-v5PP-YOLOSSD主要考慮問題1、準確性2、實時性3、多尺度4、標簽方案5、目標重疊6、模型訓練7、重復編碼8、數(shù)據(jù)增強9、樣本不平衡兩階段目標檢測算法RCNN1、模型通過【選擇性搜索算法】獲取潛在的候選區(qū)域2、截取原圖每個候選區(qū)域并resize輸入到模型中進行特征抽取3、使用SVM進行分類,以及進行bounding box 回歸存在問題:重復編碼:由于候選區(qū)域存在重疊,模型需要重復進行重疊區(qū)域的特征圖提取,計算冗余模型訓練:由于特征抽取模型和區(qū)域的分類回歸模型分開訓練,無法進行端到端的模型訓練,訓練過程需要提取每個包含重疊區(qū)域的候選區(qū)域特征并保存用于分類和回歸訓練實時性差:重復編碼導致實時性不佳,【選擇性搜索算法】耗時嚴重Fast-RCNN考慮到RCNN的缺點,F(xiàn)ast-RCNN來了!1、模型依舊通過【選擇性搜索算法】獲取潛在的候選區(qū)域2、將原圖通過特征抽取模型進行一次的共享特征圖提取,避免了重復編碼3、在特征圖中找到每一個候選區(qū)域?qū)?yīng)的區(qū)域并截取【區(qū)域特征圖】,ROI pooling層中將每個【區(qū)域特征圖】池化到統(tǒng)一大小4、分別進行softmax分類(使用softmax代替了RCNN里面的多個SVM分類器)和bbox回歸主要優(yōu)點:1、可以進行端到端模型訓練2、不需要存儲中間特征向量用于SVM分類和回歸模型訓練3、使用更高效的SPPnet特征提取網(wǎng)絡(luò)存在問題:實時性差:選擇性搜索獲取候選區(qū)域耗時,主要通過貪婪算法合并低級特征超像素,單張圖片耗時接近2s,且無法使用GPU加速Faster R-CNN使用RPN網(wǎng)絡(luò)代替Fast RCNN使用的選擇性搜索進行候選區(qū)域的提取,相當于Faster R-CNN=RPN+Fast RCNN,且RPN和Fast RCNN共享卷積層。1、多尺度目標:通過RPN網(wǎng)絡(luò)候選區(qū)域,并使用不同大小和長寬比的anchors來解決多尺度問題2、通過計算anchors與真實框的交并比IOU,并通過閾值建立正負樣本3、樣本不平衡:每批次隨機采樣256個anchors進行邊框回歸訓練,并盡可能保證正負樣本數(shù)相同,避免負樣本過多導致的梯度統(tǒng)治問題論文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks多階段目標檢測算法Cascade R-CNN通過分析Faster RCNN在目標候選區(qū)域的位置修正能力, 如下圖基于單個檢測器的可優(yōu)化性但優(yōu)化的程度有限,通過多次將預測區(qū)域作為候選區(qū)域進行修正,使得輸出的預測區(qū)域與真實標簽區(qū)域的IOU逐級遞增主要優(yōu)點:1、準確性:碾壓各種單雙階段目標檢測算法,采用RoIAlign取代、多尺度:通過FPN網(wǎng)絡(luò)集成多尺度特征圖,利用歸一化尺度偏差方法緩解不同尺度對Loss的影響程度3、實時性:去除了Fater RCNN的全連接層,取而代之采用FCN網(wǎng)絡(luò),相比Fater RCNN,具有更少的模型參數(shù)和計算時間主要不足:單階段目標檢測算法編碼方式1、基于中心坐標方案1通過計算IOU或者長寬比閾值篩選每個anchor位置對應(yīng)的target,可能過濾比較極端的target,但緩解目標重疊情況下的編碼重疊問題通過對應(yīng)anchor找到中心坐標位置(x,y)方案2通過iou最大值計算每個target對應(yīng)的anchor位置,保證每個target至少對應(yīng)一個,目標少的情況下但容易造成目標稀疏編碼,通過對應(yīng)target找到中心坐標位置(x,y),YOLOv5中通過中心坐標結(jié)合四舍五入進行多中心坐標映射緩解目標稀疏問題方案3同時利用方案1和方案2,保證每個target至少對應(yīng)一個anchor區(qū)域YOLOv1雖然是單階段目標檢測開山之作,但真正的鼻祖應(yīng)該是Faster RCNN的RPN主要優(yōu)點:1、快2、采用全局特征進行推理,由于利用全局上下文信息,相比于滑動窗口和建議框方法,對背景的判斷更準確3、泛化性,訓練好的模型在新的領(lǐng)域或者不期望的輸入情況下依然具有較好的效果主要不足:1、準確性:與Faster RCNN相比,correcct反映了YOLOv1準確率較低,反映了召回率較高,但總體性能F1較低,雖然loss采用長寬平方根進行回歸,試圖降低大目標對loss的主導地位,但小目標的微小偏差對IOU的影響更嚴重,導致小目標定位不準2、目標重疊:雖然通過每個S*S的網(wǎng)格點設(shè)置了2個預測框用于回歸訓練,但是每個網(wǎng)格點設(shè)置了一種類別,無法解決不同類別目標重疊率較大,導致映射到相同網(wǎng)格點上的問題3、多尺度:由于模型只是簡單使用下采樣獲得的粗糙特征,很難將其推廣到具有新的或不同尋常的寬高比或配置的對象4、實時性:雖然與Faster RCNN相比,速度很快,但還可以更快,主要是由于v1中使用了全連接網(wǎng)絡(luò),不是全卷積網(wǎng)絡(luò) 全連接層參數(shù)=+=2x10^8SSD通過使用FCN全卷積神經(jīng)網(wǎng)絡(luò),并利用不同尺度的特征圖進行目標檢測,在速度和精度都得到了極大提升主要優(yōu)點1、實時性:相比YOlOv1更快,因為去除了全連接層2、標簽方案:通過預測類別置信度和相對固定尺度集合的先驗框的偏差,能夠有效均衡不同尺度對loss的影響程度3、多尺度:通過使用多個特征圖和對應(yīng)不同尺度的錨框進行多尺度目標預測4、數(shù)據(jù)增強:通過隨機裁剪的方式進行數(shù)據(jù)增強提高模型的魯棒性4、樣本不平衡:通過困難樣本挖掘,采用負樣本中置信度最高的先驗框進行訓練,并設(shè)置正負樣本比例為1:3,使得模型訓練收斂更快主要不足1、通過人工先驗設(shè)置的不同尺度的錨框無法適應(yīng)真實的目標框的尺度分布2、使用的多個特征圖由于高分辨率的特征圖不能有效地結(jié)合高層特征YOLOv2針對YOLOv1在解決多尺度和實時性方面的不足,提出了YOLOv2主要優(yōu)點:1、更好,1)Batch :使得性能極大提升;2)Higher :使預訓練分類任務(wù)分辨率與目標檢測的分辨率一致;3) With Anchor Boxes:使用全卷積神經(jīng)網(wǎng)絡(luò)預測偏差,而非具體的坐標,模型更容易收斂;4)Dimension Clusters:通過聚類算法設(shè)置錨框的尺度,獲得更好的先驗框,緩解了不同尺度對loss的影響變化;5)Fine-Grained Features:通過簡單相加融合了低層的圖像特征;6)Multi-Scale Training:通過使用全卷積網(wǎng)絡(luò)使得模型支持多種尺度圖像的輸入并輪流進行訓練2、更快,構(gòu)建Darknet-19代替VGG-16作為backbone具有更好的性能主要不足1、多尺度:在模型維度只是簡單融合底層特征,在輸入維度進行多尺度圖像分辨率的輸入訓練,不能克服模型本身感受野導致的多尺度誤差RetinaNet論文:Focal Loss for Dense Object Detection主要優(yōu)點1、多尺度:借鑒FPN網(wǎng)絡(luò)通過自下而上、自上而下的特征提取網(wǎng)絡(luò),并通過無代價的橫向連接構(gòu)建增強特征提取網(wǎng)絡(luò),利用不同尺度的特征圖檢測不同大小的目標,利用了底層高分率的特征圖有效的提高了模型對小尺度目標的檢測精度2、樣本不平衡:引入Focal Loss用于候選框的【類別預測】,克服正負樣本不平衡的影響及加大困難樣本的權(quán)重主要不足1、實時性:網(wǎng)絡(luò)使用ResNet-101作為主干特征提取網(wǎng)絡(luò),檢測效率略微不足YOLOv3論文:YOLOv3: An 主要優(yōu)點1、實時性:相比RetinaNet,YOLOv3通過犧牲檢測精度,使用Darknet主干特征提取網(wǎng)絡(luò)而不是Resnet101,從而獲取更快的檢測速度2、多尺度:相比于YOLOv1-v2,與RetinaNet采用相同的FPN網(wǎng)絡(luò)作為增強特征提取網(wǎng)絡(luò)得到更高的檢測精度3、目標重疊:通過使用邏輯回歸和二分類交叉熵損失函數(shù)進行類別預測,將每個候選框進行多標簽分類,解決單個檢測框可能同時包含多個目標的可能主要不足1、準確率:主要因為Darknet的特征提取不夠強,未進行精細化結(jié)構(gòu)模型設(shè)計YOLOv4論文:YOLOv4: Optimal Speed and Accuracy of Object Detection鑒于YOLOv3的缺點,YOLOv5進行了Darknet53主干特征提取網(wǎng)絡(luò)等一系列改進主要優(yōu)點1、實時性:借鑒CSPNet網(wǎng)絡(luò)結(jié)構(gòu)將Darknet53改進為使模型參數(shù)和計算時間更短2、多尺度:頸部分別引入PAN和SPP網(wǎng)絡(luò)結(jié)構(gòu)作為增強特征提取網(wǎng)絡(luò),能夠有效多尺度特征,相比于引入FPN網(wǎng)絡(luò)準確度更高3、數(shù)據(jù)增強:引入Mosaic數(shù)據(jù)增強,在使用BN的時候可以有效降低batch_size的影響4、模型訓練,采用IOU:GIoU,DIoU,CIoU作為目標框的回歸,與YOLOv3使用的平方差損失相比具有更高的檢測精度YOLOv5為了進一步提升YOLOv4的檢測速度,YOLOv5采用了更輕量的網(wǎng)絡(luò)結(jié)構(gòu)主要優(yōu)點1、多尺度:使用FPN增強特征提取網(wǎng)絡(luò)代替PAN,使模型更簡單,速度更快2、目標重疊:使用四舍五入的方法進行臨近位置查找,使目標映射到周圍的多個中心網(wǎng)格點主要不足1、通過長寬比篩選并過濾了大小和長寬比較極端的真實目標框,而這些恰恰在真實檢測任務(wù)極為重要,和重點解決的檢測問題
最近面試了下騰訊、美團、阿里、搜狗、今日頭條等,主要做NLP、ML、DL,把面試中出現(xiàn)的深度學習相關(guān)的一些問題記錄在這里,持續(xù)更新。1 推導反向傳播算法答:easy,請見RNN Part 2.5-神經(jīng)網(wǎng)絡(luò)反向傳播算法推導 介紹了反向傳播算法四個基本方程推導2 Relu激活函數(shù)在零點是否可導?答:在零點不可導,Relu的函數(shù)曲線如下圖所示這里需要復習一些數(shù)學概念,可導和連續(xù)連續(xù):設(shè)函數(shù) 在點 的某一鄰域內(nèi)有定義,如果函數(shù) 當 時的極限存在,且,則稱函數(shù)在點處連續(xù).這里需要注意左極限等于右極限等于函數(shù)值,即 ,顯然Relu函數(shù)是連續(xù)的在零點。但是不可導??蓪В涸O(shè)函數(shù) 在點 的某一鄰域內(nèi)有定義,則當自變量 在 處取得增量 時,相應(yīng)的y取增量 ;如果 時 極限存在,則稱 在點 處可導,并稱這個極限為函數(shù) 在點處的倒數(shù),記為 然而左導數(shù)和右導數(shù)并不相等,因而函數(shù)在該處不可導,實際上,如果函數(shù)導數(shù)存在,當且僅當其左右導數(shù)均相等。 而Relu左導數(shù)等于0,右導數(shù)等于1,因此不可導。3 Relu在零點不可導,那么在反向傳播中怎么處理?答:caffe源碼~/caffe/src/caffe/layers/relu_layer.cpp倒數(shù)第十行代碼: bottom_diff[i] = top_diff[i] * ((bottom_data[i] > 0)+ negative_slope * (bottom_data[i] <= 0)); 這句話就是說間斷點的求導按左導數(shù)來計算。也就是默認情況下(negative_slope=0),間斷點處的導數(shù)認為是0.作者:江東子弟CC鏈接: 如何處理神經(jīng)網(wǎng)絡(luò)中的過擬合問題?答:有多種方法進行處理L1/L2正則化 stop各種方法本身以及為什么他們能夠解決過擬合問題,需要牢記5 Relu激活函數(shù)的優(yōu)缺點?答:優(yōu)點包括:解決了梯度消失、爆炸的問題計算方便,計算速度快,求導方便加速網(wǎng)絡(luò)訓練缺點包括:由于負數(shù)部分恒為0,會導致一些神經(jīng)元無法激活輸出不是以0為中心6. Dropout在訓練的過程中會隨機去掉神經(jīng)元,那么在編碼過程中是怎么處理的呢?答:在前向傳播中,當計算出 之后,根據(jù)keep_prob參數(shù)來生成該層的矩陣來決定是否保留和扔掉神經(jīng)元,如果保留 ,那么 ;如果不保留 ,那么 。因此在編碼中不需要改變網(wǎng)絡(luò)結(jié)構(gòu),只需要每次計算完之后完成以下操作d3 = np.random.rand(a3.shape[0],a3.shape[1]) < keep-prob這樣得到的d3就是全是0或者1的元素的矩陣,0表示隱藏掉對應(yīng)的神經(jīng)元,1表示保留。假如keep-prob=0.8,那么整體上可以看作 中元素等于1的概率是0.8,等于0的概率是0.2。A3 = np.multiply(A3, d3)7. dropout的訓練過程需要做rescale,這個過程是什么樣子的呢?答:請見神經(jīng)網(wǎng)絡(luò)正則化(2):dropout正則化,其中介紹了完整的正向傳播和反向傳播過程,其中在每次傳播中都要做rescale ,在 有平均20%的元素歸零的情況下,為了不影響 的期望值,我們用 來修正或者彌補所需要的20%,也就是保持 的期望值不變,代碼如下所示:A3 = A3 / keep_prob而在后向傳播中,需要dA1/keep_prob dA1 = dA1 / keep_prob # Step 2: Scale the value of neurons that haven't been shut down這樣在預測的時候就不需要dropout了8. dropout方法在預測過程中需要如何處理?答:在訓練過程中做了scale,那么在預測過程中就不需要做dropout,設(shè)置keep_prob = 1即可8. softmax的公式是什么?實際使用中會有什么問題?如何解決?答:首先計算帶權(quán)輸入然后對帶權(quán)輸入進行歸一化操作在實際使用中,由于每項在計算的時候,如果 過大會導致數(shù)值上溢。解決方法是給分子分母同時除以 ,這時候 ,那么每一項都會小于等于1,因此解決了數(shù)值上溢的問題,總結(jié)如下: 9. CNN中padding的作用是什么?答:filter在按照步長移動時候,可能會不夠,因此需要填充,例如輸入數(shù)據(jù)是(1,5,5,1), filters是(1,2,2,1),strides是(1,2,2,1), 那么5%2不等于0,因此多出來一列和一行,這時候就需要填充了;在中是向右填充用最右邊一列,向下填充用最下邊一行。例如下面的例子中對a進行了填充,得到的結(jié)果為(1,6,6,1)a = [[0.0,0,0,0,1], [0,1,-1,0,1], [0,-1,2,1,1], [0,0,2,-1,1], [0,0,2,-1,1]] [[0.0,0,0,0,1,1], [0,1,-1,0,1,1], [0,-1,2,1,1,1], [0,0,2,-1,1,1], [0,0,2,-1,1,1], [0,0,2,-1,1,1]]10. 梯度消失和梯度爆炸的問題是如何產(chǎn)生的?如何解決?答:第一個問題相對簡單,由于反向傳播過程中,前面網(wǎng)絡(luò)權(quán)重的偏導數(shù)的計算是逐漸從后往前累乘的,如果使用 激活函數(shù)的話,由于導數(shù)小于一,因此累乘會逐漸變小,導致梯度消失,前面的網(wǎng)絡(luò)層權(quán)重更新變慢;如果權(quán)重 本身比較大,累乘會導致前面網(wǎng)絡(luò)的參數(shù)偏導數(shù)變大,產(chǎn)生數(shù)值上溢。因為 sigmoid 導數(shù)最大為1/4,故只有當abs(w)>4時才可能出現(xiàn)梯度爆炸,因此最普遍發(fā)生的是梯度消失問題。解決方法通常包括使用ReLU等激活函數(shù),梯度只會為0或者1,每層的網(wǎng)絡(luò)都可以得到相同的更新速度采用LSTM進行梯度裁剪(clip), 如果梯度值大于某個閾值,我們就進行梯度裁剪,限制在一個范圍內(nèi)使用正則化,這樣會限制參數(shù) 的大小,從而防止梯度爆炸設(shè)計網(wǎng)絡(luò)層數(shù)更少的網(wǎng)絡(luò)進行模型訓練batch . 語言模型中,Bert為什么在masked language model中采用了80%、10%、10%的策略?答:如果訓練的時候100%都是Mask,那么在fine-tune的時候,所有的詞時候已知的,不存在[Mask],那么模型就只知道根據(jù)其他詞的信息來預測當前詞,而不會直接利用這個詞本身的信息,會憑空損失一部分信息,對下游任務(wù)不利。還有 10% random token 是因為如果都用原 token,模型在預訓練時可能會偷懶,不去建模單詞間的依賴關(guān)系,直接照抄當前詞[MASK] 是以一種顯式的方式告訴模型『這個詞我不告訴你,你自己從上下文里猜』,從而防止信息泄露。如果 [MASK] 以外的部分全部都用原 token,模型會學到『如果當前詞是 [MASK],就根據(jù)其他詞的信息推斷這個詞;如果當前詞是一個正常的單詞,就直接抄輸入』。這樣一來,在 finetune 階段,所有詞都是正常單詞,模型就照抄所有詞,不提取單詞間的依賴關(guān)系了。以一定的概率填入 random token,就是讓模型時刻堤防著,在任意 token 的位置都需要把當前 token 的信息和上下文推斷出的信息相結(jié)合。這樣一來,在 finetune 階段的正常句子上,模型也會同時提取這兩方面的信息,因為它不知道它所看到的『正常單詞』到底有沒有被動過手腳的。(鳴謝 @Towser )12. Bert現(xiàn)有的問題有哪些?答:Bert模型過于龐大,參數(shù)太多,無論是feature-based approach還是fine-tune approach都很慢;而且因為表示是上下文相關(guān)的,上線的應(yīng)用需要實時處理,時間消耗太大;Bert給出來的中文模型中,是以字為基本單位的,很多需要詞向量的應(yīng)用無法直接使用;同時該模型無法識別很多生僻詞,都是UNK;Bert模型作為自回歸模型,由于模型結(jié)構(gòu)的問題,無法給出句子概率值12. 非平衡數(shù)據(jù)集的處理方法有哪些?答:采用更好的評價指標,例如F1、AUC曲線等,而不是Recall、Precision進行過采樣,隨機重復少類別的樣本來增加它的數(shù)量;進行欠采樣,隨機對多類別樣本降采樣通過在已有數(shù)據(jù)上添加噪聲來生成新的數(shù)據(jù)修改損失函數(shù),添加新的懲罰項,使得小樣本的類別被判斷錯誤的損失增大,迫使模型重視小樣本的數(shù)據(jù)使用組合/集成方法解決樣本不均衡,在每次生成訓練集時使用所有分類中的小樣本量,同時從分類中的大樣本量中隨機抽取數(shù)據(jù)來與小樣本量合并構(gòu)成訓練集,這樣反復多次會得到很多訓練集和訓練模型。最后在應(yīng)用時,使用組合方法(例如投票、加權(quán)投票等)產(chǎn)生分類預測結(jié)果;13. CRF與HMM模型的區(qū)別?答:大的不同點是linear-CRF模型是判別模型,而HMM是生成模型,即linear-CRF模型要優(yōu)化求解的是條件概率P(y|x),則HMM要求解的是聯(lián)合分布P(x,y)。第二,linear-CRF是利用最大熵模型的思路去建立條件概率模型,對于觀測序列并沒有做馬爾科夫假設(shè)。而HMM是在對觀測序列做了馬爾科夫假設(shè)的前提下建立聯(lián)合分布的模型。14. 交叉熵損失與KL散度的區(qū)別?答:KL散度是相對熵(relative entropy),用來衡量兩個概率分布之間的差異,對于兩個概率分布 ,其中 是真實概率分布,而 是數(shù)據(jù)計算得到的概率分布,其相對熵的計算公式為 當且僅當 時,其值為0;其中前半部分 是交叉熵。或者說相對熵等于交叉熵減去數(shù)據(jù)真實分布的熵。由于真實的概率分布是固定的,因此公式(5)中的后半部分是常數(shù),所以優(yōu)化交叉熵損失也等效于優(yōu)化相對熵損失。15. 為什么LSTM相比RNN能夠解決long-range 的問題?答:需要對BPTT進行分析,請見習翔宇:RNN/LSTM BPTT詳細推導以及梯度消失問題分析
這篇文章會經(jīng)常更新1.Softmax函數(shù)與交叉熵在Logistic 二分類問題中,我們可以使用sigmoid函數(shù)將輸入Wx+b映射到(0,1)區(qū)間中,從而得到屬于某個類別的概率。將這個問題進行泛化,推廣到多分類問題中,我們可以使用softmax函數(shù),對輸出的值歸一化為概率值這里假設(shè)在進入softmax函數(shù)之前,已經(jīng)有模型輸出C值,其中C是要預測的類別數(shù),模型可以是全連接網(wǎng)絡(luò)的輸出aa,其輸出個數(shù)為C,即輸出為: 所以對每個樣本,它屬于類別i的概率為: 通過上式可以保證 ,即屬于各個類別的概率和為1對softmax函數(shù)進行求導,即求: ,第i項的輸出對第j項輸入的偏導。代入softmax函數(shù)表達式,可以得到: 求導規(guī)則:對于 ,導數(shù)為: 所以在我們這個例子中, 上面兩個式子只是代表直接進行替換,而非真的等式。 ,(即g(x)= 對 進行求導),要分情況討論:如果i=j,則求導結(jié)果為 如果i≠j,則求導結(jié)果為0再來看 對 求導,結(jié)果為 所以,當i=j時:(其中,為了方便,令 ) 當i≠j時: 標紅下,這倆公式很重要:Loss function對數(shù)似然函數(shù)機器學習里面,對模型的訓練都是對Loss function進行優(yōu)化,在分類問題中,我們一般使用最大似然估計(Maximum )來構(gòu)造損失函數(shù)。對于輸入的x,其對應(yīng)的類標簽為t,我們的目標是找到這樣的θ使得p(t|x)最大。在二分類的問題中,我們有: 其中,y=f(x)y=f(x)是模型預測的概率值,t是樣本對應(yīng)的類標簽,將問題泛化為更一般的情況,多分類問題,此時t是one-hot編碼,例如[0,0,0,1,0,0],此時中間那個1對應(yīng)真正的標簽: 由于連乘可能導致最終結(jié)果接近0的問題,一般對似然函數(shù)取對數(shù)的負數(shù),變成最小化對數(shù)似然函數(shù)。 交叉熵說交叉熵之前先介紹相對熵,相對熵又稱為KL散度(Kullback-Leibler ),用來衡量兩個分布之間的距離,記為 這里H(p)是p的熵。假設(shè)有兩個分布p和q,它們在給定樣本集上的相對熵定義為: 從這里可以看出,交叉熵和相對熵相差了H(p),而當p已知的時候,H(p)是個常數(shù),所以交叉熵和相對熵在這里是等價的,反映了分布p和q之間的相似程度。關(guān)于熵與交叉熵等概念回到我們多分類的問題上,真實的類標簽可以看作是分布,對某個樣本屬于哪個類別可以用One-hot的編碼方式,是一個維度為C的向量,比如在5個類別的分類中,[0, 1, 0, 0, 0]表示該樣本屬于第二個類,其概率值為1。我們把真實的類標簽分布記為p,該分布中,ti=1當i屬于它的真實類別c。同時,分類模型經(jīng)過softmax函數(shù)之后,也是一個概率分布,因為 ,所以我們把模型的輸出的分布記為q,它也是一個維度為CC的向量,如[0.1, 0.8, 0.05, 0.05, 0]。 對一個樣本來說,真實類標簽分布與模型預測的類標簽分布可以用交叉熵來表示: 最終,對所有的樣本n,我們有以下loss function: 其中 是樣本k屬于類別i的概率, 是模型對樣本k預測為屬于類別i的概率。 當i=j時: 當i≠j時: 所以,將求導結(jié)果代入上式: 參考:Softmax函數(shù)與交叉熵神經(jīng)網(wǎng)絡(luò)訓練中的梯度消失與梯度爆炸層數(shù)比較多的神經(jīng)網(wǎng)絡(luò)模型在訓練時也是會出現(xiàn)一些問題的,其中就包括梯度消失問題(gradient vanishing problem)和梯度爆炸問題(gradient exploding problem)。梯度消失問題和梯度爆炸問題一般隨著網(wǎng)絡(luò)層數(shù)的增加會變得越來越明顯。例如,對于下圖所示的含有3個隱藏層的神經(jīng)網(wǎng)絡(luò),梯度消失問題發(fā)生時,接近于輸出層的hidden layer 3等的權(quán)值更新相對正常,但前面的hidden layer 1的權(quán)值更新會變得很慢,導致前面的層權(quán)值幾乎不變,仍接近于初始化的權(quán)值,這就導致hidden layer 1相當于只是一個映射層,對所有的輸入做了一個同一映射,這是此深層網(wǎng)絡(luò)的學習就等價于只有后幾層的淺層網(wǎng)絡(luò)的學習了。而這種問題為何會產(chǎn)生呢?以下圖的反向傳播為例(假設(shè)每一層只有一個神經(jīng)元且對于每一層,其中為sigmoid函數(shù))可以推導出而sigmoid的導數(shù)如下圖可見,的最大值為,而我們初始化的網(wǎng)絡(luò)權(quán)值通常都小于1,因此,因此對于上面的鏈式求導,層數(shù)越多,求導結(jié)果越小,因而導致梯度消失的情況出現(xiàn)。這樣,梯度爆炸問題的出現(xiàn)原因就顯而易見了,即,也就是比較大的情況。但對于使用sigmoid激活函數(shù)來說,這種情況比較少。因為的大小也與有關(guān)(),除非該層的輸入值在一直一個比較小的范圍內(nèi)。其實梯度爆炸和梯度消失問題都是因為網(wǎng)絡(luò)太深,網(wǎng)絡(luò)權(quán)值更新不穩(wěn)定造成的,本質(zhì)上是因為梯度反向傳播中的連乘效應(yīng)。對于更普遍的梯度消失問題,可以考慮用ReLU激活函數(shù)取代sigmoid激活函數(shù)。另外,LSTM的結(jié)構(gòu)設(shè)計也可以改善RNN中的梯度消失問題。參考:神經(jīng)網(wǎng)絡(luò)訓練中的梯度消失與梯度爆炸3 Batchnorm原理Batchnorm是歸一化的一種手段,極限來說,這種方式會減小圖像之間的絕對差異,突出相對差異,加快訓練速度,如果我們每一個batch輸入的數(shù)據(jù)都具有不同的分布,顯然會給網(wǎng)絡(luò)的訓練帶來困難。另一方面,數(shù)據(jù)經(jīng)過一層層網(wǎng)絡(luò)計算后,其數(shù)據(jù)分布也在發(fā)生著變化,會給下一層的網(wǎng)絡(luò)學習帶來困難。batchnorm就是為了解決這個分布變化問題。BatchNorm就是對神經(jīng)網(wǎng)絡(luò)的每一層進行歸一化,假設(shè)將每一層輸出后的數(shù)據(jù)都歸一化到0均值,1方差,滿足正太分布,但是,此時有一個問題,每一層的數(shù)據(jù)分布都是標準正太分布,導致其完全學習不到輸入數(shù)據(jù)的特征,因為,費勁心思學習到的特征分布被歸一化了,因此,直接對每一層做歸一化顯然是不合理的。但是如果稍作修改,加入可訓練的參數(shù)做歸一化,那就是BatchNorm實現(xiàn)的了算法流程:輸入:一個batch的樣本: ,和超參數(shù) 輸出: 之所以稱之為batchnorm是因為所norm的數(shù)據(jù)是一個batch的,假設(shè)輸入數(shù)據(jù)是 輸出是 ,batchnorm的步驟如下:1.先求出此次批量數(shù)據(jù)x的均值: 2.求出此次batch的方差: 3.接下來就是對x做歸一化,得到: 4.最重要的一步,引入縮放和平移變量 ,計算歸一化后的值 之前也說過如果直接做歸一化不做其他處理,神經(jīng)網(wǎng)絡(luò)是學不到任何東西的,但是加入這兩個參數(shù)后,事情就不一樣了,先考慮特殊情況下,如果γ和β分別等于此batch的標準差和均值,那么 不就還原到歸一化前的x了嗎,也即是縮放平移到了歸一化前的分布,相當于batchnorm沒有起作用,β和γ分別稱之為 平移參數(shù)和縮放參數(shù) 。這樣就保證了每一次數(shù)據(jù)經(jīng)過歸一化后還保留的有學習來的特征,同時又能完成歸一化這個操作,加速訓練。batchnorm是在輸入值和激活函數(shù)之間進行的,每次訓練給一個批量,然后計算批量的均值方差,但是在測試的時候可不是這樣,測試的時候每次只輸入一張圖片,這怎么計算批量的均值和方差,于是,在訓練的時候?qū)崿F(xiàn)計算好mean var測試的時候直接拿來用就可以了,不用計算均值和方差。后續(xù)待更新..............................
如果以上內(nèi)容沒有幫到您,歡迎電話聯(lián)系我們,或者聯(lián)系在線客服咨詢
只要一個電話
我們免費為您回電