誰能詳細講解一下TensorFlow Playground所展示的神經網路的概念?

TensorFlow開放出了PlayGround,可以在瀏覽器里訓練神經網路,可以詳細講講其中反映的神經網路的概念和原理嗎?


Tensorflow playground網頁中的下方有解釋。

總體來說,藍色代表正值,黃色代表負值。拿分類任務來分析。

  • 數據:在二維平面內,若干點被標記成了兩種顏色。黃色,藍色,表示想要區分的兩類。你可以把平面內的任意點標記成任意顏色。網頁給你提供了4種規律。神經網路會根據你給的數據訓練,再分類相同規律的點。

  • 輸入:在二維平面內,你想給網路多少關於「點」的信息。從顏色就可以看出來,x_{1}左邊是負,右邊是正,x_{1}表示此點的橫坐標值。同理,x_{2}表示此點的縱坐標值。x_{1}^{2}是關於橫坐標值的「拋物線」信息。你也可以給更多關於這個點的信息。給的越多,越容易被分開。

  • 連接線:表示權重,藍色表示用神經元的原始輸出,黃色表示用負輸出。深淺表示權重的絕對值大小。滑鼠放在線上可以看到具體值。也可以更改。在(1)中,當把x_{2}輸出的一個權重改為-1時,x_{2}的形狀直接倒置了。不過還需要考慮激活函數。(1)中用的是linear。在(2)中,當換成sigmoid時,你會發現沒有黃色區域了。因為sigmoid的值域是(0,1)

    (1)

    (2)

  • 輸出:黃色背景顏色都被歸為黃點類,藍色背景顏色都被歸為藍點類。深淺表示可能性的強弱。

    上圖中所有在黃色背景顏色的點都會被分類為「黃點「,同理,藍色區域被分成藍點。在上面的分類分布圖中你可以看到每一層通過上一層信息的組合所形成的。權重(那些連接線)控制了「如何組合」。神經網路的學習也就是從數據中學習那些權重。Tensorflow playground所表現出來的現象就是「在我文章深層學習為何要「Deep」(上)里所寫的「物質組成思想」,這也是為什麼我把Tensorflow playground放在了那一部分。

不過你要是把Tensorflow的個名字拆開來看的話,是tensor(張量)的flow(流動)。Tensorflow playground的作者想要闡述的側重點是「張量如何流動」的。

值得一提的是這張圖。在分類訓練數據的時候完全合理。

然而,當讓他預測新數據時。

右上角這部分的區域就是不合理的。原因是網路的權重是從訓練數據中學到的。這就是為什麼要儘可能獲得更多的數據,讓神經網路「見到」更多的可能性。這部分的內容我就不展開了。你可以自己操作體驗一下。

5種空間變換的理解:Tensorflow playground下沒有體現5種空間變換的理解。需要打開這個網站嘗試:ConvNetJS demo: Classify toy 2D data

左側是分類圖,右側是扭曲圖。

最終的扭曲效果是所有綠點都被扭曲到了一側,而所有紅點都被扭曲到了另一側。這樣就可以線性分割(用超平面,這裡是一個平面在中間分開兩類)


感謝邀請。

這是我的一篇blog,題主可以看一下,講解了PlayGround和簡單的神經網路基本原理

結合TensorFlow PlayGround的簡單神經網路原理解釋

內容貼在這裡:

很多人把機器學習(或者說本篇文章的重點:神經網路)看成「黑技術」、「黑魔法」,其實不然,所有的機器學習無外乎就是找到從輸入到輸入的最佳擬合函數,只是各種不同的機器學習技術得到的擬合函數方法、效果不同因此適用情景不同罷了。那麼今天我們就結合TensorFlow的Playground來具體講解一下,神經網路是如何去擬合輸入和輸出之間的目標函數的。好的,系好安全帶,要發車了:)

PlayGround是一個圖形化用於教學目的的簡單神經網路在線演示、實驗的平台,非常強大地可視化了神經網路的訓練過程。不得不說做出這個演示系統的人不僅對神經網路的見解深刻,更是找到了可視化的有力方法。建議使用的時候把右下角的discretize output(離散化輸出)選上,不去讓系統自動平滑,這樣本質看的更清楚。我們首先簡單的講一下這個PlayGround。第一塊也就是最上面一行是訓練參數,保持默認即可,這個我們不去做過多解釋和介紹。因為這涉及到更深層次的神經網路知識,遠非一篇簡短的blog可以解釋清楚,而且本篇文章的重點也是從intuitive(直覺化,直觀化)方式講解基本原理。想要了解更多的內容,請參見我寫的另一篇教程:新手向的TensorFlow學習之路(Learning paths)。第二塊就是下面的內容,從左到右是dataset(數據集)選擇,feature(特徵)選擇,hidden layers(隱含層)選擇和output(輸出)。

研究一個未知事物的時候,我們習慣於也應該從最簡單的情況開始討論,那麼對於神經網路,什麼是簡單的情況?當然是神經元的數目越少越好,這樣我們才能從繁雜的現象中理清關係。首先我們選擇dataset中的第二行第一個,也就是Gaussian,然後feature選擇x1,x2,點擊hidden layers的減號去掉所有的隱含層,這樣我們就得到的簡單的模型,這個模型簡單到只有兩個神經元!就像這樣:

接下來,我們點擊第一行的Run開始訓練。這個模型應該幾秒鐘就訓練完成了。而且效果非常好,可以清晰的看出dataset已經被明顯地按照顏色劃分成了兩塊。你可能會覺得,What!!發生了什麼!!別急,我們接著看。

這時把滑鼠hover(懸停)在x1或者x2上,你會看到這樣的劃分:

對,這就是第一個feature,豎著「切一刀」!同樣,第二個也是「切一刀」,不過是橫著罷了。這樣簡單的「切一刀」就能解決問題嗎?顯然不能,所以這時時候weight(權重)就是上場了。weight就是來協調每個「切一刀」切多少的,把每個簡單的動作聯合起來,共同去解決問題。也就是說:每個神經元都是「傻傻的」只會一件事情,然後通過weight去組合協調,完成一件複雜的任務!多說無益。我們更進一步看看吧。

我們再把滑鼠hover到那個連接x1,x2到output的線條上,這時你會看到「Weight is xxx」的字樣,點擊線條我們是可以修改那個xxx數值的。那我們就試著修改那個xxx吧!首先,把x1的weight改成0,你應該會看到這樣的畫面:

這不就是x2嘛!是不是有點感覺了?如果x2的weight是0那麼應該和x1一樣吧?那就來試試自己的猜想,點擊第一行的reset(重置)後run重新訓練,再試著把x2的weight改成0。這次發現,不出所料,果真是自己猜想的那樣~這次我們把x1,x2的weight都改成1,當然如果你開心,可以都改成100:)你會發現,一條完美的對角線平分了dataset,把dataset分成了兩個部分。就像這樣:

這意味著什麼?這意味著兩點:1.weight確實是各個feature的加權值,是一個去協調各個feature的量,weight(x1)=weight(x2)的時候,x1,x2同等重要,導致平分天下;2.學習/訓練的過程不過是去尋找選擇最優weight的過程,如果「人眼」能一眼看出weight,就像這個簡單的數據集,我們大可去手工輸入weight,同樣可以達到一樣甚至更好的效果!這正驗證了之前的結論:每個神經元都是「傻傻的」只會一件事情,然後通過weight去組合協調,完成一件複雜的任務!兩個神經元尚且如此,想像一個擁有成千上萬乃至上億神經元的系統(比如人腦),完全不用奇怪這個系統可以完成極其複雜的任務!

現在可以嘗試不同的dataset,再多加幾個hidden layers,感受一下簡單的神經元通過weight組合協調完成分類任務的強大。推薦試一下這個組合:dataset選擇第一行第二個Exclusive or,feature只選擇一個,就是第五個x1x2,然後hidden layers為0,也就是沒有隱含層。然後再試一下用其他的feature去訓練,對比感受一下feature的選擇對結果的巨大影響。

講到這裡,應該對神經網路的基本原理有了朦朧的認識的,但這是遠遠不夠的,還有很多都沒有講(好吧,主要是比較懶:)),比如feature,multiple output,activition function等等,感興趣可以參見Michael Nielsen的這一講,可視化地證明了神經網路對任意函數的擬合能力,非常精彩。閱讀過程中可以結合PlayGround去理解。

2018年1月9日更新:修正錯別字

2016年10月16日更新:修正錯別字


1、上方一行,表示為迭代的次數551次、學習率0.03(梯度下降用)、激活函數為Tanh(神經網路最後一步用)、解決的問題的為分類型問題。

2、左邊一列為用戶選擇的,需要多少數據來訓練(圖用了50%)、要不要加入雜訊(圖中沒有加入)、每一小組的數據是多少。

3、中間這一列為選擇的神經網路,可以選擇層數,也可以選擇輸入的特徵。

4、右邊這一列上方為損失函數下降的曲線圖,可以看出最後收斂了,下方是讓你選擇顏色的。

ps:去玩了一下,只是個演示的動態網站,可以加深對神經網路的理解。

~~~這個網站還是蠻好的啊,可以自己自由搭配各種參數,看看怎麼才能最少次數迭代出收斂的模型。最重要還是可視化啊,很容易理解。


應該是用神經網路解決一個分類或回歸問題的圖形化展示,還在理解中,先佔個坑

視覺效果上確實驚人,感嘆真乃炫技之作~~~

雖說只是個教學性質的演示,但這種視覺展示方式實在是太自然了,我覺得生產性質的應用也應該/必須這麼弄:圖形化,Web化,實時。我想只要把JavaScript版的NN庫替換成伺服器端真正的Tensorflow,再加上一個通訊機制,就差不多了~~~

正在向這個方向努力~~~


神經網路其實是很好玩的~ 這裡有一篇文章就是邊介紹邊玩的形式,通俗易懂。 http://playground.tensorflowjiaocheng.com/ 好玩的神經網路。


我覺得是把神經網路訓練的每一步迭代用可視化顯示出來,左上是迭代次數,右上角的曲線是損失下降


推薦閱讀:

如何看待Face++出品的小型化網路ShuffleNet?
CNN做圖像分類,訓練集中的極少量樣本被貼上了錯誤的標籤,是否會嚴重污染訓練集?對訓練結果影響大嗎?
Tensorflow 的reduce_sum()函數到底是什麼意思,誰能解釋下?

TAG:機器學習 | 神經網路 | 深度學習DeepLearning | TensorFlow |