成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

看得見的機器學習:零基礎看懂神經網絡

人工智能 機器學習
機器學習就像高中生的性愛。每個人都說他們做了,但其實沒有人真的做了,也沒有人真正知道它到底是什么。

 關于機器學習,有一個古老的笑話:

Machine learning is like highschool sex. Everyone says they do it, nobody really does, and no one knows what it actually is. [1]

翻譯過來意思大概是:

機器學習就像高中生的性愛。每個人都說他們做了,但其實沒有人真的做了,也沒有人真正知道它到底是什么。

[[324779]]

總之,在某種程度上,機器學習確實有很多晦澀難懂的部分。雖然借助TensorFlow、sklearn等工具,機器學習模型以及神經網絡通常能被快速地運行起來,但真正弄清背后發生了什么,仍然不是一件容易的事。在本篇文章中,我會試圖用直觀的方式來解釋神經網絡。俗話說,「耳聽為虛,眼見為實」,本文的目標就是,利用「可視化」的方法,讓你親眼「看到」神經網絡在運行時到底做了什么。

本文不會出現一個公式,希望非技術人員也能看懂。希望如此^-^

最簡單的神經網絡

當今在圖像識別或NLP中使用的深度神經網絡,都發展出了非常復雜的網絡結構,網絡層次多達幾十層,模型參數多達數十萬、上百萬個。這樣的神經網絡理解起來,難度極大,而且計算起來也需要很強的算力。

因此,我們由簡入繁,先從最簡單的情況入手。

首先,我們考慮一個簡單的「二分類」問題。下面展示了一個隨機生成的數據集:

 

上圖展示的是總共160個點(包括紅色和藍色),每個點代表一個數據樣本。顯然,每個樣本包含2個特征,這樣每個樣本才能夠在一個二維坐標系中用一個點來表示。紅色的點表示該樣本屬于第1個分類,而藍色的點表示該樣本屬于第2個分類。

二分類問題可以理解成:訓練出一個分類模型,把上圖中160個樣本組成的訓練集按所屬分類分成兩份。注意:這個表述并不是很嚴謹。上圖中的樣本只是用于訓練,而訓練出來的模型應該能對「不屬于」這個訓練集的其它樣本進行分類(不過我們現在不關注這一點,可以先忽略掉這個表述上的細節)。

為了完成這個二分類任務,我們有很多種機器學習模型可供選擇。但現在我們的目的是為了研究神經網絡,所以我們可以設計一個最簡單的神經網絡,來解決這個分類問題。如下圖:

 

這個神經網絡幾乎沒法再簡單了,只有1個輸入層和1個輸出層,總共只有3個神經元。

經過簡單的數學分析就容易看出,這個只有2層的神經網絡模型,其實等同于傳統機器學習的LR模型(邏輯回歸)。也就是說,這是個線性分類器,對它的訓練相當于在前面那個二維坐標平面中尋找一條直線,將紅色點和藍色點分開。

根據紅色點和藍色點的位置分布,我們很容易看出,這樣的一條直線,很容易找出來(或學習出來)。實際上,上圖中這個簡單的神經網絡,經過訓練很容易就能達到100%的分類準確率(accuracy)。

現在,假設我們的數據集變成了下面的樣子(紅色點分成了兩簇,分列藍色點左右):

 

如果我們還是使用前面的2層的神經網絡,試圖畫一條直線來把紅色點和藍色點分開,顯然就做不到了。我們說,現在這個分成三簇的數據集已經不是「線性可分」的了。實際上,針對最新的這個數據集,前面這個只有2層的神經網絡,不管你怎么訓練,都只能達到60%~70%左右的分類準確率。

為了提高分類的準確率,比較直觀的想法也許是畫一條曲線,這樣才能把紅色點和藍色點徹底分開。這相當于要對原始輸入數據做非線性變換。在神經網絡中,我們可以通過增加一個隱藏層(hidden layer)來完成這種非線性變換。修改后的神經網絡如下圖:

 

我們看到,修改后的神經網絡增加了一層包含2個sigmoid神經元的隱藏層;而輸入層和隱藏層之間是全連接的。實際上,當我們重新訓練這個帶隱藏層的神經網絡時,會發現分類的準確率又提升到了100%(或者非常接近100%)。這是為什么呢?

我們可以這樣來看待神經網絡的計算:每經過一層網絡,相當于將樣本空間(當然也包括其中的每個樣本數據)進行了一次變換。也就是說,輸入的樣本數據,經過中間的隱藏層時,做了一次變換。而且,由于隱藏層的激活函數使用的是sigmoid,所以這個變換是一個非線性變換。

那么,很自然的一個問題是,經過了隱藏層的這一次非線性變換,輸入樣本變成什么樣了呢?下面,我們把隱藏層的2個神經元的輸出畫到了下圖中:

 

我們發現了一個有趣的現象:變換后的樣本數據點,還是分成了三簇,但紅色點再也不是分列藍色點的兩側了。兩簇紅色點被分別逼到了一個角落里,而藍色點被逼到了另外一個不同的角落里。很容易看出,現在這個圖變成「線性可分」的了。而隱藏層的輸出數據,再經過神經網絡最后一個輸出層的處理,剛好相當于經過了一個線性分類器,很容易用一條直線把紅色點和藍色點分開了。

從隱藏層的輸出圖像,我們還能發現一些細節:

所有的數據坐標(不管是X軸還是Y軸),都落在了(0,1)區間內。因為sigmoid激活函數的特性,正是把實數域映射到(0,1)之間。

我們發現,所有的數據都落在某個角落里。這不是偶然,還是因為sigmoid激活函數的特性。當充分訓練到sigmoid神經元「飽和」時,它一般是會輸出接近0或1的值,而極少可能輸出一個接近(0,1)中間的值。

總結一下:從前面的分析,我們大概可以看到這樣一個變換過程,就是輸入樣本在原始空間內本來不是「線性可分」的,而經過了隱藏層的變換處理后,變得「線性可分」了;最后再經過輸出層的一次線性分類,成功完成了二分類任務。

當然,這個例子非常簡單,只是最簡單的神經網絡結構。但即使是更復雜的神經網絡,原理也是類似的,輸入樣本每經過一層網絡的變換處理,都變得比原來更「可分」一些。我們接下來就看一個稍微復雜一點的例子。

手寫體數字識別MNIST

現在我們來考慮一下「手寫體數字識別」的問題。

在機器學習的學術界,有一個公開的數據集,稱為MNIST[2]。使用神經網絡對MNIST的數據進行識別,堪稱是神經網絡和深度學習領域的「Hello World」。

在MNIST的數據集中,共有70000張手寫體數字圖片。它們類似下面的樣子:

 

每一張圖片都是28像素×28像素的黑白圖片,其中每個像素用一個介于[0,255]之間的灰度值表示。

MNIST的數字識別問題,就是給你一張這樣的28像素×28像素的圖片,用程序區分出它具體是0到9哪一個數字。

對于這個問題,歷史上的最佳成績是99.79%的識別率,方案使用了卷積神經網絡(CNN)。我們這里不想讓問題復雜化,因此還是采用普通的全連接的神經網絡來求解。我們使用的網絡結構如下:

 

這個神經網絡的輸入和輸出是這樣定義的:

  • 輸入:每次輸入一張圖片。圖片的每個像素的灰度值,除以255后得到一個[0,1]之間的歸一化的灰度值,然后輸入到輸入層的每個神經元上。也就是說,輸入層有784個神經元,正好對應一張圖片28×28=784個像素。
  • 輸出:輸出層共10個神經元,各個神經元的輸出分別對應0到9這幾個數字。哪個神經元輸出的值最大,我們就可以認為預測結果是對應的那個數字。另外,10個輸出值再經過softmax處理,就得到了當前輸入圖片是各個數字的概率。

對這個神經網絡進行訓練后,可以很輕松地獲得98%左右的正確識別率。那針對這個更寬的神經網絡,我們還能使用前面的方法來對它進行可視化的圖像繪制嗎?

降維

在前面的一小節中,我們的簡單神經網絡輸入層和隱藏層都只有2個神經元,因此可以在一個二維坐標平面中繪制它們的圖像。而對于MNIST的這個神經網絡,當我們想對它的輸入層進行圖像繪制的時候,發現它有784維!

如何把784維的特征向量繪制出來?這涉及到對于高維數據可視化的問題。通常來講,人的大腦只能理解最高3維的空間,對于3維以上的空間,就只能靠抽象思維了。

我們想象一個簡單的例子,來感受一下對高維空間進行直觀的理解有多么困難:

  • 首先,在一個平面內(也就是2維空間),我們可以找到3個兩兩等距的點,以它們為頂點可以組成一個等邊三角形。
  • 在一個3維空間內,我們可以找到4個兩兩等距的點,以它們為頂點可以組成一個正四面體,這個正四面體的每個面都是一個等邊三角形。
  • 現在,我們上升到4維空間,理論上我們可以找到5個兩兩等距的點,以它們為頂點可以組成一個我們姑且稱之為「正五面體」的東西。繼續類比,這個所謂的「正五面體」,它的每個「面」,也就是由5個點中的任意4個點組成的「面」,嚴格來說不能稱它為一個「面」,因為它是一個正四面體。另外需要注意,當我們在這里用「正五面體」這樣一個名不副實的名字來命名的時候,還帶來了很大的誤導性,因為它聽起來像是3維空間中的一個「正多面體」。但如果你對數學的歷史有所了解的話,那么就應該知道,早在2000多年前,歐幾里得就在他的《幾何原本》中提出了,3維空間中根本不存在正五面體(實際上3維空間中只有5種正多面體)。

好了,如果你還能跟得上前面最后這一段關于4維空間的描述,那么說明你一定閱讀得非常仔細,而且正在一邊閱讀一邊思考^-^但不管怎么說,4維空間的情形已經讓人足夠惱火了(它們符合邏輯但卻不可想象),更別說讓我們來想象784維空間中的幾何結構了!

因此,我們需要降維(dimensionality reduction)的技術,把高維空間中的數據降低到3維或2維空間內,然后才能可視化地繪制出來,達到一定的「直觀理解」的目的。

那降維到底是怎樣的一種操作呢?我們仔細回想一下,其實在現實世界中,我們已經碰到過很多降維的情況了。比如下面這張圖片:

[[324787]]

 

這是100多年前的一幅名畫,名字叫《大碗島的星期天下午》。在這幅畫作中,我們可以感受到海灘遠處強烈的縱深感。但任何一幅畫作,都是在一張二維的平面上繪制的。所以,畫家需要把三體景物投影到二維上,這就是一種「降維」處理。與此類似,我們平常用相機拍出的照片,也是把三維空間「降維」到了二維平面上。這種降維處理普遍存在,可以稱為「投影變換」,是線性變換的一種。

我們再來看一個例子:

 

圖中右側是一張世界平面地圖。本來地球的表面是個三維空間中的球面,但上面的世界地圖把整個球面繪制到了一個二維平面上。為了做到這一點,顯然地圖的繪制者需要把球面攤平,部分區域需要進行一定的拉伸和扭曲。我們把這個繪制過程想象成一個映射:地球表面的一個點,映射到世界平面地圖上的一個點上。但所有的點的映射并不滿足同樣的線性關系,所以這是一個非線性變換。

上面不管是畫作、照片的例子,還是世界平面地圖的例子,都是把三維降維到二維。但在機器學習中,我們經常需要把從更高維降維到三維或二維。人們發明了各種各樣的降維方法,比如PCA (Principal Component Analysis),是一種線性降維方法;MDS (Multi-dimension Scaling)、t-SNE (t-Distributed Stochastic Neighbor Embedding),都是非線性降維方法。

基于k近鄰圖和力學模型的降維可視化方法

前面提到的各種降維方法,做法不同,也各有側重點。任何一種解釋起來,都要花去很大的篇幅,因此本文不一一詳述。考慮到我們接下來的目標,是為了對前一節引入的MNIST神經網絡進行直觀的可視化展示,所以我們這里采取一種更為直接(也易理解)的方法——一種基于k-NNG (k-Nearest Neighborhood Graph,k近鄰圖)和力學模型(Force-Directed)的降維可視化方法[3][4]。

這種方法的過程可以如下描述:

  1. 對于高維空間中的節點計算兩兩之間的距離,為每個節點找到離它最近的k個節點,分別連接起來建立一條邊。這樣就創建出了一個由節點和邊組成的圖數據結構。這個新創建的圖有這樣的特性:有邊直接相連的節點,它們在原高維空間中的位置就是比較接近的;而沒有邊直接相連的節點,它們在原高維空間中的位置就是比較遠的。這個圖稱為「k近鄰圖」,也就是k-NNG (k-Nearest Neighborhood Graph)。另外還有一個問題:高維空間中兩個節點的距離怎么計算?這其實有很多種計算方法,比較常見的有「歐幾里得距離」、「明可夫斯基距離」等。
  2. 將前面一步得到的k近鄰圖在二維平面中繪制出來。這變成了一個常見的繪圖布局的問題,從某種程度上跟電路板的元器件布局有點像。為了讓繪制出來的圖像清晰易觀察,這個繪制過程需要盡量滿足一定的條件,比如,邊線的交叉應該盡量少;有邊相連的節點應該盡可能離得近一些;節點之間不能離得太近(聚在一起),應該盡量均勻地散布在整個坐標系平面上。為了達到這樣的要求,我們采用了Fruchterman和Reingold發明的Force-Directed Graph Drawing這種算法。它模擬了物理世界的力學原理,如下圖所示:

 

  • 想象左上角的圖,把邊換成彈簧,把節點換成帶電小球;
  • 彈簧會傾向于把相鄰節點(即有邊相連的節點)固定在一個自然長度上(對應原高維空間中的距離),不能太遠也不能太近;
  • 所有「帶電小球」都互相保持斥力,讓不相鄰的節點互相遠離,并促使所有節點盡量散布整個畫面;
  • 放開手,讓各個節點在彈簧和斥力的作用下自由移動,最后達到總體能量最小的狀態,這時就得到了左下角那個更好的節點布局。

對于這種方法,我們需要重點關注的是:從高維降到低維,原來高維空間中的哪些幾何特性被保持住了?從前面繪制過程的描述容易看出:在原高維空間中距離比較近的節點,在最后繪制的二維圖像中,也會在彈簧拉力的作用下離得比較近。只有搞清楚這一點,我們才能通過觀看低維的圖像,來理解高維的結構。

現在,我們終于做好準備來對MNIST神經網絡進行可視化了。

MNIST的可視化

 

上圖是對于MINST神經網絡輸入層數據的可視化圖像(784維)。圖中每一個節點都表示一張圖片,用一個784維的向量表示;圖中每一種顏色表示0到9數字中的一個,相當于節點總共有10種分類。我們可以看出:

  • MNIST的原始數據集中,自發展示出了一些結構。表示相同數字的節點,它們在原784維空間中,也會比較接近,因此會自然地聚集成簇。比如,左側的藍色節點群,表示數字0;右下角的靛藍色節點群,表示數字1;而左下角的絳紫色節點群,表示數字6。
  • 中間右側有多種不同類的節點混雜的一起。比如,表示數字9的紅色節點,表示數字7的深褐色節點,還有表示數字4的黃綠色節點,相互交織在一起。這表示它們不太容易互相區分開。

 

上圖則是對于MINST神經網絡中間隱藏層輸出數據的可視化圖像(128維)。圖中每一個節點還是對應一張圖片(即對應原始圖片數據經過了隱藏層的變換之后的數據),變成了用一個128維的向量表示;圖中每一種顏色仍是表示0到9數字中的一個,還是總共有10種分類。我們可以看出:

  • 與前面的MINST原始輸入數據相比,節點的混亂程度降低了(我們也可以說,熵值降低了)。這也包括在前面圖像中混雜在一起的數字7、數字4和數字9,現在它們都各自聚集成簇了:左側突出來的深褐色節點群,是數字7;左上角的黃綠色節點群,是數字4;紅色節點群,是數字9。這表示更容易把它們相互分開了。

 

上圖是對于MINST神經網絡最終的輸出層輸出數據(經過了softmax處理之后的)的可視化圖像(10維)。圖中每一個節點還是對應一張圖片(即對應原始圖片數據經過了整個神經網絡的變換之后的數據),變成了一個只有10維的向量;圖中每一種顏色仍是表示0到9數字中的一個,還是總共有10種分類。我們可以看出:

  • 節點混亂程度極大降低,每類數字都各自聚集在一起。考慮到這張圖像里面的節點數量跟前面兩張圖像里面的節點數量是完全一樣的,但散布空間小了很多,說明按照分類的聚集程度達到了很高的程度。實際上,這時候只需要對最后這個10維向量做一個簡單的argmax判斷,就可以以很高的準確率識別出具體數字了。這表示,最后的輸出具有很高的「可分」度。

小結

在本文中,通過對神經網絡的可視化研究,我們發現:從原始的特征輸入出發,神經網絡每經過一層的變換處理,都在抽象程度上離問題的目標更接近一點。拿MNIST的手寫體數字識別問題來說,目標是一個多分類問題,即把圖片歸到0到9這10個類別中的一個。最開始輸入的是原始的圖片像素數據,每經過一次網絡層變換處理之后,數據就變得比原來更「可分」一點,也就是離分類的目標更接近一點。

這是一種典型的對信息進行整合的過程。就像許多現實世界中的情形一樣,龐雜的細節,只有經過有效地整合,我們才能獲得真正的「感知」或「認知」。

而對于類似圖像識別這樣的簡單的感知行為,人類甚至意識不到這個信息整合過程的存在。把人眼看到物體這個過程拆解開來看,物理世界的光子進入人眼感光細胞,會產生大量的細節數據。而這些數據勢必經過了人腦中一個類似神經網絡(肯定比神經網絡更高級)的結構來處理,將這些細節數據經過整合之后,才讓我們在宏觀層面認識到眼前看到了什么物體。對人腦來說,這個過程是瞬間發生的,它快速、準確,而且低能耗。如果我們要設計一種能識別物體的模型,最好的方法也許是完全復制人腦的處理機制。但這些機制都是未知,或者至少我們所知非常有限。因此,我們只能近似、參考、模仿人腦的機制。

最后,我們今天所討論的可視化技術,只是對于機器學習追求可解釋性的技術(Interpretability Techniques)中非常初級的一部分。它可能會對我們如何修正現有模型或者如何更好地訓練模型,提供參考價值,但是,它很可能無法幫助我們從頭發明出一個顛覆式的學習機制。就像我們在上一篇文章《程序員眼中的「技術-藝術」光譜》中所討論的那樣,新模型的設計,或者一種嶄新學習機制的發明,仍然是一門需要靈感的「藝術」。

責任編輯:武曉燕 來源: 張鐵蕾
相關推薦

2017-01-15 10:22:49

安全可視化迪普科技信息安全

2017-01-18 00:45:50

安全可視化迪普科技信息安全

2013-01-05 14:31:23

云平臺用友UA

2012-05-29 15:30:31

計算機

2012-06-04 11:15:24

NEC投影機

2024-06-04 12:49:58

神經網絡AI

2015-12-01 14:26:57

2013-11-29 14:31:18

NETGEAR路由NETGEAR

2016-08-19 18:22:24

2023-04-19 10:17:35

機器學習深度學習

2019-10-11 14:48:42

技術研發指標

2022-01-27 11:24:48

春運技術運輸

2017-04-14 12:49:21

智慧鄉村梅光信息化

2016-11-24 18:18:27

數字化轉型SaaS

2017-12-22 17:38:35

VRARMR

2022-02-15 23:38:22

Python機器學習算法

2025-02-24 08:00:00

機器學習ML架構

2018-10-18 10:27:15

機器學習神經網絡python

2020-08-06 10:11:13

神經網絡機器學習算法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: avhd101在线成人播放 | 国产精品一区在线观看 | 成人精品在线观看 | 久久久蜜臀国产一区二区 | 一级全黄少妇性色生活免费看 | 99久久中文字幕三级久久日本 | 免费av一区二区三区 | 羞羞的视频免费看 | 天天干狠狠操 | 欧美jizzhd精品欧美巨大免费 | 久久久久久国产免费视网址 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 久久亚洲高清 | 超碰免费在线观看 | av激情影院 | 久久久久网站 | 精品福利在线视频 | 亚洲午夜电影 | 国产精品久久久久婷婷二区次 | 免费h在线 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 亚洲电影免费 | 精品国产成人 | 自拍视频精品 | 亚洲欧美日韩精品久久亚洲区 | 国产精品国产自产拍高清 | 一区二区国产精品 | 天天艹日日干 | 亚洲精品一区二区三区丝袜 | 一级做a爰片性色毛片16美国 | 国产一区二区电影 | 国产精品久久 | 羞羞视频一区二区 | 欧美一二三四成人免费视频 | 中文字幕乱码一区二区三区 | 久久高清精品 | 国产农村妇女毛片精品久久麻豆 | www.亚洲精品 | 欧美视频中文字幕 | 亚洲欧美国产精品久久 | www.精品一区 |