機器學習中的無監督反向傳播


人工智慧的機器學習分支賦予計算機從資料中學習並做出判斷的能力。在監督學習中,使用標記資料集來訓練模型,而在無監督學習中,使用未標記資料集。無監督反向傳播是一種無監督學習,它使用神經網路來發現未標記資料集中的模式。本文將概述無監督反向傳播,然後繼續介紹 Python 程式碼實踐。

什麼是無監督反向傳播?

反向傳播是一種監督學習方法,它修改神經網路的權重以減少預測結果與觀察結果之間的差異。另一方面,無監督反向傳播使用未標記的輸入來訓練網路,以找到隱藏的結構和模式。在這種方法中,自動編碼器神經網路將輸入資料壓縮成更小的表示形式(稱為潛在空間),然後解碼器網路使用潛在空間重建原始輸入。無監督反向傳播的目標是最小化輸入資料和解碼器網路輸出之間的重建誤差。

自動編碼器神經網路

自動編碼器是最流行的反向傳播無監督學習神經網路架構。自動編碼器是一種神經網路,由兩個神經網路組成:編碼器網路,將輸入資料轉換為低維表示;解碼器網路,將低維表示轉換回原始輸入空間。

生成對抗網路

GAN 是一種機器學習模型,由兩個神經網路組成,一個用於生成,一個用於判別。生成器試圖生成逼真的合成數據,而判別器試圖區分真實資料和虛假資料。GAN 可用於無監督反向傳播的背景下,以建立沒有標籤的新資料樣本。然後,神經網路可以從這些生成的樣本中學習,以發現數據中隱藏的模式和結構。對於標籤資料稀缺或不可用的問題,使用 GAN 的無監督學習策略可能很有用。

使用 Python 進行無監督反向傳播

首先,我們將建立一個包含兩個資料點簇的虛構資料集。然後,使用 Keras 建立一個自動編碼器神經網路,其中編碼器網路包含兩個密集層,解碼器網路包含兩個密集層。使用無監督反向傳播來訓練自動編碼器資料集。使用散點圖視覺化資料集的潛在空間表示。最後,顯示自動編碼器的重建輸出並將其與輸入資料進行比較,使用散點圖。結果表明,自動編碼器已學習到資料集的良好模型。

建立資料集

為了在無監督反向傳播研究中使用,讓我們建立一個特定資料集。我們將使用 scikit-learn 工具建立具有兩個資料點簇的二維資料集。

from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=1000, centers=2, n_features=2, random_state=42)

上面顯示的程式碼建立了一個包含 1000 個數據點和兩個屬性的資料集。資料集中的兩個簇的中心分別為 (-5, 0) 和 (5, 0)。

視覺化資料集

讓我們使用散點圖來視覺化資料集,以識別兩個資料點分組。

import matplotlib.pyplot as plt

plt.scatter(X[:, 0], X[:, 1])
plt.title('Dataset')
plt.show()

輸出

散點圖顯示資料集包含兩個資料點簇。

定義自動編碼器模型

使用 Keras 庫,讓我們定義自動編碼器神經網路。自動編碼器由解碼器網路和編碼器網路組成。編碼器網路由兩個具有 ReLU 啟用函式的密集層組成,而解碼器網路由兩個具有 sigmoid 啟用函式的密集層組成。

from keras.layers import Input, Dense
from keras.models import Model

input_layer = Input(shape=(2,))
encoded = Dense(32, activation='relu')(input_layer)
encoded = Dense(16, activation='relu')(encoded)
decoded = Dense(32, activation='relu')(encoded)
decoded = Dense(2, activation='sigmoid')(decoded)
autoencoder = Model(inputs=input_layer, outputs=decoded)
autoencoder.compile(optimizer='adam', loss='mse')

在上面的程式碼中,我們建立了一個輸入層,其維度與我們的資料集相對應。接下來,我們定義編碼器網路,它包含兩個具有 ReLU 啟用函式的密集層。編碼器網路的輸出是潛在空間表示。解碼器網路被認為包含兩個具有 sigmoid 啟用函式的密集層。解碼器網路產生與輸入維度相同的重建輸出。

訓練自動編碼器模型

定義完自動編碼器神經網路後,讓我們使用無監督反向傳播來訓練它在我們的資料集上。我們將使用 fit() 方法訓練模型。

auto encoder.fit(X, X, epochs=50, batch_size=32)

在上面的程式碼中,我們使用 fit() 方法訓練自動編碼器模型。由於目標是重建輸入資料,因此我們將原始資料作為輸入和目標輸出。我們還定義了批大小和訓練模型的時期數。

視覺化潛在空間

一旦自動編碼器訓練完成,我們就可以使用編碼器網路檢索我們資料集的潛在空間表示。然後,我們可以使用散點圖來視覺化潛在空間。

encoder = Model(inputs=input_layer, outputs=encoded)
latent_space = encoder.predict(X)

plt.scatter(latent_space[:, 0], latent_space[:, 1])
plt.title('Latent Space')
plt.show()

在上面的程式碼中,我們引入了一個名為編碼器的新模型,它將輸入層作為輸入,並輸出編碼器網路第二密集層的潛在空間表示。然後,我們使用編碼器模型獲得我們資料集的潛在空間表示。使用散點圖來繪製潛在空間。

散點圖表明,我們資料集的潛在空間表示清楚地分隔了兩個資料點組,這表明自動編碼器已學習到資料集的有用表示。

視覺化重建輸出

最後,讓我們透過自動編碼器傳遞輸入資料,並將輸出與原始輸入資料進行比較,以檢視輸出是如何重建的。

reconstructed = autoencoder.predict(X)

fig, axes = plt.subplots(1, 2, figsize=(10, 5))
axes[0].scatter(X[:, 0], X[:, 1])
axes[0].set_title('Original Data')
axes[1].scatter(reconstructed[:, 0], reconstructed[:, 1])
axes[1].set_title('Reconstructed Data')
plt.show()

在上面的程式碼中,輸入資料透過自動編碼器處理以產生重建輸出,然後使用散點圖與原始資料一起視覺化。

散點圖顯示,自動編碼器的重建輸出與原始輸入資料非常匹配,這表明它已學習到資料集的可靠表示。

結論

最後,無監督反向傳播是一種強大的神經網路方法,用於無監督學習。它包括訓練神經網路來表示傳入資料,而無需使用標記訓練資料。這種方法可用於解決各種無監督學習問題,例如聚類、異常檢測和降維。自動編碼器是無監督學習中常用的神經網路型別,因為它們能夠學習高維資料的有用表示,而無需標記訓練資料。透過掌握這些方法,機器學習從業人員可以將無監督反向傳播和自動編碼器應用於他們自己的資料集,並從資料中獲得有見地的知識。

更新於: 2023年7月31日

368 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告