深度学习笔记第一门课第四周:深层神经网络
本文是吳恩達老師的深度學習課程[1]筆記部分。
作者:黃海廣[2]
主要編寫人員:黃海廣、林興木(第四所有底稿,第五課第一二周,第三周前三節)、祝彥森:(第三課所有底稿)、賀志堯(第五課第三周底稿)、王翔、胡瀚文、 余笑、 鄭浩、李懷松、 朱越鵬、陳偉賀、 曹越、 路皓翔、邱牧宸、 唐天澤、 張浩、 陳志豪、 游忍、 澤霖、沈偉臣、 賈紅順、 時超、 陳哲、趙一帆、 胡瀟楊、段希、于沖、張鑫倩
參與編輯人員:黃海廣、陳康凱、石晴路、鐘博彥、向偉、嚴鳳龍、劉成 、賀志堯、段希、陳瑤、林家泳、王翔、 謝士晨、蔣鵬
備注:筆記和作業(含數據、原始作業文件)、視頻都在?github[3]中下載。
我將陸續將課程筆記發布在公眾號“機器學習初學者”,敬請關注。
第四周:深層神經網絡(Deep Neural Networks)
4.1 深層神經網絡(Deep L-layer neural network)
目前為止我們學習了只有一個單獨隱藏層的神經網絡的正向傳播和反向傳播,還有邏輯回歸,并且你還學到了向量化,這在隨機初始化權重時是很重要。
本周所要做的是把這些理念集合起來,就可以執行你自己的深度神經網絡。
復習下前三周的課的內容:
邏輯回歸,結構如下圖左邊。一個隱藏層的神經網絡,結構下圖右邊:
注意,神經網絡的層數是這么定義的:從左到右,由 0 開始定義,比如上邊右圖,、、,這層是第 0 層,這層左邊的隱藏層是第 1 層,由此類推。如下圖左邊是兩個隱藏層的神經網絡,右邊是 5 個隱藏層的神經網絡。
嚴格上來說邏輯回歸也是一個一層的神經網絡,而上邊右圖一個深得多的模型,淺與深僅僅是指一種程度。記住以下要點:
有一個隱藏層的神經網絡,就是一個兩層神經網絡。記住當我們算神經網絡的層數時,我們不算輸入層,我們只算隱藏層和輸出層。
但是在過去的幾年中,DLI(深度學習學院 deep learning institute)已經意識到有一些函數,只有非常深的神經網絡能學會,而更淺的模型則辦不到。盡管對于任何給定的問題很難去提前預測到底需要多深的神經網絡,所以先去嘗試邏輯回歸,嘗試一層然后兩層隱含層,然后把隱含層的數量看做是另一個可以自由選擇大小的超參數,然后再保留交叉驗證數據上評估,或者用你的開發集來評估。
我們再看下深度學習的符號定義:
上圖是一個四層的神經網絡,有三個隱藏層。我們可以看到,第一層(即左邊數過去第二層,因為輸入層是第 0 層)有 5 個神經元數目,第二層 5 個,第三層 3 個。
我們用 L 表示層數,上圖:,輸入層的索引為“0”,第一個隱藏層,表示有 5 個隱藏神經元,同理,,=(輸出單元為 1)。而輸入層,。
在不同層所擁有的神經元的數目,對于每層l都用來記作l層激活后結果,我們會在后面看到在正向傳播時,最終能你會計算出。
通過用激活函數??計算,激活函數也被索引為層數,然后我們用來記作在l層計算值的權重。類似的,里的方程也一樣。
最后總結下符號約定:
輸入的特征記作,但是同樣也是 0 層的激活函數,所以。
最后一層的激活函數,所以是等于這個神經網絡所預測的輸出結果。
4.2 前向傳播和反向傳播(Forward and backward propagation)
之前我們學習了構成深度神經網絡的基本模塊,比如每一層都有前向傳播步驟以及一個相反的反向傳播步驟,這次視頻我們講講如何實現這些步驟。
先講前向傳播,輸入,輸出是,緩存為;從實現的角度來說我們可以緩存下和,這樣更容易在不同的環節中調用函數。
所以前向傳播的步驟可以寫成:?
?
向量化實現過程可以寫成:?
?
前向傳播需要喂入也就是,來初始化;初始化的是第一層的輸入值。對應于一個訓練樣本的輸入特征,而對應于一整個訓練樣本的輸入特征,所以這就是這條鏈的第一個前向函數的輸入,重復這個步驟就可以從左到右計算前向傳播。
下面講反向傳播的步驟:
輸入為,輸出為,,?
所以反向傳播的步驟可以寫成:
(1)
(2)
(3)
(4)
(5)
式子(5)由式子(4)帶入式子(1)得到,前四個式子就可實現反向函數。
向量化實現過程可以寫成:
(6)
(7)
(8)
(9)
總結一下:
第一層你可能有一個ReLU激活函數,第二層為另一個ReLU激活函數,第三層可能是sigmoid函數(如果你做二分類的話),輸出值為,用來計算損失;這樣你就可以向后迭代進行反向傳播求導來求,?,?,?,?,。在計算的時候,緩存會把?傳遞過來,然后回傳,?,可以用來計算,但我們不會使用它,這里講述了一個三層網絡的前向和反向傳播,還有一個細節沒講就是前向遞歸——用輸入數據來初始化,那么反向遞歸(使用Logistic回歸做二分類)——對?求導。
忠告:補補微積分和線性代數,多推導,多實踐。
4.3 深層網絡中的前向傳播(Forward propagation in a Deep Network)
跟往常一樣,我們先來看對其中一個訓練樣本如何應用前向傳播,之后討論向量化的版本。
第一層需要計算,(可以看做)
第二層需要計算,
以此類推,
第四層為,
前向傳播可以歸納為多次迭代,。
向量化實現過程可以寫成:
,?(
這里只能用一個顯式for循環,從 1 到,然后一層接著一層去計算。下一節講的是避免代碼產生 BUG,我所做的其中一件非常重要的工作。
4.4 核對矩陣的維數(Getting your matrix dimensions right)
當實現深度神經網絡的時候,其中一個我常用的檢查代碼是否有錯的方法就是拿出一張紙過一遍算法中矩陣的維數。
的維度是(下一層的維數,前一層的維數),即: (,);
的維度是(下一層的維數,1),即:
?: (;
,:?;
和維度相同,和維度相同,且和向量化維度不變,但,以及的維度會向量化后發生變化。
向量化后:
可以看成由每一個單獨的疊加而得到,,
為訓練集大小,所以的維度不再是,而是。
:,
在你做深度神經網絡的反向傳播時,一定要確認所有的矩陣維數是前后一致的,可以大大提高代碼通過率。下一節我們講為什么深層的網絡在很多問題上比淺層的好。
4.5 為什么使用深層表示?(Why deep representations?)
我們都知道深度神經網絡能解決好多問題,其實并不需要很大的神經網絡,但是得有深度,得有比較多的隱藏層,這是為什么呢?我們一起來看幾個例子來幫助理解,為什么深度神經網絡會很好用。
首先,深度網絡在計算什么?
首先,深度網絡究竟在計算什么?如果你在建一個人臉識別或是人臉檢測系統,深度神經網絡所做的事就是,當你輸入一張臉部的照片,然后你可以把深度神經網絡的第一層,當成一個特征探測器或者邊緣探測器。在這個例子里,我會建一個大概有 20 個隱藏單元的深度神經網絡,是怎么針對這張圖計算的。隱藏單元就是這些圖里這些小方塊(第一張大圖),舉個例子,這個小方塊(第一行第一列)就是一個隱藏單元,它會去找這張照片里“|”邊緣的方向。那么這個隱藏單元(第四行第四列),可能是在找(“—”)水平向的邊緣在哪里。之后的課程里,我們會講專門做這種識別的卷積神經網絡,到時候會細講,為什么小單元是這么表示的。你可以先把神經網絡的第一層當作看圖,然后去找這張照片的各個邊緣。我們可以把照片里組成邊緣的像素們放在一起看,然后它可以把被探測到的邊緣組合成面部的不同部分(第二張大圖)。比如說,可能有一個神經元會去找眼睛的部分,另外還有別的在找鼻子的部分,然后把這許多的邊緣結合在一起,就可以開始檢測人臉的不同部分。最后再把這些部分放在一起,比如鼻子眼睛下巴,就可以識別或是探測不同的人臉(第三張大圖)。
你可以直覺上把這種神經網絡的前幾層當作探測簡單的函數,比如邊緣,之后把它們跟后幾層結合在一起,那么總體上就能學習更多復雜的函數。這些圖的意義,我們在學習卷積神經網絡的時候再深入了解。還有一個技術性的細節需要理解的是,邊緣探測器其實相對來說都是針對照片中非常小塊的面積。就像這塊(第一行第一列),都是很小的區域。面部探測器就會針對于大一些的區域,但是主要的概念是,一般你會從比較小的細節入手,比如邊緣,然后再一步步到更大更復雜的區域,比如一只眼睛或是一個鼻子,再把眼睛鼻子裝一塊組成更復雜的部分。
這種從簡單到復雜的金字塔狀表示方法或者組成方法,也可以應用在圖像或者人臉識別以外的其他數據上。比如當你想要建一個語音識別系統的時候,需要解決的就是如何可視化語音,比如你輸入一個音頻片段,那么神經網絡的第一層可能就會去先開始試著探測比較低層次的音頻波形的一些特征,比如音調是變高了還是低了,分辨白噪音,咝咝咝的聲音,或者音調,可以選擇這些相對程度比較低的波形特征,然后把這些波形組合在一起就能去探測聲音的基本單元。在語言學中有個概念叫做音位,比如說單詞 ca,c 的發音,“嗑”就是一個音位,a 的發音“啊”是個音位,t 的發音“特”也是個音位,有了基本的聲音單元以后,組合起來,你就能識別音頻當中的單詞,單詞再組合起來就能識別詞組,再到完整的句子。
所以深度神經網絡的這許多隱藏層中,較早的前幾層能學習一些低層次的簡單特征,等到后幾層,就能把簡單的特征結合起來,去探測更加復雜的東西。比如你錄在音頻里的單詞、詞組或是句子,然后就能運行語音識別了。同時我們所計算的之前的幾層,也就是相對簡單的輸入函數,比如圖像單元的邊緣什么的。到網絡中的深層時,你實際上就能做很多復雜的事,比如探測面部或是探測單詞、短語或是句子。
有些人喜歡把深度神經網絡和人類大腦做類比,這些神經科學家覺得人的大腦也是先探測簡單的東西,比如你眼睛看得到的邊緣,然后組合起來才能探測復雜的物體,比如臉。這種深度學習和人類大腦的比較,有時候比較危險。但是不可否認的是,我們對大腦運作機制的認識很有價值,有可能大腦就是先從簡單的東西,比如邊緣著手,再組合成一個完整的復雜物體,這類簡單到復雜的過程,同樣也是其他一些深度學習的靈感來源,之后的視頻我們也會繼續聊聊人類或是生物學理解的大腦。
Small:隱藏單元的數量相對較少
Deep:隱藏層數目比較多
深層的網絡隱藏單元數量相對較少,隱藏層數目較多,如果淺層的網絡想要達到同樣的計算結果則需要指數級增長的單元數量才能達到。
另外一個,關于神經網絡為何有效的理論,來源于電路理論,它和你能夠用電路元件計算哪些函數有著分不開的聯系。根據不同的基本邏輯門,譬如與門、或門、非門。在非正式的情況下,這些函數都可以用相對較小,但很深的神經網絡來計算,小在這里的意思是隱藏單元的數量相對比較小,但是如果你用淺一些的神經網絡計算同樣的函數,也就是說在我們不能用很多隱藏層時,你會需要成指數增長的單元數量才能達到同樣的計算結果。
我再來舉個例子,用沒那么正式的語言介紹這個概念。假設你想要對輸入特征計算異或或是奇偶性,你可以算,假設你有或者個特征,如果你畫一個異或的樹圖,先要計算,的異或,然后是和。技術上來說如果你只用或門,還有非門的話,你可能會需要幾層才能計算異或函數,但是用相對小的電路,你應該就可以計算異或了。然后你可以繼續建這樣的一個異或樹圖(上圖左),那么你最后會得到這樣的電路來輸出結果,,也就是輸入特征的異或,或是奇偶性,要計算異或關系。這種樹圖對應網絡的深度應該是,那么節點的數量和電路部件,或是門的數量并不會很大,你也不需要太多門去計算異或。
但是如果你不能使用多隱層的神經網絡的話,在這個例子中隱層數為,比如你被迫只能用單隱藏層來計算的話,這里全部都指向從這些隱藏單元到后面這里,再輸出,那么要計算奇偶性,或者異或關系函數就需要這一隱層(上圖右方框部分)的單元數呈指數增長才行,因為本質上來說你需要列舉耗盡種可能的配置,或是種輸入比特的配置。異或運算的最終結果是 1 或 0,那么你最終就會需要一個隱藏層,其中單元數目隨輸入比特指數上升。精確的說應該是個隱藏單元數,也就是。
我希望這能讓你有點概念,意識到有很多數學函數用深度網絡計算比淺網絡要容易得多,我個人倒是認為這種電路理論,對訓練直覺思維沒那么有用,但這個結果人們還是經常提到的,用來解釋為什么需要更深層的網絡。
除了這些原因,說實話,我認為“深度學習”這個名字挺唬人的,這些概念以前都統稱為有很多隱藏層的神經網絡,但是深度學習聽起來多高大上,太深奧了,對么?這個詞流傳出去以后,這是神經網絡的重新包裝或是多隱藏層神經網絡的重新包裝,激發了大眾的想象力。拋開這些公關概念重新包裝不談,深度網絡確實效果不錯,有時候人們還是會按照字面意思鉆牛角尖,非要用很多隱層。但是當我開始解決一個新問題時,我通常會從logistic回歸開始,再試試一到兩個隱層,把隱藏層數量當作參數、超參數一樣去調試,這樣去找比較合適的深度。但是近幾年以來,有一些人會趨向于使用非常非常深邃的神經網絡,比如好幾打的層數,某些問題中只有這種網絡才是最佳模型。
這就是我想講的,為什么深度學習效果拔群的直覺解釋,現在我們來看看除了正向傳播以外,反向傳播該怎么具體實現。
4.6 搭建神經網絡塊(Building blocks of deep neural networks)
這周的前幾個視頻和之前幾周的視頻里,你已經看到過正向反向傳播的基礎組成部分了,它們也是深度神經網絡的重要組成部分,現在我們來用它們建一個深度神經網絡。
這是一個層數較少的神經網絡,我們選擇其中一層(方框部分),從這一層的計算著手。在第層你有參數和,正向傳播里有輸入的激活函數,輸入是前一層,輸出是,我們之前講過,,那么這就是你如何從輸入走到輸出的。之后你就可以把的值緩存起來,我在這里也會把這包括在緩存中,因為緩存的對以后的正向反向傳播的步驟非常有用。
然后是反向步驟或者說反向傳播步驟,同樣也是第層的計算,你會需要實現一個函數輸入為,輸出的函數。一個小細節需要注意,輸入在這里其實是以及所緩存的值,之前計算好的值,除了輸出的值以外,也需要輸出你需要的梯度和,這是為了實現梯度下降學習。
這就是基本的正向步驟的結構,我把它成為稱為正向函數,類似的在反向步驟中會稱為反向函數。總結起來就是,在 l 層,你會有正向函數,輸入并且輸出,為了計算結果你需要用和,以及輸出到緩存的。然后用作反向傳播的反向函數,是另一個函數,輸入,輸出,你就會得到對激活函數的導數,也就是希望的導數值。是會變的,前一層算出的激活函數導數。在這個方塊(第二個)里你需要和,最后你要算的是。然后這個方塊(第三個)中,這個反向函數可以計算輸出和。我會用紅色箭頭標注標注反向步驟,如果你們喜歡,我可以把這些箭頭涂成紅色。
然后如果實現了這兩個函數(正向和反向),然后神經網絡的計算過程會是這樣的:
把輸入特征,放入第一層并計算第一層的激活函數,用表示,你需要和來計算,之后也緩存值。之后喂到第二層,第二層里,需要用到和,你會需要計算第二層的激活函數。后面幾層以此類推,直到最后你算出了,第層的最終輸出值。在這些過程里我們緩存了所有的值,這就是正向傳播的步驟。
對反向傳播的步驟而言,我們需要算一系列的反向迭代,就是這樣反向計算梯度,你需要把的值放在這里,然后這個方塊會給我們的值,以此類推,直到我們得到和,你還可以計算多一個輸出值,就是,但這其實是你的輸入特征的導數,并不重要,起碼對于訓練監督學習的權重不算重要,你可以止步于此。反向傳播步驟中也會輸出和,這會輸出和等等。目前為止你算好了所有需要的導數,稍微填一下這個流程圖。
神經網絡的一步訓練包含了,從開始,也就是??然后經過一系列正向傳播計算得到,之后再用輸出值計算這個(第二行最后方塊),再實現反向傳播。現在你就有所有的導數項了,也會在每一層被更新為α,也一樣,α,反向傳播就都計算完畢,我們有所有的導數值,那么這是神經網絡一個梯度下降循環。
繼續下去之前再補充一個細節,概念上會非常有幫助,那就是把反向函數計算出來的值緩存下來。當你做編程練習的時候去實現它時,你會發現緩存可能很方便,可以迅速得到和的值,非常方便的一個方法,在編程練習中你緩存了,還有和對吧?從實現角度上看,我認為是一個很方便的方法,可以將參數復制到你在計算反向傳播時所需要的地方。好,這就是實現過程的細節,做編程練習時會用到。
現在你們見過實現深度神經網絡的基本元件,在每一層中有一個正向傳播步驟,以及對應的反向傳播步驟,以及把信息從一步傳遞到另一步的緩存。下一個視頻我們會講解這些元件具體實現過程,我們來看下一個視頻吧。
4.7 參數 VS 超參數(Parameters vs Hyperparameters)
想要你的深度神經網絡起很好的效果,你還需要規劃好你的參數以及超參數。
什么是超參數?
比如算法中的learning rate?(學習率)、iterations(梯度下降法循環的數量)、(隱藏層數目)、(隱藏層單元數目)、choice of activation function(激活函數的選擇)都需要你來設置,這些數字實際上控制了最后的參數和的值,所以它們被稱作超參數。
實際上深度學習有很多不同的超參數,之后我們也會介紹一些其他的超參數,如momentum、mini batch size、regularization parameters等等。
如何尋找超參數的最優值?
走Idea—Code—Experiment—Idea這個循環,嘗試各種不同的參數,實現模型并觀察是否成功,然后再迭代。
今天的深度學習應用領域,還是很經驗性的過程,通常你有個想法,比如你可能大致知道一個最好的學習率值,可能說最好,我會想先試試看,然后你可以實際試一下,訓練一下看看效果如何。然后基于嘗試的結果你會發現,你覺得學習率設定再提高到 0.05 會比較好。如果你不確定什么值是最好的,你大可以先試試一個學習率,再看看損失函數 J 的值有沒有下降。然后你可以試一試大一些的值,然后發現損失函數的值增加并發散了。然后可能試試其他數,看結果是否下降的很快或者收斂到在更高的位置。你可能嘗試不同的并觀察損失函數這么變了,試試一組值,然后可能損失函數變成這樣,這個值會加快學習過程,并且收斂在更低的損失函數值上(箭頭標識),我就用這個值了。
在前面幾頁中,還有很多不同的超參數。然而,當你開始開發新應用時,預先很難確切知道,究竟超參數的最優值應該是什么。所以通常,你必須嘗試很多不同的值,并走這個循環,試試各種參數。試試看 5 個隱藏層,這個數目的隱藏單元,實現模型并觀察是否成功,然后再迭代。這頁的標題是,應用深度學習領域,一個很大程度基于經驗的過程,憑經驗的過程通俗來說,就是試直到你找到合適的數值。
另一個近來深度學習的影響是它用于解決很多問題,從計算機視覺到語音識別,到自然語言處理,到很多結構化的數據應用,比如網絡廣告或是網頁搜索或產品推薦等等。我所看到過的就有很多其中一個領域的研究員,這些領域中的一個,嘗試了不同的設置,有時候這種設置超參數的直覺可以推廣,但有時又不會。所以我經常建議人們,特別是剛開始應用于新問題的人們,去試一定范圍的值看看結果如何。然后下一門課程,我們會用更系統的方法,用系統性的嘗試各種超參數取值。然后其次,甚至是你已經用了很久的模型,可能你在做網絡廣告應用,在你開發途中,很有可能學習率的最優數值或是其他超參數的最優值是會變的,所以即使你每天都在用當前最優的參數調試你的系統,你還是會發現,最優值過一年就會變化,因為電腦的基礎設施,CPU或是GPU可能會變化很大。所以有一條經驗規律可能每幾個月就會變。如果你所解決的問題需要很多年時間,只要經常試試不同的超參數,勤于檢驗結果,看看有沒有更好的超參數數值,相信你慢慢會得到設定超參數的直覺,知道你的問題最好用什么數值。
這可能的確是深度學習比較讓人不滿的一部分,也就是你必須嘗試很多次不同可能性。但參數設定這個領域,深度學習研究還在進步中,所以可能過段時間就會有更好的方法決定超參數的值,也很有可能由于CPU、GPU、網絡和數據都在變化,這樣的指南可能只會在一段時間內起作用,只要你不斷嘗試,并且嘗試保留交叉檢驗或類似的檢驗方法,然后挑一個對你的問題效果比較好的數值。
近來受深度學習影響,很多領域發生了變化,從計算機視覺到語音識別到自然語言處理到很多結構化的數據應用,比如網絡廣告、網頁搜索、產品推薦等等;有些同一領域設置超參數的直覺可以推廣,但有時又不可以,特別是那些剛開始研究新問題的人們應該去嘗試一定范圍內的結果如何,甚至那些用了很久的模型得學習率或是其他超參數的最優值也有可能會改變。
在下個課程我們會用系統性的方法去嘗試各種超參數的取值。有一條經驗規律:經常試試不同的超參數,勤于檢查結果,看看有沒有更好的超參數取值,你將會得到設定超參數的直覺。
4.8 深度學習和大腦的關聯性(What does this have to do with the brain?)
深度學習和大腦有什么關聯性嗎?
關聯不大。
那么人們為什么會說深度學習和大腦相關呢?
當你在實現一個神經網絡的時候,那些公式是你在做的東西,你會做前向傳播、反向傳播、梯度下降法,其實很難表述這些公式具體做了什么,深度學習像大腦這樣的類比其實是過度簡化了我們的大腦具體在做什么,但因為這種形式很簡潔,也能讓普通人更愿意公開討論,也方便新聞報道并且吸引大眾眼球,但這個類比是非常不準確的。
一個神經網絡的邏輯單元可以看成是對一個生物神經元的過度簡化,但迄今為止連神經科學家都很難解釋究竟一個神經元能做什么,它可能是極其復雜的;它的一些功能可能真的類似logistic回歸的運算,但單個神經元到底在做什么目前還沒有人能夠真正可以解釋。
深度學習的確是個很好的工具來學習各種很靈活很復雜的函數,學習到從到的映射,在監督學習中學到輸入到輸出的映射。
但這個類比還是很粗略的,這是一個logistic回歸單元的sigmoid激活函數,這里是一個大腦中的神經元,圖中這個生物神經元,也是你大腦中的一個細胞,它能接受來自其他神經元的電信號,比如,或可能來自于其他神經元?。其中有一個簡單的臨界計算值,如果這個神經元突然激發了,它會讓電脈沖沿著這條長長的軸突,或者說一條導線傳到另一個神經元。
所以這是一個過度簡化的對比,把一個神經網絡的邏輯單元和右邊的生物神經元對比。至今為止其實連神經科學家們都很難解釋,究竟一個神經元能做什么。一個小小的神經元其實卻是極其復雜的,以至于我們無法在神經科學的角度描述清楚,它的一些功能,可能真的是類似logistic回歸的運算,但單個神經元到底在做什么,目前還沒有人能夠真正解釋,大腦中的神經元是怎么學習的,至今這仍是一個謎之過程。到底大腦是用類似于后向傳播或是梯度下降的算法,或者人類大腦的學習過程用的是完全不同的原理。
所以雖然深度學習的確是個很好的工具,能學習到各種很靈活很復雜的函數來學到從 x 到 y 的映射。在監督學習中,學到輸入到輸出的映射,但這種和人類大腦的類比,在這個領域的早期也許值得一提。但現在這種類比已經逐漸過時了,我自己也在盡量少用這樣的說法。
這就是神經網絡和大腦的關系,我相信在計算機視覺,或其他的學科都曾受人類大腦啟發,還有其他深度學習的領域也曾受人類大腦啟發。但是個人來講我用這個人類大腦類比的次數逐漸減少了。
參考資料
[1]
深度學習課程:?https://mooc.study.163.com/university/deeplearning_ai
[2]黃海廣:?https://github.com/fengdu78
[3]github:?https://github.com/fengdu78/deeplearning_ai_books
總結
以上是生活随笔為你收集整理的深度学习笔记第一门课第四周:深层神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习笔记第二门课 改善深层神经网络
- 下一篇: 深度学习笔记第二门课 改善深层神经网络