面試題匯總---深度學習(圖像識別,NLP內容)

文章目錄

    • 1.基本概念
      • 1.1 為什么神經網絡中深度網絡的表現比廣度網絡表現好?
      • 1.2 推導BP算法
      • 1.3 什么是梯度消失和梯度爆炸?
      • 1.4 常用的激活函數有哪些?
      • 1.5 常用的參數更新方法有哪些?
      • 1.6 解決過擬合的方法?
        • 數據層面
        • 模型層面
      • 1.7 對卡在極小值的處理方法?
      • 1.8 為何使用Batch Normalization?
      • 1.9 學習的本質是什么?
    • 2.卷積神經網絡
      • 2.1 1*1卷積核的作用有哪些?
      • 2.2 CNN的思想是什么?
      • 2.3 filter尺寸的選擇
      • 2. 4 輸出尺寸計算公式
      • 2. 5 pooling池化的作用
      • 2.6 常用的CNN模型
    • 3.循環神經網絡
      • 3.1 RNN的原理
      • 3.2 RNN、LSTM、GRU區別?
      • 3.3 LSTM防止梯度彌散和爆炸
      • 3.4 word2vec思想
    • 4.其他
      • 4.1 簡述一下GAN網絡的原理?
      • 4.2 GAN的表達式
      • 4.3 GAN的實際計算方法

1.基本概念

1.1 為什么神經網絡中深度網絡的表現比廣度網絡表現好?

淺層結構算法:其局限性在于有限樣本和計算單元情況下對復雜函數的表示能力有限,針對復雜分類問題其泛化能力受到一定制約。深度學習可通過學習一種深層非線性網絡結構,實現復雜函數逼近,表征輸入數據分布式表示,并展現了強大的從少數樣本集中學習數據集本質特征的能力。(多層的好處是可以用較少的參數表示復雜的函數)
深度學習的實質,是通過構建具有很多隱層的機器學習模型和海量的訓練數據,來學習更有用的特征,從而最終提升分類或預測的準確性。
淺層神經網絡可以模擬任何函數,但數據量的代價是無法接受的。深層解決了這個問題。相比淺層神經網絡,深層神經網絡可以用更少的數據量來學到更好的擬合。深層的前提是:空間中的元素可以由迭代發展而來的。

1.2 推導BP算法

誤差反向傳播算法簡稱反向傳播算法(即BP算法)。使用反向傳播算法的多層感知器又稱為BP神經網絡。BP算法是一個迭代算法,它的基本思想為:(1)先計算每一層的狀態和激活值,直到最后一層(即信號是前向傳播的);(2)計算每一層的誤差,誤差的計算過程是從最后一層向前推進的(這就是反向傳播算法名字的由來);(3)更新參數(目標是誤差變小)。迭代前面兩個步驟,直到滿足停止準則(比如相鄰兩次迭代的誤差的差別很小)。
參考博客

1.3 什么是梯度消失和梯度爆炸?

梯度消失:這本質上是由于激活函數的選擇導致的, 最簡單的sigmoid函數為例,在函數的兩端梯度求導結果非常小(飽和區),導致后向傳播過程中由于多次用到激活函數的導數值使得整體的乘積梯度結果變得越來越小,也就出現了梯度消失的現象。

梯度爆炸:同理,出現在激活函數處在激活區,而且權重W過大的情況下。但是梯度爆炸不如梯度消失出現的機會多

1.4 常用的激活函數有哪些?

在這里插入圖片描述
在這里插入圖片描述

1.5 常用的參數更新方法有哪些?

參考博客
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

1.6 解決過擬合的方法?

數據層面

  • 采集更多的數據
  • 數據增強:多用于圖像方面

模型層面

dropout, regularization, batch normalizatin

  • dropout只在訓練的時候用,讓一部分神經元隨機失活。
  • Batch normalization是為了讓輸出都是單位高斯激活,方法是在連接和激活函數之間加入BatchNorm層,計算每個特征的均值和方差進行規則化。

1.7 對卡在極小值的處理方法?

  • 1.調節步伐:調節學習速率,使每一次的更新“步伐”不同;
  • 2.優化起點:合理初始化權重(weights initialization)、預訓練網絡(pre-train),使網絡獲得一個較好的“起始點”,如最右側的起始點就比最左側的起始點要好。常用方法有:高斯分布初始權重(Gaussian distribution)、均勻分布初始權重(Uniform distribution)、Glorot 初始權重、He初始權、稀疏矩陣初始權重(sparse matrix)。

1.8 為何使用Batch Normalization?

參考博客
若用多個梯度的均值來更新權重的批量梯度下降法可以用相對少的訓練次數遍歷完整個訓練集,其次可以使更新的方向更加貼合整個訓練集,避免單個噪音樣本使網絡更新到錯誤方向。然而也正是因為平均了多個樣本的梯度,許多樣本對神經網絡的貢獻就被其他樣本平均掉了,相當于在每個epoch中,訓練集的樣本數被縮小了。batch中每個樣本的差異性越大,這種弊端就越嚴重。一般的解決方法就是在每次訓練完一個epoch后,將訓練集中樣本的順序打亂再訓練另一個epoch,不斷反復。這樣重新組成的batch中的樣本梯度的平均值就會與上一個epoch的不同。而這顯然增加了訓練的時間。同時因為沒辦法保證每次更新的方向都貼合整個訓練集的大方向,只能使用較小的學習速率。這意味著訓練過程中,一部分steps對網絡最終的更新起到了促進,一部分steps對網絡最終的更新造成了干擾,這樣“磕磕碰碰”無數個epoch后才能達到較為滿意的結果。

1.9 學習的本質是什么?

將變體拆分成因素和知識(Disentangle Factors of Variation)

2.卷積神經網絡

2.1 1*1卷積核的作用有哪些?

參考博客

  • 1.實現跨通道的交互和信息整合
  • 2.進行卷積核通道數的降維和升維

2.2 CNN的思想是什么?

改變全連接為局部連接,這是由于圖片的特殊性造成的(圖像的一部分的統計特性與其他部分是一樣的),通過局部連接和參數共享大范圍的減少參數值。可以通過使用多個filter來提取圖片的不同特征(多卷積核)。

2.3 filter尺寸的選擇

通常尺寸多為奇數(1,3,5,7)

通常使用多個小的卷積核效果比使用少量的大的卷積核要好。

2. 4 輸出尺寸計算公式

參考博客
輸出尺寸=(N - F +padding*2)/stride + 1

步長可以自由選擇通過補零的方式來實現連接。
Valid卷積意味著不填充,same是填充方式。

總結:padding = “Valid”,N = [(W-F+2P)/S]+1,這里表示的是向下取整再加1
padding = “same”,N = [W/S],這里表示向上取整

2. 5 pooling池化的作用

雖然通過.卷積的方式可以大范圍的減少輸出尺寸(特征數),但是依然很難計算而且很容易過擬合,所以依然利用圖片的靜態特性通過池化的方式進一步減少尺寸。

可以認為卷積層是特征的生成,pooling層是特征的選擇。

2.6 常用的CNN模型

參考博客
在這里插入圖片描述

3.循環神經網絡

3.1 RNN的原理

在普通的全連接網絡或CNN中,每層神經元的信號只能向上一層傳播,樣本的處理在各個時刻獨立,因此又被成為前向神經網絡(Feed-forward+Neural+Networks)。而在RNN中,神經元的輸出可以在下一個時間戳直接作用到自身,即第i層神經元在m時刻的輸入,除了(i-1)層神經元在該時刻的輸出外,還包括其自身在(m-1)時刻的輸出。所以叫循環神經網絡

3.2 RNN、LSTM、GRU區別?

在這里插入圖片描述

3.3 LSTM防止梯度彌散和爆炸

LSTM用加和的方式取代了乘積,使得很難出現梯度彌散。但是相應的更大的幾率會出現梯度爆炸,但是可以通過給梯度加門限解決這一問題。

3.4 word2vec思想

這個也就是Word Embedding,是一種高效的從原始語料中學習字詞空間向量的預測模型。分為CBOW(Continous Bag of Words)和Skip-Gram兩種形式。其中CBOW是從原始語句推測目標詞匯,而Skip-Gram相反。CBOW可以用于小語料庫,Skip-Gram用于大語料庫。具體的就不是很會了。

4.其他

4.1 簡述一下GAN網絡的原理?

GAN結合了生成模型和判別模型,相當于矛與盾的撞擊。生成模型負責生成最好的數據騙過判別模型,而判別模型負責識別出哪些是真的哪些是生成模型生成的。但是這些只是在了解了GAN之后才體會到的,但是為什么這樣會有效呢?

假設我們有分布Pdata(x),我們希望能建立一個生成模型來模擬真實的數據分布,假設生成模型為Pg(x;θθ ),我們的目的是求解θθ 的值,通常我們都是用最大似然估計。但是現在的問題是由于我們相用NN來模擬Pdata(x),但是我們很難求解似然函數,因為我們沒辦法寫出生成模型的具體表達形式,于是才有了GAN,也就是用判別模型來代替求解最大似然的過程。

在最理想的狀態下,G可以生成足以“以假亂真”的圖片G(z)。對于D來說,它難以判定G生成的圖片究竟是不是真實的,因此D(G(z)) = 0.5。這樣我們的目的就達成了:我們得到了一個生成式的模型G,它可以用來生成圖片。

4.2 GAN的表達式

通過分析GAN的表達可以看出本質上就是一個minmax問題。其中V(D, G)可以看成是生成模型和判別模型的差異,而minmaxD說的是最大的差異越小越好。這種度量差異的方式實際上叫做Jensen-Shannon divergence。

4.3 GAN的實際計算方法

因為我們不可能有Pdata(x)的分布,所以我們實際中都是用采樣的方式來計算差異(也就是積分變求和)。具體實現過程如下:

有幾個關鍵點:判別方程訓練K次,而生成模型只需要每次迭代訓練一次,先最大化(梯度上升)再最小化(梯度下降)。

但是實際計算時V的后面一項在D(x)很小的情況下由于log函數的原因會導致更新很慢,所以實際中通常將后一項的log(1-D(x))變為-logD(x)。

實際計算的時候還發現不論生成器設計的多好,判別器總是能判斷出真假,也就是loss幾乎都是0,這可能是因為抽樣造成的,生成數據與真實數據的交集過小,無論生成模型多好,判別模型也能分辨出來。解決方法有兩個:1、用WGAN 2、引入隨時間減少的噪聲

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445117.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux-2.6.25 TCPIP函數調用大致流程

Linux-2.6.25 TCPIP函數調用大致流程學習目的,隨手筆記。函數和文字說明會不斷補充更新。Changelog2008.10.08 最近找工作忙。暫時緩緩插口層系統調用sendsys_sendsys_sendtosendtosys_sendtosock_sendmsgsendmsgsys_sendmsgsock_sendmsgwritesys_writevfs_write…

Python(28)-文件,os模塊

文件1. 文件2. 文件的基本操作3. 讀取文件open()3.1 文件指針: 標記從哪一個位置開始讀取數據.3.2 文件的打開方式mode3.3 文件按行讀取3.3.1 readline()3.3.2 readlines()4.文件輸出f.write(),print()5.文件復制5.1 小文件復制(搬家)5.2 大文件復制&…

IOCP的程序

C代碼 #include <winsock2.h> #include <mswsock.h> #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <assert.h> #include "vld.h" #pragma message("automatic link to ws2_32.lib and…

PaperNotes(3)-圖像分割-RCNN-FCN-Boxsup

圖像分割算法對比小結1.{基本概念}2.{R-CNN}2.1R-CNN 網絡結構選擇性搜索算法為什么選擇SVM作分類器邊框回歸2.2{R-CNN 訓練}2.3{R-CNN實驗結果}2.4{R-CNN語義分割}2.5{補充材料}2.5.1{R-CNN建議區域放縮}2.5.2{IOU閾值設置不一樣的原因}2.5.3{Bounding-box回歸修正}2.6{R-CNN存…

Python模塊(3)--PIL 簡易使用教程

PIL模塊-用與記1.圖片導入Image.open()2.圖像顯示.show()4.查看圖片屬性.format,.size,.mode3.圖像格式轉換.convert()4.圖像模式“L”&#xff0c;“RGB”,"CYMK"5. 圖片旋轉.rotate()旋轉方式1&#xff1a;旋轉不擴展旋轉方式2&#xff1a;旋轉擴展旋轉方式3&#…

日志級別 debug info warn eirror fatal

日志級別 debug info warn eirror fatal 軟件中總免不了要使用諸如 Log4net, Log4j, Tracer 等東東來寫日志&#xff0c;不管用什么&#xff0c;這些東東大多是大同小異的&#xff0c;一般都提供了這樣5個日志級別&#xff1a; Debug Info Warn Error Fatal一個等級比一個高&…

輸入輸出系統

I/O設備&#xff1a;輸入輸出和存儲功能的設備 I/O設備的分類 按傳輸的速度&#xff1a; 低速設備&#xff08;如鍵盤、鼠標、語音輸入輸出設備&#xff09; 中速設備&#xff08;如行式打印機、激光打印機等&#xff09; 高速設備&#xff08;如磁帶機、磁盤機、光盤機等&…

vue2源碼解析---v-model雙向數據綁定

什么是v-model v-model 是 Vue 中的一個指令&#xff0c;用于實現表單元素與 Vue 實例中數據的雙向綁定。這意味著當表單元素的值發生變化時&#xff0c;Vue 實例中的數據也會隨之更新 工作原理 生成ast樹 本質上是語法糖 結合了v-bind和v-on兩個指令 示例代碼 new Vue({e…

php收集的精典代碼

1. οncοntextmenu"window.event.return&#xff06;#118aluefalse" 將徹底屏蔽鼠標右鍵 <table border οncοntextmenureturn(false)><td>no</table> 可用于Table 2. <body onselectstart"return false"> 取消選取、防止復制…

python外卷(7)--glob

glob模塊1.glob.glob()2.對比os.listdir()glob是python自帶的一個操作文件的模塊&#xff0c;可用于查找 指定路徑 中 匹配的 文件。1.glob.glob() 下面是一個測試文件路徑&#xff1a; (base) pppp-System-Product-Name:~/Desktop/test_glob$ tree . ├── a │ ├── 1…

Sublime Text 2配置強大的IDE開發環境,運行java

Sublime Text 2是我無意中發現的、據說十分強大的、便捷的編輯器&#xff0c;許多程序員都投入到Sublime Text 2的懷抱中。 1 配置java開發環境的方法如下&#xff1a; 在jdk安裝目錄下的bin文件夾下新建一個bat格式的文件&#xff0c;文件命為javacexec.bat。 如果是在Wind…

thinkphp的快捷方法實例化對象

D、F、S、C、L、A、I 他們都在functions.php這個文件家 下面我分別說明一下他們的功能 D&#xff08;&#xff09; 加載Model類 M&#xff08;&#xff09; 加載Model類 A&#xff08;&#xff09; 加載Action類 L&#xff08;&#xff09; 獲取語言定義 C&#xff08;&#xf…

Python外卷(8)--pdist, squareform

pdist, squareform1.pdist, squareform使用例子2.通過矩陣的四則運算實現上述pdist, squareformscipy.spatial.distance 距離計算庫中有兩個函數&#xff1a;pdist, squareform&#xff0c;用于計算樣本對之間的歐式距離&#xff0c;并且將樣本間距離用方陣表示出來。&#xff…

模擬進程調度

功能 data.h #ifndef _Data_h_ #define _Data_h_#include <stdio.h> #include <stdlib.h> #include <string.h>#define ElemType PCB #define Status int #define OK 1 #define ERROR 0 #define TimeSlice 1 #define Infinity 10 //INT_MAX#define NAME_M…

gdb調試多進程和多線程命令

1. 默認設置下&#xff0c;在調試多進程程序時GDB只會調試主進程。但是GDB&#xff08;>V7.0&#xff09;支持多進程的 分別以及同時 調試&#xff0c;換句話說&#xff0c;GDB可以同時調試多個程序。只需要設置follow-fork-mode(默認值&#xff1a;parent)和detach-on-fork…

python外卷(10)--取整

"取整"那些事1.python 內置函數1.1int()--向下取整1.2round()--四舍五入2.math模塊取整函數2.1 math.floor()--向下取整2.2 math.ceil()--向上取整2.3 math.modf()--分別取小數部分和整數部分3.numpy模塊取整函數3.1 numpy.floor()--向下取整3.2 numpy.ceil()--向上取…

模擬銀行家算法

介紹 data.h #ifndef _Data_h_ #define _Data_h_#include <stdio.h> #include <stdlib.h> #include <string.h>#define ElemType PCB #define Status int #define true 1 #define false 0 #define OK 1 #define ERROR 0 #define RESOURCE_NUM …

Lua 與 C混合編程 .

本文通過程序實例說明C調用lua腳本和lua調用C的方法: 先建立一個 test.c文件: #include <stdio.h> #include <stdlib.h> #include "lua.h" #include "lualib.h" #include "lauxlib.h" #pragma comment(lib, "lua5.1.lib&qu…

模擬固定分區分配

介紹 data.h #ifndef _Data_h_ #define _Data_h_#include <stdio.h> #include <stdlib.h> #include <string.h> #define LIST_INIT_SIZE 10 #define LISTINCREMENT 2 #define true 1 #define false 0 #define PCBType PCB #define Status int…

Linux下的lua和boost c++的搭建和安裝

先下載lua &#xff0c;boost c http://www.lua.org/versions.html#5.2 http://www.boost.org/ http://sourceforge.net/projects/luabind/ 1. 安裝lua [rootlocalhost ~]#tar zxvf lua-5.1.2.tar.gz -C /usr/local [rootlocalhost ~]# cd /usr/local/ [rootlocalhost lo…