最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

無(wú)需深度學(xué)習(xí)框架,如何從零開(kāi)始用Python構(gòu)建神經(jīng)網(wǎng)絡(luò)

2023-07-14 15:50 作者:Momooo吖  | 我要投稿

選自TowardsDataScience

動(dòng)機(jī):為了深入了解深度學(xué)習(xí),我決定從零開(kāi)始構(gòu)建神經(jīng)網(wǎng)絡(luò),并且不使用類似 Tensorflow 的深度學(xué)習(xí)庫(kù)。我相信,對(duì)于任何有理想的數(shù)據(jù)科學(xué)家而言,理解神經(jīng)網(wǎng)絡(luò)內(nèi)部的運(yùn)作方式都非常重要。

本文涵蓋了我學(xué)到的所有東西,希望你也能從中獲益!


什么是神經(jīng)網(wǎng)絡(luò)?

許多有關(guān)神經(jīng)網(wǎng)絡(luò)的介紹資料會(huì)將神經(jīng)網(wǎng)絡(luò)與大腦進(jìn)行類比。但我發(fā)現(xiàn),將神經(jīng)網(wǎng)絡(luò)簡(jiǎn)單地描述為一個(gè)從輸入映射到輸出的數(shù)學(xué)函數(shù)理解起來(lái)更容易。

神經(jīng)網(wǎng)絡(luò)由以下部分組成:

  • 一個(gè)輸入層,x

  • 任意數(shù)量的隱藏層

  • 一個(gè)輸出層,?

  • 每?jī)蓪又g都有一組權(quán)重和偏置,W 和 b

  • 每個(gè)隱藏層都要選擇一個(gè)激活函數(shù) σ。在本文中,我們選用 Sigmoid 激活函數(shù)。

下圖展示了 2 層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)(請(qǐng)注意,在計(jì)算神經(jīng)網(wǎng)絡(luò)層數(shù)的時(shí)候,通常不計(jì)入輸入層)。

二層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)

利用 Python 建立神經(jīng)網(wǎng)絡(luò)非常容易。


訓(xùn)練神經(jīng)網(wǎng)絡(luò)

一個(gè)簡(jiǎn)單 2 層神經(jīng)網(wǎng)絡(luò)的輸出 ? 可以表示為:

你可能注意到,在上面的等式當(dāng)中,權(quán)重 W 和偏置 b 是影響輸出 ? 的唯一變量。

自然,權(quán)重和偏差的正確值決定了預(yù)測(cè)的強(qiáng)度。根據(jù)輸入數(shù)據(jù)微調(diào)權(quán)重和偏置的過(guò)程稱為神經(jīng)網(wǎng)絡(luò)訓(xùn)練。

訓(xùn)練過(guò)程的每一次迭代包含以下步驟:

  • 計(jì)算預(yù)測(cè)的輸出 ?,稱為前向傳播

  • 更新權(quán)重和偏置,稱為反向傳播

以下流程圖說(shuō)明了這個(gè)過(guò)程:

前向傳播

正如我們?cè)谏蠄D中所看到的,前向傳播只是一個(gè)簡(jiǎn)單的計(jì)算。對(duì)于一個(gè)基本的 2 層神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)的輸出計(jì)算如下:

我們可以在 Python 代碼中添加一個(gè)前向傳播函數(shù)來(lái)做到這一點(diǎn)。簡(jiǎn)單起見(jiàn),我們假設(shè)偏置為 0。

然而,我們?nèi)匀恍枰环N方法來(lái)評(píng)估我們的預(yù)測(cè)的「優(yōu)秀程度」(即,我們的預(yù)測(cè)與真實(shí)值相差多少?)這就需要用到損失函數(shù)了。


損失函數(shù)

損失函數(shù)有很多種,而我們問(wèn)題的性質(zhì)會(huì)決定我們使用哪種損失函數(shù)。在本文中,我們將采用簡(jiǎn)單的誤差平方和。

誤差平方和,即每個(gè)預(yù)測(cè)值和真實(shí)值之間差值的平均值。這個(gè)差值是取了平方項(xiàng)的,所以我們測(cè)量的是差值的絕對(duì)值。

在訓(xùn)練過(guò)程中,我們的目標(biāo)是找到一組最佳的權(quán)重和偏置,使損失函數(shù)最小化。


反向傳播

現(xiàn)在,我們已經(jīng)找到了預(yù)測(cè)誤差的方法(損失函數(shù)),那么我們需要一種方法將錯(cuò)誤「?jìng)鞑ァ够厝?,從而更新?quán)重和偏置。

為了確定權(quán)重和偏置調(diào)整的適當(dāng)值,我們需要知道損失函數(shù)對(duì)權(quán)重和偏置的偏導(dǎo)數(shù)。

從微積分的角度來(lái)看,函數(shù)的偏導(dǎo)數(shù)也就是函數(shù)的斜率。

梯度下降算法

如果我們知道了偏導(dǎo)數(shù),我們可以通過(guò)簡(jiǎn)單增加或減少偏導(dǎo)數(shù)(如上圖所示)的方式來(lái)更新權(quán)重和偏置。這就是所謂的梯度下降。

然而,由于損失函數(shù)的方程不包含權(quán)重和偏置,所以我們不能直接計(jì)算損失函數(shù)對(duì)權(quán)重和偏置的偏導(dǎo)數(shù)。因此,我們需要鏈?zhǔn)椒▌t來(lái)幫助計(jì)算。

以上是用于計(jì)算損失函數(shù)對(duì)權(quán)重偏導(dǎo)數(shù)的鏈?zhǔn)椒▌t。簡(jiǎn)單起見(jiàn),我們只展示了一層神經(jīng)網(wǎng)絡(luò)的偏導(dǎo)數(shù)。

唷!這看起來(lái)不大好看,但這能讓我們獲得所需——損失函數(shù)對(duì)權(quán)重的偏導(dǎo)數(shù)(斜率),以便相應(yīng)調(diào)整權(quán)重。

既然我們已經(jīng)有了鏈?zhǔn)椒▌t公式,接下來(lái)我們把反向傳播函數(shù)添加到 Python 代碼中。

為了更深入地理解微積分和鏈?zhǔn)椒▌t在反向傳播中的應(yīng)用,我強(qiáng)烈推薦 3Blue1Brown 的視頻教程。


整合

既然我們已經(jīng)有了做前向傳播和反向傳播的完整 Python 代碼,我們可以將神經(jīng)網(wǎng)絡(luò)應(yīng)用到一個(gè)示例中,看看它的效果。

我們的神經(jīng)網(wǎng)絡(luò)應(yīng)該能夠習(xí)得理想的權(quán)重集合以表示這個(gè)函數(shù)。請(qǐng)注意,對(duì)于我們來(lái)說(shuō),僅通過(guò)檢查來(lái)計(jì)算權(quán)重并非一件小事。

如果我們將神經(jīng)網(wǎng)絡(luò)進(jìn)行 1500 次迭代,看看會(huì)發(fā)生什么。下圖展示了每次迭代的損失函數(shù)值,我們可以清晰地發(fā)現(xiàn)損失函數(shù)單調(diào)下降到最小值。這與我們前面討論的梯度下降算法是一致的。

讓我們看看神經(jīng)網(wǎng)絡(luò)在進(jìn)行 1500 次迭代后的最終預(yù)測(cè)(輸出):

進(jìn)行 1500 次迭代后的預(yù)測(cè)值

我們成功了!我們的前向傳播和反向傳播算法成功訓(xùn)練了神經(jīng)網(wǎng)絡(luò),且預(yù)測(cè)值收斂到了真實(shí)值。

請(qǐng)注意,預(yù)測(cè)值和真實(shí)值之間還是有一些輕微差異的。這是可取的,因?yàn)樗乐沽诉^(guò)度擬合,并且使得神經(jīng)網(wǎng)絡(luò)具有更強(qiáng)的泛化能力。


下一步

幸運(yùn)的是,我們的探索還沒(méi)有結(jié)束。關(guān)于神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)還有很多需要學(xué)習(xí)的地方。例如:

  • 除了 Sigmoid 函數(shù)之外,我們還可以使用哪些激活函數(shù)?

  • 在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)使用學(xué)習(xí)率

  • 使用卷積進(jìn)行圖像分類任務(wù)

最后一點(diǎn)想法

在撰寫此文的過(guò)程中,我已經(jīng)學(xué)到了很多,希望本文也能對(duì)你有所幫助。

在沒(méi)有完全了解神經(jīng)網(wǎng)絡(luò)內(nèi)部工作原理的情況下,雖然使用諸如 TensorFlow 和 Keras 之類的深度學(xué)習(xí)庫(kù)可以讓我們很容易地建立深度網(wǎng)絡(luò),但我認(rèn)為對(duì)于有抱負(fù)的數(shù)據(jù)科學(xué)家而言,深入理解神經(jīng)網(wǎng)絡(luò)還是大有裨益的。



無(wú)需深度學(xué)習(xí)框架,如何從零開(kāi)始用Python構(gòu)建神經(jīng)網(wǎng)絡(luò)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
南郑县| 永善县| 泰来县| 岫岩| 仁布县| 双辽市| 南康市| 深圳市| 余江县| 宜都市| 凤台县| 陈巴尔虎旗| 柞水县| 凤台县| 西青区| 泰来县| 宿松县| 宾阳县| 钟祥市| 舒兰市| 铜山县| 张掖市| 新源县| 彩票| 军事| 衡东县| 唐河县| 平武县| 桃园市| 吉安县| 出国| 富蕴县| 尉氏县| 西畴县| 上思县| 应用必备| 含山县| 阿图什市| 台东县| 西和县| 临沭县|