數據預處理
1、深度學習中的數據預處理有哪些方式?
1、 數據歸一化。包括高斯歸一化、最大最小值歸一化等。
2、 白化。許多深度學習算法都依賴於白化來獲得更好的特征。所謂的白化,以PCA白化來說,就是對PCA降維后的數據的每一列除以其特征值的根號。
2、為什么需要對數據進行歸一化處理,歸一化的方式有哪些?
1. 為了后面數據處理的方便,歸一化的確可以避免一些不必要的數值問題。
2. 為了程序運行時收斂加快。(如果)
3. 同一量綱。樣本數據的評價標准不一樣,需要對其量綱化,統一評價標准。這算是應用層面的需求。
4. 避免神經元飽和。啥意思?就是當神經元的激活在接近 0 或者 1 時會飽和,在這些區域,梯度幾乎為 0,這樣,在反向傳播過程中,局部梯度就會接近 0,這會有效地“殺死”梯度。
5. 保證輸出數據中數值小的不被吞食。
詳細請參考:https://blog.csdn.net/code_lr/article/details/51438649
歸一化的方式主要有:線性歸一化、標准差歸一化、非線性歸一化
線性歸一化:
標准差歸一化:
非線性歸一化:
適用范圍為:經常用在數據分化比較大的場景,有些數值很大,有些很小。通過一些數學函數,將原始值進行映射。該方法包括指數,正切等。
3、數據增強的方式有哪些?
翻轉、旋轉、縮放、裁剪、平移、尺度變換、添加噪聲、色彩抖動、亮度調整、對比度增強。
注意:在數據量比較少的情況下,數據增強的方式對模型效果的提升(泛化能力)很有效。
數據增強可以分為兩類,一類是離線增強,一類是在線增強。
離線增強:直接對數據集進行處理,數據的數目會變成增強因子乘以原數據集的數目,這種方法常常用於數據集很小的時候。
在線增強:這種增強的方法用於,獲得 batch 數據之后,然后對這個 batch 的數據進行增強,如旋轉、平移、翻折等相應的變化,由於有些數據集不能接受線性級別的增長,這種方法長用於大的數據集,很多機器學習框架已經支持了這種數據增強方式,並且可以使用 GPU 優化計算。
物體檢測中的數據增強:其實和正常的數據增強一樣的,數據本身增強后,對box進行一定的平移旋轉即可。
4、深度學習如何解決數據樣本不均衡?你在項目中是怎么解決的?
1、數據增強
2、使用Focal loss
深度學習中的名詞解釋
1、奧卡姆剃刀的思想?
在所有可能選擇的模型中,我們應該選擇能夠很好地解釋已知數據並且十分簡單的模型。
換句話說,同等效果下,選擇較為簡單的模型。
奧卡姆剃刀思想用在哪里呢?其實就是深度學習中的正則化。
2、梯度消失和梯度爆炸?
兩種情況下梯度消失經常出現,一是在深層網絡中,二是采用了不合適的損失函數,比如sigmoid。
梯度爆炸一般出現在深層網絡和權值初始化值太大的情況下。
由鏈式法則可知,當采用sigmoid這類函數時,深層網絡參數更新時,往往會出現梯度消失現象。當初始參數大時,也會出現梯度爆炸。
詳細請參考:https://blog.csdn.net/qq_25737169/article/details/78847691
3、鞍點、局部最小值和全局最小值?如何區分它們?如何跳出鞍點和局部最小值?
鞍點和局部極小值、全局最小值的梯度都相等,均為0,不同在於在鞍點附近Hessian矩陣是不定的(行列式小於0,行列式必須是方陣),而在局部極小值附件的Hessian矩陣是正定的。
關於正定矩陣,是特征值都不小於0的實對稱矩陣,關於負定矩陣是特征值都小於0的實對稱矩陣,關於不定矩陣是特征值既有大於0又有小於0的值。
跳出鞍點或者局部最小點一般有以下幾種方式:
1、 以多組不同參數值初始化多個神經網絡,按標准方法訓練后,取其中誤差最小的解作為最終參數。這相當於從多個不同的初始點開始搜索,這樣就可能陷入不同的局部極小,從中進行選擇有可能獲得更接近全局最小的結果。
2、 使用“模擬退火”技術。模擬退火在每一步都以一定的概率接受比當前解更差的結果,從而有助於“跳出”局部極小。在每步迭代過程中,接受“次優解”的概率要隨着時間的推移而逐漸降低,從而保證算法穩定。
3、 使用隨機梯度下降,與標准梯度下降法精確計算梯度不同,隨機梯度下降法在計算梯度時加入了隨機因素。於是,即便現如局部極小點,它計算出的梯度仍可能不為零,這樣就有機會跳出局部極小繼續搜索。
4、深度學習中的超參數有哪些?
超參數 : 在機器學習的上下文中,超參數是在開始學習過程之前設置值的參數,而不是通過訓練得到的參數數據。通常情況下,需要對超參數進行優化,給學習機選擇一組最優超參數,以提高學習的性能和效果。
超參數指的是會影響到最終參數的參數,主要包括卷積核大小和數量、是否采用BN和池化操作、遷移學習、參數的初始化方式、學習率、損失函數、激活函數、是否采用自適應學習率、優化器的選擇等等。
5、如何尋找超參數的最優值?
在使用機器學習算法時,總有一些難調的超參數。例如權重衰減大小,高斯核寬度等等。這些參數需要人為設置,設置的值對結果產生較大影響。常見設置超參數的方法有:
1. 猜測和檢查:根據經驗或直覺,選擇參數,一直迭代。
2. 網格搜索:讓計算機嘗試在一定范圍內均勻分布的一組值。
3. 隨機搜索:讓計算機隨機挑選一組值。
4. 貝葉斯優化:使用貝葉斯優化超參數,會遇到貝葉斯優化算法本身就需要很多的參數的困難。
5. MITIE方法,好初始猜測的前提下進行局部優化。它使用BOBYQA算法,並有一個精心選擇的起始點。由於BOBYQA只尋找最近的局部最優解,所以這個方法是否成功很大程度上取決於是否有一個好的起點。在MITIE的情況下,我們知道一個好的起點,但這不是一個普遍的解決方案,因為通常你不會知道好的起點在哪里。從好的方面來說,這種方法非常適合尋找局部最優解。稍后我會再討論這一點。
6. 最新提出的LIPO的全局優化方法。這個方法沒有參數,而且經驗證比隨機搜索方法好。
6、訓練集、驗證集、測試集和交叉驗證
一般來說,訓練集、驗證集、測試集對中型數據來說,一般划分的比例為6:2:2,但是對於特別大的數據集,比如100w的級別,這個時候,完全沒有必要再按照6:2:2的方式,可以加大訓練量,使模型得到更充足的訓練,此時可以調整為8:1:1的比例,甚至給驗證集和測試集更小的比例。
K折交叉驗證:把數據分成K份,每次拿出一份作為驗證集,剩下k-1份作為訓練集,重復K次。最后平均K次的結果,作為誤差評估的結果。與前兩種方法對比,只需要計算k次,大大減小算法復雜度,被廣泛應用。一般情況將K折交叉驗證用於模型調優,找到使得模型泛化性能最優的超參值。找到后,在全部訓練集上重新訓練模型,並使用獨立測試集對模型性能做出最終評價。
如果訓練數據集相對較小,則增大k值。
增大k值,在每次迭代過程中將會有更多的數據用於模型訓練,能夠得到最小偏差,同時算法時間延長。且訓練塊間高度相似,導致評價結果方差較高。
如果訓練集相對較大,則減小k值。
減小k值,降低模型在不同的數據塊上進行重復擬合的性能評估的計算成本,在平均性能的基礎上獲得模型的准確評估。
7、線性分類器的三個最佳准則
感知准則函數、支持向量機、Fisher准則。
8、KL散度和JS散度
KL散度又稱之為KL距離,相對熵:
當P(X)和Q(X)的相似度越高,KL散度越小。
KL散度主要有兩個性質:
(1) 不對稱性
盡管KL散度從直觀上是個度量或距離函數,但它並不是一個真正的度量或者距離,因為它不具有對稱性,即
(2) 非負性
相對熵的值是非負值,即
JS散度
JS散度也稱JS距離,是KL散度的一種變形。
轉自:https://www.zhihu.com/people/18301926762/posts?page=14
https://zhuanlan.zhihu.com/p/97311641