1. 程式人生 > >Google釋出機器學習平臺Tensorflow遊樂場~帶你玩神經網路

Google釋出機器學習平臺Tensorflow遊樂場~帶你玩神經網路

昨天,Google釋出了Tensorflow遊樂場。Tensorflow是Google今年推出的機器學習開源平臺。而有了Tensorflow遊樂場,我們在瀏覽器中就可以訓練自己的神經網路,還有酷酷的影象讓我們更直觀地瞭解神經網路的工作原理。今天,就讓矽谷周邊帶你一起去Tensorflow遊樂場快樂地玩耍吧!

昨天,Google深度學習部門Google Brain的掌門人,也是Google裡受萬眾景仰的神級別工程師Jeff Dean,在Google Plus上釋出了Tensorflow遊樂場的訊息:

於是小夥伴們都十分激動地去Tensorflow的網站上玩神經網路了!遊樂場的地址是:http://playground.tensorflow.org。讓我們快點一起去看看遊樂場裡有哪些好玩的東東吧。

一開啟網站,就看見上面的標語:

“在你的瀏覽器中就可以玩神經網路!不用擔心,怎麼玩也玩不壞哦!”

這簡直太令人振奮了!面對這麼多可以隨便點的按鈕,咱們從哪兒開始呢?

首先讓我們來看看資料。在這個遊樂場中,我們有4種不同形態的資料可以玩:

每組資料,都是不同形態分佈的一群點。每一個點,都與生俱來了2個特徵:x1和x2,表示點的位置。而我們資料中的點有2類:橙色和藍色。我們的神經網路的目標,就是通過訓練,知道哪些位置的點是橙色、哪些位置的點是藍色。

如果橙色是橙子,藍色是藍莓。假設我們有2000個散落在各處的橙子和藍莓。前1000個,我們知道座標(1,1)的是藍莓,(2,2)的是橙子,(0.5,0.5)的是藍莓等等。我們要用這些資訊來訓練我們的神經網路,讓它能夠準確地預測出後1000個哪些是橙子、哪些是藍莓。

看上面的4組資料,我們會發現,前3中都能相對簡單地區分開,而最後一組螺旋資料會是最難的。

Tensorflow遊樂場中的資料十分靈活。我們可以調整noise(干擾)的大小,還可以改變訓練資料和測試資料的比例多少。下圖是不同noise的資料分佈。

當我們把每一個數據點的資訊餵給機器學習系統時,我們需要做feature extraction,也就是特徵提取。如果我們真的是在區分藍莓和橙子的話,大小、顏色等等都會是我們的特徵。而這裡,每一個點都有x1和x2兩個特徵。除此之外,由這兩個特徵還可以衍生出許多其他特徵:

抽象來說,我們的機器學習classifier(分類器)其實是在試圖畫一條或多條線。如果我們能夠100%正確地區分藍色和橙色的點,藍色的點會線上的一邊,橙色的會在另一邊。

上面這些圖其實非常的直觀。第一張圖中,如果x1作為我們的特徵,我們其實就是在畫一條和x1軸垂直的線。當我們改變引數時,其實就是在將這條線左右移動。其他的特徵也是如此。

很容易可以看出,我們需要智慧地結合這其中一種或多種的特徵,才能夠成功地將藍色點和橙色點分類。這樣的feature extraction,其實往往是機器學習應用中最難的部分。好在我們有神經網路,它能夠幫我們完成大部分的任務。

如果我們選定x1和x2作為特徵,我們神經網路的每一層的每個神經元,都會將它們進行組合,來算出結果:

而下一層神經網路的神經元,會把這一層的輸出再進行組合。組合時,根據上一次預測的準確性,我們會通過back propogation給每個組合不同的weights(比重)。這裡的線越粗,就表示比重越大:

下面就讓我們用最難的螺旋形資料,來試試這個神經網路的表現吧!

在神經網路出現前,我們往往會竭盡所能地想出儘可能好的特徵,把它們全都餵給系統。而系統會是個十分淺的系統,往往只有一層。用這樣的方法來完成分類。

讓我們先來實驗傳統的方法。在這裡,我們將所有能夠想到的7個特徵都輸入系統,並選擇只有1層的神經網路:

最後的結果是這樣的,可以看出我們的單層神經系統幾乎完美地分離出了橙色點和藍色點:

接下來,讓我們來體驗神經網路真正的魔法。神經網路較大的魔力,就在於我們根本不需要想出各種各樣的特徵,用來輸入給機器學習的系統。我們只需要輸入最基本的特徵x1, x2, 只要給予足夠多層的神經網路和神經元,神經網路會自己組合出最有用的特徵。

在這次試驗中,我們只輸入x1, x2,而選擇1個6層的,每層有8個神經元的神經網路:

最後的結果是這樣的。我們發現,通過增加神經元和神經網路的層數,即使沒有輸入許多特徵,我們也能夠成功地分類:

神經網路的偉大之處就在於此。當我們在解決分類橙色點和藍色點這樣的簡單問題時,想出額外的特徵似乎並不是難事。但是,當我們要處理的問題越來越複雜,想出有用的特徵就變成了最最困難的事。比如說,當我們需要識別出哪張圖片是貓,哪張圖片是狗時,哪些特徵是真正有效的呢?

而當我們有了神經網路,我們的系統自己就能學習到哪些特徵是有效的、哪些是無效的,這就大大提高了我們解決複雜機器學習問題的能力,簡直是太酷啦!

看了以上的文章,你是不是對神經網路有了更直觀的認識呢?好奇的小夥伴們,歡迎去http://playground.tensorflow.org/自己試試看,真的非常好玩!

作者簡介

矽谷周邊,本科畢業於Carnegie Mellon University(卡耐基梅隆大學),主修電子與計算機工程和機器人。先後在蘋果(Macintosh Systems, iPod)和Google(Android, Google Glass)工作。現在是Google的一名軟體工程師。