iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
AI/ ML & Data

機器學習與深度學習背後框架與過程論文與實作系列 第 23

DAY24 Single Layer Perceptron24/30

  • 分享至 

  • xImage
  •  

單層感知器 (Single Layer Perceptron) 的概念

單層感知器是一種最簡單的神經網絡模型,用於解決線性可分的二元分類問題。感知器模型由一個輸入層和一個輸出層組成,其中輸出層只有一個神經元。感知器的目標是學習一個線性決策邊界來區分兩類數據。

  • 輸入層:由若干個輸入特徵組成。
  • 權重 (Weights):每個輸入特徵都有一個對應的權重 ( w )。
  • 偏置 (Bias):在計算過程中添加一個額外的常數項 ( b ) 來調整模型。
  • 激活函數 (Activation Function):感知器使用階躍函數(Step Function)作為激活函數,這是一種二值化的非線性函數。
  1. 加權求和:對所有輸入特徵進行加權求和,再加上偏置項。
    [

  2. 激活函數:將加權求和的結果輸入到激活函數中。對於二元分類問題,通常使用階躍函數來決定輸出是 1 還是 0。

  3. 更新權重:如果預測結果與實際結果不符,則根據預測錯誤來調整權重和偏置。

3. 限制

單層感知器只能解決線性可分的問題。如果數據集不是線性可分的,感知器將無法找到一個合適的決策邊界。

import numpy as np

class Perceptron:
    def __init__(self, learning_rate=0.01, n_iters=1000):
        self.learning_rate = learning_rate
        self.n_iters = n_iters
        self.weights = None
        self.bias = None
    
    def fit(self, X, y):
        n_samples, n_features = X.shape
        self.weights = np.zeros(n_features)
        self.bias = 0

        for _ in range(self.n_iters):
            for idx, x_i in enumerate(X):
                linear_output = np.dot(x_i, self.weights) + self.bias
                y_predicted = self._activation(linear_output)
                
                update = self.learning_rate * (y[idx] - y_predicted)
                self.weights += update * x_i
                self.bias += update
    
    def predict(self, X):
        linear_output = np.dot(X, self.weights) + self.bias
        y_predicted = self._activation(linear_output)
        return y_predicted
    
    def _activation(self, x):
        return np.where(x >= 0, 1, 0)


X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 0, 0, 1])  # AND 閘

# 初始化並訓練感知器
perceptron = Perceptron(learning_rate=0.1, n_iters=10)
perceptron.fit(X, y)

# 預測
predictions = perceptron.predict(X)
print("預測結果:", predictions)
  1. 數據集:在這個範例中,我們使用了一個簡單的二元分類數據集來模擬 AND 邏輯閘。數據集包括四個二進制輸入組合([0, 0], [0, 1], [1, 0], [1, 1]),其標籤分別為 0 和 1。

  2. 模型訓練:我們定義了一個感知器類,並在 fit 方法中實現了權重和偏置的更新過程。模型通過多次迭代來學習適合的權重和偏置,使其能夠正確分類輸入。

  3. 預測:使用訓練後的感知器模型對原始輸入進行預測,結果顯示感知器成功學習到了 AND 邏輯。

單層感知器是理解神經網絡的基石,它展示了如何利用線性組合和激活函數來進行二元分類。在更複雜的神經網絡中,多層感知器(MLP)通過引入多個隱藏層,能夠處理非線性問題,這些隱藏層中的每個神經元都可以被視為一個感知器。因此,理解單層感知器的工作原理是掌握更高階神經網絡的關鍵。


上一篇
DAY23 Logistic Regression 23/30
下一篇
DAY25 多層感知器 Multi-Layer Perceptron 25/30
系列文
機器學習與深度學習背後框架與過程論文與實作29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言