什么是神經(jīng)網(wǎng)絡(luò)?用代碼示例解析其工作原理|每日播報(bào)
發(fā)稿時(shí)間:2023-06-23 17:24:36 來(lái)源: 博客園
【資料圖】
本文由gpt4輔助撰寫(xiě)(gptschools.cn)神經(jīng)網(wǎng)絡(luò)是一種模仿人腦神經(jīng)元工作原理的計(jì)算模型,用于實(shí)現(xiàn)機(jī)器學(xué)習(xí)和人工智能系統(tǒng)。它由一系列相互連接的神經(jīng)元(也稱(chēng)為節(jié)點(diǎn)或單元)組成,這些神經(jīng)元組織成不同的層。神經(jīng)網(wǎng)絡(luò)通常包括輸入層、一個(gè)或多個(gè)隱藏層和輸出層。每個(gè)節(jié)點(diǎn)根據(jù)其輸入數(shù)據(jù)和相應(yīng)的權(quán)重計(jì)算輸出值,并通過(guò)激活函數(shù)進(jìn)行非線性轉(zhuǎn)換。 神經(jīng)網(wǎng)絡(luò)可以通過(guò)學(xué)習(xí)和調(diào)整權(quán)重實(shí)現(xiàn)自適應(yīng),從而在處理復(fù)雜問(wèn)題(如圖像識(shí)別、自然語(yǔ)言處理和游戲策略等)時(shí)具有很高的靈活性。訓(xùn)練神經(jīng)網(wǎng)絡(luò)的過(guò)程通常包括使用大量輸入數(shù)據(jù)和期望輸出,計(jì)算損失函數(shù)(用于衡量網(wǎng)絡(luò)輸出與期望輸出之間的差距),并使用優(yōu)化算法(如梯度下降法)調(diào)整權(quán)重以最小化損失。 神經(jīng)網(wǎng)絡(luò)是深度學(xué)習(xí)的核心組成部分,深度學(xué)習(xí)模型通常包含多個(gè)隱藏層,從而能夠?qū)W習(xí)更復(fù)雜數(shù)學(xué)表示和抽象概念。?下面以一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)(用于解決 XOR 問(wèn)題)為例,說(shuō)明神經(jīng)網(wǎng)絡(luò)中的各個(gè)概念。該神經(jīng)網(wǎng)絡(luò)示例中,包含一個(gè)輸入層(2個(gè)節(jié)點(diǎn)),一個(gè)隱藏層(2個(gè)節(jié)點(diǎn))和一個(gè)輸出層(1個(gè)節(jié)點(diǎn))。輸入輸出層之間以及隱藏層與輸出層之間的所有節(jié)點(diǎn)均相互連接。激活函數(shù)為 Sigmoid 函數(shù)。上述神經(jīng)網(wǎng)絡(luò)的python實(shí)現(xiàn)如下:
import numpy as np# Sigmoid 激活函數(shù)def sigmoid(x): return 1 / (1 + np.exp(-x))# 使用 sigmoid 導(dǎo)數(shù)進(jìn)行非線性變換以及反向傳播計(jì)算梯度def sigmoid_derivative(x): return x * (1 - x)def mse_loss(y_true, y_pred): return np.mean(np.square(y_true - y_pred))class NeuralNetwork: def __init__(self, input_nodes, hidden_nodes, output_nodes): self.input_nodes = input_nodes self.hidden_nodes = hidden_nodes self.output_nodes = output_nodes self.weights_ih = np.random.rand(self.input_nodes, self.hidden_nodes) - 0.5 self.weights_ho = np.random.rand(self.hidden_nodes, self.output_nodes) - 0.5 self.bias_h = np.random.rand(1, self.hidden_nodes) - 0.5 self.bias_o = np.random.rand(1, self.output_nodes) - 0.5 def feedforward(self, input_data): hidden = sigmoid(np.dot(input_data, self.weights_ih) + self.bias_h) output = sigmoid(np.dot(hidden, self.weights_ho) + self.bias_o) return hidden, output def backward(self, input_data, hidden, output, target_data, learning_rate=0.1): # 計(jì)算損失函數(shù)的梯度 output_error = target_data - output output_delta = output_error * sigmoid_derivative(output) hidden_error = np.dot(output_delta, self.weights_ho.T) hidden_delta = hidden_error * sigmoid_derivative(hidden) self.weights_ho += learning_rate * np.dot(hidden.T, output_delta) self.weights_ih += learning_rate * np.dot(input_data.T, hidden_delta) self.bias_o += learning_rate * np.sum(output_delta, axis=0) self.bias_h += learning_rate * np.sum(hidden_delta, axis=0) # 根據(jù)輸入輸出數(shù)據(jù),訓(xùn)練多輪,更新神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏置,最終得到正確的神經(jīng)網(wǎng)絡(luò)參數(shù) def train(self, input_data, target_data, epochs, learning_rate=0.5): for _ in range(epochs): hidden, output = self.feedforward(input_data) self.backward(input_data, hidden, output, target_data, learning_rate)if __name__ == "__main__": # 示例 X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) Y = np.array([[0], [1], [1], [0]]) nn = NeuralNetwork(input_nodes=2, hidden_nodes=2, output_nodes=1) print("Before training:") _, output = nn.feedforward(X) print(output) nn.train(X, Y, epochs=2000, learning_rate=0.8) print("After training:") _, output = nn.feedforward(X) print(output) # 計(jì)算損失 loss = mse_loss(Y, output) print("Loss:", loss)首先,創(chuàng)建 XOR 問(wèn)題的輸入和輸出數(shù)據(jù)集,分別存儲(chǔ)在 NumPy 數(shù)組中初始化權(quán)重與偏置然后,根據(jù)輸入輸出數(shù)據(jù),訓(xùn)練2000輪每輪訓(xùn)練都會(huì)通過(guò)反向傳播更新各層的權(quán)重和偏置,最終得到正確的神經(jīng)網(wǎng)絡(luò)參數(shù)上述簡(jiǎn)單示例中,涉及到如下神經(jīng)網(wǎng)絡(luò)基本概念:前向傳播:利用若干個(gè)權(quán)重系數(shù)矩陣W,偏倚向量b來(lái)和輸入值向量x進(jìn)行一系列線性運(yùn)算和激活運(yùn)算,從輸入層開(kāi)始,一層層的向后計(jì)算,一直到運(yùn)算到輸出層,得到輸出結(jié)果為值激活函數(shù):(Activation Function)是一種在神經(jīng)網(wǎng)絡(luò)中使用的非線性函數(shù),用于將神經(jīng)元的累積輸入值轉(zhuǎn)換為輸出值。激活函數(shù)的主要目的是引入非線性特性,使得神經(jīng)網(wǎng)絡(luò)能夠?qū)W習(xí)并表示復(fù)雜的數(shù)據(jù)模式。如果沒(méi)有激活函數(shù),神經(jīng)網(wǎng)絡(luò)將僅僅是一個(gè)線性回歸模型,無(wú)法處理復(fù)雜的問(wèn)題。反向傳播:核心思想是通過(guò)優(yōu)化權(quán)重與偏置,從而逐漸減小預(yù)測(cè)輸出與真實(shí)值之間的差距,提高神經(jīng)網(wǎng)絡(luò)的性能。反向傳播過(guò)程開(kāi)始于計(jì)算輸出層的誤差,即預(yù)測(cè)輸出與實(shí)際目標(biāo)之間的差值。然后,這個(gè)誤差將從輸出層向后傳播到隱藏層。為了更新神經(jīng)網(wǎng)絡(luò)中的權(quán)重,我們需要計(jì)算損失函數(shù)相對(duì)于每個(gè)權(quán)重的梯度。我們使用鏈?zhǔn)椒▌t(chain rule)將這些梯度分解為前一層的輸出、當(dāng)前層的梯度和后一層的梯度。通過(guò)這種方式,我們可以得到每個(gè)權(quán)重的梯度,并用它們更新權(quán)重以最小化損失。損失函數(shù):損失函數(shù)值在訓(xùn)練過(guò)程中起到的作用是衡量模型預(yù)測(cè)結(jié)果與實(shí)際目標(biāo)值之間的差距。在反向傳播過(guò)程中,我們實(shí)際上是通過(guò)損失函數(shù)的梯度來(lái)調(diào)整神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏置,從而使得損失值最小化。在上面的代碼示例中,我們計(jì)算了輸出層的誤差(output_error),這個(gè)誤差實(shí)際上就是損失函數(shù)的梯度。這里的損失函數(shù)是均方誤差(MSE),計(jì)算梯度的公式為:output_error = target_data - output在反向傳播過(guò)程中,我們通過(guò)該梯度來(lái)更新權(quán)重和偏置,以使得損失值最小化。因此,損失值在訓(xùn)練過(guò)程中起到了關(guān)鍵作用。其中,Sigmoid 函數(shù)是一種常用的激活函數(shù),用于神經(jīng)網(wǎng)絡(luò)中對(duì)節(jié)點(diǎn)輸出進(jìn)行非線性轉(zhuǎn)換。Sigmoid 函數(shù)的數(shù)學(xué)表達(dá)式如下:
sigmoid(x) = 1 / (1 + e^(-x))其中,x 是輸入值,e 是自然常數(shù)(約等于 2.71828)。Sigmoid 函數(shù)的輸出值范圍在 0 和 1 之間,具有平滑的 S 形曲線。當(dāng)輸入值 x 趨向于正無(wú)窮大時(shí),函數(shù)值接近 1;當(dāng)輸入值 x 趨向于負(fù)無(wú)窮大時(shí),函數(shù)值接近 0。因此,Sigmoid 函數(shù)可以將任意實(shí)數(shù)輸入映射到 (0, 1) 區(qū)間內(nèi),使得網(wǎng)絡(luò)輸出具有更好的解釋性。此外,Sigmoid 函數(shù)的導(dǎo)數(shù)也可以方便地用其函數(shù)值表示,便于進(jìn)行梯度下降優(yōu)化算法。然而,Sigmoid 函數(shù)也存在一些問(wèn)題,例如梯度消失問(wèn)題。當(dāng)輸入值過(guò)大或過(guò)小時(shí),Sigmoid 函數(shù)的梯度(導(dǎo)數(shù))接近于 0,導(dǎo)致權(quán)重更新非常緩慢,從而影響訓(xùn)練速度和效果。因此,在深度學(xué)習(xí)中,有時(shí)會(huì)選擇其他激活函數(shù),如 ReLU(線性整流單元)等。另外,偏置(bias)的引入是為了增加模型的表達(dá)能力。具體來(lái)說(shuō),在 Sigmoid 激活函數(shù)中,偏置的作用如下:調(diào)整激活函數(shù)的輸出:在神經(jīng)網(wǎng)絡(luò)中,激活函數(shù)(如 Sigmoid 函數(shù))用于對(duì)節(jié)點(diǎn)的線性加權(quán)和進(jìn)行非線性轉(zhuǎn)換。偏置相當(dāng)于一個(gè)常數(shù)值,可以使得激活函數(shù)的輸出在整體上向上或向下平移。這樣,激活函數(shù)可以在不同區(qū)域內(nèi)保持對(duì)輸入的敏感性,提高模型的擬合能力。提高模型的靈活性:加入偏置后,神經(jīng)網(wǎng)絡(luò)可以學(xué)習(xí)到更復(fù)雜的表示。偏置參數(shù)使神經(jīng)網(wǎng)絡(luò)能夠在沒(méi)有輸入(或輸入為零)時(shí)產(chǎn)生非零輸出。如果沒(méi)有偏置,即使權(quán)重參數(shù)不同,神經(jīng)元在輸入為零時(shí)的輸出也將相同。因此,引入偏置為神經(jīng)網(wǎng)絡(luò)提供了額外的自由度,使其能夠更好地?cái)M合復(fù)雜的數(shù)據(jù)。以 Sigmoid 函數(shù)為例,一個(gè)神經(jīng)元的輸出可以表示為:output = sigmoid(w1 * x1 + w2 * x2 + ... + wn * xn + b)這里,w1、w2、...、wn 是輸入數(shù)據(jù)(x1、x2、...、xn)對(duì)應(yīng)的權(quán)重,b 是偏置。通過(guò)調(diào)整偏置 b 的值,可以使 Sigmoid 函數(shù)的輸出整體上升或下降,從而改變神經(jīng)元的激活閾值。這使神經(jīng)網(wǎng)絡(luò)能夠更好地適應(yīng)不同的數(shù)據(jù)分布,提高模型的泛化能力。FAQs梯度與函數(shù)導(dǎo)數(shù)的關(guān)系?梯度與導(dǎo)數(shù)密切相關(guān),但它們有一些區(qū)別。對(duì)于單變量函數(shù)(即只有一個(gè)自變量的函數(shù)),梯度就是導(dǎo)數(shù)。導(dǎo)數(shù)表示該函數(shù)在某一點(diǎn)處的切線斜率。對(duì)于多變量函數(shù)(即有多個(gè)自變量的函數(shù)),梯度是一個(gè)向量,包含了函數(shù)在某一點(diǎn)處沿著各個(gè)坐標(biāo)軸方向的偏導(dǎo)數(shù)。換句話說(shuō),梯度是一個(gè)向量,它將多個(gè)偏導(dǎo)數(shù)組合在一起,描述了多變量函數(shù)在各個(gè)方向上的變化情況。梯度的方向是函數(shù)在該點(diǎn)處變化最快的方向,梯度的大小表示函數(shù)在該點(diǎn)處的變化速率。總結(jié)一下:對(duì)于單變量函數(shù),梯度就是導(dǎo)數(shù)。對(duì)于多變量函數(shù),梯度是一個(gè)包含所有偏導(dǎo)數(shù)的向量。 AI Advisor公眾號(hào):?參考什么是神經(jīng)網(wǎng)絡(luò)?深度神經(jīng)網(wǎng)絡(luò)(DNN)
標(biāo)簽:
- 淮劇《小白楊》深情上演 致敬一代代援疆人的“精神豐碑”
- 寧德時(shí)代出資20億元在洛陽(yáng)成立新公司 經(jīng)營(yíng)范圍含電池制造等業(yè)務(wù)_即時(shí)焦點(diǎn)
- 小法:我尊重圖多爾但他不尊重我,溫格觀戰(zhàn)是我給他買(mǎi)的票_今日快看
- 農(nóng)發(fā)行湖南省分行違反金融統(tǒng)計(jì)規(guī)定被警告并罰款135.4萬(wàn)元 速讀
- 黃曉明回應(yīng)為新戲增肥30斤:這是我人生中最快樂(lè)的時(shí)光 觀速訊
- 每日動(dòng)態(tài)!國(guó)家統(tǒng)計(jì)局:9月份社會(huì)消費(fèi)品零售總額增長(zhǎng)3.0%
- 中國(guó)之變|這五年,數(shù)字化點(diǎn)亮新生活-每日觀點(diǎn)
- 大行評(píng)級(jí)丨里昂:上調(diào)臺(tái)積電目標(biāo)價(jià)至2000新臺(tái)幣 維持“高度確信跑贏大市”評(píng)級(jí)_每日時(shí)訊
- 熱消息:內(nèi)蒙古赤峰農(nóng)村牧區(qū)產(chǎn)權(quán)流轉(zhuǎn)服務(wù)中心完成首單交易
- 熱資訊!贛C支持湘C!宜春“老表”跨城應(yīng)援
- 丹尼-格林:姚明如不傷難以想象,文班或能成為他本該成為的人
- 房產(chǎn)投資的風(fēng)險(xiǎn)與收益權(quán)衡?
- 鼎佳精密:10月17日獲融資買(mǎi)入291.41萬(wàn)元_快資訊
- 財(cái)報(bào)速遞:達(dá)瑞電子2025年前三季度凈利潤(rùn)2.31億元 每日動(dòng)態(tài)
- 廣州湛建建材有限公司成立 注冊(cè)資本10萬(wàn)人民幣|焦點(diǎn)快播
- 今日熱搜:時(shí)空科技擬“跨界”收購(gòu) 切入半導(dǎo)體存儲(chǔ)賽道
- 當(dāng)前聚焦:佑駕創(chuàng)新中標(biāo)1185萬(wàn)元車(chē)路云一體化城市交通融合感知項(xiàng)目
- 中原證券擬實(shí)施2025年半年度權(quán)益分派,共計(jì)派發(fā)現(xiàn)金紅利3714.31萬(wàn)元-當(dāng)前熱議
- 每日視點(diǎn)!主場(chǎng)戰(zhàn)三鎮(zhèn)賽前,大連英博為隊(duì)史首位外援羅伯森舉辦退役儀式
- 祥生醫(yī)療前三季度營(yíng)業(yè)收入3.43億元,同比下降5.27%
- 江蘇最低工資標(biāo)準(zhǔn)公布
- 首佳科技于10月17日耗資56萬(wàn)港元回購(gòu)70萬(wàn)股-每日消息
- 靳東:延安的變化讓人刮目相看_焦點(diǎn)簡(jiǎn)訊
- 當(dāng)前關(guān)注:凡人微光|這座城的精神,正年輕!
- 又見(jiàn)中小銀行密集調(diào)降存款利率-簡(jiǎn)訊
- 前沿?zé)狳c(diǎn):思源電氣前三季度凈利21.91億元,同比增長(zhǎng)46.94%
- 今日快看!劉浩存談藝術(shù)的生命力
- 要聞:呂瑞浩公參會(huì)見(jiàn)上海市疾控局團(tuán)組
- 光庭信息:2025年前三季度凈利潤(rùn)4477.54萬(wàn)元 同比增長(zhǎng)308.53%_最新資訊
- 拿起手機(jī)就能免費(fèi)聽(tīng)講座、看展覽 “十四五”期間多彩文化點(diǎn)亮生活
延伸閱讀
資訊
- 1 醫(yī)藥久違大漲!何時(shí)能走出底部?
- 2 基金銷(xiāo)售轉(zhuǎn)型:從“硬營(yíng)銷(xiāo)”到“軟輸出”
- 3 人民幣資產(chǎn)大反攻!后市怎么看?9月策略觀點(diǎn)看這里
- 4 不流于花式陪伴 基金投教探尋進(jìn)階之路
- 5 市場(chǎng)反彈別瞎忙!關(guān)注這5只基金
- 6 “藝起迎亞運(yùn)、亞殘運(yùn)”仁美書(shū)畫(huà)名家邀請(qǐng)展活動(dòng)成功舉辦
- 7 王蕾:手?jǐn)埿窃拢瑸椤罢垡硖焓埂睋纹鹨黄{(lán)天
- 8 第一!鄒城市“99公益日”網(wǎng)絡(luò)募捐工作取得歷史性突破!
- 9 天舟五號(hào)貨運(yùn)飛船已受控再入大氣層
- 10 這些水果果皮比果肉營(yíng)養(yǎng)還高,5種健康吃法快收藏





