AI面試必備/深度學習100問1-50題答案解析


 

1、梯度下降算法的正確步驟,(正確步驟dcaeb)(梯度下降法其實是根據函數的梯度來確定函數的極小值),這里的問題與其說是梯度下降算法的步驟不如說類似圖圖像分類訓練的整個流程:網絡初始化-輸入to輸出-期望輸出與實際差值-根據誤差計算更新權值-迭代進行。

a.計算預測值和真實值之間的誤差;  b.重復迭代,直至得到網絡權重的最佳值;  c.把輸入傳入網絡,得到輸出值 ;d.用隨機值初始化權重和偏差; e.對每一個產生誤差的神經元,調整相應的(權重)值以減小誤差。

2、已知:大腦是有很多個叫做神經元的東西構成,神經網絡是對大腦的簡單的數學表達。每一個神經元都有輸入、處理函數和輸出。神經元組合起來形成了網絡,可以擬合任何函數。為了得到最佳的神經網絡,我們用梯度下降方法不斷更新模型。

給定上述關於神經網絡的描述,什么情況下神經網絡模型被稱為深度學習模型?(正確是A)

A.加入更多層,使神經網絡的深度增加;   B.有維度更高的數據;     C.當這是一個圖形識別的問題時;      D.以上都不正確

神經網絡理論上說是仿照生物神經學一層層迭代處理結構(生物學認為視覺系統是層級結構),層層抽象與迭代,多少層算深層結構沒有硬性的規定,一般要超過2層。

3、訓練CNN時,可以對輸入進行旋轉、平移、縮放等預處理提高模型泛化能力。這么說是對,還是不對?(正確答案:對)

擴充數據是提高泛化能力常用的方式,對數據的平移、旋轉等是對CNN訓練數據的擴充的操作方式。

4、下面哪項操作能實現跟神經網絡中Dropout的類似效果?

A.Boosting B.Bagging C.Stacking D.Mapping(正確:B)

典型的神經網絡其訓練流程是將輸入通過網絡進行正向傳導,然后將誤差進行反向傳播,Dropout就是針對這一過程之中,隨機地刪除隱藏層的部分單元,進行上述過程。步驟為:1)隨機刪除網絡中的一些隱藏神經元,保持輸入輸出神經元不變;2)將輸入通過修改后的網絡進行前向傳播,然后將誤差通過修改后的網絡進行反向傳播;3)對於另外一批的訓練樣本,重復上述操作。他的作為從Hinton的原文以及后續的大量實驗論證發現,dropout可以比較有效地減輕過擬合的發生,一定程度上達到了正則化的效果。A:Boosting方法是一種用來提高弱分類算法准確度的方法,這種方法通過構造一個預測函數系列,然后以一定的方式將他們組合成一個預測函數。B:bagging同樣是弱分類器組合的思路,它首先隨機地抽取訓練集(training set),以之為基礎訓練多個弱分類器。然后通過取平均,或者投票(voting)的方式決定最終的分類結果。因為它隨機選取訓練集的特點,Bagging可以一定程度上避免過渡擬合(overfit)。C:stacking:它所做的是在多個分類器的結果上,再套一個新的分類器。這個新的分類器就基於弱分類器的分析結果,加上訓練標簽(training label)進行訓練。一般這最后一層用的是LR。D:Sammon Mapping降維算法。

5、下列哪一項在神經網絡中引入了非線性?(正確:B)

A.隨機梯度下降 ; B.修正線性單元(ReLU) ;C.卷積函數 ;D.以上都不正確

"線性"="齊次性"+"可加性","齊次性"是指類似於: f(ax)=af(x),"可加性"是指類似於: f(x+y)=f(x)+f(y),
這里沒有太多特別的原因, 就是一個名字. "非線性"當然就是這兩條至少之一不成立。修正線性單元是非線性的激活函數。

6.CNN的卷積核是單層的還是多層的?

一般而言,深度卷積網絡是一層又一層的。層的本質是特征圖, 存貯輸入數據或其中間表示值。一組卷積核則是聯系前后兩層的網絡參數表達體, 訓練的目標就是每個卷積核的權重參數組。描述網絡模型中某層的厚度,通常用名詞通道channel數或者特征圖feature map數。不過人們更習慣把作為數據輸入的前層的厚度稱之為通道數(比如RGB三色圖層稱為輸入通道數為3),把作為卷積輸出的后層的厚度稱之為特征圖數。卷積核(filter)一般是3D多層的,除了面積參數, 比如3x3之外, 還有厚度參數H(2D的視為厚度1). 還有一個屬性是卷積核的個數N。卷積核的厚度H, 一般等於前層厚度M(輸入通道數或feature map數). 特殊情況M > H。卷積核的個數N, 一般等於后層厚度(后層feature maps數,因為相等所以也用N表示)。卷積核通常從屬於后層,為后層提供了各種查看前層特征的視角,這個視角是自動形成的。卷積核厚度等於1時為2D卷積,對應平面點相乘然后把結果加起來,相當於點積運算;卷積核厚度大於1時為3D卷積,每片分別平面點求卷積,然后把每片結果加起來,作為3D卷積結果;1x1卷積屬於3D卷積的一個特例,有厚度無面積, 直接把每片單個點乘以權重再相加。歸納之,卷積的意思就是把一個區域,不管是一維線段,二維方陣,還是三維長方塊,全部按照卷積核的維度形狀,對應逐點相乘再求和,濃縮成一個標量值也就是降到零維度,作為下一層的一個feature map的一個點的值!可以比喻一群漁夫坐一個漁船撒網打魚,魚塘是多層水域,每層魚兒不同。船每次移位一個stride到一個地方,每個漁夫撒一網,得到收獲,然后換一個距離stride再撒,如此重復直到遍歷魚塘。A漁夫盯着魚的品種,遍歷魚塘后該漁夫描繪了魚塘的魚品種分布;B漁夫盯着魚的重量,遍歷魚塘后該漁夫描繪了魚塘的魚重量分布;還有N-2個漁夫,各自興趣各干各的;最后得到N個特征圖,描述了魚塘的一切!2D卷積表示漁夫的網就是帶一圈浮標的漁網,只打上面一層水體的魚;3D卷積表示漁夫的網是多層嵌套的漁網,上中下層水體的魚兒都跑不掉;1x1卷積可以視為每次移位stride,甩鈎釣魚代替了撒網;下面解釋一下特殊情況的 M > H:實際上,除了輸入數據的通道數比較少之外,中間層的feature map數很多,這樣中間層算卷積會累死計算機(魚塘太深,每層魚都打,需要的魚網太重了)。所以很多深度卷積網絡把全部通道/特征圖划分一下,每個卷積核只看其中一部分(漁夫A的漁網只打撈深水段,漁夫B的漁網只打撈淺水段)。這樣整個深度網絡架構是橫向開始分道揚鑣了,到最后才又融合。這樣看來,很多網絡模型的架構不完全是突發奇想,而是是被參數計算量逼得。特別是現在需要在移動設備上進行AI應用計算(也叫推斷), 模型參數規模必須更小, 所以出現很多減少握手規模的卷積形式, 現在主流網絡架構大都如此。

7.什么是卷積?

對圖像(不同的數據窗口數據)和濾波矩陣(一組固定的權重:因為每個神經元的多個權重固定,所以又可以看做一個恆定的濾波器filter)做內積(逐個元素相乘再求和)的操作就是所謂的『卷積』操作,也是卷積神經網絡的名字來源。https://blog.csdn.net/dingyahui123/article/details/72808985

8.什么是CNN的池化pool層?

池化,簡言之,即取區域平均或最大,如下圖所示(圖引自cs231n)上圖所展示的是取區域最大,即下圖左邊部分中 左上角2x2的矩陣中6最大,右上角2x2的矩陣中8最大,左下角2x2的矩陣中3最大,右下角2x2的矩陣中4最大,所以得到上圖右邊部分的結果:6 8 3 4。關於池化的作用最可靠的解釋是在盡量保持原數據關系的基礎上進行變化降低維度,常用的是平均和最大池化法。

9.簡述下什么是生成對抗網絡。

GAN之所以是對抗的,是因為GAN的內部是競爭關系,一方叫generator,它的主要工作是生成圖片,並且盡量使得其看上去是來自於訓練樣本的。另一方是discriminator,其目標是判斷輸入圖片是否屬於真實訓練樣本。更直白的講,將generator想象成假幣制造商,而discriminator是警察。generator目的是盡可能把假幣造的跟真的一樣,從而能夠騙過discriminator,即生成樣本並使它看上去好像來自於真實訓練樣本一樣。GAN的主要思想是擁有兩個競爭的神經網絡模型。 一個將噪聲數據作為輸入,並產生樣本(所謂的生成器)。 另一個模型(稱為判別器)從生成器和訓練數據接收樣本,並且必須能夠區分兩個來源。 這兩個網絡進行連續的博弈,生成器學習產生越來越多的現實樣本,鑒別器正在學習越來越好地區分生成的數據和實際數據。 這兩個網絡同時進行訓練,最后的希望是競爭能夠使生成器生成的樣本與實際數據不可區分。

10.學梵高作畫的原理是什么?

一個訓練好的圖像識別模型,比如訓練畢加索畫式的貓的分類模型會給你反饋一個概率分數,表示它相信這是一張“畢加索貓”照片的程度。這中間經歷了很多CNN層,每層CNN都在狗狗照片上尋找輸入樣本是畢加索貓的圖形特征證據,越底層的神經元分析的特征越具體,越高層越抽象。當然,最后模型會給出很低的分數,如果輸入是一個狗照片識別畢加索貓的過程中,如果讓模型能夠修改輸入的樣本又會怎樣呢?給模型網絡中加一個反饋回路,讓每一層網絡可以朝着使最后分數變大的方向上修改狗狗照片。每次迭代網絡中的每層都會在狗照上增加一些畢加索貓的特征痕跡,可以迭代很多次,讓狗狗照片中加入越來越多的畢加索貓的實物特征。這就是使用卷積神經網絡藝術作畫的概念基礎,讓藝術風格模型的CNN按圖形特征修改輸入圖片,疊加藝術效果。大致的實現思路如下:1)輸入特征圖像,訓練風格模型,讓計算機學會藝術風格。2)輸入待處理圖,風格模型引導修改輸入圖片,生成新的圖像,輸出“藝術畫”。

11.請簡要介紹下tensorflow的計算圖。

Tensorflow是一個通過計算圖的形式來表述計算的編程系統,計算圖也叫數據流圖,可以把計算圖看做是一種有向圖,Tensorflow中的每一個節點都是計算圖上的一個Tensor, 也就是張量,而節點之間的邊描述了計算之間的依賴關系(定義時)和數學操作(運算時)。a=x*y; b=a+z; c=tf.reduce_sum(b); 

12.你有哪些deep learning(rnn、cnn)調參的經驗?

1、參數初始化,參數初始化影響收斂速度和收斂結果甚至造成Nan等問題,下面的n_in為網絡的輸入大小,uniform均勻分布初始化:w = np.random.uniform(low=-scale, high=scale, size=[n_in,n_out])。normal高斯分布初始化方法如下:w = np.random.randn(n_in,n_out) * stdev # stdev為高斯分布的標准差,均值設為0

2、數據預處理方式:

zero-center ,這個挺常用的.X -= np.mean(X, axis = 0) # zero-centerX /= np.std(X, axis = 0) # normalize。PCA whitening,這個用的比較少.

3、訓練技巧:1)要做梯度歸一化,即算出來的梯度除以minibatch size。2)clip c(梯度裁剪): 限制最大梯度,其實是value = sqrt(w1^2+w2^2….),如果value超過了閾值,就算一個衰減系系數,讓value的值等於閾值: 5,10,15。3)dropout對小數據防止過擬合有很好的效果,值一般設為0.5,小數據上dropout+sgd在我的大部分實驗中,效果提升都非常明顯.因此可能的話,建議一定要嘗試一下。 dropout的位置比較有講究, 對於RNN,建議放到輸入->RNN與RNN->輸出的位置。4)adam,adadelta等,在小數據上,我這里實驗的效果不如sgd, sgd收斂速度會慢一些,但是最終收斂后的結果,一般都比較好。如果使用sgd的話,可以選擇從1.0或者0.1的學習率開始,隔一段時間,在驗證集上檢查一下,如果cost沒有下降,就對學習率減半. 我看過很多論文都這么搞,我自己實驗的結果也很好. 當然,也可以先用ada系列先跑,最后快收斂的時候,更換成sgd繼續訓練.同樣也會有提升.據說adadelta一般在分類問題上效果比較好,adam在生成問題上效果比較好。5)除了gate之類的地方,需要把輸出限制成0-1之外,盡量不要用sigmoid,可以用tanh或者relu之類的激活函數.1. sigmoid函數在-4到4的區間里,才有較大的梯度。之外的區間,梯度接近0,很容易造成梯度消失問題。2.輸入0均值,sigmoid函數的輸出不是0均值的。6)rnn的dim和embdding size,一般從128上下開始調整. batch size,一般從128左右開始調整.batch size合適最重要,並不是越大越好。word2vec初始化,在小數據上,不僅可以有效提高收斂速度,也可以可以提高結果。6、盡量對數據做shuffle:LSTM 的forget gate的bias,用1.0或者更大的值做初始化,可以取得更好的結果,來自這篇論文:http://jmlr.org/proceedings/papers/v37/jozefowicz15.pdf, 我這里實驗設成1.0,可以提高收斂速度.實際使用中,不同的任務,可能需要嘗試不同的值。Batch Normalization據說可以提升效果,不過我沒有嘗試過,建議作為最后提升模型的手段,參考論文:Accelerating Deep Network Training by Reducing Internal Covariate Shift。如果你的模型包含全連接層(MLP),並且輸入和輸出大小一樣,可以考慮將MLP替換成Highway Network,我嘗試對結果有一點提升,建議作為最后提升模型的手段,原理很簡單,就是給輸出加了一個gate來控制信息的流動,詳細介紹請參考論文:http://arxiv.org/abs/1505.0038.7、Ensemble:Ensemble是論文刷結果的終極核武器,深度學習中一般有以下幾種方式1)同樣的參數,不同的初始化方式,2)不同的參數,通過cross-validation,選取最好的幾組,3)同樣的參數,模型訓練的不同階段,即不同迭代次數的模型。4)不同的模型,進行線性融合. 例如RNN和傳統模型。

13.CNN最成功的應用是在CV,那為什么NLP和Speech的很多問題也可以用CNN解出來?為什么AlphaGo里也用了CNN?這幾個不相關的問題的相似性在哪里?CNN通過什么手段抓住了這個共性?

不相關問題的相關性在於,都存在局部與整體的關系,由低層次的特征經過組合,組成高層次的特征,並且得到不同特征之間的空間相關性。如下圖:低層次的直線/曲線等特征,組合成為不同的形狀,最后得到汽車的表示。

CNN抓住此共性的手段主要有四個:局部連接/權值共享/池化操作/多層次結構。局部連接使網絡可以提取數據的局部特征;權值共享大大降低了網絡的訓練難度,一個Filter只提取一個特征,在整個圖片(或者語音/文本) 中進行卷積;池化操作與多層次結構一起,實現了數據的降維,將低層次的局部特征組合成為較高層次的特征,從而對整個圖片進行表示。

14.LSTM結構推導,為什么比RNN好?

推導forget gate,input gate,cell state, hidden information等的變化;因為LSTM有進有出且當前的cell informaton是通過input gate控制之后疊加的,RNN是疊乘,因此LSTM可以防止梯度消失或者爆炸。

15.Sigmoid、Tanh、ReLu這三個激活函數有什么缺點或不足,有沒改進的激活函數。

1、1)sig:容易出現梯度消失(gradient  vanishing)的現象:當激活函數接近飽和區時,變化太緩慢,導數接近0,根據后向傳遞的數學依據是微積分求導的鏈式法則,當前導數需要之前各層導數的乘積,幾個比較小的數相乘,導數結果很接近0,從而無法完成深層網絡的訓練。2)Sigmoid的輸出不是0均值(zero-centered)的:這會導致后層的神經元的輸入是非0均值的信號,這會對梯度產生影響。以 f=sigmoid(wx+b)為例, 假設輸入均為正數(或負數),那么對w的導數總是正數(或負數),這樣在反向傳播過程中要么都往正方向更新,要么都往負方向更新,導致有一種捆綁效果,使得收斂緩慢。3)冪運算相對耗時.

2、Tanh:解決了Sigmoid函數的非zero-centered問題,但是它也存在梯度消失和冪運算的問題。其實 tanh(x)=2sigmoid(2x)-1。

3、Relu:(1)ReLU的輸出不是zero-centered;(2)Dead  ReLU  Problem(神經元壞死現象):某些神經元可能永遠不會被激活,導致相應參數永遠不會被更新(在負數部分,梯度為0)。產生這種現象的兩個原因:參數初始化問題;learning  rate太高導致在訓練過程中參數更新太大。 解決方法:采用Xavier初始化方法,以及避免將learning  rate設置太大或使用adagrad等自動調節learning  rate的算法。(3)ReLU不會對數據做幅度壓縮,所以數據的幅度會隨着模型層數的增加不斷擴張。為了解決ReLU的dead cell的情況,發明了Leaky Relu, 即在輸入小於0時不讓輸出為0,而是乘以一個較小的系數,從而保證有導數存在。同樣的目的,還有一個ELU,函數示意圖如下:

還有一個激活函數是Maxout,即使用兩套w,b參數,輸出較大值。本質上Maxout可以看做Relu的泛化版本,因為如果一套w,b全都是0的話,那么就是普通的ReLU。Maxout可以克服Relu的缺點,但是參數數目翻倍。

16、為什么引入非線性激勵函數?

第一,對於神經網絡來說,網絡的每一層相當於f(wx+b)=f(w'x),對於線性函數,其實相當於f(x)=x,那么在線性激活函數下,每一層相當於用一個矩陣去乘以x,那么多層就是反復的用矩陣去乘以輸入。根據矩陣的乘法法則,多個矩陣相乘得到一個大矩陣。所以線性激勵函數下,多層網絡與一層網絡相當。比如,兩層的網絡f(W1*f(W2x))=W1W2x=Wx。第二,非線性變換是深度學習有效的原因之一。原因在於非線性相當於對空間進行變換,變換完成后相當於對問題空間進行簡化,原來線性不可解的問題現在變得可以解了。

上圖可以很形象的解釋這個問題,左圖用一根線是無法划分的。經過一系列變換后,就變成線性可解的問題了。如果不用激勵函數(其實相當於激勵函數是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函數,很容易驗證,無論你神經網絡有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(Perceptron)了。正因為上面的原因,我們決定引入非線性函數作為激勵函數,這樣深層神經網絡就有意義了(不再是輸入的線性組合,可以逼近任意函數)。最早的想法是sigmoid函數或者tanh函數,輸出有界,很容易充當下一層輸入(以及一些人的生物解釋)。

17、請問人工神經網絡中為什么ReLu要好過於tanh和sigmoid function?

函數圖形如下:

第一,采用sigmoid等函數,算激活函數時(指數運算),計算量大,反向傳播求誤差梯度時,求導涉及除法和指數運算,計算量相對大,而采用Relu激活函數,整個過程的計算量節省很多。

第二,對於深層網絡,sigmoid函數反向傳播時,很容易就會出現梯度消失的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨於0,這種情況會造成信息丟失),這種現象稱為飽和,從而無法完成深層網絡的訓練。而ReLU就不會有飽和傾向,不會有特別小的梯度出現。

第三,Relu會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,並且減少了參數的相互依存關系,緩解了過擬合問題的發生(以及一些人的生物解釋balabala)。當然現在也有一些對relu的改進,比如prelu,random relu等,在不同的數據集上會有一些訓練速度上或者准確率上的改進,具體的大家可以找相關的paper看。多加一句,現在主流的做法,會多做一步batch normalization,盡可能保證每一層網絡的輸入具有相同的分布[1]。而最新的paper[2],他們在加入bypass connection之后,發現改變batch normalization的位置會有更好的效果。

18、為什么LSTM模型中既存在sigmoid又存在tanh兩種激活函數,而不是選擇統一的sigmoid或者tanh?這樣做的目的是什么?

sigmoid 用在了各種gate上,產生0~1之間的值,這個一般只有sigmoid最直接了。tanh 用在了狀態和輸出上,是對數據的處理,這個用其他激活函數或許也可以。二者目的不一樣,另可參見A Critical Review of Recurrent Neural Networks for Sequence Learning的section4.1,說了那兩個tanh都可以替換成別的。

19、如何解決RNN梯度爆炸和彌散的問題?

為了解決梯度爆炸問題,Thomas Mikolov首先提出了一個簡單的啟發性的解決方案,就是當梯度大於一定閾值的的時候,將它截斷為一個較小的數。具體如算法1所述:算法:當梯度爆炸時截斷梯度,下圖可視化了梯度截斷的效果。它展示了一個小的rnn(其中W為權值矩陣,b為bias項)的決策面。這個模型是一個一小段時間的rnn單元組成;實心箭頭表明每步梯度下降的訓練過程。當梯度下降過程中,模型的目標函數取得了較高的誤差時,梯度將被送到遠離決策面的位置。截斷模型產生了一個虛線,它將誤差梯度拉回到離原始梯度接近的位置。

梯度爆炸,梯度截斷可視化為了解決梯度彌散的問題,我們介紹了兩種方法。第一種方法是將隨機初始化,改為一個有關聯的矩陣初始化。第二種方法是使用ReLU(Rectified Linear Units)代替sigmoid函數。ReLU的導數不是0就是1.因此,神經元的梯度將始終為1,而不會當梯度傳播了一定時間之后變小。

20、什么樣的資料集不適合深度學習

(1)數據集太小,數據樣本不足時,深度學習相對其它機器學習算法,沒有明顯優勢。(2)數據集沒有局部相關特性,目前深度學習表現比較好的領域主要是圖像/語音/自然語言處理等領域,這些領域的一個共性是局部相關性。圖像中像素組成物體,語音信號中音位組合成單詞,文本數據中單詞組合成句子,這些特征元素的組合一旦被打亂,表示的含義同時也被改變。對於沒有這樣的局部相關性的數據集,不適於使用深度學習算法進行處理。舉個例子:預測一個人的健康狀況,相關的參數會有年齡、職業、收入、家庭狀況等各種元素,將這些元素打亂,並不會影響相關的結果。

21、廣義線性模型是怎么應用到深度學習的?

深度學習從統計學角度,可以看做遞歸的廣義線性模型。廣義線性模型相對於經典的線性模型(y=wx+b),核心在於引入了連接函數g(.),形式變為:y=g−1(wx+b)。深度學習時遞歸的廣義線性模型,神經元的激活函數,即為廣義線性模型的鏈接函數。邏輯回歸(廣義線性模型的一種)的Logistic函數即為神經元激活函數中的Sigmoid函數,很多類似的方法在統計學和神經網絡中的名稱不一樣,容易引起初學者(這里主要指我)的困惑。

22、如何解決梯度消失和梯度膨脹?

(1)梯度消失:根據鏈式法則,如果每一層神經元對上一層的輸出的偏導乘上權重結果都小於1的話,那么即使這個結果是0.99,在經過足夠多層傳播之后,誤差對輸入層的偏導會趨於0。可以采用ReLU激活函數有效的解決梯度消失的情況,也可以用Batch Normalization解決這個問題。關於深度學習中 Batch Normalization為什么效果好?(2)梯度膨脹根據鏈式法則,如果每一層神經元對上一層的輸出的偏導乘上權重結果都大於1的話,在經過足夠多層傳播之后,誤差對輸入層的偏導會趨於無窮大可以通過激活函數來解決,或用Batch Normalization解決這個問題。

23、簡述神經網絡發展史?

949年Hebb提出了神經心理學學習范式——Hebbian學習理論--1952年,IBM的Arthur Samuel寫出了西洋棋程序---1957年,Rosenblatt的感知器算法是第二個有着神經系統科學背景的機器學習模型.-3年之后,Widrow因發明Delta學習規則而載入ML史冊,該規則馬上就很好的應用到了感知器的訓練中--感知器的熱度在1969被Minskey一盆冷水潑滅了。他提出了著名的XOR問題,論證了感知器在類似XOR問題的線性不可分數據的無力。盡管BP的思想在70年代就被Linnainmaa以“自動微分的翻轉模式”被提出來,但直到1981年才被Werbos應用到多層感知器(MLP)中,NN新的大繁榮。----1991年的Hochreiter和2001年的Hochreiter的工作,都表明在使用BP算法時,NN單元飽和之后會發生梯度損失。又發生停滯。---時間終於走到了當下,隨着計算資源的增長和數據量的增長。一個新的NN領域——深度學習出現了。--簡言之,MP模型+sgn—->單層感知機(只能線性)+sgn— Minsky 低谷 —>多層感知機+BP+sigmoid—- (低谷) —>深度學習+pre-training+ReLU/sigmoid。

24、深度學習常用方法?

全連接DNN(相鄰層相互連接、層內無連接)、AutoEncoder(盡可能還原輸入)、Sparse Coding(在AE上加入L1規范)、RBM(解決概率問題)—–>特征探測器——>棧式疊加 貪心訓練 。RBM—->DBN 解決全連接DNN的全連接問題—–>CNN 解決全連接DNN的無法對時間序列上變化進行建模的問題—–>RNN—解決時間軸上的梯度消失問題——->LSTM

DNN是傳統的全連接網絡,可以用於廣告點擊率預估,推薦等。其使用embedding的方式將很多離散的特征編碼到神經網絡中,可以很大的提升結果。CNN主要用於計算機視覺(Computer Vision)領域,CNN的出現主要解決了DNN在圖像領域中參數過多的問題。同時,CNN特有的卷積、池化、batch normalization、Inception、ResNet、DeepNet等一系列的發展也使得在分類、物體檢測、人臉識別、圖像分割等眾多領域有了長足的進步。同時,CNN不僅在圖像上應用很多,在自然語言處理上也頗有進展,現在已經有基於CNN的語言模型能夠達到比LSTM更好的效果。在最新的AlphaZero中,CNN中的ResNet也是兩種基本算法之一。GAN是一種應用在生成模型的訓練方法,現在有很多在CV方面的應用,例如圖像翻譯,圖像超清化、圖像修復等等。RNN主要用於自然語言處理(Natural Language Processing)領域,用於處理序列到序列的問題。普通RNN會遇到梯度爆炸和梯度消失的問題。所以現在在NLP領域,一般會使用LSTM模型。在最近的機器翻譯領域,Attention作為一種新的手段,也被引入進來。除了DNN、RNN和CNN外, 自動編碼器(AutoEncoder)、稀疏編碼(Sparse Coding)、深度信念網絡(DBM)、限制玻爾茲曼機(RBM)也都有相應的研究。

25、神經網絡發展史?

sigmoid會飽和,造成梯度消失。於是有了ReLU。ReLU負半軸是死區,造成梯度變0。於是有了LeakyReLU,PReLU。強調梯度和權值分布的穩定性,由此有了ELU,以及較新的SELU。太深了,梯度傳不下去,於是有了highway。干脆連highway的參數都不要,直接變殘差,於是有了ResNet。強行穩定參數的均值和方差,於是有了BatchNorm。在梯度流中增加噪聲,於是有了 Dropout。RNN梯度不穩定,於是加幾個通路和門控,於是有了LSTM。LSTM簡化一下,有了GRU。GAN的JS散度有問題,會導致梯度消失或無效,於是有了WGAN。WGAN對梯度的clip有問題,於是有了WGAN-GP。

26、神經網絡中激活函數的真正意義?一個激活函數需要具有哪些必要的屬性?還有哪些屬性是好的屬性但不必要的?

(1)非線性:即導數不是常數。這個條件是多層神經網絡的基礎,保證多層網絡不退化成單層線性網絡。這也是激活函數的意義所在。

(2)幾乎處處可微:可微性保證了在優化中梯度的可計算性。傳統的激活函數如sigmoid等滿足處處可微。對於分段線性函數比如ReLU,只滿足幾乎處處可微(即僅在有限個點處不可微)。對於SGD算法來說,由於幾乎不可能收斂到梯度接近零的位置,有限的不可微點對於優化結果不會有很大影響。

(3)計算簡單:非線性函數有很多。極端的說,一個多層神經網絡也可以作為一個非線性函數,類似於Network In Network中把它當做卷積操作的做法。但激活函數在神經網絡前向的計算次數與神經元的個數成正比,因此簡單的非線性函數自然更適合用作激活函數。這也是ReLU之流比其它使用Exp等操作的激活函數更受歡迎的其中一個原因。

(4)非飽和性(saturation):飽和指的是在某些區間梯度接近於零(即梯度消失),使得參數無法繼續更新的問題。最經典的例子是Sigmoid,它的導數在x為比較大的正值和比較小的負值時都會接近於0。更極端的例子是階躍函數,由於它在幾乎所有位置的梯度都為0,因此處處飽和,無法作為激活函數。ReLU在x>0時導數恆為1,因此對於再大的正值也不會飽和。但同時對於x<0,其梯度恆為0,這時候它也會出現飽和的現象(在這種情況下通常稱為dying ReLU)。Leaky ReLU和PReLU的提出正是為了解決這一問題。

(5)單調性(monotonic):即導數符號不變。這個性質大部分激活函數都有,除了諸如sin、cos等。個人理解,單調性使得在激活函數處的梯度方向不會經常改變,從而讓訓練更容易收斂。

(6)輸出范圍有限:有限的輸出范圍使得網絡對於一些比較大的輸入也會比較穩定,這也是為什么早期的激活函數都以此類函數為主,如Sigmoid、TanH。但這導致了前面提到的梯度消失問題,而且強行讓每一層的輸出限制到固定范圍會限制其表達能力。因此現在這類函數僅用於某些需要特定輸出范圍的場合,比如概率輸出(此時loss函數中的log操作能夠抵消其梯度消失的影響)、LSTM里的gate函數。

(7)接近恆等變換(identity):即約等於x。這樣的好處是使得輸出的幅值不會隨着深度的增加而發生顯著的增加,從而使網絡更為穩定,同時梯度也能夠更容易地回傳。這個與非線性是有點矛盾的,因此激活函數基本只是部分滿足這個條件,比如TanH只在原點附近有線性區(在原點為0且在原點的導數為1),而ReLU只在x>0時為線性。這個性質也讓初始化參數范圍的推導更為簡單。額外提一句,這種恆等變換的性質也被其他一些網絡結構設計所借鑒,比如CNN中的ResNet[6]和RNN中的LSTM。

(8)參數少:大部分激活函數都是沒有參數的。像PReLU帶單個參數會略微增加網絡的大小。還有一個例外是Maxout,盡管本身沒有參數,但在同樣輸出通道數下k路Maxout需要的輸入通道數是其它函數的k倍,這意味着神經元數目也需要變為k倍;但如果不考慮維持輸出通道數的情況下,該激活函數又能將參數個數減少為原來的k倍。

(9)歸一化(normalization):這個是最近才出來的概念,對應的激活函數是SELU[8],主要思想是使樣本分布自動歸一化到零均值、單位方差的分布,從而穩定訓練。在這之前,這種歸一化的思想也被用於網絡結構的設計,比如Batch Normalization。

27.梯度下降法的神經網絡容易收斂到局部最優,為什么應用廣泛? 

深度神經網絡“容易收斂到局部最優”,很可能是一種想象,實際情況是,我們可能從來沒有找到過“局部最優”,更別說全局最優了。很多人都有一種看法,就是“局部最優是神經網絡優化的主要難點”。這來源於一維優化問題的直觀想象。在單變量的情形下,優化問題最直觀的困難就是有很多局部極值,如

人們直觀的想象,高維的時候這樣的局部極值會更多,指數級的增加,於是優化到全局最優就更難了。然而單變量到多變量一個重要差異是,單變量的時候,Hessian矩陣只有一個特征值,於是無論這個特征值的符號正負,一個臨界點都是局部極值。但是在多變量的時候,Hessian有多個不同的特征值,這時候各個特征值就可能會有更復雜的分布,如有正有負的不定型和有多個退化特征值(零特征值)的半定型

在后兩種情況下,是很難找到局部極值的,更別說全局最優了。現在看來,神經網絡的訓練的困難主要是鞍點的問題。在實際中,我們很可能也從來沒有真的遇到過局部極值。另一方面,一個好消息是,即使有局部極值,具有較差的loss的局部極值的吸引域也是很小的。所以,很可能我們實際上是在“什么也沒找到”的情況下就停止了訓練,然后拿到測試集上試試,“咦,效果還不錯”。補充說明,這些都是實驗研究結果。理論方面,各種假設下,深度神經網絡的Landscape 的鞍點數目指數增加,而具有較差loss的局部極值非常少。

28、CNN常用模型

29、為什么很多做人臉的Paper會最后加入一個Local Connected Conv?

以FaceBook DeepFace 為例: DeepFace 先進行了兩次全卷積+一次池化,提取了低層次的邊緣/紋理等特征。后接了3個Local-Conv層,這里是用Local-Conv的原因是,人臉在不同的區域存在不同的特征(眼睛/鼻子/嘴的分布位置相對固定),當不存在全局的局部特征分布時,Local-Conv更適合特征的提取。

30、什么是梯度爆炸:

誤差梯度是神經網絡訓練過程中計算的方向和數量,用於以正確的方向和合適的量更新網絡權重。在深層網絡或循環神經網絡中,誤差梯度可在更新中累積,變成非常大的梯度,然后導致網絡權重的大幅更新,並因此使網絡變得不穩定。在極端情況下,權重的值變得非常大,以至於溢出導致NaN值。網絡層之間的梯度(值大於 1.0)重復相乘導致的指數級增長會產生梯度爆炸。

31、梯度爆炸會引發什么問題?

在深度多層感知機網絡中,梯度爆炸會引起網絡不穩定,最好的結果是無法從訓練數據中學習,而最壞的結果是出現無法再更新的 NaN 權重值。梯度爆炸導致學習過程不穩定。在循環神經網絡中,梯度爆炸會導致網絡不穩定,無法利用訓練數據學習,最好的結果是網絡無法學習長的輸入序列數據。

32、如何確認是否出現梯度爆炸?

訓練過程中出現梯度爆炸會伴隨一些細微的信號,如:1)模型無法從訓練數據中獲得更新(如低損失)。2)模型不穩定,導致更新過程中的損失出現顯著變化。3)訓練過程中,模型損失變成 NaN。如果你發現這些問題,那么你需要仔細查看是否出現梯度爆炸問題。以下是一些稍微明顯一點的信號,有助於確認是否出現梯度爆炸問題。1)訓練過程中模型梯度快速變大。2)訓練過程中模型權重變成 NaN 值。3)訓練過程中,每個節點和層的誤差梯度值持續超過 1.0。

33、如何修復梯度爆炸問題?

(1) 重新設計網絡模型:在深度神經網絡中,梯度爆炸可以通過重新設計層數更少的網絡來解決。使用更小的批尺寸對網絡訓練也有好處。在循環神經網絡中,訓練過程中在更少的先前時間步上進行更新(沿時間的截斷反向傳播,truncated Backpropagation through time)可以緩解梯度爆炸問題。

(2)使用 ReLU 激活函數:在深度多層感知機神經網絡中,梯度爆炸的發生可能是因為激活函數,如之前很流行的 Sigmoid 和 Tanh函數。使用 ReLU 激活函數可以減少梯度爆炸。采用 ReLU 激活函數是最適合隱藏層的新實踐。

(3)使用長短期記憶網絡:在循環神經網絡中,梯度爆炸的發生可能是因為某種網絡的訓練本身就存在不穩定性,如隨時間的反向傳播本質上將循環網絡轉換成深度多層感知機神經網絡。使用長短期記憶(LSTM)單元和相關的門類型神經元結構可以減少梯度爆炸問題。采用 LSTM 單元是適合循環神經網絡的序列預測的最新最好實踐。

(4)使用梯度截斷(Gradient Clipping):在非常深且批尺寸較大的多層感知機網絡和輸入序列較長的 LSTM 中,仍然有可能出現梯度爆炸。如果梯度爆炸仍然出現,你可以在訓練過程中檢查和限制梯度的大小。這就是梯度截斷。處理梯度爆炸有一個簡單有效的解決方案:如果梯度超過閾值,就截斷它們。具體來說,檢查誤差梯度的值是否超過閾值,如果超過,則截斷梯度,將梯度設置為閾值。梯度截斷可以一定程度上緩解梯度爆炸問題(梯度截斷,即在執行梯度下降步驟之前將梯度設置為閾值)。在 Keras 深度學習庫中,你可以在訓練之前設置優化器上的 clipnorm 或 clipvalue 參數,來使用梯度截斷。默認值為 clipnorm=1.0 、clipvalue=0.5。詳見:https://keras.io/optimizers/。

(5)使用權重正則化(Weight Regularization):如果梯度爆炸仍然存在,可以嘗試另一種方法,即檢查網絡權重的大小,並懲罰產生較大權重值的損失函數。該過程被稱為權重正則化,通常使用的是 L1 懲罰項(權重絕對值)或 L2 懲罰項(權重平方)。對循環權重使用 L1 或 L2 懲罰項有助於緩解梯度爆炸。在 Keras 深度學習庫中,你可以通過在層上設置 kernel_regularizer 參數和使用 L1 或 L2 正則化項進行權重正則化。

34、LSTM神經網絡輸入輸出究竟是怎樣的?

第一要明確的是神經網絡所處理的單位全部都是:向量,下面就解釋為什么你會看到訓練數據會是矩陣和張量。常規feedforward 輸入和輸出:矩陣,輸入矩陣形狀:(n_samples, dim_input),輸出矩陣形狀:(n_samples, dim_output)。注:真正測試/訓練的時候,網絡的輸入和輸出就是向量而已。加入n_samples這個維度是為了可以實現一次訓練多個樣本,求出平均梯度來更新權重,這個叫做Mini-batch gradient descent。 如果n_samples等於1,那么這種更新方式叫做Stochastic Gradient Descent (SGD)。Feedforward 的輸入輸出的本質都是單個向量。常規Recurrent (RNN/LSTM/GRU) 輸入和輸出:張量,輸入張量形狀:(time_steps, n_samples, dim_input),輸出張量形狀:(time_steps, n_samples, dim_output)。注:同樣是保留了Mini-batch gradient descent的訓練方式,但不同之處在於多了time step這個維度。 Recurrent 的任意時刻的輸入的本質還是單個向量,只不過是將不同時刻的向量按順序輸入網絡。所以你可能更願意理解為一串向量 a sequence of vectors,或者是矩陣。

(1)若想用一串序列去預測另一串序列,那么輸入輸出都是張量 (例如語音識別 或機器翻譯 一個中文句子翻譯成英文句子(一個單詞算作一個向量),機器翻譯還是個特例,因為兩個序列的長短可能不同,要用到seq2seq;

(2)若想用一串序列去預測一個值,那么輸入是張量,輸出是矩陣 (例如,情感分析就是用一串單詞組成的句子去預測說話人的心情)Feedforward 能做的是向量對向量的one-to-one mapping,Recurrent 將其擴展到了序列對序列 sequence-to-sequence mapping。但單個向量也可以視為長度為1的序列。所以有下圖幾種類型:

除了最左側的one to one是feedforward 能做的,右側都是Recurrent所擴展的,

若還想知道更多(1)可以將Recurrent的橫向操作視為累積已發生的事情,並且LSTM的memory cell機制會選擇記憶或者忘記所累積的信息來預測某個時刻的輸出。(2)以概率的視角理解的話:就是不斷的conditioning on已發生的事情,以此不斷縮小sample space(3)RNN的思想是: current output不僅僅取決於current input,還取決於previous state;可以理解成current output是由current input和previous hidden state兩個輸入計算而出的。並且每次計算后都會有信息殘留於previous hidden state中供下一次計算。

35、什么是RNN?

RNNs的目的使用來處理序列數據。在傳統的神經網絡模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連接的,每層之間的節點是無連接的。但是這種普通的神經網絡對於很多問題卻無能無力。例如,你要預測句子的下一個單詞是什么,一般需要用到前面的單詞,因為一個句子中前后單詞並不是獨立的。RNNs之所以稱為循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網絡會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。理論上,RNNs能夠對任何長度的序列數據進行處理。但是在實踐中,為了降低復雜性往往假設當前的狀態只與前面的幾個狀態相關,下圖便是一個典型的RNNs:

RNNs包含輸入單元(Input units),輸入集標記為{x0,x1,...,xt,xt+1,...},而輸出單元(Output units)的輸出集則被標記為{y0,y1,...,yt,yt+1.,..}。RNNs還包含隱藏單元(Hidden units),我們將其輸出集標記為{s0,s1,...,st,st+1,...},這些隱藏單元完成了最為主要的工作。你會發現,在圖中:有一條單向流動的信息流是從輸入單元到達隱藏單元的,與此同時另一條單向流動的信息流從隱藏單元到達輸出單元。在某些情況下,RNNs會打破后者的限制,引導信息從輸出單元返回隱藏單元,這些被稱為“Back Projections”,並且隱藏層的輸入還包括上一隱藏層的狀態,即隱藏層內的節點可以自連也可以互連。

上圖將循環神經網絡進行展開成一個全神經網絡。例如,對一個包含5個單詞的語句,那么展開的網絡便是一個五層的神經網絡,每一層代表一個單詞。對於該網絡的計算過程如下:(1)xt表示第t,t=1,2,3...步(step)的輸入。比如,x1為第二個詞的one-hot向量(根據上圖,x0為第一個詞); (2) st為隱藏層的第t步的狀態,它是網絡的記憶單元。 st根據當前輸入層的輸出與上一步隱藏層的狀態進行計算。st=f(Uxt+Wst−1),其中f一般是非線性的激活函數,如tanh或ReLU,在計算s0時,即第一個單詞的隱藏層狀態,需要用到s−1,但是其並不存在,在實現中一般置為0向量;(3)ot是第t步的輸出,如下個單詞的向量表示,ot=softmax(Vst)。

36、簡述sigmoid函數?

常用的非線性激活函數有sigmoid、tanh、relu等等,前兩者sigmoid/tanh比較常見於全連接層,后者relu常見於卷積層。(表達式和函數形式都是基本的)sigmoid函數的功能是相當於把一個實數壓縮至0到1之間。當z是非常大的正數時,g(z)會趨近於1,而z是非常小的負數時,則g(z)會趨近於0。壓縮至0到1有何用處呢?用處是這樣一來便可以把激活函數看作一種“分類的概率”,比如激活函數的輸出為0.9的話便可以解釋為90%的概率為正樣本。sigmod函數,是邏輯斯蒂回歸的壓縮函數,它的性質是可以把分隔平面壓縮到[0,1]區間一個數(向量),在線性分割平面值為0時候正好對應sigmod值為0.5,大於0對應sigmod值大於0.5、小於0對應sigmod值小於0.5;0.5可以作為分類的閥值;exp的形式最值求解時候比較方便,用相乘形式作為logistic損失函數,使得損失函數是凸函數;不足之處是sigmod函數在y趨於0或1時候有死區,控制不好在bp形式傳遞loss時候容易造成梯度彌撒。

37、rcnn、fast-rcnn和faster-rcnn三者的區別是什么?

https://blog.csdn.net/xiaoye5606/article/details/71191429

38、緩解過擬合的方法?

① Dropout;② 加L1/L2正則化;③ BatchNormalization;④ 網絡bagging

39、CNN是什么?關鍵是那些?

CNN是什么,網上一大堆解釋,其關鍵層有:① 輸入層,對數據去均值,做data augmentation等工作。② 卷積層,局部關聯抽取feature。③ 激活層,非線性變化。④ 池化層,下采樣。⑤ 全連接層,增加模型非線性。⑥ 高速通道,快速連接。⑦ BN層,緩解梯度彌散。

40、GRU是什么?GRU對LSTM做了哪些改動?

GRU是Gated Recurrent Units,是循環神經網絡的一種。GRU只有兩個門(update和reset),LSTM有三個門(forget,input,output),GRU直接將hidden state 傳給下一個單元,而LSTM用memory cell 把hidden state 包裝起來。

41、請簡述應當從哪些方向上思考和解決深度學習中出現的的over fitting問題?

(1)選擇合適的損失函數(choosing proper loss )神經網絡的損失函數是非凸的,有多個局部最低點,目標是找到一個可用的最低點。非凸函數是凹凸不平的,但是不同的損失函數凹凸起伏的程度不同,例如下述的平方損失和交叉熵損失,后者起伏更大,且后者更容易找到一個可用的最低點,從而達到優化的目的。- Square Error(平方損失)- Cross Entropy(交叉熵損失)

(2)選擇合適的Mini-batch size:采用合適的Mini-batch進行學習,使用Mini-batch的方法進行學習,一方面可以減少計算量,一方面有助於跳出局部最優點。因此要使用Mini-batch。更進一步,batch的選擇非常重要,batch取太大會陷入局部最小值,batch取太小會抖動厲害,因此要選擇一個合適的batch size。

(3)選擇合適的激活函數(New activation function)使用激活函數把卷積層輸出結果做非線性映射,但是要選擇合適的激活函數。- Sigmoid函數是一個平滑函數,且具有連續性和可微性,它的最大優點就是非線性。但該函數的兩端很緩,會帶來豬隊友的問題,易發生學不動的情況,產生梯度彌散。- ReLU函數是如今設計神經網絡時使用最廣泛的激活函數,該函數為非線性映射,且簡單,可緩解梯度彌散。

(4)選擇合適的自適應學習率(apdative learning rate)- 學習率過大,會抖動厲害,導致沒有優化提升- 學習率太小,下降太慢,訓練會很慢

(5)使用動量(Momentum)在梯度的基礎上使用動量,有助於沖出局部最低點。如果以上五部分都選對了,效果還不好,那就是產生過擬合了,可使如下方法來防止過擬合,分別是·1.早停法(earyly stoping)。早停法將數據分成訓練集和驗證集,訓練集用來計算梯度、更新權重和閾值,驗證集用來估計誤差,若訓練集誤差降低但驗證集誤差升高,則停止訓練,同時返回具有最小驗證集誤差的連接權和閾值。·2.權重衰減(Weight Decay)。到訓練的后期,通過衰減因子使權重的梯度下降地越來越緩。·3.Dropout。Dropout是正則化的一種處理,以一定的概率關閉神經元的通路,阻止信息的傳遞。由於每次關閉的神經元不同,從而得到不同的網路模型,最終對這些模型進行融合。4.調整網絡結構(Network Structure)。

42、神經網絡中,是否隱藏層如果具有足夠數量的單位,它就可以近似任何連續函數?

通用逼近性定理指出,一個具有單個隱藏層和標准激活函數的簡單前饋神經網絡(即多層感知器),如果隱藏層具有足夠數量的單位,它就可以近似任何連續函數。討論: 盡管通用逼近定理指出,具有足夠參數的神經網絡可以近似一個真實的分類 / 回歸函數,但它並沒有說明這些參數是否可以通過隨機梯度下降這樣的過程來習得。另外,你可能想知道我們是否可以從理論上計算出需要多少神經元才能很好地近似給定的函數。

43、為什么更深的網絡更好?

深度更深一般參數更多,參數多,表示模型的搜索空間就越大,必須有足夠的數據才能更好地刻畫出模型在空間上的分布,其泛化能力就越強。

44、是否數據越多有利於更深的神經網絡?

深度學習和大數據密切相關;通常認為,當數據集的規模大到足夠克服過擬合時,深度學習只會比其他技術(如淺層神經網絡和隨機森林)更有效,並更有利於增強深層網絡的表達性。神經網絡在數據集大小方面上表現始終優於 SVM 和隨機森林。隨着數據集大小的增加,性能上的差距也隨之增加,至少在神經網絡的正確率開始飽和之前,這表明神經網絡更有效地利用了不斷增加的數據集。然而,如果有足夠的數據,即使是 SVM 也會有可觀的正確率。深度網絡比淺層網絡的表現更好。雖然增加的數據集大小確實會像我們預計的那樣有利於神經網絡。但有趣的是,在相對較小的數據集上,神經網絡已經比其他技術表現得更好。似乎 2 層網絡並沒有顯著的過擬合,即使我們預計某些特征(如 6-12 特征,信號水平低)導致網絡過擬合。同樣有趣的是,SVM 看上去似乎有足夠的數據來接近於 1.0。

45、不平衡數據是否會摧毀神經網絡?

數據不平衡:一個類的樣本多余另外的樣本,那么神經網絡可能就無法學會如何區分這些類。在這個實驗中,我們探討這一情況是否存在。同時我們還探討了過采樣是否可以減輕問題帶來的影響,這是一種流行的補救措施,該措施使用少數類中抽樣替換的樣本。研究結果表明,類的不平衡無疑地降低了分類的正確率。重采樣法可以顯著提高性能。 重采樣法對提高分類正確率有顯著的影響,這可能有點讓人驚訝了,因為它並沒有將分類器展示少數類中的新訓練的樣本。但該圖顯示,重采樣法足以“助推(nudge)”或將決策邊界推向正確的方向。在重采樣法不是有效的情況下,那么可能需要復合方式來合成新的訓練樣本,以提高正確率。網絡訓練數據集時網絡的泛化總是趨向於樣本多的結構,和我們認識人一樣見過一次的人和沒見過的人一起出現時我們總是對見過的人有印象。

46、如何判斷一個神經網絡是記憶還是泛化?

具有許多參數的神經網絡具有記憶大量訓練樣本的能力。那么,神經網絡是僅僅記憶訓練樣本(然后簡單地根據最相似的訓練點對測試點進行分類),還是它們實際上是在提取模式並進行歸納?這有什么不同嗎?人們認為存在不同之處的一個原因是,神經網絡學習隨機分配標簽不同於它學習重復標簽的速度。這是Arpit 等人在論文中使用的策略之一。(得到是一個可以預測新事物的模型,效果好不就行了,判斷記憶和泛化的目的是什么呢)

47、無監督降維提供的是幫助還是摧毀?

有益

48、是否可以將任何非線性作為激活函數? 

在通過具有超出典型 ReLU() 和 tanh() 的特殊激活函數的神經網絡獲得小幅提高的研究,已有多篇論文報道。我們並非試圖開發專門的激活函數,而是簡單地詢問它是否可能在神經網絡中使用任何舊的非線性函數?除去 sign(x) 外,所有的非線性激活函數對分類任務都是非常有效的。結果有些令人吃驚,因為所有函數都同樣有效。事實上,像 x2 這樣的對稱激活函數表現得和ReLUs 一樣好!從這個實驗中,我們應該謹慎地推斷出太多的原因。

49、批大小如何影響測試正確率?

運行時間確實隨着批大小的增加而下降。然而,這導致了測試正確率的妥協,因為測試正確率隨着批大小的增加而單調遞減。這很有趣,但這與普遍的觀點不一致,嚴格來說,即中等規模的批大小更適用於訓練。這可能是由於我們沒有調整不同批大小的學習率。因為更大的批大小運行速度更快。總體而言,對批大小的最佳折衷似乎是為 64 的批大小。

50、損失函數重要嗎?

損失函數(loss function)是用來估量你模型的預測值f(x)與真實值Y的不一致程度,除去陰性對照外,所有的損失都有類似的表現。損失函數是標簽與邏輯之間的區別,提升到四次冪,其性能要比其他差一些。 損失函數的選擇對最終結果沒有實質影響,這也許不足為奇,因為這些損失函數非常相似。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM