丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給恒亮
發(fā)送

0

如何用人工神經(jīng)網(wǎng)絡(luò)處理決策邊界問題?這里有一份簡單的代碼參考

本文作者: 恒亮 2017-02-22 17:19
導(dǎo)語:我們將首先嘗試用傳統(tǒng)的邏輯回歸算法來處理決策邊界問題,接著引入 ANN,通過對比我們將看到 ANN 的強(qiáng)大。

從本質(zhì)上說,人工神經(jīng)網(wǎng)絡(luò)(ANN)是一種信息處理的范式,它受到人腦信息處理流程的啟發(fā),目前在機(jī)器學(xué)習(xí)領(lǐng)域得到了非常廣泛的應(yīng)用。

然而,可能許多人并不知道的是,ANN 早在 40 年代就被提出了。在最初的那幾年,ANN 曾在一定程度上引起了業(yè)界的關(guān)注,但由于那時沒有當(dāng)前強(qiáng)大的硬件運算能力和高效的模型訓(xùn)練算法,因此ANN很快就銷聲匿跡了。但隨著時代的進(jìn)步,技術(shù)的發(fā)展,目前 ANN 幾乎成了人工智能的代名詞,特別是隨著自動編碼器、卷積網(wǎng)絡(luò)、Dropout 正則化(dropout regularization)和其他各種技術(shù)的出現(xiàn),ANN 的性能表現(xiàn)得到了顯著提升。

醫(yī)學(xué)研究表明:人腦的神經(jīng)網(wǎng)絡(luò)由神經(jīng)元組成,它們通過神經(jīng)突觸相互連接,傳輸信號。一般情況下,只有當(dāng)一個神經(jīng)元接收的信號量超過某一閾值,它才會向與之相連的其他神經(jīng)元傳輸這一信號。而且,人腦的神經(jīng)網(wǎng)絡(luò)可以在任何神經(jīng)元之間建立連接關(guān)系,甚至自己和自己連接。如果完全照搬人腦的這種鏈接結(jié)構(gòu),那么人工神經(jīng)網(wǎng)絡(luò)將很難訓(xùn)練,因此在大部分的實際應(yīng)用場景中,研究者們通常會對人工神經(jīng)網(wǎng)絡(luò)做出一些精簡和限制(例如不能自己和自己連接等)。

在多層感知機(jī)(multi-layer perceptron)的情況下,神經(jīng)元會被按層排列,并且每個神經(jīng)元只能向下一層的神經(jīng)元發(fā)送信號。第一層由輸入數(shù)據(jù)組成,最后一層輸出最終的預(yù)測值,稱為輸出層。這里所有的神經(jīng)元都通過所謂的突觸(synapse)連接。

如何用人工神經(jīng)網(wǎng)絡(luò)處理決策邊界問題?這里有一份簡單的代碼參考

與人腦神經(jīng)網(wǎng)絡(luò)傳輸信號時的閾值相對應(yīng),在 ANN 中通常會使用 Sigmoid 函數(shù)來計算神經(jīng)元的輸出。函數(shù)圖像和表達(dá)式如下所示。

如何用人工神經(jīng)網(wǎng)絡(luò)處理決策邊界問題?這里有一份簡單的代碼參考如何用人工神經(jīng)網(wǎng)絡(luò)處理決策邊界問題?這里有一份簡單的代碼參考

一般情況下,ANN 的訓(xùn)練過程大概可以分為如下兩個階段:

1. 前向傳遞,數(shù)據(jù)從輸入經(jīng)過 ANN 流向輸出,被稱為前饋(feed forward)。

2. 反向傳遞,從輸出端開始,計算每個神經(jīng)元的誤差,然后根據(jù)計算結(jié)果調(diào)整網(wǎng)絡(luò)權(quán)重,被稱為反向傳播(Backpropagation)。

下文中,我們將首先嘗試用傳統(tǒng)的邏輯回歸算法來處理決策邊界問題,接著引入 ANN,通過對比我們將看到 ANN 的強(qiáng)大。需要說明的是,這里我們只實現(xiàn)了一個簡單的三層 ANN 結(jié)構(gòu)(即上圖中的 hidden layer 有 3 層),并且,我們省略了一些數(shù)學(xué)和機(jī)器學(xué)習(xí)的基礎(chǔ)知識介紹,包括分類、正則化和梯度下降等。另外,我們還采用了一些基于 Python 的現(xiàn)成的機(jī)器學(xué)習(xí)庫。

邏輯回歸

我們首先用邏輯回歸的方法處理決策邊界問題,即訓(xùn)練一個邏輯回歸分類器。這里分類器的輸入是來自數(shù)據(jù)集的x值或y值,輸出是我們的預(yù)測分類結(jié)果(在本例中就是0或1,分別代表紅色和藍(lán)色兩種顏色)。

下面的代碼聲明了我們所需要的支持庫。

# Package imports 

import matplotlib.pyplot as plt 

import numpy as np 

import sklearn 

import sklearn.datasets 

import sklearn.linear_model 

import matplotlib

下面的代碼用隨機(jī)數(shù)的方法生成了需要進(jìn)行邊界決策的數(shù)據(jù)集。

# Generate a dataset and plot it

np.random.seed(0)

X, y = sklearn.datasets.make_moons(200, noise=0.20)

plt.scatter(X[:,0], X[:,1], s=40, c=y, cmap=plt.cm.Spectral)

plt.show()

根據(jù)數(shù)據(jù)集繪制的點狀分布圖如下所示。

如何用人工神經(jīng)網(wǎng)絡(luò)處理決策邊界問題?這里有一份簡單的代碼參考

在scikit-learn庫的幫助下,我們用此數(shù)據(jù)訓(xùn)練邏輯回歸分類器,代碼如下。

# Train the logistic regression classifier

clf = sklearn.linear_model.LogisticRegressionCV()

clf.fit(X, y)

# Plot the decision boundary (the method is in the main code link provided in the end)

plot_decision_boundary(lambda x: clf.predict(x))

plt.title("Logistic Regression")

最終的輸出結(jié)果如下。

如何用人工神經(jīng)網(wǎng)絡(luò)處理決策邊界問題?這里有一份簡單的代碼參考

可以看到,邏輯回歸分類器用直線將數(shù)據(jù)分為紅、藍(lán)兩類,雖然結(jié)果已經(jīng)相當(dāng)令人滿意了(可以看到絕大部分的紅、藍(lán)色點已經(jīng)被分開了),但如果我們想要得到更精準(zhǔn)的結(jié)果(即完全把紅、藍(lán)色點分開),顯然需要借助更強(qiáng)大的解決方案,也就是下文即將實現(xiàn)的 ANN。

人工神經(jīng)網(wǎng)絡(luò)

下面我們構(gòu)建一個三層 ANN 來解決該問題,看看結(jié)果和邏輯回歸相比有何不同。

如何用人工神經(jīng)網(wǎng)絡(luò)處理決策邊界問題?這里有一份簡單的代碼參考

首先是關(guān)于隱藏層(hidden layer)維度(即節(jié)點數(shù)量)的選擇,一般認(rèn)為更多的節(jié)點,就能實現(xiàn)更加復(fù)雜的函數(shù)。但高維度在模型訓(xùn)練和結(jié)果預(yù)測時又需要巨大的計算能力支撐,而且大量的參數(shù)還可能造成過擬合(overfitting)問題。因此,如何選擇隱藏層的維度大小,還是要取決于具體的待解問題,而且它更多的是一門藝術(shù)而并非科學(xué)。下文我們將看到隱藏層的維度如何影響 ANN 的輸出,這里首先給出幾條最基礎(chǔ)的 ANN 維度規(guī)則。

1. ANN 通常都會具有一個輸入層,一個隱藏層和一個輸出層。

2. 輸入層的節(jié)點數(shù)量由輸入數(shù)據(jù)的維度決定。

3. 輸出層的節(jié)點數(shù)量由輸出類別的數(shù)量決定。(本例中輸出層的維度是2,因為我們只有0和1兩種結(jié)果)。

下面我們還需要為隱藏層選擇一個激活函數(shù)(activation function)。激活函數(shù)負(fù)責(zé)將某一層的輸入轉(zhuǎn)換為輸出,一般非線性函數(shù)用于擬合非線性的假設(shè)。激活函數(shù)最常見的選擇包括:雙曲正切函數(shù)(tanh),Sigmoid 函數(shù)和 ReLu(Rectified Linear Units)函數(shù)等。本例中采用的是雙曲正切函數(shù) tanh。

因為我們想要的最終結(jié)果是概率,因此輸出層的激活函數(shù)選擇 Softmax 函數(shù)會比較合適,這是一個將原始的數(shù)字結(jié)果轉(zhuǎn)換為概率的最簡單的方法。這里可以將 Softmax 函數(shù)視為 Logistic 函數(shù)對多個分類的泛化(generalization)。

ANN如何進(jìn)行預(yù)測?

如上文所述,整個訓(xùn)練大概可以分為兩個過程。一是前向傳遞,即訓(xùn)練數(shù)據(jù)從輸入端流向輸出,得到最終的預(yù)測值,這是一個前饋過程。二是反向傳遞,即通過參數(shù)學(xué)習(xí)(learning the parameters),找到一組最合適的參數(shù)組合,使得 ANN 的訓(xùn)練誤差最小化。我們一般將測量誤差的函數(shù)稱為損失函數(shù)(loss function),由于上文我們將 Softmax 函數(shù)作為輸出層的激活函數(shù),因此按照一般的習(xí)慣,這里將 cross-entropy loss(交叉熵?fù)p失函數(shù))作為損失函數(shù)。

ANN的實現(xiàn)

首先我們?yōu)楹罄m(xù)的梯度下降過程定義一些變量和參數(shù),代碼如下。

num_examples = len(X) # the training set size

nn_input_dim = 2 # dimension of the input layer

nn_output_dim = 2 # dimension of the output layer

# Gradient descent parameters

epsilon = 0.01 # the learning rate for gradient descent

reg_lambda = 0.01 # the strength of regularization

接著定義損失函數(shù)。

def calculate_loss(model):

定義輔助函數(shù)(helper function)預(yù)測輸出結(jié)果(0或1)。

def predict(model, x):

最后,我們定義 ANN 的訓(xùn)練函數(shù),它使用上面定義的反向傳播導(dǎo)數(shù)實現(xiàn)批量梯度下降(batch gradient descent)。

def build_model(nn_hdim, num_passes=20000, print_loss=False):

ANN的預(yù)測結(jié)果

下面我們用上文提到的點狀數(shù)據(jù)對 ANN 展開訓(xùn)練。

# Build a model with a 3-dimensional hidden layer

model = build_model(3, print_loss=True)

# Plot the decision boundary

plot_decision_boundary(lambda x: predict(model, x))

plt.title("Decision Boundary for hidden layer size 3")

如何用人工神經(jīng)網(wǎng)絡(luò)處理決策邊界問題?這里有一份簡單的代碼參考

從以上結(jié)果可以看到,隨著訓(xùn)練次數(shù)的增多,模型的預(yù)測結(jié)果也就越好。低維的隱藏層可以很好地捕獲數(shù)據(jù)的總體趨勢,而更高的維度可能會因為記憶效應(yīng)而產(chǎn)生過擬合,但是其總體形狀還是正確的。如果我們要在其他的數(shù)據(jù)集上對模型進(jìn)行測試,那么隱藏層維度更小的模型可能會得到更好的效果,因為它們泛化的更好。另外,雖然可以采用更強(qiáng)的正則化來抵消高維度引起的過擬合,但選擇一個合適的隱藏層維度則是更為經(jīng)濟(jì)的方案。

完整源代碼:https://github.com/NSAryan12/nn-from-scratch/blob/master/nn-from-scratch.ipynb

來源:medium,雷鋒網(wǎng)編譯,雷鋒網(wǎng)版權(quán)文章

雷鋒網(wǎng)相關(guān)閱讀:

Google軟件工程師解讀:深度學(xué)習(xí)的activation function哪家強(qiáng)?

MIT重磅研究:基于人工神經(jīng)網(wǎng)絡(luò),探索抑制神經(jīng)元的生物學(xué)意義

如何對神經(jīng)網(wǎng)絡(luò)人工智能硬件進(jìn)行優(yōu)化設(shè)計?

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

如何用人工神經(jīng)網(wǎng)絡(luò)處理決策邊界問題?這里有一份簡單的代碼參考

分享:
相關(guān)文章

編輯

歡迎交流,微信:whl123465
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說