首頁>Club>
2
回覆列表
  • 1 # 機器之心Pro

    去年上海科技大學 AI 實驗室開源了一份深度學習面試題集錦,它從數學基礎、經典機器學習演算法、深度學習演算法以及程式語言等方面提供了眾多面試題。此外,這一個專案是作者在準備 2018 年春招實習過程中的總結,內容以計算機書籍的學習筆記為主,在整理重點知識的同時會盡量保證知識的系統性。讀者們快來試試能闖過多少道春招面試題吧!

    專案地址:https://github.com/ShanghaiTechAIClub/DLInterview

    因為上科大的專案並沒有提供配套的答案,所以這些問題只能檢測自身知識掌握度。不過後文給出了另一個春招/秋招的複習資源專案,它包含計算機科學的大量精要知識與教程,這份複習資源目前已有超過 45K 的收藏量。此外,機器之心在上個月推出了一個年末答題小程式,中間也有許多涉及數學基礎與演算法的趣味題目,我們同樣把它加在其中。

    數學基礎相關

    1. 機率與數理統計

    一個袋子裡有 100 個黑球和 100 個白球,每次隨機拿出兩個球丟掉,如果丟掉的是不同顏色的球,則從其他地方補充一個黑球到袋子裡,如果顏色相同,則補充一個白球到袋子裡。問:最後一個球是黑球和白球的機率分別為多大?

    2. 智商題

    A 容器中有 4L 沙子,B 容器中有 4L 米,假設米和沙子密度一樣。有一個 C 容器是 300ml, 第一步,用 C 從 A 中舀 300ml 到 B 中,混合均勻,第二步,用 C 從 B 衝舀 300ml 到 A 中混合均勻。再重複第一步和第二步,問這四步之後,A 中的米和 B 中的沙子誰多?

    3. 答題挑戰賽

    在機器之心 AI 答題挑戰賽中我們對線性代數、機率論和最最佳化方法等數學基礎提了一些有意思的題目:

    1. 數學中哪一個子領域以隨機事件為研究物件?

    A. 機率論;B. 微積分;C. 數學分析;D. 線性代數

    2. 機率論中的貝葉斯法則與下面哪個元素無關?

    A. 事件機率;B. 自由機率;C. 條件機率;D. 聯合機率

    3. 在機率論中,中心極限定理與下列哪一項有關?

    A. 均勻分佈;B. 假設檢驗;C. 貝葉斯法則;D. 依概收斂

    4. 在機率論中,大數定律與下列哪一項無關?

    A. 數學方差;B. 條件機率;C. 獨立性;D. 數學期望

    5. 下面哪一個分佈不屬於連續型分佈?

    A. 指數分佈;B. 均勻分佈;C. 泊松分佈;D. 正態分佈

    以上題目答案:ABDBC

    6. 下面哪一項不是線性代數涉及的主題?

    A. 行列式;B. 矩陣微分;C. 代數幾何;D. 線性方程組求解

    7. 一階張量是什麼?

    A. 向量;B. 標量;C. 元組;D. 矩陣

    8. 列向量左乘行向量得出什麼?

    A. 矩陣;B. 標量;C. 向量;D. 向量

    9. 矩陣的秩(rank)是指什麼?

    A. 最大線性相關向量組數;B. 對角線元素之和;C. 最大線性無關向量組數;D. 對角元素之差

    10. 下面哪一項與雅可比(Jacobian)矩陣無關?

    A. 線性代數;B. 微積分;C.Carl Gustav Jacob Jacobi;D. 機率論

    以上題目答案:CAACD

    11. 下列與梯度下降無關的是?

    A. 最速下降法;B. 座標下降法;C. 一階導數;D. 隨機梯度下降法

    12. 下列會使用 Hessian 矩陣的最最佳化方法是?

    A. 擬牛頓法;B. 共軛梯度法;C. 梯度下降法;D. 牛頓法

    13. 一般機器學習中所說的牛頓法是什麼?

    A. 機率論方法;B. 最最佳化方法;C. 微積分方法;D. 物理學方法

    14. 在最最佳化方法中,共軛梯度法有什麼特點?

    A. 比梯度下降收斂快;B. 採用二階梯度;C. 沿梯度向下降;D. 比牛頓法收斂快

    以上題目答案:BDBA

    機器學習基礎相關

    1. 機率與統計相關

    最大似然估計和距離度量之間的關係是什麼?

    如何理解最小二乘與最大似然估計?

    2. 線性代數相關

    A 和 B 是兩個矩陣,求 tr(A"B),A"指 A 的轉置。(寫出來後,我沒有檢查 AB 是否 size 相同,他說應該考慮這種邊界條件,並說你考慮了 AB 是否空矩陣這是比較好的一點)。

    3. 經典 ML 模型

    3.1 SVM 模型

    簡單講一下 BP 是如何計算的?

    訓練樣本多,維度大就可以用核函式;如果樣本少,用核函式比較容易過擬合

    SVM 對 hard example 的應用很重要,先用一部分訓練集訓練一個模型,然後用剩下的一部分訓練集的一部分做測試,把出錯的再送入重新訓練,重複二三次,效果會比較好

    怎樣選擇 SVM 核函式?多項式核和 RBF 核的關係?

    說一說 LR 和 SVM 的損失函式。

    3.2 PCA

    講一下 PCA,為什麼是方差最大?

    如何推導 PCA,具體針對推導問很多為什麼。

    3.3 XGBoost

    瞭解提升方法嗎?你能解釋一下最基礎的 AdaBoost 演算法,以及提升樹演算法嗎?

    XGBoost 瞭解嗎?你能解釋一下 XGBoost 的核心思想及主要做法嗎?

    3.4 其它

    講一下生成模型和判別模型有什麼區別

    你覺得滴滴打車的拼車價是怎麼計算出來的,詳細描述。(路徑規劃,訂單預測之類的)

    你覺得滴滴打車的溢價,1.1 倍,1.2 倍,這些數值是怎麼計算出來的?(訂單預測,當前司機數量),目的是什麼?

    推導 BP,神經網路的求導及反向傳播過程是怎麼樣的?(可以用均方損失函式)

    4. 答題挑戰賽

    在機器之心 AI 答題挑戰賽中我們對經典機器學習方法提了一些有意思的題目:

    1. 如果沒有非線性啟用函式,10 層的神經網路和多少層的神經網路等效?

    A.1 層;B. 以上都對;C.10 層;D.5 層

    A. 歸一化;B. 正則化;C. 簡化;D. 量化

    3. 要獲得損失函式表面的曲率資訊,需要求解損失函式的什麼結構?

    A. 混淆矩陣;B.Jacobian 矩陣;C.Hessian 矩陣;D. 鄰接矩陣

    4. 不屬於降維方法的是?

    A.PCA;B. 自編碼器;C.t-SNE;D. 支援向量機

    5. 把引數分佈吸引到球形域是什麼正則化方法?

    A.L2;B.L1;C.L0;D.L∞

    以上題目答案:BBCDA

    深度學習基礎相關

    1. CNN

    CNN 為什麼可以在 CV/NLP/Speech 等領域都可以使用?

    什麼樣的資料適合 Deep learning?

    1×1 卷積的作用是什麼?

    給你幾個輸入張量與卷積核,你能手動算一下卷積得出的特徵圖嗎?

    一維卷積是怎樣做的,你能畫一下它大概圖示嗎?

    從 AlexNet、VGG-Net 到 ResNet 介紹一下主流的卷積神經網路架構。

    從 Inception-V1 到 Inception-ResNet,介紹一下 Inception 家族的發展以及不同之處。

    你能介紹一下目標檢測,及該任務主要使用的模型及方法嗎?

    2. 過擬合 (Overfitting)

    何為共線性,跟過擬合有啥關聯?如何解決共線性這種問題?

    多變數線性迴歸中,變數之間由於存在高度相關關係而使迴歸估計不準確。

    如何解決 Overfitting 問題,主要有哪些方法?

    3. 損失函式

    交叉熵和相對熵(KL 散度)之間的關係是什麼?KL 散度有哪些特性?

    你瞭解 SVM 常用的合頁損失函式嗎?它能不能用在深度模型上?

    你能解釋一下 L1 和 L2 正則化的原理嗎?這兩種正則化有什麼不同?

    為什麼神經網路的損失函式是非凸的,最最佳化非凸函式會遇到什麼問題?

    4. RNN

    RNN 有什麼缺陷以及 LSTM 是如何怎麼解決的?

    GRU 以及 Minimal GRU 都是什麼樣的,它們的執行機制以及精簡的門控都是哪些?

    你能用函式抽象表達出迴圈神經網路嗎?它與卷積神經網路的抽象表達有什麼不同?

    5. GAN

    介紹一下 GAN,講一講生成器和判別器以及他們的關係。

    原版生成對抗網路那個目標函式(極小極大博弈)能理解嗎?能不能解釋一下這個目標函式。

    WGAN 相比於 GAN 主要改進在哪裡,你能解釋一下 Wasserstein 距離?

    6. 其它

    深度學習是萬能的嗎?什麼地方不適用,如果給你一個任務,你如何選擇用深度學習還是傳統的如 SVM?

    深度學習的待學習的引數量和訓練樣本數量之間的關係是什麼樣的?

    什麼是梯度消失和爆炸,解釋一下它們形成的原因。

    為什麼梯度相反的方向是函式下降最快的方向?

    演算法與資料結構

    1. 二叉樹

    二叉樹之字形層次遍歷,(正反正反)。

    2. 連結串列

    原址:變換為奇數在前 偶數在後,相對順序不變。

    連結串列求和。

    3. 查詢

    4. 雜湊

    要實現一個雜湊表應該怎麼做(根據要雜湊的內容選擇合適的雜湊函式和衝突解決方案)。

    5. 排序

    一個 0-1 矩陣,每一排都是 0 在前 1 在後,問哪一排的 1 最多?(二分法)問有沒有更簡單的方法(每一排記錄當前的最左邊的 1 的位置,下一排的時候直接忽略右邊的)問時間複雜度,猜測是 O(m+n)。

    6. 搜尋

    描述迪傑斯特拉演算法。

    描述 dfs 和 bfs, 分別怎麼實現?(棧和佇列)。

    7. 動態規劃

    動態規劃是什麼, 動態規劃和帶記憶的遞迴有什麼區別?(自頂而下和自底而上)

    0-1 揹包問題的動態規劃遞迴式怎麼寫?

    三角數堆,只能往左下或者右下走,從堆頂到堆底和最小是多少。(dp)

    8. 其它

    若干個長度不同的陣列,求最小區間,讓每個陣列都有數字在這個區間內?

    斐波那契數列。

    描述 KMP 演算法。

    寫程式碼:兩個有序陣列的合併。

    程式語言相關問題

    1. Python

    一個 python 的 dict,按照 key-value 儲存,如何按照 value 排序。

    static 的類有什麼用。

    如何實現一個只能例項化一次的類。

    模板類是什麼?

    純虛擬函式和虛擬函式的區別是什麼?

    2. C++

    一個 dict,如果是 C++怎麼做?一個 map,怎麼按照 value 排序?

    看了這麼多題目,哪些會做哪些不會也就有一個明晰的瞭解。那麼如何為年後的春招做準備呢?2018 年中山大學鄭永川構建了一個準備秋招/春招的學習筆記:CS-Notes。該專案包含了計算機科學的大量精要知識與教程,目前該專案已經有超過 45K 的收藏量。

    CS-Notes 專案從基礎排序演算法到程式設計理念展示了計算機科學的應知應會,該專案對機器學習開發者及入門讀者也非常有用,例如 Linux 系統、面向物件的程式設計、Git 工具和程式碼可讀性等。這些筆記都是作者根據對各類書籍的理解,並記錄重要知識點而完成。

    專案地址:https://github.com/CyC2018/CS-Notes

    該專案的主體內容可分為 9 部分,其中演算法介紹了基礎的棧和佇列、並查集、排序和查詢等,作業系統介紹了現代計算機系統與 Linux 系統。其它如介紹了設計模式和基本思想的面向物件程式設計、世界上最先進的分散式版本控制系統 Git、以及 Java 和程式設計實踐等都有涉及。

    如下是該專案各類別的基本目錄與內容,因為機器學習可能會常用到面向物件的程式設計方法,因此我們在後面簡要介紹了這一章節中面向物件的基本思想。

    演算法

    劍指 Offer 題解(目錄根據原書第二版進行編排)

    Leetcode 題解(做了一個大致分類,並對每種分類題型的解題思路做了總結)

    演算法(排序、並查集、棧和佇列、紅黑樹、散列表)

    作業系統

    計算機作業系統(程序管理、記憶體管理、裝置管理、連結)

    Linux(基本實現原理以及基本操作)

    網路

    計算機網路(物理層、鏈路層、網路層、運輸層、應用層)

    HTTP(方法、狀態碼、Cookie、快取、連線管理、HTTPs、HTTP 2.0)

    Socket(I/O 模型、I/O 多路複用)

    面向物件

    設計模式(實現了 Gof 的 23 種設計模式)

    面向物件思想(三大原則(繼承、封裝、多型)、類圖、設計原則)

    資料庫

    資料庫系統原理(事務、鎖、隔離級別、MVCC、間隙鎖、正規化)

    SQL(SQL 基本語法)

    Leetcode-Database 題解(Leetcode 上資料庫題目的解題記錄)

    MySQL(儲存引擎、索引、查詢最佳化、切分、複製)

    Redis(五種資料型別、字典和跳躍表資料結構、使用場景、和 Memcache 的比較、淘汰策略、持久化、檔案事件的 Reactor 模式、複製)

    Java

    Java 基礎(不會涉及很多基本語法介紹,主要是一些實現原理以及關鍵特性)

    Java 容器(包含容器原始碼的分析)

    Java 虛擬機器(執行時資料區域、垃圾收集、類載入)

    Java 併發(執行緒使用方式、兩種互斥同步方法、執行緒協作、JUC、執行緒安全、記憶體模型、鎖最佳化)

    Java I/O(NIO 的原理以及例項)

    系統設計

    系統設計基礎(效能、伸縮性、擴充套件性、可用性、安全性)

    分散式(分散式鎖、分散式事務、CAP、BASE、Paxos、Raft)

    叢集(負載均衡、Session 管理)

    攻擊技術(XSS、CSRF、SQL 注入、DDoS)

    快取(快取特徵、快取位置、快取問題、資料分佈、一致性雜湊、LRU、CDN)

    訊息佇列(訊息處理模型、使用場景、可靠性)

    分散式問題分析(分散式事務、分散式鎖、分散式 Session、負載均衡)

    工具

    Git(一些 Git 的使用和概念)

    Docker(Docker 基本原理)

    構建工具(構建工具的基本概念、主流構建工具介紹)

    正則表示式(參考 正則表示式必知必會)

    編碼實踐

    程式碼可讀性(參考 編寫可讀程式碼的藝術)

    程式碼風格規範(Google 開源專案的程式碼風格規範)

    程式碼風格規範(Google 開源專案的程式碼風格規範)

  • 中秋節和大豐收的關聯?
  • 大清王朝康乾盛世,國泰民安,為何人口持續增長?