<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      深度學習AI面試問答必備50題

      0
      分享至

      文:城主

      (注:這不是面向初學者的文章。您需要一點基礎知識來理解本文內容。)


      感謝粉絲的熱心推薦。本文對于任何想要準備深度學習面試的人來說都是非常有幫助的。

      本文對應視頻的中英完整版B站傳送門:

      【深度學習AI面試問答50題-嗶哩嗶哩】 https://b23.tv/m1osqBp

      =以下是基于視頻信息重寫的中文書面版=

      本文回答50個最常見的深度學習問題,這些問題是你在參加數據科學、機器學習工程、人工智能工程和研究科學家訪談時可能遇到的。

      深度學習是當今最熱門的話題之一,它構成了大型語言模型和生成式人工智能等主題的基礎。深度學習包含許多復雜的概念,結合了線性代數、數學、微分理論以及先進的算法,它們共同構成了人工智能的這個領域。因此,如果你想在大型語言模型或人工智能方面找到一份工作,那么一定要為此類面試做好準備,因為深度學習將成為面試者測試你的一個重要概念。

      首先,本文將討論的前50個問題中的前10個是基本概念。從深度學習的基本概念開始,探討深度學習和機器學習的區別,討論神經網絡的概念,研究其架構,以及神經元背后的概念。討論反向傳播的概念,它是如何工作的,與梯度下降(GD)有何不同,以及什么是GD。此外,介紹不同的優化器和激活函數,詳細解釋飽和度的概念,以及這是如何導致梯度消失問題的。涵蓋神經網絡訓練和測試過程的各個方面。

      然后,這將是接下來的10個問題。更詳細地介紹反向傳播的概念、與梯度下降的關系,介紹梯度消失和爆炸問題。涵蓋您在面試過程中會被問到的各種具體問題和與深度學習模型相關的問題。介紹損失函數和各種類型的流行損失函數,您在深度學習面試中可能會遇到這些問題。

      在接下來的10個問題中,介紹SGD算法,這是GD的更高級版本。介紹GD的不同版本和變體,這些內容在深度學習面試中會一次又一次地出現,例如批量GD、小批量GD和SGD。將探討它們之間的區別,以及批量大小的作用。介紹Hessian的概念,將Hessian用作不同優化算法的一部分。以及介紹什么是RMS屬性以及什么是臭名昭著的Adam算法。

      接下來10個問題,討論一些更復雜的主題,介紹Adam W的概念,介紹批量歸一化。探討批量歸一化和層歸一化的區別,如何將層歸一化用作Transformer的一部分。討論什么是剩余連接,以及剩余連接的作用。討論梯度裁剪、cavier初始化,以及解決梯度消失問題和梯度爆炸問題的方法。介紹過度擬合的概念,這是您在深度學習面試中可能會遇到的問題。

      最后10個問題介紹神經網絡中的dropout和去正則化的概念。探討過度擬合問題以及如何在神經網絡中解決它。此外,討論dropout和隨機森林的區別。討論訓練與測試的概念,以及退出時的調整。介紹L1正則化、L2正則化,它們之間的區別,以及它們對權重的影響、懲罰的影響以及它們對道德表現影響的嚴重程度。介紹維度準確性的概念以及深度學習如何解決這個問題。然后將介紹生成模型的概念。

      1 什么是深度學習?

      在這個問題中,面試官想了解您是否了解深度學習與機器學習、人工智能相比的優勢。您可以簡要提及神經網絡的概念以及它與人腦的關系。深度學習是機器學習的一個子集,而機器學習又是人工智能的一個子集。這是人工智能的一個分支,涉及訓練人工神經網絡在大量數據上,以識別和學習數據中的隱藏模式、非線性關系,這是傳統機器學習模型(如線性回歸或邏輯回歸或隨機森林和XGBoost)無法做到的。深度學習的核心是層的概念,因為人工神經網絡和一般而言,深度學習試圖復制人類大腦的工作方式以及當我們看到、聽到或聞到某些東西時攔截和獲取來自外界的輸入信號的方式。他們利用這些信息進行學習,并據此決定是否得出結論或采取行動。這正是深度學習試圖實現的目標。深度學習嘗試采用神經網絡的思想,神經網絡是深度學習模型的一種,以便在輸入層中獲取輸入數據,然后通過激活函數對其進行轉換以激活這些神經元,接著將其轉換為激活狀態。這一過程將在我們的隱藏層中進行。深度學習模型的神奇之處在于,它能夠識別輸入數據中的非線性關系,然后產生輸出。這是一個非常高級的過程。

      面試官并不希望你解釋權重和參數的概念,這些我們稍后會講。但是,面試官希望了解你是否對深度學習有較高的理解,也許還希望你能提供深度學習模型的例子。在講述這些時,你肯定要提到人類大腦和神經網絡之間的關系,以及輸入數據、輸入信號、激活和隱藏層的概念。不要過多討論神經網絡架構的細節,而是簡要提及這些深度學習模型。深度學習模型的示例包括人工神經網絡、循環神經網絡、長短期記憶網絡(LSTM)、以及更高級的架構,例如變分自動編碼器。這些模型都基于神經網絡。

      因此,如果我要非常簡短地回答這個問題,我會說深度學習模型是人工智能分支上的機器學習模型的子集,它試圖學習復雜的數據和大量數據,并發現隱藏的模式和復雜的數據結構。這種模式的結構適用于各種類型的任務,包括計算機視覺,機器翻譯任務,以及許多自然語言處理模型,如臭名昭著的ChatGPT,GPT模型或T5等大型語言模型,它們都是基于神經網絡的深度學習模型。

      2 深度學習與傳統的機器學習模型有何不同?

      在這里,面試官希望了解你是否知道深度學習模型相對于機器學習模型的主要優勢。因此,請先提及一些傳統機器學習模型的示例,然后再提及一些深度學習模型的示例,并嘗試將重點放在深度學習模型的一兩個優點上。機器學習模型的一些例子包括線性回歸、邏輯回歸、支持向量機、樸素貝葉斯算法、k均值或聚類以及無監督學習模型DBSCAN。還可以提到一些boosting算法,例如GBM、XGBoost,以及隨機森林,這在任務的進展和分類類型中非常流行。

      然后,我們要提到深度學習模型,它與機器學習模型有根本的不同。并提及人工神經網絡(ANN)、循環神經網絡(RNN)、長短期記憶網絡(LSTM)、門控循環單元(GRU)和自動編碼器等示例,所有這些都基于神經網絡。還要提到卷積神經網絡(CNN),它在計算機視覺領域非常流行。然后指出,第一個最大的區別是傳統的機器學習模型依賴于手動特征提取,而在深度學習模型中,它們會自動執行此操作,并自動按原樣獲取輸入數據。我們不需要執行特征選擇,我們不需要擔心這一點,因為我們的模型由神經網絡表示,特別是具有這些深層的模型,能夠識別所有這些數據中的這些模式,然后為自己提取描述我們的數據的最重要的特征,然后使用它對于不同類型的任務,無論是回歸還是分類。它實際上表現非常好。

      因此,深度學習模型在大數據上表現得非常好,而我們已經看到機器學習模型受到了影響。眾所周知,當數據量增加時,機器學習模型的性能會變得更差。當特征數量增加時,它們開始過度擬合,并且也開始變得不穩定并且無法準確預測輸出。當我們增加數據中的觀察數量時,我們也會在數據中包含復雜的特征。這無疑有助于深度學習模型超越傳統的機器學習模型,特別是在計算機視覺或語音識別、機器翻譯和深度學習模型的思想等任務中。您可以通過觀察不同技術領域中最新的各種應用程序,來理解為什么它們優于機器學習模型。在這些應用程序中,大多數都是基于神經網絡的算法,而非機器學習模型。這主要歸因于深度學習模型的多種能力,包括處理大數據、處理復雜特征以及自我進行特征提取,而不是在模型之外進行,或者受到各種影響,如傳統機器學習模型所面臨的問題。

      3 什么是神經網絡?


      在這里,面試官希望了解您對神經網絡與人類學習方式之間的關系的理解,以及您是否了解這些組件以及組件如何運作。在訓練過程中,您是否知道什么是權重和參數?您是否知道隱藏層是什么,以及它們是一個還是多個?您是否了解深度神經網絡的概念,以及這種信息流如何發生,以及您是否提到了神經網絡的所有這些元素?

      作為這個問題的回答,我想說,神經網絡是深度學習領域和人工智能領域的基本概念。它是一個受生物人腦啟發的計算模型,試圖復制人類學習、解釋信息、獲取輸入數據并處理信息的方式。因此,神經網絡對輸入數據進行訓練,并不斷更新這些信息,學習新的東西,添加新的信息,然后更新可能的結果。最終的目標是最大限度地減少我們在學習過程中所犯的錯誤。

      神經網絡的核心是由神經元組成,就像我們人腦中的神經元一樣。這些神經元一起形成層,包括輸入層(代表我們的輸入數據)和權重(展示了我們需要對不同輸入信號賦予多少重要性)。這些權重就是我們在模型中所說的參數,我們在執行訓練和學習過程時需要不斷更新它們。這些層還包括一個或多個隱藏層,這是我們神經網絡的中間部分。隱藏層可以幫助我們學習這些不同的模式,理解、激活某些神經元并停用或激活較少的其他輸入神經元,然后轉換這些信息。

      在隱藏層之后,我們可以有另一個隱藏層,它將接收來自前一個隱藏層的信息,然后繼續學習過程。反過來,它將能夠學習和理解先前的隱藏層信息。例如,在輸入中,我們有圖像的這些不同像素,我們想要學習這些圖像。為了讓神經網絡學習,它應該能夠首先學習輸入數據中的某種對象。因此,在第一個隱藏層中,它可能會發現某些信號、某些邊緣和某些信息。然后在下一個隱藏層,它將能夠識別特定的物體,比如說貓的耳朵,如果我們想要識別圖像是貓還是狗,然后把這個信息傳遞到下一層,傳遞到下一層,然后我們繼續到最后一層,當我們產生輸出。

      假設您熟悉機器學習,并且正在閱讀本教程,那么您應該熟悉分類、回歸、監督學習的概念。對于傳統的神經網絡,我們會產生輸出,例如,它可以識別概率,即 0 到 1 之間的值,比如說我們的分類任務。然后這個值應該與實際的類進行比較。例如,如果我們有概率,并將其轉換為類別,那么我們可以更新相應的類別。因此,我們有每個時期神經網絡的輸出,然后我們使用這些信息與監督學習過程中的真實標簽進行比較,然后計算誤差。我們試圖了解我們的預測效果如何,然后使用這些信息來了解模型預測結果的準確度。這就是我們所說的損失。然后,我們使用這個損失函數來了解我們需要改變權重多少,我們對神經元的重視程度,我們需要更新這些權重以及模型中的其他參數多少,以便減少我們的模型所犯的錯誤量。神經網絡的基本思想在于獲取輸入,將其放入隱藏層以從輸入數據中學習。這個過程涉及到激活神經元,并可能包含一個或多個隱藏層。通過不斷激活這些神經元,我們可以獲得輸出。我們需要了解模型造成的損失,以及總體成本函數,然后計算我們所說的梯度。雖然我在這里簡單地提到了梯度的概念,但并沒有過多討論它的細節。然后,我們使用這些梯度來了解需要更新多少權重才能改進模型參數。因為最終,我們關心的是這個模型,它具有參數、權重參數、偏差參數,最終將為我們生成最準確的預測。為了達到這個目標,我們需要不斷學習,經歷這個循環,以便正確學習,并生成一個誤差最小的模型,以便能夠正確地從輸入數據中學習。

      4 解釋深度學習中神經元的概念

      在這個問題中,面試官想了解權重的概念,偏差因子的概念,如何使用它們來獲得所謂的 Z 分數,以及如何激活,激活函數用于獲取激活,以及這些權重和偏差因素以及與學習過程的關系的意義是什么。深度學習中的神經元有時被稱為人工神經元,它模仿人腦神經元的功能,但以一種自動且簡單的方式實現。在神經網絡中,模型獲得不同的輸入。這些輸入信號我們稱之為神經元,它接受輸入數據,我們將其表示為 x。我們用這個x來乘以權重,因為這些權重可以告訴我們這個神經元應該有多少重要性,我們需要對這個神經元給予多少關注。然后這些權重乘以這個輸入數據,你稱之為x,這些就是我們添加一個偏差因子,因為當我們執行學習過程時總是會引入偏差。權重乘以輸入數據 x,然后在其上添加偏差因子,這將是我們的 Z 分數。但在下一階段,在接近隱藏層之前,我們使用所謂的激活函數。激活函數,比如 sigmoid 函數、整流線性單元或 Leaky ReLU,所有這些激活函數,它們所做的就是在數學上將非線性引入到我們的神經網絡中。這些激活函數基于權重、輸入數據和偏差因子應用于所有這些不同的 Z 分數,以便了解每個神經元應該被激活多少。在某些情況下,我們可能希望在查看對象并嘗試根據像素了解該圖像中的對象是什么時,我們可能需要激活與該特定區域或該特定對象相關的某些神經元,并且我們不應該激活其他神經元。這正是我們對這些神經元的激活所做的事情。因此,在這里,我們使用這些激活為神經網絡引入非線性,以學習輸入數據中的這些復雜結構。

      5 用簡單的方式解釋神經網絡的架構

      鑒于我們已經回答了前面的問題,都提到了神經網絡的架構和訓練過程的某些部分,這個問題很容易回答,我將在這里使用一個簡單的可視化來表示簡單的神經網絡,該神經網絡僅包含一個隱藏層只是總結我們在之前的面試問題中提到的所有內容。神經網絡就是這種多層結構的模型,每一層都在一步一步地對輸入數據進行變換。把它想象成一條裝配線。裝配線的每個階段都會比前一個階段增加更多的復雜性,而細節和復雜性會為模型執行預測的能力增加更多的價值。一開始,模型有這些輸入層。正如您在這里所看到的,輸入層由 Z1、Z2、Z3 直到 Zn 表示。在這里,您可以將這個元素、這個輸入視為輸入層的一部分,作為描述數據的特征。例如,我們可能想使用神經網絡來估計房屋的價格。我們需要具有某些特征來估算該價格。我們需要學習才能了解如何區分不同的房屋以及這些特征如何影響房價。例如,Z1 可以是這所房子的臥室數量。Z2可以是這所房子的層數。Z3可以是房子是否有游泳池。另一個可能的特征是房子是否已經建成。這棟房子是在哪一年建造的?房子的年齡是多少?所有這些特征描述了房子的某個元素或某個特征。這將幫助我們,也將幫助模型從這個特征中學習并理解。這棟房子的準確價格是多少?


      接著,我們就有了這些不同的權重。如你所見,我們有權重1,1,權重1,2,權重1,3。然后我們就有了第二個輸入對應的權重,第三個特征對應的權重,所以對應于Z3,比如W3,1,W3,2,W3,3等。如你所見,這些權重顯示了一堆正在移動的箭頭,箭頭指向下一層,即我們的隱藏層。

      在這個簡單的架構中,我們只有一個隱藏層,但也可以有更多隱藏層,這通常是傳統深度神經網絡的情況,因此也被稱為“深度”。這些權重的作用是幫助我們理解這個輸入特征應該對第一隱藏單元、第二隱藏單元和第三隱藏單元貢獻多少。

      如你所見,在我們的隱藏層中,我們有三個圓圈。這三個圓圈描述了隱藏層中的隱藏單元。我們有這個簡單的結構,所以我們只有三個隱藏單元。但這是你在訓練模型時可以自己決定的事情。這也是我們所說的可以調整的超參數。

      在這里你可以看到 W1,1 從 Z1 到 H1。這是重要的權重,它告訴我們并告訴神經網絡輸入層應該得到多少關注,什么時候它應該變得重要,什么時候它可以幫助你學習第一個隱藏單元。那么對于H1,我們需要在Z1上施加的權重是多少,所以我們的第一個特征。然后我們有 W1, 2,它描述了我們需要施加在第一個輸入特征上的權重,當識別這一點時,當學習并將信息放入我們的第二個隱藏單元 H2 時。

      這些權重和相應的偏差因子以及輸入數據可以幫助我們計算我們所說的 Z 分數。Z 分數可以表示為權重(W)乘以前面的輸入數據(X),加上偏差因子(B)。

      一旦我們有了 Z 分數,我們就準備添加非線性,即激活,這將幫助我們理解如何執行聚合。當涉及到第一個隱藏單元 H1 時,有四個不同的路徑,即箭頭指向 H1。分別是 W11、W21、W31 和 WN1。這基本上意味著我們有這些不同的輸入特征,并且每個輸入特征都有相應的權重。這有助于我們了解當我們獲得 H1 時,我們需要對這些不同的輸入特征給予多少關注,即我們的隱藏層,我們的第一個隱藏單元。

      我們可以根據不同的權重、不同的輸入信號聚合這些不同的 Z 分數,并且該激活函數可以顯著改變我們在 H1 中計算激活的方式。這正是激活的作用,所以激活函數起作用。

      一旦我們獲得了這些信息,我們就計算了激活,準備好計算輸出,并且在計算 H1、H2 和 H3 后完成輸出。這些隱藏單元已經根據權重、偏差因子和激活函數學習了上一層輸入數據中的信息。然后我們使用最終的權重,即 WH1、WH2、WH3,以便了解每個隱藏單元需要對輸出層做出多少貢獻。

      在這個輸出層中,我們所做的就是以所需的格式獲得輸出。所以可能我們在進行分類時想要得到一個概率,因此我們需要得到一個0到1之間的值。然后在這個輸出層中,我們將得到這個值,我們將它轉換為一個類。我們將其與實際的標簽(例如 0 和 1)進行比較,以了解我們的簡單神經網絡的執行情況。

      6 什么是神經網絡中的激活函數?


      激活函數在神經網絡中起著至關重要的作用,其選擇將決定神經網絡的性能。到目前為止,我們已經討論了很多關于權重的內容,以及如何使用權重、輸入數據或前一層的輸入、前一層的輸出來計算Z分數。我們添加偏差向量以獲得Z分數,然后我們需要應用激活函數以獲得激活。這就是激活函數的作用,它決定了在計算下一層時,每個神經元應該被激活多少。

      在神經網絡中,激活函數引入了非線性的概念。如果我們不使用特定類型的激活函數,我們的模型將類似于線性回歸模型。我們將擁有一個簡單的線性類型的模型,它將能夠揭示線性模式,但無法發現數據中這些復雜的隱藏模式。我們已經看到,在現實世界中,數據大多數時候都包含非線性關系。

      因此,我們引入激活函數,這有助于我們將非線性引入神經網絡。它們就像聚合函數一樣,幫助我們理解如何組合這些不同的輸入、這些不同神經元相應的Z分數,以獲得最終的單個激活量。如果你看這個圖,你可以看到我們正在使用x1、x2直到xn,它們是我們的輸入點。然后我們就有了相應的權重,它告訴我們每個輸入需要激活多少。然后我們需要聚合這些值。我們需要獲得一個單一的激活,然后該激活將基于激活函數。它基本上定義了在計算我們之前看到的隱藏單元的體積時,我們需要添加多少與特定輸入相對應的值。

      有不同種類的激活函數。我簡單提一下,四種流行的激活函數是sigmoid激活函數、雙曲Tang函數,簡稱為Tang函數。另外,我肯定會提到整流器線性單元激活函數,即ReLU。我還提到了Leaky ReLU,即整流器線性單元激活函數的Leaky版本。你也可以,如果你有時間,你也可以指定激活函數,它們就像看門人一樣。因此,他們決定需要從該狀態使用多少信息才能傳遞到下一個狀態。這基本上就是激活函數背后的想法,它使神經網絡能夠正確學習數據中的非線性關系。

      7 列出幾個流行的激活函數并描述它們



      我們在第六個問題中簡單討論了激活函數。因此,在這里我將更詳細地介紹這些不同的激活函數,并且我們還將對它們進行分類。當你被問到這個問題時,你不需要給出所有這些不同類型的例子。僅舉這四個示例中的一個,然后提供此特定激活函數的詳細說明。但在這種情況下,我會做的是,我將為您提供業界廣泛使用的所有四種流行的激活函數,然后由您決定以哪一種作為示例。

      所以我傾向于在這四個激活函數后面進行這樣的分類。所以sigmoid激活函數,Tang激活函數,整流線性單元或短ReLU激活函數,以及Leaky整流線性單元,ReLU激活函數。所以我傾向于說sigmoid函數和Tang函數,它們可以形成一個單一的類別。然后修正的線性單元及其調整版本Leaky ReLU,它們可以形成第二類激活函數。我們很快就會明白原因。

      現在讓我們從sigmoid激活函數開始。如果您熟悉邏輯回歸,那么您很可能會認識這個激活函數,因為當我們嘗試生成類似概率的值(即0到1之間的值)時,邏輯回歸中也會使用sigmoid函數。正如您所看到的,在sigmoid激活函數的情況下,當涉及到描述激活函數的圖表時,我們會得到這條S形曲線。那么,激活函數包含哪些內容呢?

      在計算過程中,我們首先計算出z分數,然后根據前一層的數據進行輸出。例如,我們可以用x來表示這個過程。我們將x乘以權重(假設為w),然后添加偏差因子(假設為b),這樣就可以得到z分數。接下來,我們需要將z分數作為激活函數的輸入。這就是為什么我們需要將z分數轉換為激活函數的原因。

      在這個例子中,我們使用的是sigmoid激活函數。sigmoid激活函數接受輸入(假設為z),然后將其轉換為一個值,這個值等于1除以1加上e的負z次方。這與我們在邏輯回歸中所做的非常相似。

      如你所見,這張圖代表的是一個sigmoid函數,x軸代表所有的z分數,y軸代表相應的激活。你可以看到,對于x的所有值(從負無窮大到正無窮大),相應的z分數(即y軸上的激活)的值都在0和1之間。所以最小值為0,最大值為1。你可以看到,曲線的拐點,也就是我們翻轉曲線時到達的點,是0.5。

      從這個激活函數中,你可以看到,每當我們有負值時,相應的激活就會在0到0.5之間。每當我們有正的z分數時,相應的激活將在0.5到1之間。

      在回答面試問題時,需要記住和提及的一個重要問題是sigmoid函數可能會遭受我們所說的飽和問題。那么,什么是飽和度呢?當我們采用非常大的負值或非常大的正值時,就會發生飽和,然后激活或值(在這種情況下是函數)收斂到相應函數的極值。這就是這里發生的情況。如果我們假設x等于負1,000,那么相應的y值很可能非常接近0,即最小值,因此它是該激活函數的極值。如果我們將x視為一個非常大的正數,例如加1,000,那么相應的激活值將非常接近1,這就是該函數的全局最大值。這就是我們所說的飽和度。

      這意味著,如果我們為z分數取非常大的負數或非常大的正數,那么該激活函數將為我們提供一個輸出,一個非常接近極值的值,即0和1的相應激活函數。稍后,我們將討論如果我們使用此函數作為隱藏層激活的一部分,為什么會出現問題。但是,當涉及到獲取一個值(0到1之間的輸出)時,sigmoid函數是首選的激活函數。

      接下來我們要講的激活函數是雙曲正切激活函數,簡稱tanh函數。如你所見,雙曲正切函數的形狀與sigmoid激活函數非常相似。唯一的區別是,它將所有值轉換為-1和1之間的值,而不是像sigmoid函數那樣轉換為0和1。因此,正如其名稱所示,tang函數是基于幾何主題的概念。如果您對正弦、余弦、正切和余切的概念有所了解,那么您對tang函數也會有所了解,因為這個函數正是基于這些概念。tang函數的作用是將所有的z分數轉換為-1到1之間的值。

      代表此激活函數的fz是一個等于的函數,其分母是e的z次方減去e的負z次方,除以e的z次方加上e的負z次方。它的基本作用是進行轉換,獲取z分數,如果z分數為負,則將其轉換為-1到0之間的值。然后,如果z分數是從0到正無窮大的正數,則相應的激活將在0和1之間。與sigmoid函數一樣,tang函數也是S形的,只有膨脹點,所以它改變其模式的點,即圖形的行為方式,不是在0.5點,而是在0點。與sigmoid函數一樣,tang函數也存在飽和問題。因此,對于大負數和大正數,相應的激活將非常接近極值點,因此該函數的-1和+1可能會出現問題,就像sigmoid函數的情況一樣。因此,不建議將這兩個函數用于隱藏層,而是將它們用于輸出層。

      我們將這兩個函數用于輸出層,是因為我們可以非常方便地將從這兩個函數獲得的值轉換為相應的值,無論是分類情況,因為如果我們獲得0和1之間的值,例如,在sigmoid激活函數的情況下,我們可以將其解釋為概率,然后可以使用該概率來獲取類別,例如類別0或1。然后,可以通過將模型與實際類別進行比較來評估我們的模型,并計算交叉熵,或者可以基于此計算任何其他評估指標。

      稍后,我們將討論為什么這兩個激活函數不應該在層中實際使用,特別是對于具有許多隱藏層的深度神經網絡。但現在,由于這超出了這個問題的范圍,我不想透露細節,因為我們已經涵蓋了很多內容。所以在回答這個問題時你可以提到接下來的兩個激活函數:整流器線性單元和漏整流器線性單元激活函數。兩者非常相似,尤其是在正z分數方面,但在負z分數方面卻有些不同。

      當我們查看整流器線性單元時,實際上是激活函數,您可以看到它看起來像這樣。所以它適用于z時的所有情況,所以激活,如果z分數小于0,那么它是負數,那么相應的激活將為0。所以基本上,這個激活函數不會激活任何負神經元。而對于z分數為正的情況,則相應的激活將完全等于z分數。因此,名稱為線性。因此,如果您查看y等于x的線,并且可視化該線,您可以看到正數部分,因此對于x從0到無窮大為正數的部分,您可以看到y等于x線與我們這里的完全一樣。這就是“線性”這個詞的由來。它類似于線性函數的表示,但只適用于正數。對于正數,我們將得到z分數,并根據其確切數量進行激活。然而,如果z分數為負或神經元為負,則相應的激活不會發生,我們也不會激活這些負值。在所有這些情況下,激活函數會將激活值設置為0。因此,當我們確實想要輸出、我們確實想要考慮這些負值、并且我們想要考慮這些負值并基于它們進行預測時,這可能會出現問題。在這些情況下,我們需要調整這個ReLU,這樣我們就可以更好地使用我們所說的Leaky ReLU。

      Leaky ReLU激活函數的作用是,它不僅激活正分數,還激活負分數。當然,與z為正數的情況相比,它是在不太極端的情況下實現的。正如您從消極的一面看到的那樣,從我們圖表的第三季度來看,但它仍然如此。而且從函數本身也可以看出,因為Leaky ReLU對應的激活函數可以用它的f-set來表示,f-set等于0.01。如果z小于0,則如果z大于或等于0,則等于z。因此,對于所有正數,Leaky ReLU的行為與ReLU完全相同,如您在此處看到的,但對于負值,相應的激活值只是等于0.01。所以你可以看到就是圖中的這一部分。因此,這兩個激活函數都不會受到飽和的影響,這與sigmoid和Tank函數相比絕對不同。這就是為什么推薦它,并且已經證明,當我們將這兩個激活函數用作隱藏層激活的一部分時,它們的性能要好得多,并且當涉及到輸出層時,它們的使用并不多。因此,可以考慮將Leaky ReLU和ReLU用于隱藏層,但不要將它們用于輸出層,反之亦然,用于sigmoid函數和Tank函數。將它們用于輸出層,但不能用于隱藏層。

      8 如果在神經網絡中不使用任何激活函數會發生什么?

      這個問題的答案可能很短,因為它非常明顯。缺乏激活函數會將神經網絡簡化為常見的機器學習模型,例如線性回歸,這從一開始就消除了使用神經網絡的整個想法。因此,為了能夠利用神經網絡的架構并能夠發現數據中的隱藏模式、非線性模式,我們可以使用激活函數和非線性激活函數。

      9 描述基本神經網絡的訓練如何工作


      在這種情況下,面試官想知道您是否了解前向傳播、后向傳播的概念,什么是反向傳播,這些過程如何相互連接,以及神經網絡如何利用這些層來學習這些復雜的模式在你的數據中。

      你可以從描述神經網絡的訓練過程開始,一個非常基本的過程,通過我們所說的前向傳遞的過程。前向傳遞獲取輸入數據并通過我們之前看到的神經元進行處理,并使用此加權和和激活函數來產生輸出。我們獲取輸入數據,將其乘以相應的權重,然后添加偏差因子。這些就是我們的z分數。然后,我們應用激活函數來引入非線性,當我們將信息傳遞到下一層時,就會使用這些激活值(即激活分數),因為我們將使用它作為輸入。我們將其乘以相應的權重。我們添加偏差因子,然后使用該隱藏層的激活函數,以便從這些復雜性中學習。這個過程一直持續到我們到達計算輸出的輸出層。然后使用該輸出將其與我們的數據的真實值進行比較。例如,我們在處理分類問題時,會觀察到的實際標簽。接著,我們會計算所謂的損失函數或成本函數。例如,對于回歸類型的問題,我們可能會使用均方根誤差(RMSE)或均方誤差(MSE)。對于分類類型的問題,我們可能會使用交叉熵。然后,我們利用這個損失函數進行所謂的反向傳播。

      反向傳播是計算梯度的過程,也就是損失函數相對于權重和偏差因子的一階導數,以及我們希望改進的模型參數的影響。一旦我們計算出這個梯度,它就會告訴我們,如果我們對權重和參數做出一定的改變,損失函數將會改變多少。然后,我們可以利用這個梯度來更新模型中的參數。我們通過反向傳播的過程來實現這一點,這與我們在前向傳播中所做的正好相反。

      在前向傳播中,我們從左到右直到模型末尾以獲得輸出。而在反向傳播中,我們做的是相反的事情,也就是說,我們正在倒退。我們通過反向傳播來識別梯度,然后利用這些梯度。我們將其作為優化技術的輸入,這可以是隨機梯度下降(SGD)、梯度下降(GD)、帶動量的 SGD、均方根(RMS)、探針、Adam等。然后,我們使用這種方法逐層更新我們的權重和偏差因子。

      我們基本上要做的就是獲取梯度,然后采用我們將使用的優化算法,例如 Adam,然后我們更新最后一層對應的權重。我們已經計算過了。然后我們繼續之前的下一層。這樣,我們從右邊,從很深層到左邊。因此,使用權重之間的乘法。通過這種方式,我們可以使用梯度,并更新權重和偏差因子,這樣我們就可以調整權重,然后減少損失函數。

      這一點非常重要,要向面試官展示你的理解,為什么我們要更新權重以及為什么我們要更新偏差因子。因為從數學上講,梯度顯示了當我們將某個權重或某個偏置因子改變一定量時,損失函數會發生多大的變化。這就是我們正在使用的東西,梯度,為了更新之前的權重參數和偏差參數,這樣我們就可以減少模型造成的損失。因為這意味著我們離擁有更準確的模型又近了一步。我們犯的錯誤越小,損失就越小,神經網絡的性能就越好。這就是神經網絡訓練背后的想法。

      這個過程一直持續下去。我們有前向傳播、反向傳播、后向傳播,等等,直到我們達到某種結束標準,即停止標準。這可能是迭代次數、紀元數或其他一些停止標準。

      10 什么是梯度下降?


      梯度下降是我們在機器學習和深度學習中使用的一種優化算法,目的是最小化模型的損失函數。這意味著我們正在迭代改進模型參數,以最小化成本函數并最終得到一組模型參數,這將優化我們的模型。該模型將產生高度準確的預測。

      為了理解梯度下降,我們需要理解什么是損失函數,什么是成本函數,這是損失函數的另一種說法。我們還需要了解神經網絡的流程、訓練過程如何工作,我們已經將其視為之前問題的一部分。然后我們需要理解迭代改進模型的想法以及我們這樣做的原因。

      讓我們從頭開始。在神經網絡的訓練過程中,我們首先進行前向傳遞,這意味著我們正在迭代計算我們的激活。因此,我們獲取輸入數據,然后將其與相應的權重參數和偏差向量一起通過隱藏層傳遞,然后使用激活函數激活這些神經元。然后我們將遍歷這些多個隱藏層,直到我們最終計算出該特定前向傳遞的輸出。

      一旦我們在訓練神經網絡的最初迭代中執行此操作,我們需要有一組模型參數,我們可以首先開始訓練過程。因此,我們需要在模型中初始化這些參數。我們在神經網絡中特別有兩種類型的模型參數。正如我們在前面的討論中所提到的,我們需要考慮權重和偏差因素。那么,如果我們使用這組特定的權重和偏差向量,我們會犯多少錯誤?這些權重和偏差是我們可以調整的參數,以提高模型的準確性。

      再次提出問題,如果我們使用這個模型參數的初始版本,也就是權重和偏差向量,我們計算出的輸出(即 y 帽子),那么我們需要了解根據這組模型參數做出的模型有多少誤差。這就是我們所說的損失函數,也被稱為成本函數,它表示我們使用這些權重和偏差因子進行預測時產生的平均誤差。

      在機器學習中,我們知道有回歸類型的任務和分類類型的任務。根據您要解決的問題,您可以選擇使用哪種損失函數來衡量模型的表現。神經網絡訓練的基本思想是,您希望通過迭代改進模型參數,即權重和偏差向量,最終得到一組最佳和最優的權重和偏差因子。這將使模型產生的誤差最小,這意味著您已經找到了一種能夠產生高度準確預測的算法和神經網絡,這是我們使用神經網絡的整個目標。

      因此,如果您正在處理分類類型的問題,損失函數可以是交叉熵,這通常是處理分類任務時的首選。但您也可以使用 F1 分數,即 F beta 分數。您可以使用精確率、召回率。此外,如果您有回歸類型的任務,您可以使用均方誤差(MSE)、RMSE 或 MAA。這些都是您在每次更改模型參數時可以用來衡量模型性能的方法。

      在神經網絡訓練的過程中,我們需要使用一種基本算法,我們稱之為反向傳播。我們使用它來了解當我們對參數進行微小更改時,損失函數會發生多少變化。這就是我們所說的梯度,它來自數學。在反向傳播的過程中,我們計算損失函數關于每個模型參數的一階偏導數,以了解我們可以改變每個參數多少以減少損失函數。


      那么,梯度下降是如何執行優化的呢?在訓練過程中,梯度下降在每次傳遞和迭代時都會使用全部的訓練數據。因此,對于每次參數的更新,也就是每次更新權重因子和偏差因子時,它都會使用全部的訓練數據。這意味著,在一次前向傳遞中,我們使用所有的訓練觀察結果來計算預測,然后計算損失函數,然后執行反向傳播,計算損失函數相對于每個模型參數的一階導數,然后使用這些導數來更新參數。

      梯度下降執行優化的方式是,更新模型參數,獲取反向傳播的輸出,這是損失函數相對于模型參數的一階偏導數,然后乘以學習率或步長,然后從原始模型參數和當前模型參數中減去該量以獲得模型參數的更新版本。

      在這個過程中,我們從反向傳播中獲取梯度,然后我們使用這個 dv,它是損失函數相對于權重參數的一階梯度,然后將其乘以步長 eta,然后我們從 v 中減去這個,即當前的權重參數,從而得到新的更新后的權重參數。我們也對第二個參數(即偏差因子)執行同樣的操作。

      值得注意的是,我們在這里使用的步長,即學習率,也可以被視為一個單獨的主題。我們可以深入探討這背后的細節。但現在,將學習率視為一個步長,它決定了我們執行更新時步長的大小,因為我們確切地知道當我們對參數進行一定的更改時,損失函數將會發生多大的變化。所以我們知道梯度的大小。首先,我們需要了解我們需要應用的更改的內容有多少。我們是否希望實現一個大的跳躍,還是我們希望在迭代改進模型參數時做出較小的跳躍?如果我們把學習率設定得很大,那就意味著我們將應用更大的變化,這意味著算法在走向全局最優時將邁出更大的一步。然而,我們也需要注意,當我們進行太大的跳躍時,尤其是如果這些跳躍不準確時,可能會出現問題。


      因此,我們需要確保優化這個學習參數,這是一個超參數。我們可以對其進行調整,以找到最佳學習率,從而最小化損失函數并優化我們的神經網絡。當涉及到梯度下降時,這個算法的質量非常高。它被認為是一個很好的優化器,因為它在執行梯度時使用整個訓練數據,因此執行反向傳播,然后利用它來更新模型參數。我們根據整個訓練數據得到的梯度代表真實的梯度。所以我們不對其進行估計,我們沒有犯錯誤。相反,我們在計算這些梯度時使用整個訓練數據,這意味著我們擁有一個優秀的優化器,能夠采取準確的步驟來尋找全局最優值。因此,梯度下降也被稱為良好的優化器,它能夠以更高的可能性找到損失函數的全局最優值。

      然而,梯度下降的問題是,當它每次更新模型參數時都使用整個訓練數據,這在計算上可能不可行或者非常昂貴,因為訓練了大量的觀察,使用整個訓練數據對模型參數執行一次更新,每次將大量數據存儲到內存中,對這些大數據執行這些迭代,這意味著當你有非常大的數據時,使用此算法可能需要幾個小時才能優化。在某些情況下,甚至可能需要幾天或幾年,特別是當涉及使用非常大的數據或使用非常復雜的數據時。因此,雖然梯度下降被認為是一個很好的優化器,但在某些情況下,使用它是不可行的,因為它效率不高。

      11 優化器在深度學習中的作用是什么?

      當我們談到訓練神經網絡時,我們想要找到什么是超參數集以及什么是參數集,我們可以將其用作模型的一部分,這最終會產生最少的錯誤。因為當我們的算法產生最小的錯誤時,這意味著我們的預測很可能是準確的。當將其用于新的未見過的數據時,它也會以更好的方式表現。因此,這意味著我們可以依賴該算法,并且可以將其應用于不同的應用程序,而不必擔心它會產生太大的錯誤。

      為了執行此優化,我們正在利用不同的優化算法。我們剛剛討論的梯度下降就是用于更新模型參數的算法之一,以盡量減少模型產生的誤差。在這種情況下,費用金額或模型通過最小化損失函數而產生的損失。因此,這基本上不僅是深度學習中優化器的主要目標,而且也是機器學習和深度學習模型中的優化器的主要目標。

      我們的想法是,我們將迭代調整模型參數,在這種情況下,我們模型中的權重參數和偏差參數,為了最終得到場景和模型,其中算法產生的錯誤量最小。或者在某些情況下,它可以是目標函數具有應該最大化的性質,意味著我們需要提出一組模型參數,這將使目標函數最大化。所以取決于目標的類型,作為算法的一部分,然后您需要決定如何應用優化算法。您需要最小化或最大化您的目標函數。

      當談到優化算法時,我們有非常原始的優化算法,但多年來也開發了許多其他梯度下降的變體,以克服梯度下降的一些缺點,但同時,也要嘗試復制梯度下降的好處。例如,除了梯度下降之外,我們還有隨機梯度下降(SGD)和小批量梯度下降。當引入動量來改進SGD等優化算法時,我們還有帶動量的SGD。我們擁有基于自適應學習的優化技術,例如 RMSProp、Adam、AdamW 和 AdaGrad。這些都是在深度學習中使用的不同類型的優化算法,它們的目標是優化算法。因此,我們需要記住的另一個重要方面是,優化算法的目標是迭代地改進模型參數,以便我們最終找到全局最優值。

      在解釋梯度下降和其他優化器的方差時,我將繼續使用“全局最優”這個術語。全局最優是指我們用來衡量模型誤差的目標函數的實際最小值或實際最大值。我們需要注意的是,我們可能會遇到局部最小值或局部最大值,而不是全局最小值或全局最大值。這意味著,在一個由許多值組成的區域中,可能會出現錯誤。在某些情況下,優化算法可能會誤導我們,使我們找到局部最小值或局部最大值,而不是全局最小值或全局最大值。

      當優化算法正在移動以了解如何改進其方向以識別最小值時,它可能會發現,這就是我們正在尋找的最小值。因此,算法會收斂,并決定這是我們需要使用的一組超參數和參數以優化我們的模型。但實際上,它可能混淆了全局最小值和局部最小值,并錯誤地宣稱算法已經收斂并找到了實際的最小值。然而,這實際上是局部最小值,而不是全局最小值。局部最小值可能看起來像是損失函數的最小值,但實際上它只是一個值,它比周圍的值小得多,但并不是整組值中最小的一個。

      因此,我們的目標是找到全局最小值而不是局部最小值。理想情況下,我們希望最終實現收斂,并找到所有權重和偏差因素的模型狀態,它們導致損失函數的實際最小值,而不僅僅是對于特定一組值來說似乎是最小值的值。

      12 什么是反向傳播以及為什么它在深度學習中很重要?

      反向傳播是神經網絡訓練的基本組成部分。它可以幫助我們從模型在每次迭代中所犯的錯誤中學習,以便理解模型的某些參數(例如權重因子和偏差因子)如何變化,從而導致損失函數發生變化。

      反向傳播算法是整個訓練過程的中間部分。我們首先執行前向傳播,將輸入數據輸入我們的網絡。然后基于這些轉換,我們最終得到最終的輸出層,然后我們就可以執行我們的預測。我們計算預測值,一旦計算出預測值,我們就可以計算該特定迭代的損失函數。一旦我們有了損失函數,我們就可以理解我們需要如何改變我們的權重和偏差因子,以便我們可以減少模型在當前迭代中犯的錯誤。

      模型所產生的誤差,即平均誤差,我們通過損失函數來測量。下一步是該算法的一部分,就是為了獲得當我們對權重參數和偏差參數進行微小改變時,損失函數的具體變化量。這就是我們所說的梯度。計算這些梯度的整個過程稱為反向傳播。

      反向傳播基本上是指計算損失函數相對于我們每個模型參數(包括各種權重參數和偏差參數)的一階偏導數的過程。這種反向傳播是基礎,因為它有助于算法理解改變每個不同的權重參數會導致損失函數中的多少變化。這是我們需要將這些信息提供給優化算法(例如 GADM)的方式。為了使優化算法能夠更新模型參數,我們需要利用反向傳播的輸出,這是梯度下降(GD)、隨機梯度下降(SGD)、Adam等優化算法的輸入。以我們之前研究過的一個具體示例來看,這是一個非常簡單的神經網絡,它有少量的隱藏層和隱藏單元,只有幾個輸入信號。

      在前向傳播的過程中,我們執行所有轉換,激活神經元,然后得到預測的響應變量,即y帽。一旦我們得到了y帽,我們也會緩存我們的最終結果,即z分數值。z分數等于輸入x乘以權重參數,再加上偏置參數。有了這個之后,我們可以應用各種微分規則,特別是鏈式法則,同時我們也可以利用求和的微分規則和應用于常數的微分規則,以更新損失函數相對于激活的梯度,即dA。

      然后我們可以利用dA來獲得損失函數相對于z的梯度。進一步,我們可以利用dA和dZ來獲得損失函數相對于權重的梯度,即dV。最后,以類似的方式,我們可以利用dA和dZ來獲得損失函數相對于偏置的梯度,即我們的偏差因子。


      重要的是要記住,為了更新模型參數,我們需要知道損失函數相對于權重參數dV的梯度,以及偏置因子的梯度,這是損失函數的一階偏導數。但為了計算dV和dB,我們還需要首先計算激活的梯度和z分數的梯度,因為權重因素和偏差因素是z分數的一部分。所以我們應用了一系列變換,這意味著當我們執行微分時,我們還需要執行這一微分鏈,以便能夠首先獲得權重的梯度和偏置因子的梯度。

      具體來說,z等于權重矩陣的轉置乘以激活矩陣,然后我們添加偏差因素,形成了我們的z。為了計算損失函數相對于權重的梯度,即dV,我們首先需要對損失函數J求偏導數,關于z分數,然后我們需要乘以z分數相對于權重矩陣的偏導數,以便能夠計算這個偏導數dV。這簡單地等于dz乘以激活矩陣的轉置。我們也在執行類似的操作來獲取偏差因子的梯度。


      我不會過多討論這些梯度的數學推導的細節,因為您需要深入研究這些不同的偏導數。當涉及到使用鏈式規則時,我們還需要刷新我們的記憶,當涉及到值的總和時,當涉及到常數與目標值相乘時,微分規則。當您學習深度學習主題時,我肯定會建議您刷新這些內容。但為了留在面試問題的范圍內,我只是想分享這個只是為了刷新你的記憶,在每次我們嘗試優化算法時,我們都在執行反向傳播。為了計算所有這些不同的梯度,我們首先需要計算相對于權重的梯度和相對于偏差因子的梯度。此外,我們還需要計算關于激活的梯度和關于z分數的梯度。然后,我們使用這些計算結果來計算權重的梯度和偏置因子的梯度。最后,反向傳播就是計算損失函數相對于權重和偏置因子的偏導數的過程,以便將這些結果作為輸入提供給我們的優化算法。這實際上引出了我們的下一個問題。

      13 反向傳播與梯度下降有何不同?

      在深度學習面試中,您可能會遇到有關反向傳播和梯度下降之間差異的問題。這通常是一個棘手的問題,因為描述訓練過程并不總是直觀的。我們首先執行前向傳播,然后計算損失函數,以了解模型的訓練效果以及平均誤差量。接著,我們計算梯度以了解當我們改變各種參數時,損失函數會發生多大的變化。然后我們使用這些信息來不斷更新模型參數,直到前面的層,以便最終得到一個表現更好的模型。這個過程是通過從較深層到較早的層進行的。


      那么梯度下降與反向傳播有何不同?當涉及到反向傳播和梯度下降時,具體有什么區別?這個問題的答案其實很簡單。在我看來,這只是一個欺騙受訪者的問題。反向傳播是計算梯度的實際過程,了解當我們改變模型參數時損失函數有多大變化。然后反向傳播的輸出簡單地用作梯度下降或任何其他優化算法的輸入,以便更新模型參數。所以梯度下降只是使用反向傳播的輸出作為輸入,因為它采用計算出的梯度來自反向傳播作為輸入,以便更新模型參數。所以反向傳播發生在中間,一旦我們完成前傳。然后反向傳播就完成了。然后我們執行向后傳遞。因此,我們使用反向傳播,然后不斷迭代地將模型參數從較深層更新到較早層。這就是優化算法所做的事情。

      14 描述什么是梯度消失問題及其對神經網絡的影響

      當網絡的梯度(即損失函數)相對于模型參數(例如權重和偏差參數)時,就會發生梯度消失,它們變得很小。在某些情況下,它們變得完全接近于零,這意味著它們開始消失,因為它們通過非常深的層傳播回較早的層。這種梯度消失的結果是網絡不再能夠有效地學習數據中的依賴關系。并且模型不再能夠有效地更新模型,這意味著算法最終不會被優化。我們最終將得到一個無法也無法學習數據中實際依賴關系的模型。

      當然,這是我們想要避免的事情。我們希望擁有適量的梯度,將其用作梯度下降等優化算法的一部分,以獲得模型參數,然后不斷迭代地執行此操作,這樣我們最終將最小化我們的損失函數。我們的模型將處于提供高度準確預測的狀態。那么我們如何解決梯度消失問題呢?其原因何在?

      作為神經網絡訓練的一部分,我們看到在每次訓練迭代中,例如,作為梯度下降算法的一部分,我們將使用整個訓練數據訓練我們的網絡,然后從最早期的層到最后的輸出層執行這些不同的轉換,獲取激活值,然后將其與權重指標相乘,然后添加偏差參數,以這種方式計算z分數,然后應用激活函數來激活這些神經元。然后這一切完成之后,在該特定的隱藏層中,網絡能夠學習數據中的不同依賴關系,然后學習結構,然后進入下一層,然后進入下一層,直到到達輸出層。然后當我們有了輸出層時,我們就可以計算我們的預測。因此,我們首先計算預測值 y hat,然后將其與真實標簽或真實值進行比較。接著,我們需要了解損失函數的性質,以及模型在使用這組參數時產生的平均誤差是多少。然后,我們執行反向傳播來計算梯度,并將其提供給優化算法,以便更新模型參數。優化算法的工作方式與前向路徑相反。它計算并獲取梯度,計算相應的更新,然后更新權重以及從深層到較早層的偏差因素。

      問題在于,我們正在執行所有這些轉換,并且每次都將這些值相乘。這意味著什么呢?在某些情況下,特別是當我們有深層網絡,有很多隱藏層時,當網絡從深層、中間層、然后更早的層接近時,許多這些權重相乘之后,這些梯度開始變得非常接近于零。當梯度變得非常接近零時,這意味著我們除了更新權重之外別無他法,并更新我們的偏差參數。當我們無法再更新模型中的權重時,這意味著網絡不再能夠正確學習,尤其是當梯度消失時從較早的層學習。

      這就是一個問題,因為我們希望我們的模型能夠不斷學習并不斷更新這些權重,這樣我們最終會得到權重和偏差因子的最佳參數集,以最小化損失函數,然后提供高度準確的預測。因此,理想情況下,我們希望確保這些梯度不會消失。所以我們要解決梯度消失問題,我們的網絡能夠正確學習并理解數據中的這些依賴關系,無論是在深層還是在較早的層中都是獨立的。

      因此,在描述這個問題時,請嘗試關注權重,因為當權重的梯度開始消失時,這是最大的挑戰,特別是對于深度神經網絡中的早期層。這是我們想要避免的,因為模型會出現梯度消失問題,無法有效學習。作為答案的一部分,您可以提到的另一件重要的事情是,某些架構本質上都受到這個問題的影響。尤其是 RNN、遞歸神經網絡,以及 LSTM、GRU,它們本質上都是深刻的,因為不像人工神經網絡這樣原始的神經網絡具有單個輸入層,它們提供輸入,然后神經元被激活并提供單一輸出。和隱藏層,它們并不相互關聯。所以它們不像 RNN 那樣接受輸入,然后為每個輸入提供相應的輸出。然后這個隱藏層,然后隱藏單元將被用作下一步和下一步的一部分。所以它們不像 RNN 那樣基于順序,那么它們比 RNN 更不容易出現梯度消失問題。

      由于 RNN 是另一種序列類型的神經網絡,因此它們本質上很深,這意味著它們具有多層,基于他們擁有的時間步長,這使得這些算法更容易出現梯度消失問題。

      15 各種激活函數和梯度消失問題之間有什么聯系?

      因此,梯度消失問題與激活函數的選擇高度相關,因為某些激活函數由于其固有的特性,會自動導致梯度消失問題。還有一些已知不會導致梯度消失問題的激活函數。當然,我們希望了解這樣的激活函數,然后當我們意識到可能存在梯度消失問題時就不要使用它們。所以在這里我傾向于區分 sigmoid 激活函數和坦克激活函數與 ReLU,所以整流器線性單元,和 Leaky-ReLU 激活函數。其原因在于它們的固有屬性,即我們所說的飽和度。這意味著,例如,在 sigmoid 激活函數的情況下,當激活 fz 等于 1 加 e 次方減 z 時,這意味著只要 z 或 z 分數是一個非常大的負數,比如說負 1000,然后進行相應的激活。然后,fz將非常接近零,正如您所看到的,這被認為是sigmoid函數的最小值。當z為本例中的z分數時,x將是非常大的正數,因此它將在1000左右。接下來是相應的函數,即激活函數,其值約為1,非常接近1。正如您所看到的,在達到x的某個水平時,對于正值,無論x的大小如何,相應的激活值將非常接近1。而到了某個時候,這個領域甚至不會發生任何變化。

      這就是我們所說的飽和度,意味著當我們有非常大的負數或非常大的正數時,相應的激活就不再有任何變化。我們最終將接近該函數的最大值或最小值。在這種情況下,對于非常大的正x,y將約為1,對于非常大的負數,相應的激活值將在0左右。因此,在sigmoid激活的情況下,我們說sigmoid激活函數遭遇飽和,并且容易造成梯度消失問題。所以它會導致梯度消失,特別是當我們有非常大的z平方值時。所以它可以是大正值,也可以是大負值。

      實際上,同樣的情況也適用于tang激活函數,因為就像你在這里看到的那樣,tang激活函數和sigmoid激活函數一樣,都是這種s形的激活函數。與sigmoid函數一樣,tang也存在飽和問題。在這里,你可以看到當我們有x,這是一個非常大的正數,比方說1,000,那么相應的激活值將在1左右。如果我們改變這個x并將其設為2,000或3,000,同樣的情況也會成立。

      無論x這個大數增加多少,相應的激活將是相同的。它將接近1,這是該函數的最大值。對于該激活函數的非常大的負數也是如此。假設x約為負1,000,那么相應的激活值將在負1左右。但當x約為負2,000或負10k時,同樣成立。

      所以這意味著在tang激活函數的情況下,就像在sigmoid激活函數的情況下一樣,當我們有非常大的正值或非常大的負值時,我們想看看使用這個激活函數可以激活它們多少,那么相應的激活值就在該函數的極值附近。所以在tang函數的情況下負1和1,以及sigmoid激活函數情況下的0和1。因此,就像sigmoid激活函數的情況一樣,我們說tang激活函數遇到了飽和。這意味著tang激活函數本質上會導致梯度消失問題,因為它導致梯度消失。這是我們想要避免的事情。

      所以我們要記住的一件事是,當涉及到輸出層時,sigmoid激活函數和tang激活函數非常有用,因為它們在某些范圍之間轉換值時具有這些很好的屬性。就像sigmoid函數一樣,它會轉換值,0到1之間的任何值,當我們想要以概率形式輸出時,這非常有用。問題的分類非常適合。然而,當我們談論將激活函數用于隱藏層時,這是我們想要避免的。因此,我建議使用 Sigmoid 激活函數或雙曲 Tang 激活函數于輸出層,但不要將其用于隱藏層,因為它們容易出現梯度消失問題。

      我們今天要討論的下一組激活函數是修正線性單元(ReLU)和泄漏修正線性單元(Leaky ReLU)。與 Sigmoid 激活函數和 Tang 激活函數不同,ReLU 或 Leaky ReLU 不會飽和,這意味著它們不會導致梯度消失問題,非常適合作為隱藏層的一部分。

      您可以看到,當我們取非常大的正 x 值時,相應的激活會發生變化。當我們從 1000 到 2000,從 2000 到 10k,相應的激活量也會有很大的變化,這意味著激活函數不會導致梯度非常接近于零,這就是我們所說的梯度消失。因此,ReLU 不會導致梯度消失問題,這是很棒的事情,特別是當我們將它們用作隱藏層的一部分時。

      這同樣適用于 Leaky ReLU,我們可以在這里看到這一點,因為兩者非常相似。唯一的區別是,Leaky ReLU 在某種程度上確實考慮了負神經元的激活,這意味著當 x 為負值時,從負無窮大到零,您可以看到相應的激活不是零,而是等于 0.01。因此,與 Sigmoid 和 Tang 激活函數不同,這兩個函數沒有飽和,它們的激活值會改變,并且不會接近函數的同一個極值。當我們提供非常大的正值或非常大的負值作為輸入時,這意味著它們非常適合用作隱藏層的一部分,使網絡能夠持續有效地學習數據中隱藏的依賴關系。因此,我們建議使用 ReLU 和 Leaky ReLU 作為隱藏層的一部分來激活這些神經元,并且每當接近輸出層時,對于輸出層,請使用 Sigmoid 函數或 Tang 激活函數。

      16 隱藏層中有一個神經元總是會導致反向傳播產生很大的誤差,可能的原因是什么?

      作為神經網絡反向傳播的一部分,可能有很多原因導致該特定神經元或某些神經元始終產生較大誤差。第一個可能的原因是權重初始化不當。這意味著在開始訓練過程時,我們需要初始化權重參數和偏差參數,以便網絡可以采用這些初始值,然后執行前向傳遞計算,然后將其用作梯度下降(GD)、隨機梯度下降(SGD)等優化算法的輸入,以便迭代更新這些權重參數。但是,如果我們沒有以正確的方式初始化權重,這意味著我們沒有使用正確的分布從中隨機采樣,或者我們只是為此權重和偏差參數提供了錯誤或不正確的值,這將從一開始就改變那些特定神經元的學習過程。

      如果我們從一開始就以不正確的方式進行學習過程,我們正在扭曲那些學習過程,在每次迭代中,這意味著下一次迭代將基于從第一次傳遞錯誤開始的第一次迭代,它也會以錯誤的方式完成。然后下一次、下一次,這個過程每次都會繼續下去,在不正確的學習中,并在誤差較大時作為損失的一部分進行計算然后反向傳播。

      另一個可能的原因是梯度消失或爆炸。如果梯度變得非常小,并且神經元的權重,特別是在深層網絡中,不再開始更新那些不同的參數,這意味著,我們可能會在特定神經元中持續犯大錯誤,因為我們無法有效地學習模型中的依賴關系。這個特定神經元將無法被正確激活,相應的權重也無法得到更新,從而無法提高對這些特定神經元預測的準確性。同樣,這也適用于梯度爆炸問題。如果我們進行過多的更新,而神經元沒有被正確激活,那么相應的權重也無法得到正確的更新,這將導致我們在這些神經元上持續犯大錯誤。

      另一個可能導致這種情況的原因是學習率不適當。如果我們的學習率過高或過低,我們可能會在訓練過程中超出或低于最佳值,因此無法充分更新權重參數和偏差參數。因此,優化模型中的這些超參數非常重要,以使模型能夠持續更新并改進參數,從而改善學習過程。

      另一個可能的原因是激活函數選擇不當,因為激活函數可以顯著影響學習過程。我們激活神經元的方式將是一個決定性因素,它決定了神經網絡是否能正確學習數據中的依賴關系,以及權重參數和偏差參數需要如何更新,以便優化學習。

      17 你對計算圖的理解是什么



      計算圖是一種可視化復雜操作的方法,我們在訓練模型的過程中使用它,作為各種類型的優化過程的一部分。它是展示我們從非常簡單的變量或對象開始,應用各種變換,然后得到非常復雜函數的好方法。我們使用計算圖的一種方式是可視化神經網絡。

      在計算圖中,我們通常有代表對象或變量的節點,然后邊通常代表我們正在應用的操作或轉換的類型。在這種情況下,你可以看到我們有輸入信號 x1、x2、x3,它們只是變量,這些是初始層的節點。然后我們展示我們正在應用的邊緣,這些箭頭進入我們的第一個隱藏層。

      在這個隱藏層中,你可以看到我們有每個隱藏單元的z分數,然后我們就有相應的激活。所以z1, a1對應于第一個隱藏層的第一個隱藏單元。然后我們就有了z2、a2,然后是z3、a3,z4、a4,因為我們有四個不同的隱藏單元作為單個隱藏層的一部分。然后我們應用另一個變換,當我們從第一個隱藏層到輸出層時。

      你可以看到,我們有這些箭頭展示了我們如何從x1、x2、x3輸入數據到z分數,然后我們對z分數應用激活來計算我們的激活分數。然后我們使用這個激活分數從最后一層開始,為了繼續我們的預測,即y帽子。你可以看到我們正在使用最終輸出層來計算y帽。

      我們正在做的事情是為了可視化首先計算基于xi的z分數的過程,輸入數據乘以權重矩陣w加b的轉置。然后y-hat就等于ai等于sigma zi。我們在這里所做的是計算z分數,然后在z分數之后我們應用這個西格瑪函數,這是我們得到的激活函數。首先,我們將激活函數應用于 z 分數,然后計算并獲取激活分數。接著,我們使用這個激活分數來計算我們的預測值 yi-hat。一旦我們得到了 yi-hat,我們將其與真實值 yi 進行比較,然后計算損失,即模型產生的誤差量。

      你可以看到我們正在采取的步驟。當我們的神經網絡有更多的隱藏層時,不僅僅是一層,而是三層、四層或數十億層,我們最終將很難理解這些不同的步驟,更不用說將其可視化或展示我們有多少層了。每次我們都會使用不同的指數,執行相同的轉換,從輸入數據到 z 分數,然后到激活函數,從激活函數之后我們得到激活分數。

      因此,使用計算圖來展示所有這些計算會更簡單。我們不再使用所有這些復雜的變換和矩陣,而是使用計算圖來簡化過程并將其可視化,展示我們如何從輸入變量出發,應用所有這些轉換,然后得到預測。

      然而,通過展示故事的另一面,計算圖可能會變得更加復雜。我們首先獲得預測,然后應用反向傳播,然后從反向傳播到實際的梯度計算,然后更新參數。但為了簡單起見,我想我會用一個簡單的神經網絡來展示這一點。計算圖背后的想法不僅僅是展示前向傳遞,還展示整個網絡,包括反向傳播,即梯度的計算。

      18 談談梯度裁剪及其對神經網絡的影響

      我們剛剛看到了殘差連接,特別是對于深度神經網絡,特別是像 RNN、LSTM 這樣的情況,當我們具有太多層的順序性質時,我們可能會遇到梯度消失的問題,而殘差連接可以幫助解決這個問題。

      現在,梯度裁剪正在解決相反的問題,即梯度爆炸問題。每當我們有某些深度神經網絡,如 RNN、LSTM,我們每次都使用這些變換,并且我們使用累積性質并將所有這些權重相互相乘。通過這個過程,我們正在使用之前的隱藏狀態更新新的隱藏狀態,因此下一個隱藏狀態和下一個隱藏狀態。這也意味著當我們遍歷這些層時,在優化過程中,反向傳播完成后,我們需要執行所有這些轉換。當我們完成前面的幾層時,我們可能會遇到梯度爆炸的問題。

      梯度爆炸意味著我們的神經網絡不穩定,這也意味著權重的更新會太大,這將導致神經網絡表現不佳且訓練不當。為了避免所有這些問題,我們解決梯度爆炸問題的方法是使用梯度裁剪。梯度裁剪的作用是基本上裁剪梯度在一定水平上。所以有一個閾值,這是我們用于梯度裁剪的參數,每當梯度變得太大,高于閾值時,我們就會裁剪該梯度,以確保該梯度不會太大,并且我們不會過度更新權重參數或偏差因素。

      通過這種方式,我們正在穩定我們的神經網絡,這對于 LSTM、RNN、GRU 等架構尤其重要,其具有太多層的數據的順序性質。通過這種方式,我們將確保我們不會出現這些不穩定的跳躍,在我們的神經網絡優化過程中,我們最終將得到一個能夠正確學習相互依賴關系的穩定網絡。

      19 什么是交叉熵損失函數

      交叉熵,也稱為對數損失,它衡量分類模型的性能。具有概率輸出的值介于0和1之間。因此,每當你處理分類問題時,例如,你可能想要對圖像進行分類,判斷它是否是貓,或者是狗,或者是房子,而房子又可以進一步分類為新房子和舊房子。在所有這些情況下,當你擁有這些標簽并且想要模型提供一個概率,即每個觀察到的類別的概率,你就會得到模型的輸出。例如,房子A有50%的概率被分類為新的,50%的概率被分類為舊的,或者一張圖片有70%的概率是貓,30%的概率是狗。在處理這類問題時,你可以應用交叉熵作為損失函數。


      交叉熵被測量為這個負值:y log p 加上 (1 - y) log (1 - p) 的總和,其中y是實際標簽。例如,在二元分類中,這可以是1和0,而p是預測概率。所以在這種情況下,p將是0到1之間的值,而y就是對應的標簽。因此,當你處理貓圖像時,假設標簽為0;當你處理狗圖像時,假設標簽為1。這個公式背后的數學解釋超出了這個問題的范圍,所以我不會討論這個細節。但如果你對此感興趣,你可以查看邏輯回歸模型,這是我在機器學習基礎手冊中的一部分內容。

      我們如何從應用對數函數后將乘積求和,這樣我們就得到了對數似然函數,然后我們將它與負號相乘,因為這是負數。假設我們希望理想地最小化損失函數,則計算似然函數。這與似然函數相反。在這種情況下,這表明我們最終會得到一個值,這表明模型在分類方面的表現如何。因此,交叉熵將告訴我們模型在將觀察結果分類到某個類別方面是否做得很好。

      20 為什么交叉熵優先作為多類分類問題的代價函數

      當我們處理多類分類時,我們可以應用什么樣的損失函數呢?在處理多類分類時,我們可以使用多類交叉熵,這通常被稱為softmax函數。softmax損失函數是衡量模型性能的好方法,尤其是當你想要將觀察結果分類為多個類別之一時。這意味著我們不再處理二元分類,而是處理多類分類。例如,當我們想要將圖像分類為夏季主題,春季主題,或冬季主題時。鑒于我們有三個不同的可能類別,我們需要有一種適當的方法來衡量執行此分類的模型的性能,而softmax正是這樣做的。

      因此,我們不會將配對觀測值設置為不同的值,這會說明該觀測值屬于第一類或第二類的概率是多少,而是我們將擁有一個更大的向量,取決于你將要處理的類別數量。在這個具體示例中,我們最終將得到三個不同的值,因此一個向量具有三個不同的條目,說明這張圖片來自冬季主題的概率是多少,來自夏季主題的概率是多少,以及來自春季主題的概率是多少。然后我們將得到具有相應概率的所有類別。在交叉熵的情況下,當我們的softmax值很小時,這意味著該模型在將觀察結果分類為不同類別方面表現出色,我們得到的類別分離度也很好。

      需要記住的一點是,當我們比較交叉熵和多類交叉熵或softmax時,這些都是在我們有超過兩個類別的情況下使用的。您可能還記得在論文“Attention is All You Need”中介紹的Transformer模型,其中作為Transformer架構的一部分,還應用了softmax層,作為多類分類的一部分。因此,當我們計算激活分數時,最后,當我們想要將我們的輸出轉換為一個有意義的值并測量Transformer的性能時,我們會使用這些方法。

      21 什么是隨機梯度下降(SGD)?為什么我們要用它來訓練神經網絡?

      SGD,就像梯度下降(GD)一樣,是深度學習中使用的一種優化算法,其目的是優化深度學習模型的性能,并找到一組可以最小化損失函數的模型參數。通過迭代改進模型的參數,包括權重參數和偏差參數。SGD的執行方式是通過使用隨機選擇的單個或幾個訓練觀察值來更新模型參數。這與GD不同,GD在一次迭代中使用了整個訓練數據來更新模型參數,而SGD僅使用單個或幾個隨機選擇的訓練觀察來執行更新。

      這基本上意味著,SGD在每次訓練觀察中進行模型參數的更新,而不是使用整個訓練數據進行每次更新。這個隨機成分在算法中也很重要,因此該算法中的隨機元素也被稱為隨機梯度下降。因為SGD是從訓練觀察中隨機采樣單個或幾個訓練數據點,然后使用它來執行前向傳遞。它計算z分數,然后在應用激活函數后計算激活分數,然后到達前向傳播和網絡的末端,計算輸出,即y帽,然后計算損失。然后我們僅對這幾個數據點執行反向傳播。

      在SGD中,考慮到我們正在使用僅隨機選擇的幾個數據點或單個數據點,而不是實際的梯度,我們正在估計這些真實梯度,因為真實梯度基于整個訓練數據。對于此優化,我們僅使用很少的數據點。這意味著作為反向傳播的一部分,我們對這些梯度的估計不完美,這意味著梯度將包含這種噪聲。

      這樣做的結果是我們使優化過程更加高效,因為我們僅使用幾個數據點就可以基于傳遞非常快速地更新這些參數。僅在幾個數據點上訓練神經網絡要快得多,并且比使用整個訓練數據進行一次更新更容易。但這是以犧牲SGD的質量為代價的,因為當我們只使用幾個數據點來訓練模型,然后計算梯度,這是真實梯度的估計,那么這些梯度將會非常嘈雜。他們將是不完美的,并且很可能遠離實際梯度,這也意味著我們將對模型參數進行不太準確的更新。

      這意味著每次優化算法試圖找到全局最優值并在每次迭代中進行這些移動時,向最佳狀態更近一步,大多數時候,它最終會做出錯誤的決定,并且會選擇錯誤的方向,因為梯度是它需要采取的方向選擇的來源。每次它都會產生這些振蕩,這會非常不穩定,大多數時候它最終會發現局部最優而不是全局最優,因為每次它只使用訓練數據的一小部分,它正在估計梯度,這些都是有噪音的,這意味著它所采取的方向很可能也是錯誤的。當你每次都做出錯誤的方向和錯誤的舉動時,你會開始搖擺不定。這正是SGD正在做的事情。在討論優化方向時,該算法可能會做出錯誤的決策選擇,最終找到的是局部最優而非全局最優。因此,隨機梯度下降(SGD)有時被認為是一個不佳的優化器。然而,它在收斂時間上表現出色,且在內存使用上也相當有效,因為存儲模型基于非常小的數據,并將這些小數據存儲在內存中,計算量并不大。然而,這是以優化器的質量為代價的。在接下來的討論中,我們將學習如何調整 SGD 算法以提高優化技術的質量。

      22 為什么隨機梯度下降(即 SGD)會向局部最小值振蕩?

      造成這種振蕩的原因有幾個。首先,我們需要明確什么是振蕩。振蕩是我們在尋找全局最優值時所發生的運動。當我們嘗試使用 GD、SGD、RMSProp、Adam 等優化方法來優化算法時,我們正在嘗試最小化損失函數。理想情況下,我們希望迭代地改變我們的模型參數,以便我們最終得到一組參數,從而得到損失函數的全局最小值,而不僅僅是局部最小值。局部最小值可能看起來像是損失函數的最小值,但它僅適用于特定區域。而全局最優值實際上是損失函數的平均值,即實際最小值。這正是我們正在努力追逐的。

      當我們有太多的振蕩(即過多的運動)時,這可能會成為問題,因為我們每次都會做太多的動作。如果我們做出相反的動作或者方向錯誤,那么這最終將導致發現局部最優而不是全局最優。這正是我們試圖避免的。與 GD 相比,SGD 中的振蕩發生得更頻繁。因為在 GD 的情況下,我們使用整個訓練數據來計算梯度,需要計算損失函數相對于模型參數的偏導數。而在 SGD 的情況下,我們了解到我們僅使用隨機采樣的單個或幾個訓練數據點來更新梯度并使用這些梯度來更新模型參數。這會導致出現過多的振蕩,因為我們使用的隨機子集比訓練數據小得多,它們不包含訓練數據中的所有信息。這意味著我們正在計算的梯度在每個步驟中,當我們使用完全不同且非常小的數據時,可能會有很大差異。這種巨大的差異,這種方向上的變化可能會導致這些振蕩過于頻繁。

      在 SGD 中,導致過多振蕩的第二個原因是步長。步長,或者說學習率,可以定義我們需要更新多少權重或偏置參數。而這個更新的幅度是由這個學習率決定的,然后它也發揮了作用,決定了這些運動會有多大的不同以及在我們觀察振蕩時,會出現多大的跳躍。

      第三個原因是 SGD 會遭受太多的振蕩,這是一件壞事,因為這會導致太多次找到局部最優而不是全局最優,這是由于不完美的估計。當我們計算損失函數相對于權重參數或偏差因子的梯度時,如果這是在訓練數據的小樣本上完成的,那么梯度就會有噪音。然而,如果我們使用包含有關特征之間關系的所有信息并且僅在數據中一般性的整個訓練數據,那么梯度的噪聲就會少得多。他們的預測將會更加精確。我們正在使用基于小數據集的梯度作為實際梯度的估計,這是基于整個訓練數據的。這種做法會引入噪聲,因此在估計真實梯度時會存在缺陷。這種缺陷可能會導致更新并不總是直接指向全局最優值,從而導致隨機梯度下降(SGD)出現振蕩。在更高的層面上,我認為SGD出現過多振蕩的原因有三個:第一個是隨機子集,第二個是步長,第三個是梯度的不完美估計。

      23 梯度下降(GD)與隨機梯度下降(SGD)有何不同?

      到目前為止,我們已經詳細討論了SGD,我將從更高的層次總結兩者的差異。對于這個問題,我將利用四個不同因素來解釋GD和SGD之間的差異:第一個是數據使用情況,第二個是更新頻率,第三個是計算效率,第四個是收斂模式。讓我們一一探討這些因素。


      梯度下降在訓練模型和計算梯度時使用整個訓練數據,并將該梯度用作反向傳播過程的一部分來更新模型參數。然而,SGD與GD不同,它在執行訓練過程和更新模型參數時并不一次性使用整個訓練數據。相反,SGD僅使用隨機采樣的單個或兩個訓練數據點來執行訓練,以及使用基于這兩點的梯度來更新模型參數。這就是SGD與GD在數據使用量和數據使用方式上的區別。

      第二個區別是更新頻率。考慮到GD每次都會根據整個訓練數據來更新模型參數,與SGD相比,它的更新要少得多。因為SGD每次都會頻繁地對單個數據點或兩個訓練數據點進行模型參數的更新。與GD不同,GD必須使用整個訓練數據來進行一組更新。這會導致SGD在使用非常小的數據時更頻繁地進行更新,這就是更新頻率方面的差異。

      另一個區別是計算效率。GD的計算效率低于SGD,因為GD必須使用整個訓練數據進行計算或反向傳播,然后根據整個訓練數據更新模型參數。這可能會導致計算量很大,尤其是在處理非常大的數據以及非常復雜的數據時。與GD不同,SGD效率更高且速度非常快,因為它使用非常少量的數據來執行更新。這意味著它需要較少的內存來對使用小數據的數據進行排序,然后花費的時間就會少得多找到全局最優值,或者至少它認為它找到了全局最優值。因此,與GD相比,SGD的收斂速度要快得多,這使得它比GD更有效率。

      最后一個我要在這個問題中提到的因素是收斂模式。眾所周知,GD的收斂過程比較平滑,作為優化算法,其質量比SGD更高。SGD是一個效率高但質量較差的優化器,其原因是SGD的效率是以犧牲其質量為代價的,尋找全局最優值。SGD會產生大量的振蕩,因為在估計真實梯度時它只使用了訓練數據的一小部分。與SGD不同,GD使用整個訓練數據,因此不需要估計梯度。它能夠確定精確的梯度,這會在SGD的情況下導致大量振蕩。對于梯度下降(GD),我們并不需要進行所有的振蕩。因此,算法所做的運動量要小得多。這就是為什么隨機梯度下降(SGD)找到全局最優值所需的時間要少得多。然而,不幸的是,大多數時候,SGD會將全局最優值與局部最優值混淆。因此,SGD經過多次迭代后,最終可能只找到局部最優,并將其誤認為全局最優,這顯然是我們不希望看到的。

      我們的目標是找到真正的全局最優值,因此,我們需要最小化并找到使損失函數最小的參數集。這與SGD的做法恰恰相反,因為SGD使用的是真實梯度,大多數時候,它能夠識別出真正的全局最優值。

      24 如何改進梯度下降等優化方法?動量項的作用是什么?

      每當你聽到“動量”和“GD”這兩個詞,你應該自動將注意力轉向帶有動量的SGD,因為帶有動量的SGD基本上是SGD的改進版本。如果你理解了SGD和GD之間的區別,你就能更容易地解釋什么是帶有動量的SGD。


      我們剛剛討論了GD受到振蕩影響的問題,這種過多的運動會導致我們使用少量的訓練數據來估計真實的梯度,從而導致具有完全不同的梯度的權重中有太多不同類型的更新。這是我們想要避免的,因為我們已經看到并解釋了過多的這些運動最終會導致優化算法錯誤地混淆全局最優和局部最優。因此,它會選擇局部最優,誤認為這是全局最優,但事實并非如此。

      為了解決這個問題,我們提出了帶有動量的SGD算法。帶有動量的SGD算法利用了SGD的優點,并嘗試解決SGD的最大缺點,即過多的振蕩。帶有動量的SGD引入了動量的概念,利用這種動量來尋找優化算法并將其推向更好的方向,從而減少振蕩。

      動量的作用是嘗試添加我們之前對模型參數進行的更新的一小部分,然后我們假設這將很好地指示該特定時間步長中更準確的方向。假設我們處于時間步t,并且我們需要進行更新,那么動量的作用就是查看之前的所有更新,并更頻繁地使用最近的更新。與非常舊的更新相比,最近的更新很可能會更好地代表我們需要采取的方向。這在優化過程中更新模型參數時,當我們考慮到這些是最近的情況時,我們就可以有更好、更準確的方法。

      帶有動量的SGD試圖加速這個轉換過程,并且不是有太多朝向不同方向的運動,也不是有兩個不同的經常梯度和更新,而是試圖穩定這個過程,并且有更多的持續更新。在這里你可以看到,作為動量的一部分,我們獲得了這個動量項,它等于vt加一,用于時間步長t加一的更新。它的作用是需要這個伽瑪乘以vt,加上學習率eta,然后是梯度。你可以看到這個膨脹的三角形,然后在theta下方,然后j theta t只是表示損失函數相對于參數theta的梯度。它基本上所做的是它說我們正在計算這個動量項,t的時間步長加一,基于之前的更新。通過將 gamma 乘以 VT 并加上我們之前看到的隨機梯度下降(SGD)的常用術語,對于梯度下降(GD)來說,基本操作是使用 eta 學習率乘以損失函數相對于參數 theta 的一階偏導數。因此,我們使用這個動量項簡單地從我們的當前參數 theta t 獲取新版本,更新版本為 theta t 加一,其中 theta 只是模型參數。

      通過這種方式,我們正在做的是,以更一致的方式執行更多的更新,從而在方向中引入一致性。通過更重視近期的調整,我們增強了動量,因此稱為動量。動量增加了朝這個方向的速度,使得在更一致的梯度中找到全局最優值,增強了向全局最優的運動,從而使損失函數達到全局最小值。這當然會提高優化算法的質量,我們最終會發現全局最優而不是局部最優。

      總結一下,帶有動量的 SGD 的作用是,它基本上采用 SGD 算法,因此在執行模型參數更新時再次使用少量訓練數據。但與 SGD 不同,帶動量的 SGD 的作用是,在尋找實際的全局最優值時,它試圖復制 GD 的質量,而它的實現方式是引入動量項。這還有助于引入更新的一致性并減少算法產生的振蕩,通過更平滑的路徑來發現損失函數的實際全局最優值。

      25 比較批量梯度下降和小批量梯度下降,以及隨機梯度下降

      這里我們有梯度下降算法的三個不同版本:傳統的批量梯度下降(通常簡稱為 GD)、小批量梯度下降和 SGD 或隨機梯度下降。這三種算法彼此非常接近,它們在執行每個模型訓練和模型參數更新時的效率和使用的數據量方面確實有所不同。


      批量梯度下降是原始的 GD,該方法涉及使用整個訓練數據的傳統方法。對于計算梯度時的每次迭代,進行反向傳播,然后將這些梯度作為優化算法的輸入,以對這些模型參數執行單次更新。然后再次使用整個訓練數據進行下一次迭代,計算梯度并更新模型參數。在批量梯度下降中,我們不是在估計兩個梯度,而是實際上在計算梯度,因為我們擁有完整的訓練數據。由于使用整個訓練數據的這種質量,批量梯度下降具有非常高的質量,因此非常穩定,能夠識別實際的全局最優值。然而,這是以效率為代價的,因為批量梯度下降使用每次都需要將整個訓練數據放入內存中的整個訓練數據,并且在執行優化時非常慢,特別是在處理大型和復雜的數據集時。

      接下來我們有批量梯度下降的另一個極端,即 SGD。SGD 與 GD 不同,我們之前在討論 SGD 隨機使用的先前面試問題時看到了這一點,因此隨機采樣單個或少數訓練觀察結果,為了執行訓練,計算執行反向傳播的梯度,然后使用優化來更新每次迭代中的模型參數。這意味著我們實際上并不計算實際的梯度,但我們實際上正在估計真實的梯度,因為我們只使用了訓練數據的一小部分。這當然是以算法質量為代價的,盡管僅使用小樣本是有效的,從進行反向傳播時的訓練數據中我們不需要存儲訓練,將整個訓練數據放入內存中,但只是其中的一小部分,我們快速執行模型更新,然后我們更快地找到所謂的最佳值。但這是以算法質量為代價的,因為這樣它就會開始產生太多的振蕩。由于噪聲梯度的存在,全局最優值和局部最優值往往會被混淆。這引出了我們的第三種優化算法,即小批量梯度下降。小批量梯度下降基本上是批量梯度下降和原始隨機梯度下降(SGD)之間的一種折衷方案。小批量梯度下降的工作方式是試圖在傳統的梯度下降(GD)和SGD之間取得平衡。


      小批量梯度下降試圖利用SGD在效率方面的優勢,并將其與GD在更新的穩定性和一致性以及尋找實際全局最優方面的優勢結合起來。它的實現方式是將訓練觀察結果隨機抽樣到批次中,其中批次比SGD大得多,然后使用這些較小部分的訓練數據在每次迭代中進行反向傳播,然后更新模型參數。因此,當我們將訓練數據采樣到這k個不同的折疊(在本例中是批次)時,可以將其視為k折交叉驗證,然后我們使用它來訓練模型,然后在神經網絡的情況下使用小批量梯度下降更新模型參數,例如權重和偏差向量。

      雖然這三種方法有很多相似之處,但也有不同之處。在這個面試問題中,面試官試圖測試你是否理解這三種方法的優點以及小批量梯度下降的目的。

      26 如何在考慮小尺寸和大尺寸的情況下決定深度學習中的批量大小

      這個問題是一個非常重要的問題,面試官試圖測試你是否理解批量大小的影響,以及它如何影響整個算法的質量。

      在這里,你的面試官想知道你對批量大小對梯度噪聲、模型的偏差、模型的方差、模型的泛化、模型的收斂性、效率,尤其是內存使用情況的理解。我們已經討論并比較了傳統批量梯度下降、小批量梯度下降和SGD。我們已經談到了...

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      大家不知道的是,媽祖乩童的真實待遇,不只是榮耀這么簡單

      大家不知道的是,媽祖乩童的真實待遇,不只是榮耀這么簡單

      刺頭體育
      2026-02-25 11:38:17
      果然不簡單:中國摁住日本后,又讓美國見識了北京的“陽謀”

      果然不簡單:中國摁住日本后,又讓美國見識了北京的“陽謀”

      花小貓的美食日常
      2026-02-26 06:51:35
      朝鮮勞動黨九大閉幕

      朝鮮勞動黨九大閉幕

      國際在線
      2026-02-26 07:06:07
      美貿易代表:美對部分國家加征的“全球進口關稅”稅率或達15%

      美貿易代表:美對部分國家加征的“全球進口關稅”稅率或達15%

      每日經濟新聞
      2026-02-26 00:36:32
      《鏢人》海外大爆,登頂多國冠軍,總票房破9億

      《鏢人》海外大爆,登頂多國冠軍,總票房破9億

      影視高原說
      2026-02-25 16:50:47
      1942年潛伏在日偽心臟的中共特工送來手繪圖,粟裕:槍斃電報科長

      1942年潛伏在日偽心臟的中共特工送來手繪圖,粟裕:槍斃電報科長

      讓時間說真話
      2024-05-13 22:06:58
      汪小菲徹底變了!三胎兒子出生,岳父一句話太真實

      汪小菲徹底變了!三胎兒子出生,岳父一句話太真實

      情感大頭說說
      2026-02-26 07:22:07
      同一位造型師,給陳飛宇陳曉任嘉倫做的古裝,腰部設計差出一條街

      同一位造型師,給陳飛宇陳曉任嘉倫做的古裝,腰部設計差出一條街

      冒泡泡的魚兒
      2026-02-25 17:37:20
      74歲陳凱歌在三亞豪宅過年,穿5萬元皮鞋戴大金表,臉上有老年斑

      74歲陳凱歌在三亞豪宅過年,穿5萬元皮鞋戴大金表,臉上有老年斑

      離離言幾許
      2026-02-25 16:07:01
      龍洋眼往上瞟,不是看提詞器,也不是針打多了,而是一個“硬傷”

      龍洋眼往上瞟,不是看提詞器,也不是針打多了,而是一個“硬傷”

      她時尚丫
      2026-02-17 22:41:30
      紫牛頭條 | 全家出游老人服務區內被狗撲咬骨折,犬主付千元后駕車離開,警方已立案

      紫牛頭條 | 全家出游老人服務區內被狗撲咬骨折,犬主付千元后駕車離開,警方已立案

      揚子晚報
      2026-02-24 23:56:16
      彭博社消息,Unity考慮出售中國業務,估值或超10億美元

      彭博社消息,Unity考慮出售中國業務,估值或超10億美元

      游戲干線
      2026-02-25 22:04:54
      10億換一命!京東副總裁蔡磊對抗漸凍癥4年后,終于贏得一線生機

      10億換一命!京東副總裁蔡磊對抗漸凍癥4年后,終于贏得一線生機

      小莜讀史
      2026-02-02 18:27:35
      “天下誰人不貪污,你殺得完嗎?”朱元璋回答了8個字,流傳至今

      “天下誰人不貪污,你殺得完嗎?”朱元璋回答了8個字,流傳至今

      千秋文化
      2026-02-21 19:39:28
      厄爾尼諾回歸,我國氣候大轉折,今年夏天或有大變化

      厄爾尼諾回歸,我國氣候大轉折,今年夏天或有大變化

      老特有話說
      2026-02-24 23:26:27
      平頂山事件二次通報!真相竟是先打其他3人再暴打15歲女生!

      平頂山事件二次通報!真相竟是先打其他3人再暴打15歲女生!

      魔都囡
      2026-02-25 10:57:52
      8歲高考760分,智商230超過愛因斯坦,神童陶哲軒如今怎么樣了?

      8歲高考760分,智商230超過愛因斯坦,神童陶哲軒如今怎么樣了?

      戶外阿毽
      2026-02-26 06:16:12
      直問"璃龍": 你倆到底是什么關系

      直問"璃龍": 你倆到底是什么關系

      徐靜波靜說日本
      2026-02-26 09:08:15
      譚詠麟32歲兒子近照曝光,眉宇英氣如母親,加拿大任工程師

      譚詠麟32歲兒子近照曝光,眉宇英氣如母親,加拿大任工程師

      心靈得以滋養
      2025-12-30 20:01:32
      面對中方索賠,巴總統改口,李嘉誠因禍得福,或能保住43個港口

      面對中方索賠,巴總統改口,李嘉誠因禍得福,或能保住43個港口

      透視到底
      2026-02-12 07:15:10
      2026-02-26 09:31:00
      Web3天空之城 incentive-icons
      Web3天空之城
      美好,有趣的,值得銘記的
      110文章數 93關注度
      往期回顧 全部

      科技要聞

      “機器人只跳舞,沒什么用”

      頭條要聞

      中方對日方出口管制措施落地后 高市早苗表態了

      頭條要聞

      中方對日方出口管制措施落地后 高市早苗表態了

      體育要聞

      勇士爆冷惜敗鵜鶘 梅爾頓28分賽季新高

      娛樂要聞

      黃曉明新戀情!與小22歲美女同游新加坡

      財經要聞

      短劇市場風云突變!有人投百萬賠得精光

      汽車要聞

      750km超長續航 2026款小鵬X9純電版將于3月2日上市

      態度原創

      旅游
      手機
      親子
      藝術
      游戲

      旅游要聞

      市花開了!主題公園今年有望啟動

      手機要聞

      三星Galaxy S26系列手機AI功能盤點:升級Bixby,篩選陌生來電

      親子要聞

      育兒思路 雙語學習

      藝術要聞

      一幅眼花繚亂草書:從書法創作到青少年書法教育的思考

      《FF7重制版》NS2版克勞德頭發有鋸齒 官方回應

      無障礙瀏覽 進入關懷版