一、什麼是多層感知機(MLP)
多層感知機(Multi-Layer Perceptron,MLP)是一種前饋人工神經網絡,可以用於分類、回歸、預測等任務。它是一個多層的結構,每一層都由多個神經元組成,前一層的輸出作為下一層的輸入。
MLP可以解決非線性問題,如圖像識別、自然語言處理等。其結構簡單、易於實現,因此被廣泛應用。
二、MLP的結構
如上所述,MLP是一個多層的結構,每一層由多個神經元組成。根據層數不同,可以分為單隱藏層或多隱藏層網絡,本文介紹的是單隱藏層的MLP網絡。
在單隱藏層的MLP中,輸入層的神經元數目為n,隱藏層的神經元數目為h,輸出層的神經元數目為m。其中,n、h、m均為正整數。如下圖所示:
Input Layer Hidden Layer Output Layer
Input 1--------- ------------ ---------------- ------------Output 1
| | | |
Input 2-------- ------------ ---------------- ------------Output 2
| | | |
… … … …
| | | |
Input n --------- ------------ ---------------- ------------Output m
三、前向傳播
前向傳播是指從輸入層開始,逐層傳遞信號直至輸出層的過程。
在前向傳播中,輸入層的數值被傳遞至隱藏層,隱藏層的數值再被傳遞至輸出層。在傳遞過程中,神經元會對上一層的輸入進行加權求和,並通過激活函數進行非線性變換。如下圖所示:
output_j = σ(w_j*x + b_j)
w_1 w_2 … w_h
Input_1 ------| | | |------------------Output_1
| | |
Input_2 ------| | | |------------------Output_2
| | |
… | | | …
| | |
Input_n ------|___________|____________| |------------------Output_m
其中,x為輸入,w為權重,b為偏置,σ為激活函數。在隱藏層和輸出層均為使用相同的激活函數,常見的有sigmoid、ReLU等函數。
四、誤差反向傳播
誤差反向傳播(Backpropagation algorithm)是指從輸出層開始,逐層反向求解誤差、調整權重的過程。
在誤差反向傳播中,首先需要定義一個損失函數,用于衡量預測值和真實值之間的誤差。常見的損失函數有均方誤差(MSE)、交叉熵等。
模型訓練時,誤差會從輸出層傳遞至隱藏層,最終傳遞至輸入層。在傳遞過程中,將誤差按照權重進行分配,並根據分配的誤差來更新權重。
在誤差反向傳播中,每一個神經元都有三個重要的梯度:輸出梯度、權重梯度和偏置梯度。它們分別代表着誤差對輸出值、權重和偏置的影響程度。通過計算梯度可以對模型進行調整,直到損失函數的值達到最小。
五、示例代碼
1. MLP的實現(Python)
import numpy as np
class MLP:
def __init__(self, input_dim, hidden_dim, output_dim):
self.input_dim = input_dim
self.hidden_dim = hidden_dim
self.output_dim = output_dim
np.random.seed(42)
self.weights1 = np.random.randn(input_dim,hidden_dim)
self.weights2 = np.random.randn(hidden_dim,output_dim)
def forward(self, x):
self.hidden = np.dot(x, self.weights1)
self.hidden_activation = self.sigmoid(self.hidden)
self.output = np.dot(self.hidden_activation, self.weights2)
return self.output
def sigmoid(self, x):
return 1/(1 + np.exp(-x))
2. MNIST手寫數字識別(Python)
下面介紹如何使用MLP網絡實現MNIST手寫數字分類。
from keras.datasets import mnist
from sklearn.neural_network import MLPClassifier
# 加載數據
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# 處理數據
X_train = X_train.reshape((60000, 28*28))
X_test = X_test.reshape((10000, 28*28))
X_train = X_train.astype('float32') / 255
X_test = X_test.astype('float32') / 255
# 構建模型
mlp = MLPClassifier(hidden_layer_sizes=(100,), max_iter=10, alpha=1e-4,
solver='sgd', verbose=10, tol=1e-4, random_state=42,
learning_rate_init=.1)
# 訓練模型
mlp.fit(X_train, y_train)
# 評估模型
accuracy = mlp.score(X_test, y_test)
print('Accuracy:', accuracy)
六、總結
在本文中,我們對MLP的原理、結構、前向傳播、誤差反向傳播進行了詳細介紹,並提供了Python代碼示例。MLP是一種前饋人工神經網絡,常用於分類、回歸、預測等任務。它的結構簡單、易於實現,並且可以解決非線性問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/187411.html
微信掃一掃
支付寶掃一掃