什么是神經(jīng)網(wǎng)絡?用代碼示例解析其工作原理|每日播報
發(fā)稿時間:2023-06-23 17:24:36 來源: 博客園
【資料圖】
本文由gpt4輔助撰寫(gptschools.cn)神經(jīng)網(wǎng)絡是一種模仿人腦神經(jīng)元工作原理的計算模型,用于實現(xiàn)機器學習和人工智能系統(tǒng)。它由一系列相互連接的神經(jīng)元(也稱為節(jié)點或單元)組成,這些神經(jīng)元組織成不同的層。神經(jīng)網(wǎng)絡通常包括輸入層、一個或多個隱藏層和輸出層。每個節(jié)點根據(jù)其輸入數(shù)據(jù)和相應的權(quán)重計算輸出值,并通過激活函數(shù)進行非線性轉(zhuǎn)換。 神經(jīng)網(wǎng)絡可以通過學習和調(diào)整權(quán)重實現(xiàn)自適應,從而在處理復雜問題(如圖像識別、自然語言處理和游戲策略等)時具有很高的靈活性。訓練神經(jīng)網(wǎng)絡的過程通常包括使用大量輸入數(shù)據(jù)和期望輸出,計算損失函數(shù)(用于衡量網(wǎng)絡輸出與期望輸出之間的差距),并使用優(yōu)化算法(如梯度下降法)調(diào)整權(quán)重以最小化損失。 神經(jīng)網(wǎng)絡是深度學習的核心組成部分,深度學習模型通常包含多個隱藏層,從而能夠?qū)W習更復雜數(shù)學表示和抽象概念。?下面以一個簡單的神經(jīng)網(wǎng)絡(用于解決 XOR 問題)為例,說明神經(jīng)網(wǎng)絡中的各個概念。該神經(jīng)網(wǎng)絡示例中,包含一個輸入層(2個節(jié)點),一個隱藏層(2個節(jié)點)和一個輸出層(1個節(jié)點)。輸入輸出層之間以及隱藏層與輸出層之間的所有節(jié)點均相互連接。激活函數(shù)為 Sigmoid 函數(shù)。上述神經(jīng)網(wǎng)絡的python實現(xiàn)如下:
import numpy as np# Sigmoid 激活函數(shù)def sigmoid(x): return 1 / (1 + np.exp(-x))# 使用 sigmoid 導數(shù)進行非線性變換以及反向傳播計算梯度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): # 計算損失函數(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ù),訓練多輪,更新神經(jīng)網(wǎng)絡的權(quán)重和偏置,最終得到正確的神經(jīng)網(wǎng)絡參數(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) # 計算損失 loss = mse_loss(Y, output) print("Loss:", loss)首先,創(chuàng)建 XOR 問題的輸入和輸出數(shù)據(jù)集,分別存儲在 NumPy 數(shù)組中初始化權(quán)重與偏置然后,根據(jù)輸入輸出數(shù)據(jù),訓練2000輪每輪訓練都會通過反向傳播更新各層的權(quán)重和偏置,最終得到正確的神經(jīng)網(wǎng)絡參數(shù)上述簡單示例中,涉及到如下神經(jīng)網(wǎng)絡基本概念:前向傳播:利用若干個權(quán)重系數(shù)矩陣W,偏倚向量b來和輸入值向量x進行一系列線性運算和激活運算,從輸入層開始,一層層的向后計算,一直到運算到輸出層,得到輸出結(jié)果為值激活函數(shù):(Activation Function)是一種在神經(jīng)網(wǎng)絡中使用的非線性函數(shù),用于將神經(jīng)元的累積輸入值轉(zhuǎn)換為輸出值。激活函數(shù)的主要目的是引入非線性特性,使得神經(jīng)網(wǎng)絡能夠?qū)W習并表示復雜的數(shù)據(jù)模式。如果沒有激活函數(shù),神經(jīng)網(wǎng)絡將僅僅是一個線性回歸模型,無法處理復雜的問題。反向傳播:核心思想是通過優(yōu)化權(quán)重與偏置,從而逐漸減小預測輸出與真實值之間的差距,提高神經(jīng)網(wǎng)絡的性能。反向傳播過程開始于計算輸出層的誤差,即預測輸出與實際目標之間的差值。然后,這個誤差將從輸出層向后傳播到隱藏層。為了更新神經(jīng)網(wǎng)絡中的權(quán)重,我們需要計算損失函數(shù)相對于每個權(quán)重的梯度。我們使用鏈式法則(chain rule)將這些梯度分解為前一層的輸出、當前層的梯度和后一層的梯度。通過這種方式,我們可以得到每個權(quán)重的梯度,并用它們更新權(quán)重以最小化損失。損失函數(shù):損失函數(shù)值在訓練過程中起到的作用是衡量模型預測結(jié)果與實際目標值之間的差距。在反向傳播過程中,我們實際上是通過損失函數(shù)的梯度來調(diào)整神經(jīng)網(wǎng)絡的權(quán)重和偏置,從而使得損失值最小化。在上面的代碼示例中,我們計算了輸出層的誤差(output_error),這個誤差實際上就是損失函數(shù)的梯度。這里的損失函數(shù)是均方誤差(MSE),計算梯度的公式為:
output_error = target_data - output在反向傳播過程中,我們通過該梯度來更新權(quán)重和偏置,以使得損失值最小化。因此,損失值在訓練過程中起到了關(guān)鍵作用。其中,Sigmoid 函數(shù)是一種常用的激活函數(shù),用于神經(jīng)網(wǎng)絡中對節(jié)點輸出進行非線性轉(zhuǎn)換。Sigmoid 函數(shù)的數(shù)學表達式如下:
sigmoid(x) = 1 / (1 + e^(-x))其中,x 是輸入值,e 是自然常數(shù)(約等于 2.71828)。Sigmoid 函數(shù)的輸出值范圍在 0 和 1 之間,具有平滑的 S 形曲線。當輸入值 x 趨向于正無窮大時,函數(shù)值接近 1;當輸入值 x 趨向于負無窮大時,函數(shù)值接近 0。因此,Sigmoid 函數(shù)可以將任意實數(shù)輸入映射到 (0, 1) 區(qū)間內(nèi),使得網(wǎng)絡輸出具有更好的解釋性。此外,Sigmoid 函數(shù)的導數(shù)也可以方便地用其函數(shù)值表示,便于進行梯度下降優(yōu)化算法。然而,Sigmoid 函數(shù)也存在一些問題,例如梯度消失問題。當輸入值過大或過小時,Sigmoid 函數(shù)的梯度(導數(shù))接近于 0,導致權(quán)重更新非常緩慢,從而影響訓練速度和效果。因此,在深度學習中,有時會選擇其他激活函數(shù),如 ReLU(線性整流單元)等。另外,偏置(bias)的引入是為了增加模型的表達能力。具體來說,在 Sigmoid 激活函數(shù)中,偏置的作用如下:調(diào)整激活函數(shù)的輸出:在神經(jīng)網(wǎng)絡中,激活函數(shù)(如 Sigmoid 函數(shù))用于對節(jié)點的線性加權(quán)和進行非線性轉(zhuǎn)換。偏置相當于一個常數(shù)值,可以使得激活函數(shù)的輸出在整體上向上或向下平移。這樣,激活函數(shù)可以在不同區(qū)域內(nèi)保持對輸入的敏感性,提高模型的擬合能力。提高模型的靈活性:加入偏置后,神經(jīng)網(wǎng)絡可以學習到更復雜的表示。偏置參數(shù)使神經(jīng)網(wǎng)絡能夠在沒有輸入(或輸入為零)時產(chǎn)生非零輸出。如果沒有偏置,即使權(quán)重參數(shù)不同,神經(jīng)元在輸入為零時的輸出也將相同。因此,引入偏置為神經(jīng)網(wǎng)絡提供了額外的自由度,使其能夠更好地擬合復雜的數(shù)據(jù)。以 Sigmoid 函數(shù)為例,一個神經(jīng)元的輸出可以表示為:output = sigmoid(w1 * x1 + w2 * x2 + ... + wn * xn + b)這里,w1、w2、...、wn 是輸入數(shù)據(jù)(x1、x2、...、xn)對應的權(quán)重,b 是偏置。通過調(diào)整偏置 b 的值,可以使 Sigmoid 函數(shù)的輸出整體上升或下降,從而改變神經(jīng)元的激活閾值。這使神經(jīng)網(wǎng)絡能夠更好地適應不同的數(shù)據(jù)分布,提高模型的泛化能力。FAQs梯度與函數(shù)導數(shù)的關(guān)系?梯度與導數(shù)密切相關(guān),但它們有一些區(qū)別。對于單變量函數(shù)(即只有一個自變量的函數(shù)),梯度就是導數(shù)。導數(shù)表示該函數(shù)在某一點處的切線斜率。對于多變量函數(shù)(即有多個自變量的函數(shù)),梯度是一個向量,包含了函數(shù)在某一點處沿著各個坐標軸方向的偏導數(shù)。換句話說,梯度是一個向量,它將多個偏導數(shù)組合在一起,描述了多變量函數(shù)在各個方向上的變化情況。梯度的方向是函數(shù)在該點處變化最快的方向,梯度的大小表示函數(shù)在該點處的變化速率??偨Y(jié)一下:對于單變量函數(shù),梯度就是導數(shù)。對于多變量函數(shù),梯度是一個包含所有偏導數(shù)的向量。 AI Advisor公眾號:?參考什么是神經(jīng)網(wǎng)絡?深度神經(jīng)網(wǎng)絡(DNN)
標簽:
- 什么是神經(jīng)網(wǎng)絡?用代碼示例解析其工作原理|每日播報
- 一年四季都有新鮮國產(chǎn)柑橘,背后離不開他 焦點
- 迎亞運,做香囊,過端午,學非遺!這個假期,衢州小朋友收獲滿滿 全球觀熱點
- 全球新消息丨防水防腐保溫工程承包范圍是什么?
- 這樣防曬,也能中暑!高溫天氣七點重要提醒_熱推薦
- 夏季不想被蚊蟲“親吻”,請get這些小妙招!
- 各級工會積極做好高溫天氣作業(yè)職工勞動保護工作
- 江南華南仍有持續(xù)性強降雨,華北黃淮等地熱出新高度
- 當前播報:北京今天有多烤?記者實測,共享單車車座已快80℃!
- 當前視訊!這位小姐姐舉動實在是大膽,公然在背上留字,表達對某人的愛意
- 天天速看:歐元區(qū)PMI加劇經(jīng)濟衰退擔憂 債券收益率下跌
- 環(huán)球新消息丨夏季不想被蚊蟲“親吻”,請get這些小妙招!
- 馬斯克與扎克伯格單挑:一場關(guān)乎社交媒體之爭的大戰(zhàn)
- 三舞婚后生活曝光,唐三內(nèi)褲外穿,小舞當媽,唐舞桐低胸裝好頂
- FD-03【GT】高達型古斯塔夫
- 聽到呼救飛身沖下河,上岸立即做心肺復蘇,點贊這位救人的“無名英雄”
- 中國女籃升至第一位!女籃亞洲杯實力榜更新 獨家
- 焦點訊息:細胞培育雞肉美國獲批上市
- 邁入動車時代!7月1日,復興號將在青藏鐵路上運營
- 四川高考成績6月23日22時可查
- 當前快報:2023年氣溫會創(chuàng)造最暖紀錄?專家回應
- 天天熱訊:flv文件怎么轉(zhuǎn)換成mp4在線(flv文件)
- 上證i播報:歐洲股市集體走弱 德國DAX30指數(shù)跌0.89%
- 新發(fā)行版使運行Arch Linux變得更加“Cachy” 全球聚焦
- 商丘體育中考會取消嗎年_河南商丘中考時間年具體時間
- 補一下《推子》部分吐槽的文案,視頻里應該不會再出現(xiàn)《推子》了,很難過...... 每日速讀
- 全球報道:《碧藍航線漫畫集Breaking!!》第七卷 06話
- 環(huán)球觀察:假面騎士空我:升華天馬形態(tài)真骨雕公開,看著還不錯哦
- 全球快看:遼寧營口一鋼鐵廠發(fā)生燙傷事故,造成4人死亡5人受傷
- 離婚訴訟的證據(jù)都有哪些_天天實時
延伸閱讀
資訊