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

 

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

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

二、已知:大腦是有不少個叫作神經元的東西構成,神經網絡是對大腦的簡單的數學表達。每個神經元都有輸入、處理函數和輸出。神經元組合起來造成了網絡,能夠擬合任何函數。爲了獲得最佳的神經網絡,咱們用梯度降低方法不斷更新模型。數組

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

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

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

三、訓練CNN時,能夠對輸入進行旋轉、平移、縮放等預處理提升模型泛化能力。這麼說是對,仍是不對?(正確答案:對)dom

擴充數據是提升泛化能力經常使用的方式,對數據的平移、旋轉等是對CNN訓練數據的擴充的操做方式。機器學習

四、下面哪項操做能實現跟神經網絡中Dropout的相似效果?ide

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降維算法。

五、下列哪一項在神經網絡中引入了非線性?(正確: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)調參的經驗?

一、參數初始化,參數初始化影響收斂速度和收斂結果甚至形成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

二、數據預處理方式:

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

三、訓練技巧: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初始化,在小數據上,不只能夠有效提升收斂速度,也能夠能夠提升結果。六、儘可能對數據作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.七、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)sig:容易出現梯度消失(gradient  vanishing)的現象:當激活函數接近飽和區時,變化太緩慢,導數接近0,根據後向傳遞的數學依據是微積分求導的鏈式法則,當前導數須要以前各層導數的乘積,幾個比較小的數相乘,導數結果很接近0,從而沒法完成深層網絡的訓練。2)Sigmoid的輸出不是0均值(zero-centered)的:這會致使後層的神經元的輸入是非0均值的信號,這會對梯度產生影響。以 f=sigmoid(wx+b)爲例, 假設輸入均爲正數(或負數),那麼對w的導數老是正數(或負數),這樣在反向傳播過程當中要麼都往正方向更新,要麼都往負方向更新,致使有一種捆綁效果,使得收斂緩慢。3)冪運算相對耗時.

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

三、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的缺點,可是參數數目翻倍。

1六、爲何引入非線性激勵函數?

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

上圖能夠很形象的解釋這個問題,左圖用一根線是沒法劃分的。通過一系列變換後,就變成線性可解的問題了。若是不用激勵函數(其實至關於激勵函數是f(x) = x),在這種狀況下你每一層輸出都是上層輸入的線性函數,很容易驗證,不管你神經網絡有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果至關,這種狀況就是最原始的感知機(Perceptron)了。正由於上面的緣由,咱們決定引入非線性函數做爲激勵函數,這樣深層神經網絡就有意義了(再也不是輸入的線性組合,能夠逼近任意函數)。最先的想法是sigmoid函數或者tanh函數,輸出有界,很容易充當下一層輸入(以及一些人的生物解釋)。

1七、請問人工神經網絡中爲何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的位置會有更好的效果。

1八、爲何LSTM模型中既存在sigmoid又存在tanh兩種激活函數,而不是選擇統一的sigmoid或者tanh?這樣作的目的是什麼?

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

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

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

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

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

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

2一、廣義線性模型是怎麼應用到深度學習的?

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

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

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

2三、簡述神經網絡發展史?

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。

2四、深度學習經常使用方法?

全鏈接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)也都有相應的研究。

2五、神經網絡發展史?

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

2六、神經網絡中激活函數的真正意義?一個激活函數須要具備哪些必要的屬性?還有哪些屬性是好的屬性但沒必要要的?

(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的局部極值很是少。

2八、CNN經常使用模型

2九、爲何不少作人臉的Paper會最後加入一個Local Connected Conv?

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

30、什麼是梯度爆炸:

偏差梯度是神經網絡訓練過程當中計算的方向和數量,用於以正確的方向和合適的量更新網絡權重。在深層網絡或循環神經網絡中,偏差梯度可在更新中累積,變成很是大的梯度,而後致使網絡權重的大幅更新,並所以使網絡變得不穩定。在極端狀況下,權重的值變得很是大,以致於溢出致使NaN值。網絡層之間的梯度(值大於 1.0)重複相乘致使的指數級增加會產生梯度爆炸。

3一、梯度爆炸會引起什麼問題?

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

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

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

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

(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 正則化項進行權重正則化。

3四、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中供下一次計算。

3五、什麼是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)。

3六、簡述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.五、小於0對應sigmod值小於0.5;0.5能夠做爲分類的閥值;exp的形式最值求解時候比較方便,用相乘形式做爲logistic損失函數,使得損失函數是凸函數;不足之處是sigmod函數在y趨於0或1時候有死區,控制很差在bp形式傳遞loss時候容易形成梯度彌撒。

3七、rcnn、fast-rcnn和faster-rcnn三者的區別是什麼?

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

3八、緩解過擬合的方法?

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

3九、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 包裝起來。

4一、請簡述應當從哪些方向上思考和解決深度學習中出現的的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)。

4二、神經網絡中,是否隱藏層若是具備足夠數量的單位,它就能夠近似任何連續函數?

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

4三、爲何更深的網絡更好?

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

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

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

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

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

4六、如何判斷一個神經網絡是記憶仍是泛化?

具備許多參數的神經網絡具備記憶大量訓練樣本的能力。那麼,神經網絡是僅僅記憶訓練樣本(而後簡單地根據最類似的訓練點對測試點進行分類),仍是它們其實是在提取模式並進行概括?這有什麼不一樣嗎?人們認爲存在不一樣之處的一個緣由是,神經網絡學習隨機分配標籤不一樣於它學習重複標籤的速度。這是Arpit 等人在論文中使用的策略之一。(獲得是一個能夠預測新事物的模型,效果好不就好了,判斷記憶和泛化的目的是什麼呢)

4七、無監督降維提供的是幫助仍是摧毀?

有益

4八、是否能夠將任何非線性做爲激活函數? 

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

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

運行時間確實隨着批大小的增長而降低。然而,這致使了測試正確率的妥協,由於測試正確率隨着批大小的增長而單調遞減。這頗有趣,但這與廣泛的觀點不一致,嚴格來講,即中等規模的批大小更適用於訓練。這多是因爲咱們沒有調整不一樣批大小的學習率。由於更大的批大小運行速度更快。整體而言,對批大小的最佳折衷彷佛是爲 64 的批大小。

50、損失函數重要嗎?

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

相關文章
相關標籤/搜索