當前位置:
首頁 > 最新 > 機器學習—神經網路

機器學習—神經網路

同樣的,我們先來看下維基百科對神經網路的定義:

人工神經網路(英語:Artificial Neural Network,ANN),簡稱神經網路(Neural Network,NN)或類神經網路,在機器學習和認知科學領域,是一種模仿生物神經網路(動物的中樞神經系統,特別是大腦)的結構和功能的數學模型或計算模型,用於對函數進行估計或近似。神經網路由大量的人工神經元聯結進行計算。大多數情況下人工神經網路能在外界信息的基礎上改變內部結構,是一種自適應系統,通俗的講就是具備學習功能。現代神經網路是一種非線性統計性數據建模工具。典型的神經網路具有以下三個部分:

結構Architecture)結構指定了網路中的變數和它們的拓撲關係。例如,神經網路中的變數可以是神經元連接的權重(weights)和神經元的激勵值(activities of the neurons)。

激勵函數(Activity Rule)大部分神經網路模型具有一個短時間尺度的動力學規則,來定義神經元如何根據其他神經元的活動來改變自己的激勵值。一般激勵函數依賴於網路中的權重(即該網路的參數)。

學習規則(Learning Rule)學習規則指定了網路中的權重如何隨著時間推進而調整。這一般被看做是一種長時間尺度的動力學規則。一般情況下,學習規則依賴於神經元的激勵值。它也可能依賴於監督者提供的目標值和當前權重的值。例如,用於手寫識別的一個神經網路,有一組輸入神經元。輸入神經元會被輸入圖像的數據所激發。在激勵值被加權並通過一個函數(由網路的設計者確定)後,這些神經元的激勵值被傳遞到其他神經元。這個過程不斷重複,直到輸出神經元被激發。最後,輸出神經元的激勵值決定了識別出來的是哪個字母。

神經網路的構築理念是受到生物(人或其他動物)神經網路功能的運作啟發而產生的。人工神經網路通常是通過一個基於數學統計學類型的學習方法(Learning Method)得以優化,所以人工神經網路也是數學統計學方法的一種實際應用,通過統計學的標準數學方法我們能夠得到大量的可以用函數來表達的局部結構空間,另一方面在人工智慧學的人工感知領域,我們通過數學統計學的應用可以來做人工感知方面的決定問題(也就是說通過統計學的方法,人工神經網路能夠類似人一樣具有簡單的決定能力和簡單的判斷能力),這種方法比起正式的邏輯學推理演算更具有優勢。

和其他機器學習方法一樣,神經網路已經被用於解決各種各樣的問題,例如機器視覺和語音識別。這些問題都是很難被傳統基於規則的編程所解決的。

人工神經網路的發明是受模擬生物神經網路啟發的,我們先來看下生物盛景網路,學過生物的我們都學過神經系統的結構,最基本的單位就是神經元,它的結構像這樣:

在生物神經網路中,每個神經元和其他神經元連接,當它興奮時,它就會向與之相連的神經元發送化學物質,從而改變這些神經元內的電位,如果某個神經元的電位超過了一個閾值(threshold),那它就會被激活,即興奮起來,從而再向其他神經元發送化學物質。

1943年,McCulloch和Pitts將上述情形抽象為簡單的模型,就是沿用至今的「M-P神經元模型」,在這個模型中,神經元接收到來自n個其他神經元傳遞過來的輸入信號,這些輸入信號通過帶權重的連接(connection)進行傳遞,神經元接收到的總輸入值將與神經元的閾值進行比較,然後通過「激活函數」(activation function)處理以產生神經元的輸出。

對於激活函數,理想中的是階躍函數,但是在實際應用中我們一般使用Sigmoid函數,如下圖:

在此之後出現了感知機(或稱感知器,Perceptron),它是Frank Rosenblatt在1957年就職於Cornell航空實驗室(Cornell AeronauticalLaboratory)時所發明的一種人工神經網路。它可以被視為一種最簡單形式的前饋神經網路,是一種二元線性分類模型,其輸入為實例的特徵向量,輸出為實例的類別,取+1和-1。感知機是神經網路的雛形,同時也是支持向量機的基礎,感知機對應於輸入空間(特徵空間)中將實例劃分為正負兩類的分離超平面,屬於判別模型。感知機學習旨在求出將訓練數據進行線性劃分的分離超平面。其結構如下:

在人工神經網路領域中,感知機也被指為單層的人工神經網路,以區別於較複雜的多層感知機(Multilayer Perceptron)。作為一種線性分類器,(單層)感知機可說是最簡單的前向人工神經網路形式。儘管結構簡單,感知機能夠學習並解決相當複雜的問題。感知機主要的本質缺陷是它不能處理線性不可分問題。

關於這一塊的歷史可以給大家簡單介紹一下:

1943年,心理學家Warren McCulloch和數理邏輯學家Walter Pitts在合作的《A logical calculus of the ideasimmanent in nervous activity》中提出並給出了人工神經網路的概念及人工神經元的數學模型,從而開創了人工神經網路研究的時代。

1949年,心理學家Donald O. Hebb在《The Organization of Behavior》中描述了神經元學習法則。

1957年,美國神經學家Frank Rosenblatt在Cornell航空實驗室中成功地在IBM 704機上完成了感知機的模擬。兩年後,他又成功實現了能夠識別一些英文字母、基於感知機的神經計算機——Mark1,並於1960年6月23日,展示於眾。

Rosenblatt,在Hebb學習法則的基礎上,發展了一種迭代、試錯、類似於人類學習過程的學習演算法——感知機學習,該演算法的初衷是為了『教導』感知機識別圖像。除了能夠識別出現較多次的字母,感知機也能對不同書寫方式的字母圖像進行概括和歸納。但是,由於本身的局限,感知機除了那些包含在訓練集里的圖像以外,不能對受干擾(半遮蔽、不同大小、平移、旋轉)的字母圖像進行可靠的識別,即對雜訊敏感。

首個有關感知機的成果,由Rosenblatt於1958年發表在《ThePerceptron: A Probabilistic Model for Information Storage and Organization inthe Brain》里。1962年,他又出版了《Principles of Neurodynamics:Perceptrons and the theory of brain mechanisms》一書,向大眾深入解釋感知機的理論知識及背景假設。此書介紹了一些重要的概念及定理證明,例如感知機收斂定理。

關於感知器的代碼我也再貼一遍:

clear; closeall;clc;

%%定義變數

n = 50;%正負樣本的個數,總樣本數為2n

r = 0.5;%學習率

m = 2;%樣本的維數

i_max = 100;%最大迭代次數

%%生成樣本(以二維為例)

pix = linspace(-pi,pi,n);

randx = 2*pix.*rand(1,n) - pi;

x1 = [cos(randx) + 2*rand(1,n); 3+sin(randx)+ 2*rand(1,n)];

x2 = [3+cos(randx) + 2*rand(1,n); sin(randx)+ 2*rand(1,n)];

x = [x1"; x2"];

y = [ones(n,1); -ones(n,1)];

holdon;

plot(x1(1,:),x1(2,:),"rx");

plot(x2(1,:),x2(2,:),"go");

%%訓練感知機

x = [ones(2*n,1) x];%增加一個常數偏置項y = w0 + w1*x1 + w2*x2

w = zeros(1,m+1);%初始化權值

flag = true;%退出循環的標誌,為true時退出循環

fori=1:i_max

forj=1:2*n

ifsign(x(j,:)*w") ~= y(j)

flag = false;

w = w + r*y(j)*x(j,:);

%以下代碼為了展示感知機的訓練過程,可以注釋,停止請按Ctrl+C

% begin

pause(0.3);

cla("reset");

axis([-1,6,-1,6]);

holdon

plot(x1(1,:),x1(2,:),"rx");

plot(x2(1,:),x2(2,:),"go");

x_test = linspace(0,5,20);

y_test = -w(2)/w(3).*x_test-w(1)/w(3);

plot(x_test,y_test,"m-.");

% end

end

end

ifflag

break;

end

end

%%畫分割線

cla("reset");

holdon

axis([-1,6,-1,6]);

plot(x1(1,:),x1(2,:),"rx");

plot(x2(1,:),x2(2,:),"go");

x_test = linspace(0,5,20);

y_test = -w(2)/w(3).*x_test-w(1)/w(3);

plot(x_test,y_test,"linewidth",2);

legend("標籤為正的樣本","標籤為負的樣本","分類超平面");

雖然最初被認為有著良好的發展潛能,但感知機最終被證明不能處理諸多的模式識別問題。1969年,Marvin Minsky和Seymour Papert在《Perceptrons》書中,仔細分析了以感知機為代表的單層神經網路系統的功能及局限,證明感知機不能解決簡單的異或(XOR)等線性不可分問題,但Rosenblatt和Minsky及Papert等人在當時已經了解到多層神經網路能夠解決線性不可分的問題。

由於Rosenblatt等人沒能夠及時推廣感知機學習演算法到多層神經網路上,又由於《Perceptrons》在研究領域中的巨大影響,及人們對書中論點的誤解,造成了人工神經領域發展的長年停滯及低潮,直到人們認識到多層感知機沒有單層感知機固有的缺陷及反向傳播演算法在80年代的提出,才有所恢復。1987年,書中的錯誤得到了校正,並更名再版為《Perceptrons -Expanded Edition》。

在Freund及Schapire(1998)使用核技巧改進感知機學習演算法之後,愈來愈多的人對感知機學習演算法產生興趣。後來的研究表明除了二元分類,感知機也能應用在較複雜、被稱為structured learning類型的任務上(Collins, 2002),又或使用在分散式計算環境中的大規模機器學習問題上(McDonald, Hall and Mann, 2011)。

至此,一般意義上的神經網路就產生了,結構如下:

對於單隱層神經網路,我們有閉式解可以得到最優的權值,但是對於多層的神經網路(層數>=2),自從有了反向傳播演算法之後才得到了發展。

向傳播演算法(Backpropagation,BP),是「誤差反向傳播」的簡稱,是一種與最優化方法(如梯度下降法)結合使用的。反向傳播演算法最初在 1970 年代被發現,但是這個演算法的重要性直到 David Rumelhart、Geoffrey Hinton 和 Ronald Williams 的 1986年的論文 中才被真正認可。這篇論文描述了對一些神經網路反向傳播要比傳統的方法更快,這使得使用神經網路來解決之前無法完成的問題變得可行。現在,反向傳播演算法已經是神經網路學習的重要組成部分了。關於這個演算法,我們之前的文章中也有介紹反向傳播演算法。

這裡貼一下西瓜書中關於BP演算法的流程圖:

再看下BP演算法的效果:

這些內容基本就是前三節的內容,我們以前的文章也有介紹,我給出了鏈接,大家可以點開看下。

以上就是今天推送的內容,歡迎討論。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器學習 的精彩文章:

前GoogleAI總監掌舵,蘋果組建人工智慧和機器學習新部門
Fortinet WAF將機器學習應用於高級行為威脅檢測

TAG:機器學習 |