[機器學習]感知器(Perceptron)學習心得

更新 發佈閱讀 6 分鐘

感知器是一種基本的神經網路模型,用於二分類問題。它模擬了人腦神經元的工作原理,通過調整權重和偏差值來達到預測和分類的目的。

圖手畫得有點醜,請見諒

raw-image

感知器流程

輸入

  1. 資料的輸入:
    • 輸入層接受資料的輸入,每個輸入對應一個特徵,還有一個固定的偏差神經元。
    • 資料經過每個神經元時,會乘上相應的權重,然後加上偏差值。
  2. 經過輸出神經元做出決策:
    • 輸出層的神經元接收所有輸入層神經元的加權和。
    • 根據加權和,輸出神經元進行決策,通常通過激活函數(如閥值函數、Sigmoid函數等)轉換成輸出值。
    • 根據預測結果和真實結果的差距,使用損失函數計算誤差,並通過優化器進行權重和偏差值的更新。

輸出神經元

  • 激活函數: 常見的激活函數有Sigmoid函數、ReLU函數、Tanh函數等,它們將加權和轉換為一個標準範圍內的輸出值(如0到1或-1到1)。
  • 二分類問題: 感知器主要用於二分類問題,即預測輸出為0或1。
  • 預測結果和真實結果的差距: 通過損失函數衡量預測結果和真實結果之間的差距,這個差距用來指導模型的更新。

損失函數

  • 均方誤差 (Mean Squared Error, MSE): 常用的損失函數,計算預測值和真實值之間的平方差的平均值。
  • 交叉熵損失 (Cross-Entropy Loss): 用於分類問題,特別是多分類問題,計算預測的概率分佈和真實分佈之間的差異。

優化器

  • 梯度下降法 (Gradient Descent): 最常用的優化算法,根據損失函數的梯度來更新權重和偏差值,使損失函數最小化。
    • 學習率 (Learning Rate): 控制每次更新的步伐大小,學習率過大可能導致不穩定,過小則可能收斂過慢。
    • 批量梯度下降 (Batch Gradient Descent): 使用整個訓練集來計算梯度。
    • 隨機梯度下降 (Stochastic Gradient Descent, SGD): 每次使用一個樣本來計算梯度,更新權重。
    • 小批量梯度下降 (Mini-Batch Gradient Descent): 每次使用一小部分樣本來計算梯度,更新權重。

儲存的模型

  • 模型儲存: 訓練完成後,將最終的權重和偏差值儲存起來。這些值可以在預測時使用,而不需要重新訓練模型。
    • 模型持久化: 常見的儲存方法有使用Pickle、HDF5等格式,或儲存為特定框架(如TensorFlow、PyTorch)的模型文件。

程式範例

用簡單的程式範例,來說明感知器學習到分類的結果。

import numpy as np
import matplotlib.pyplot as plt

#data
X = np.array([[1,3,3],
[1,4,31],
[1,1,1],
[1,0,2]])

#真實資料
y = np.array([[1],
[1],
[-1],
[-1]])

lr =0.11 # 學習率learning rate : 修正的步伐
out = 0 # 預測值 Y
#權重
w = (np.random.random([3,1])-0.5)*2 # 3*1個亂數
def update():
global X, y, w,lr
out = np.sign(np.dot(X, w))  # 計算預測值
w_c = lr * (X.T.dot(y-out))/int(X.shape[0]) # 計算權重修正值
w = w + w_c
return w,out

for i in range(20):
w,out = update()
x1=[3,3]
y1=[4,31]
x2=[1,1]
y2=[0,2]

#印出權重的變化圖
k = -w[1]/w[2]
d = -w[0]/w[2]
print('k=',k)
print('d=',d)

xdata = (0,5)
plt.figure()
plt.plot(xdata, xdata*k+d,'r')
plt.scatter(x1,y1,c='b')
plt.scatter(x2,y2,c='y')
plt.show()

print(f'最後的結果 out :{out}')

# 驗證學習到的w
# 新的資料 將原本的x資料相反
new_X = np.array([[1,1,1],
[1,0,2],
[1,3,3],
[1,4,31]])
#驗證
out = np.sign(np.dot(new_X, w))
print(f'y : {y}')
print(f'out(預測結果) : {out}')

終端機輸出

終端機輸出


在最後新資料X,前兩行與後兩行交換,看終端機輸出最後預測的結果也是跟預測結果剛好是兩兩相反,代表學習到的w是有訓練好的。


程式碼詳細說明

  • global X, y, w, lr:
    • X(輸入特徵矩陣)、y(真實標籤向量)、w(權重向量)和lr(學習率)是全局變數,意味著這些變數在函數外部已經被定義,並且在函數內部可以直接使用和修改。
  • out = np.sign(np.dot(X, w)):
    • np.dot(X, w) 計算輸入特徵矩陣 X 和權重向量 w 的點積,得到感知器的輸出值(未經激活函數處理)。
    • np.sign(...) 將點積結果轉換為符號函數的輸出,即將輸出值轉換為 -1 或 1(對於二分類問題)。
    • out 是感知器的預測輸出。
  • w_c = lr * (X.T.dot(y - out)) / int(X.shape[0]):
    • y - out 計算真實標籤 y 和預測輸出 out 之間的差距
    • X.T.dot(y - out) 計算特徵矩陣的轉置 X.T 和損失函數結果的點積。
    • 乘以學習率 lr 縮放,控制每次更新的步伐大小。
    • 除以 int(X.shape[0])(即輸入樣本數量),計算平均差值,這樣更新的幅度不會因樣本數量變化而過大。
    • w_c 是權重的修正值,表示應該如何調整權重。
  • w = w + w_c:
    • 更新權重向量 w,加上修正值 w_c,使得模型朝著減少差值的方向進行調整。


總結

程式範例目的是通過一個簡單的更新規則來調整感知器的權重,使得模型的預測結果更接近真實值。每次更新權重時,計算出當前模型的預測值,然後根據預測值與真實值之間的差距來修正權重。

學習率 lr 控制了每次更新的幅度,以避免過大的步伐導致訓練不穩定或者過小的步伐導致收斂過慢。

留言
avatar-img
螃蟹_crab的沙龍
159會員
312內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
螃蟹_crab的沙龍的其他內容
2024/01/06
本文會利用sklearn引入breast_cancer datasets來訓練,在處理數據的部份,特徵工程用兩種方式去做處理,分別是特徵選取與特徵萃取的方式去做比較。 特徵選取的方法中,使用了KNN 分類器來選出最重要的兩個特徵 特徵萃取的方法中,使用了PCA降維
Thumbnail
2024/01/06
本文會利用sklearn引入breast_cancer datasets來訓練,在處理數據的部份,特徵工程用兩種方式去做處理,分別是特徵選取與特徵萃取的方式去做比較。 特徵選取的方法中,使用了KNN 分類器來選出最重要的兩個特徵 特徵萃取的方法中,使用了PCA降維
Thumbnail
2024/01/06
前言 上一篇討論到如何訓練出模型,此篇將說明Streamlit建立的簡單Web應用程式的解說 Streamlit網頁App_貓狗辨識 連結 程式碼Github連結 [機器學習]CNN學習MNIST 手寫英文字母資料,用網頁展現成果_模型訓練篇 如何連動github與stramlit可以參考
Thumbnail
2024/01/06
前言 上一篇討論到如何訓練出模型,此篇將說明Streamlit建立的簡單Web應用程式的解說 Streamlit網頁App_貓狗辨識 連結 程式碼Github連結 [機器學習]CNN學習MNIST 手寫英文字母資料,用網頁展現成果_模型訓練篇 如何連動github與stramlit可以參考
Thumbnail
2024/01/06
streamlit與github連動程式庫,呈現即時預測手寫英文字母 整理了一下,先前學的機器學習利用Colab來訓練出能辨識手寫A~Z英文字母的模型,使用的模型是CNN(Convolutional Neural Network,CNN)模型 訓練好的模型,當然是要拿來應用,成果呈現
Thumbnail
2024/01/06
streamlit與github連動程式庫,呈現即時預測手寫英文字母 整理了一下,先前學的機器學習利用Colab來訓練出能辨識手寫A~Z英文字母的模型,使用的模型是CNN(Convolutional Neural Network,CNN)模型 訓練好的模型,當然是要拿來應用,成果呈現
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
有研究發現,人類大腦可能是一台大型量子電腦,此時做個大膽假設「大腦可以進行量子運作」,大腦中的電子神經元運作,就是接受來自宇宙深處的電訊號。
Thumbnail
有研究發現,人類大腦可能是一台大型量子電腦,此時做個大膽假設「大腦可以進行量子運作」,大腦中的電子神經元運作,就是接受來自宇宙深處的電訊號。
Thumbnail
想像一下,只需用思想就能操控數位設備。這不再是科幻小說的情節,而是 Synchron 公司正在實現的未來。讓我們深入了解這項突破性技術,以及它如何為癱瘓患者帶來新的希望
Thumbnail
想像一下,只需用思想就能操控數位設備。這不再是科幻小說的情節,而是 Synchron 公司正在實現的未來。讓我們深入了解這項突破性技術,以及它如何為癱瘓患者帶來新的希望
Thumbnail
腦機連結技術是一種可以讓人類與電腦進行直接交互的技術,而遠端體感操控則是指使用者可以透過感應器來控制遠端的裝置。 如果將這兩種技術結合起來,就可以實現遠端體感操控的鋼鐵人了。 這種技術可以應用在很多領域,例如醫療、娛樂、運動等等。不過,目前這種技術還處於發展階段,需要更多的研究和實驗才能夠實現。
Thumbnail
腦機連結技術是一種可以讓人類與電腦進行直接交互的技術,而遠端體感操控則是指使用者可以透過感應器來控制遠端的裝置。 如果將這兩種技術結合起來,就可以實現遠端體感操控的鋼鐵人了。 這種技術可以應用在很多領域,例如醫療、娛樂、運動等等。不過,目前這種技術還處於發展階段,需要更多的研究和實驗才能夠實現。
Thumbnail
在科技發展的浪潮中,生成式AI無疑是引領未來的關鍵力量。透過深度學習技術,AI系統能夠從大量資料中發掘規律,並創造出全新的內容,無論是文字、圖像、音頻還是視頻,都可以在AI的加持下重新定義。
Thumbnail
在科技發展的浪潮中,生成式AI無疑是引領未來的關鍵力量。透過深度學習技術,AI系統能夠從大量資料中發掘規律,並創造出全新的內容,無論是文字、圖像、音頻還是視頻,都可以在AI的加持下重新定義。
Thumbnail
感知器是一種基本的神經網路模型,用於二分類問題。它模擬了人腦神經元的工作原理,通過調整權重和偏差值來達到預測和分類的目的。 感知器流程 輸入 資料的輸入: 輸入層接受資料的輸入,每個輸入對應一個特徵,還有一個固定的偏差神經元。 資料經過每個神經元時,會乘上相應的
Thumbnail
感知器是一種基本的神經網路模型,用於二分類問題。它模擬了人腦神經元的工作原理,通過調整權重和偏差值來達到預測和分類的目的。 感知器流程 輸入 資料的輸入: 輸入層接受資料的輸入,每個輸入對應一個特徵,還有一個固定的偏差神經元。 資料經過每個神經元時,會乘上相應的
Thumbnail
這篇文章介紹瞭如何利用單晶片來控制不同功能模組的應用,並分享了親手體驗的影片和遇到的卡關。文章強調了需要具備基礎程式語言撰寫的邏輯,以及解決卡關時需要個人調整程式碼的順序。
Thumbnail
這篇文章介紹瞭如何利用單晶片來控制不同功能模組的應用,並分享了親手體驗的影片和遇到的卡關。文章強調了需要具備基礎程式語言撰寫的邏輯,以及解決卡關時需要個人調整程式碼的順序。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News