什么是 Perceptron 最簡單的人工神經(jīng)網(wǎng)絡(luò)

 Perceptron 是最簡單的人工神經(jīng)網(wǎng)絡(luò)架構(gòu)之一,由 Frank Rosenblatt 于 1957 年提出。它主要用于二進(jìn)制分類

當(dāng)時,統(tǒng)計機(jī)器學(xué)習(xí)和常規(guī)編程等傳統(tǒng)方法通常用于預(yù)測。盡管 Perceptron 模型是最簡單的人工神經(jīng)網(wǎng)絡(luò)形式之一,但事實證明,該模型在解決特定分類問題方面非常有效,為 AI 和機(jī)器學(xué)習(xí)的進(jìn)步奠定了基礎(chǔ)。

本文旨在提供感知器模型的基礎(chǔ)知識、其架構(gòu)、工作原理和應(yīng)用,涵蓋使用 PyTorch 的理論和實際實現(xiàn)。

目錄

? 什么是感知器?

? Perceptron 的組件

? Perceptron 是如何工作的?

? 構(gòu)建和訓(xùn)練單層感知器模型

? 將 Perceptron 與 PyTorch 結(jié)合使用進(jìn)行二進(jìn)制分類

? Perceptron 的限制

1 什么是感知器?

感知器是一種 執(zhí)行二進(jìn)制分類的神經(jīng)網(wǎng)絡(luò),它將輸入特征映射到輸出決策,通常將數(shù)據(jù)分為兩類之一,例如 0 或 1。

Perceptron 由單層輸入節(jié)點組成,這些節(jié)點完全連接到一層輸出節(jié)點。它特別擅長學(xué)習(xí)線性可分模式。它利用了一種稱為閾值邏輯單元 (TLU) 的人工神經(jīng)元變體,該神經(jīng)元由 McCulloch 和 Walter Pitts 在 1940 年代首次引入。這個基礎(chǔ)模型在開發(fā)更高級的神經(jīng)網(wǎng)絡(luò)和機(jī)器學(xué)習(xí)算法方面發(fā)揮了至關(guān)重要的作用。

2 感知器的類型

1. 單層感知器是一種僅限于學(xué)習(xí)線性可分離模式的感知器。它對于數(shù)據(jù)可以通過直線劃分為不同類別的任務(wù)非常有效。雖然它的簡單性很強(qiáng)大,但它難以解決更復(fù)雜的問題,其中輸入和輸出之間的關(guān)系是非線性的。

2. 多層感知器具有增強(qiáng)的處理能力,因為它們由兩層或多層組成,擅長處理數(shù)據(jù)中更復(fù)雜的模式和關(guān)系。

3 Perceptron 的基本組件

Perceptron 由關(guān)鍵組件組成,這些組件協(xié)同工作以處理信息和進(jìn)行預(yù)測。

? 輸入特征:感知器采用多個輸入特征,每個特征代表輸入數(shù)據(jù)的一個特征。

? 權(quán)重為每個輸入特征分配一個權(quán)重,用于確定其對輸出的影響。在訓(xùn)練期間調(diào)整這些權(quán)重以找到最佳值。

? 求和函數(shù):感知器計算其輸入的加權(quán)和,將它們與各自的權(quán)重相結(jié)合。

? 激活函數(shù)加權(quán)和通過 Heaviside 階躍函數(shù)傳遞,將其與閾值進(jìn)行比較以產(chǎn)生二進(jìn)制輸出(0 或 1)。

? 輸出:最終輸出由激活函數(shù)決定,通常用于二元分類任務(wù)。

? 偏差偏差項幫助感知器獨立于輸入進(jìn)行調(diào)整,從而提高其學(xué)習(xí)的靈活性。

? 學(xué)習(xí)算法:感知器使用學(xué)習(xí)算法(如 Perceptron Learning Rule)調(diào)整其權(quán)重和偏差,以最大限度地減少預(yù)測誤差。

這些組件使感知器能夠從數(shù)據(jù)中學(xué)習(xí)并進(jìn)行預(yù)測。雖然單個感知器可以處理簡單的二進(jìn)制分類,但復(fù)雜的任務(wù)需要將多個感知器組織成層,形成神經(jīng)網(wǎng)絡(luò)。

4 Perceptron 是如何工作的?

為感知器的每個輸入節(jié)點分配一個權(quán)重,以指示該輸入在確定輸出中的重要性。Perceptron 的輸出計算為輸入的加權(quán)和,然后通過激活函數(shù)傳遞以決定 Perceptron 是否觸發(fā)。

加權(quán)和的計算公式為:

什么是 Perceptron 最簡單的人工神經(jīng)網(wǎng)絡(luò)的圖1

Step 函數(shù)將此加權(quán)和與閾值進(jìn)行比較。如果輸入大于閾值,則輸出為 1;否則為 0。這是感知器中最常用的激活函數(shù),由 Heaviside 階躍函數(shù)表示:

什么是 Perceptron 最簡單的人工神經(jīng)網(wǎng)絡(luò)的圖2

感知器由單層閾值邏輯單元 (TLU) 組成,每個 TLU 完全連接到所有輸入節(jié)點。

什么是 Perceptron 最簡單的人工神經(jīng)網(wǎng)絡(luò)的圖3?

什么是 Perceptron 最簡單的人工神經(jīng)網(wǎng)絡(luò)的圖4

閾值邏輯單位

在全連接層(也稱為密集層)中,一層中的所有神經(jīng)元都連接到前一層中的每個神經(jīng)元。

全連接層的輸出計算如下:

什么是 Perceptron 最簡單的人工神經(jīng)網(wǎng)絡(luò)的圖5

哪里X是輸入W是每個輸入神經(jīng)元的權(quán)重,而b是偏差,而h是階躍函數(shù)。

在訓(xùn)練期間,會調(diào)整 Perceptron 的權(quán)重,以最小化預(yù)測輸出和實際輸出之間的差異。這是使用監(jiān)督式學(xué)習(xí)算法(如 delta 規(guī)則或 Perceptron 學(xué)習(xí)規(guī)則)實現(xiàn)的。

權(quán)重更新公式為:

什么是 Perceptron 最簡單的人工神經(jīng)網(wǎng)絡(luò)的圖6

哪里:

? wi,jwi,j?是weight ith 輸入和jth輸出神經(jīng)元 /

? xi是ith輸入

? yj是實際值,而y^j 是預(yù)測值,

? η是學(xué)習(xí)率,控制權(quán)重的調(diào)整量。

此過程使感知器能夠從數(shù)據(jù)中學(xué)習(xí),并隨著時間的推移提高其預(yù)測準(zhǔn)確性。

5 示例:作中的 Perceptron

讓我們舉一個簡單的例子,根據(jù)兩個輸入對給定水果是否為蘋果進(jìn)行分類:它的重量(以克為單位)和它的顏色(在 0 到 1 的范圍內(nèi),其中 1 表示紅色)。感知器接收這些輸入,將它們乘以它們的權(quán)重,添加偏差,并應(yīng)用激活函數(shù)來確定水果是否為蘋果。

? 輸入 1(重量):150 克

? 輸入 2(顏色):0.9(因為水果大部分是紅色的)

? 權(quán)重(Weights):[0.5, 1.0]

? 偏差(Bias):1.5

感知器的加權(quán)和為:

(150?0.5)+(0.9?1.0)+1.5=76.4(150?0.5)+(0.9?1.0)+1.5=76.4

假設(shè)激活函數(shù)使用的閾值為 75。從 76.4 > 75 開始,感知器將水果分類為蘋果(輸出 = 1)。

6 構(gòu)建和訓(xùn)練單層感知器模型

為了構(gòu)建感知器模型,我們將實現(xiàn)以下步驟

第 1 步:初始化權(quán)重和學(xué)習(xí)率

我們考慮輸入數(shù)量 + 1 的權(quán)重值(額外的 +1 考慮了偏差項)。這可確保在訓(xùn)練期間同時包括 inputs 和 bias。

class Perceptron:

def __init__(self, num_inputs, learning_rate=0.01):

# Initialize the weights (num_inputs + 1 for bias)

self.weights = np.random.rand(num_inputs + 1) # Random initialization

self.learning_rate = learning_rate # Learning rate

第 2 步:定義線性層

第一步是計算輸入的加權(quán)和。這是使用公式完成的:,其中 表示輸入、 權(quán)重和 偏差。Z = XW + bXWb

第 3 步:定義激活函數(shù)

Heaviside Step 函數(shù)用作激活函數(shù),它將加權(quán)和與閾值進(jìn)行比較。如果總和大于或等于 0,則輸出 1;否則,它輸出 0。

def Heaviside_step_fn(self, z):

if z >= 0:

return 1 # Output 1 if the input is >= 0

else:

return 0 # Output 0 otherwise

第 4 步:定義預(yù)測

使用線性函數(shù)后跟激活函數(shù),根據(jù)輸入特征生成預(yù)測。

def predict(self, inputs):

Z = self.linear(inputs) # Pass inputs through the linear layer

try:

pred = []

for z in Z: # For batch inputs

pred.append(self.Heaviside_step_fn(z))

except:

return self.Heaviside_step_fn(Z) # For single input

return pred # Return prediction

第 5 步:定義損失函數(shù)

損失函數(shù)計算預(yù)測輸出和實際輸出之間的誤差。在 Perceptron 中,損失是目標(biāo)值與預(yù)測值之間的差值。

def loss(self, prediction, target):

loss = (prediction - target) # Error or loss calculation

return loss

步驟 6:定義訓(xùn)練

在此步驟中,根據(jù) 損失函數(shù)計算的誤差更新權(quán)重和偏差。應(yīng)用 Perceptron 學(xué)習(xí)規(guī)則來調(diào)整權(quán)重以最小化誤差。

def train(self, inputs, target):

prediction = self.predict(inputs) # Get prediction

error = self.loss(prediction, target) # Calculate error (loss)

self.weights[1:] += self.learning_rate * error * inputs # Update weights

self.weights[0] += self.learning_rate * error # Update bias

第 7 步:擬合模型

擬合過程涉及通過多次迭代 (epoch) 訓(xùn)練模型以調(diào)整權(quán)重和偏差。這使 Perceptron 能夠從數(shù)據(jù)中學(xué)習(xí),并隨著時間的推移提高其預(yù)測準(zhǔn)確性。

def fit(self, X, y, num_epochs):

for epoch in range(num_epochs):

for inputs, target in zip(X, y): # Loop through dataset

self.train(inputs, target) # Train on each input-target pair

完整代碼:

以下內(nèi)容為付費內(nèi)容,請購買后觀看

App下載
技術(shù)鄰APP
工程師必備
  • 項目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP

1