工作筆試面試經驗
1.關於複習。可以去網上找點你要面的崗位的面經,花半天時間去研究這些面經,研究面經主要是看基礎的東西主要會問哪些方面,然後按類別分一下,針對性的先把這些複習熟悉,基礎知識就那些,網絡,操作系統,語言,基本的算法這些,沒什麼太大的難度.
2.怎麼學習。大家都有自己的學習方法,怎麼學才能記得住,大家都知道,我想說的是大家在學一個東西之前一定先了解這個東西是爲什麼出現的,他的出現是爲了解決什麼問題,這個一定要搞明白,這樣的話學的會更快,理解的更透徹,面試的時候在回答這一相關問題時就可以從這一點切入。
3.要學會分析。這一點很重要,很容易讓你在面試的時候掌握主動權。打個比方,你面試在回答一個問題的時候,能解決這個問題的方法可能有很多,同一個方法的變種也會有很多,那麼你有沒有想過這些方法爲什麼會存在,而且還使用的比較頻繁,所以我們就要學會着去分析,這些方法之間的性能差異,舉個簡單栗子,快排一定會比冒泡快嗎,肯定是不對的,爲什麼不對,大家可以試着去實踐,寫來看看。就是類似的問題,我們面試要達到什麼程度,問一個問題,從頭到尾差不多能講20分鐘。可以不斷把相似的東西放進來給他對比着講,把這些技術試用的場景給他分析出來,這樣面試效果就非常好。
4.算法題,筆試。這種真的沒辦法,就是刷題,多總結,多刷一下一維dp,二維dp,dfs,bfs,回溯,剪枝,數據結構相關的,常見排序,搜索算法的應用,算法題我總結的經驗就是,刷着刷着就入門了,筆試大家可以想想辦法呀,給你個眼神,自己體會。
參考:https://www.nowcoder.com/discuss/217469?type=7
深度學習面試題(模型評估方法、基本方法、優化方法、深度學習基礎、CNN、RNN)
模型評估方法例題
- Accuracy作爲指標有哪些侷限性?
https://blog.csdn.net/qq_29678299/article/details/88732290
前提問題分析:
Hulu的奢侈品用戶廣告主們希望把廣告定向投放給奢侈品用戶。Hulu通過第三方數據平臺(DMP)拿到了一部分奢侈品用戶的數據,並以此爲訓練集合測試集,訓練和測試奢侈品用戶的分類模型。該模型的分類準確率超過了95%,但在實際廣告投放過程中,該模型還是把大部分廣告投給了非奢侈品用戶,還可能是什麼原因造成的?
準確率的侷限性
準確率是指分類正確的樣本佔總樣本的比例:
Accuarcy=
Nc是正確分類的樣本個數,Nt是總樣本的個數
準確率是樣本分類問題中最簡單也是最直觀的評價指標。但存在明顯的缺陷。
比如負樣本佔99%時,分類器把所有樣本都預測爲負樣本也可以獲得99%的準確率。所以,當不同類別的樣本比例非常不均衡時。佔比大的類別往往成爲影響準確率的最主要因素。
明確了這一點,這個問題就解決了。顯然奢侈品用戶只佔hulu會員的一小部分,雖然模型的整體分類準確率高,但不代表對奢侈品用戶分類準確率也很高,在線上投放過程中,我們之後對模型判定的奢侈品用戶進行投放,因此,對奢侈品用戶 判定的準確率不夠高就放大了。爲了解決這個問題,可以使用更爲有效的平均準確率(每個類別下的樣本準確率的算術平均)作爲模型評估的指標。
- ROC曲線和PR曲線各是什麼?
https://blog.csdn.net/qq_27575895/article/details/81476871
- 編程實現AUC的計算,並指出複雜度?
- AUC指標有什麼特點?放縮結果對AUC是否有影響?
- 餘弦距離與歐式距離有什麼特點?
機器學習
https://www.jianshu.com/p/b9e9958ba50c
-
SVM!
參考資料支持向量機通俗導論(理解SVM的三層境界)
參考資料支持向量機(SVM)從入門到放棄再到掌握
支持向量機(Support Vector Machine)是Cortes和Vapnik於1995年首先提出的。
1.支持向量機主要是解決什麼問題的?
SVM主要用於解決分類問題,它的目的是學會一個分類函數或分類模型(或者叫做分類器) 。
2.應用場景
支持向量機本身便是一種監督式學習的方法,它廣泛地應用於統計分類以及迴歸分析中。
3.分類性質
通俗來講,它是一種二類分類模型,其基本模型定義爲特徵空間上的間隔最大的線性分類器,即支持向量機的學習策略便是間隔最大化,最終可轉化爲一個凸二次規劃問題的求解。
以二維平面爲例,如下圖所示,二維空間中有粉色和藍色的點,我們想用一條線來將他們分隔開,也就是圖中紅色這條直線,這條直線就是一個分類器。
此時我們稱這些數據是線性可分的。
在一維空間中,分類器是一個點;在二維空間中,分類器是一條直線;在三維空間中,分類器是一個平面;在多維空間中,分類器是一個超平面。
5.分類中會有許多個線性分類函數都滿足要求,該如何選擇?
在多維空間中,能夠劃分樣本集的超平面有許多個,而我們要選擇的,就是劃分間隔最大的,也就是說這個超平面離兩類樣本都足夠遠,使得“間隔”最大。
7.何爲支持向量(Support Vector)
支持向量是一些點。如下圖所示,黑色的實線是劃分數據集最大間隔的超平面,存在這些點(紫色虛線和粉色虛線上的紅藍點)到超平面的距離爲幾何間隔,則這些點就是支持向量。
8.線性不可分
我們知道,數據是線性可分的是十分理想的情況,我們通常用到的數據都是線性不可分的。
再來看一下我們的目標函數:
這樣問題就轉變成了一個凸優化問題,目標函數是二次的,約束條件也是線性的,因此是一個凸二次規劃問題,因此這個問題可以用任何現成的QP (Quadratic Programming) 的優化包進行求解,歸結爲一句話即是:在一定的約束條件下,目標最優,損失最小。然而,能解決是能解決,解決起來的代價會非常大。由於它有特殊結構,Lagrange Duality 變換到對偶變量(dual variable) 的優化問題之後,可以找到一種更加有效的方法來進行求解,而且通常情況下這種方法比直接使用通用的QP 優化包進行優化要高效得多。
-
交叉熵損失函數
參考CSDN簡單的交叉熵損失函數,你真的懂了嗎?
1.交叉熵公式
4.對於多分類問題
上面我們討論了,對於二分類問題,我們使用sigmoid函數作爲概率計算函數,Sigmoid函數的表達式和圖形如下所示:
那麼對於多分類任務,該怎麼辦呢。
這時候要使用的是Softmax函數。Softmax函數的表達式如下所示:
5.補充
Sigmoid和Softmax並不能作爲損失函數,與損失函數沒有關係,只是在分類任務中常常使用Softmax輸出+交叉熵損失函數的求導。
-
LR
Logistic Regression邏輯迴歸
原文CSDN邏輯迴歸(Logistic Regression, LR)簡介
分類和迴歸是機器學習可以解決兩大主要問題,從預測值的類型上看,連續變量預測的定量輸出稱爲迴歸;離散變量預測的定性輸出稱爲分類。
線性迴歸(Linear Regression)
1.目標
在多維空間,線性迴歸表示爲
利用梯度下降法,逐步最小化損失函數,找準梯度下降方向,即偏導數的反方向,每次前進一小步,直到收斂:
迭代更新的方式有多種
批量梯度下降(batch gradient descent),也就是是梯度下降法最原始的形式,對全部的訓練數據求得誤差後再對θθ進行更新,優點是每步都趨向全局最優解;缺點是對於大量數據,由於每步要計算整體數據,訓練過程慢;
隨機梯度下降(stochastic gradient descent),每一步隨機選擇一個樣本對θθ進行更新,優點是訓練速度快;缺點是每次的前進方向不好確定,容易陷入局部最優;
微型批量梯度下降(mini-batch gradient descent),每步選擇一小批數據進行批量梯度下降更新θθ,屬於批量梯度下降和隨機梯度下降的一種折中,非常適合並行處理。
除了梯度下降法,還有其他的一些用來求代價函數最小時參數θ的方法,如牛頓法、共軛梯度法(Conjugate Gradietn)、局部優化法(BFGS)和有限內存局部優化法(LBFGS)等。
-
SVM和LR之間的比較
原文:[機器學習筆記] 支持向量機SVM 和邏輯迴歸LR的異同
LR與SVM的異同
1.相同點
①都是線性分類器。本質上都是求一個最佳分類超平面。
②都是監督學習算法。
③都是判別模型。通過決策函數,判別輸入特徵之間的差別來進行分類。
常見的判別模型有:KNN、SVM、LR。
常見的生成模型有:樸素貝葉斯,隱馬爾可夫模型。
2.不同點
①優化目標不同
LR的損失函數是交叉熵
-
邏輯迴歸和線性迴歸之間的比較
線性迴歸用來做預測,LR用來做分類。
線性迴歸是來擬合函數,LR是來預測函數。
線性迴歸用最小二乘法來計算參數,LR用最大似然估計來計算參數。
線性迴歸更容易受到異常值的影響,而LR對異常值有較好的穩定性。
-
生成模型和判別模型基本形式
生成式:樸素貝葉斯、HMM、Gaussians、馬爾科夫隨機場
判別式:LR,SVM,神經網絡,CRF,Boosting
-
分類算法列一下有多少種?
單一的分類方法主要包括:LR邏輯迴歸,SVM支持向量機,DT決策樹、NB樸素貝葉斯、NN人工神經網絡、K-近鄰
集成學習算法:基於Bagging和Boosting算法思想,RF隨機森林, GBDT,Adaboost, XGboost。
-
XGBoost和GBDT的區別
機器學習算法總結(四)——GBDT與XGBOOST
1)將樹模型的複雜度加入到正則項中,來避免過擬合,因此泛化性能會由於GBDT。
2)損失函數是用泰勒展開式展開的,同時用到了一階導和二階導,可以加快優化速度。
3)和GBDT只支持CART作爲基分類器之外,還支持線性分類器,在使用線性分類器的時候可以使用L1,L2正則化。
4)引進了特徵子採樣,像RandomForest那樣,這種方法既能降低過擬合,還能減少計算。
5)在尋找最佳分割點時,考慮到傳統的貪心算法效率較低,實現了一種近似貪心算法,用來加速和減小內存消耗,除此之外還考慮了稀疏數據集和缺失值的處理,對於特徵的值有缺失的樣本,XGBoost依然能自動找到其要分裂的方向。
6)XGBoost支持並行處理,XGBoost的並行不是在模型上的並行,而是在特徵上的並行,將特徵列排序後以block的形式存儲在內存中,在後面的迭代中重複使用這個結構。這個block也使得並行化成爲了可能,其次在進行節點分裂時,計算每個特徵的增益,最終選擇增益最大的那個特徵去做分割,那麼各個特徵的增益計算就可以開多線程進行。
數據不平衡怎麼做?
https://www.jianshu.com/p/53bffd95d6f5
https://www.toutiao.com/a6638156367561507341/
(1)利用GAN生成
(2)利用欠採樣和過採樣
欠採樣使用場景:
常常當數據量足夠多時使用這個方法。通過在多數類樣本中隨機選擇和少數類樣本相同數量的樣本。
可多次放回地抽取不同的訓練集,訓練不同的分類器進行組合,會減少信息的損失。
過採樣使用場景:
常常當數據量不足時會使用這個方法。通過重複、bootstrap或SMOTE數據合成等方法生成新的數據。運氣好的話能分對很多,否則會分錯很多。可在每次生成新數據點的時候加入輕微的隨機擾動。
Note:
有時,結合使用欠採樣和過採樣也會有很好的效果。採樣的優點是簡單;缺點是過採樣會反覆出現一些樣本,可能會出現一定程度的過擬合;欠採樣會丟失數據,只學到了總體模式的一部分。
爲什麼引入非線性激活函數?
https://blog.csdn.net/qq_28778507/article/details/84136810
https://blog.csdn.net/e01528/article/details/89313518
介紹faster rcnn的流程以及損失函數,爲什麼這樣設計損失函數
論文地址:
Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks
Python實現:
https://github.com/rbgirshick/py-faster-rcnn
Pooling層的作用主要有兩個
https://www.jianshu.com/p/9db81f1bb439
- 引入invariance,包括translation-invariance,rotation-invariance,scale-invariance。
- 完成feature map的聚合,實現數據降維,防止過擬合。
- 介紹yolo的流程
- 介紹resnet,resnet爲何效果會更好,爲什麼要有殘差塊
- 介紹batch normalization
- 說一說常見的正則化手段,L1和L2正則化的不同
- 了不瞭解PCA,SVM ,adaboost
- 給一張散點圖,怎麼做方差最大的迴歸
- 智力題:怎麼用篩子搖出七個均勻分佈的數字
- 編程題:求正整數(浮點數)的平方根
- CNN爲什麼要做卷積,爲什麼要有步長,爲什麼不用全連接層,它的反向傳播是什麼
- 說一下交叉熵損失函數,什麼是交叉熵
- faster rcnn中爲什麼會有anchor,沒有anchor會怎樣
- faster rcnn中ROI pooling層有什麼不足,什麼是ROI align,什麼是雙線性插值
- 二叉樹的同構子樹
- 怎麼處理樣本的不均衡,尤其是各個圖像檢測模型中
- 求CNN中的參數個數
- tensorflow的流程,讀取數據的方式,調用的庫
- 圖象圖形學相關知識,eg(邊緣檢測)
- SVM和LR的區別,SVM損失函數的約束條件
- 機器學習XGboost,LGB
- BN層學習參數只是爲了還原原有分佈麼
- 人臉識別的各種loss:centor loss ;cosface;arcface
- nonlocal
- SEnet
- SKnet
- attention
- unet;HRnet
- 參數初始化方式,爲何不能初始化爲一樣的,爲何不能初始化爲0
- 反捲積:C++實現 ;deeplab v1 v2的改進
- nms 代碼實現;soft nms
- tensorflow session 流程
- inception系列
- xception系列
- resnet1;resent2;resnext
- mobilenet系列,shufflenet
- 反向傳播的過程
百度/拼多多/優酷/順豐/作業幫/巨人網絡
方向:ML/CV/NLP
- mIoU 如何計算?
- 介紹一下反捲積的操作
- 有哪些聚類算法,各有什麼優缺點?
- 聚類算法的參數怎麼調?
- inception裏如何減少計算量?
- LightGBM和XGBoost,GBDT的區別
- 梯度下降法,牛頓法和擬牛頓法的區別
- 介紹一下線性迴歸和邏輯迴歸的損失函數
- 詞性標註(序列標註問題),分詞一般你是怎麼分的,用什麼工具。
C++面試題
1. c++中list和vector的區別
vector
vector與數組類似,擁有一段連續的內存空間,並且起始地址不變。便於隨機訪問,時間複雜度爲O(1),但因爲內存空間是連續的,所以在進入插入和刪除操作時,會造成內存塊的拷貝,時間複雜度爲O(n)。
此外,當數組內存空間不足,會採取擴容,通過重新申請一塊更大的內存空間進行內存拷貝。
List
list底層是由雙向鏈表實現的,因此內存空間不是連續的。根據鏈表的實現原理,List查詢效率較低,時間複雜度爲O(n),但插入和刪除效率較高。只需要在插入的地方更改指針的指向即可,不用移動數據。