1. 程式人生 > >神經網路和深度學習(一)——初識神經網路

神經網路和深度學習(一)——初識神經網路

神經網路和深度學習

  • 神經網路:一種可以通過觀測資料使計算機學習的仿生語言範例
  • 深度學習:一組強大的神經網路學習技術

    神經網路和深度學習目前提供了針對影象識別,語音識別和自然語言處理領域諸多問題的最佳解決方案。傳統的程式設計方法中,我們告訴計算機如何去做,將大問題劃分為許多小問題,精確地定義了計算機很容易執行的任務。而神經網路不需要我們告訴計算機如何處理問題,而是通過從觀測資料中學習,計算出他自己的解決方案。自動地從資料中學習看起來很有前途。然而直到2006年我們都不知道如何訓練神經網路使得它比傳統的方法更好,除了一些特定問題。直到2006年稱為深度神經網路的學習技術被提出,這些技術現在被稱為深度學習。它們得到了很好的發展,今天,深度神經網路和深度學習在計算機視覺、語音識別和自然語言處理等許多重要問題上取得了出色的表現。

初識神經網路

人類的視覺系統是世界上最棒的系統之一,比如下列一串手寫數字:
這裡寫圖片描述
大多數人都可以一眼看出它是504192。在我們大腦的每一個半球,都有主要的視覺皮質V1,它包含了1.4億個神經元,在這些神經元之間有數百億的接觸。然而人類的視覺不僅僅包含了V1,而是一系列的視覺皮質V1,V2,V3,V4,V5,逐步進行更復雜的影象處理。我們大腦裡有一臺超級計算機,通過數億年的進化,可以很好的適應這個視覺世界。識別手寫數字並不容易,我們人類驚人地可以理解我們眼睛所看到的東西,但這些工作都是在我們不知不覺中就完成了,我們根本不知道我們大腦完成了多麼負責的工作。

神經網路解決這類問題通過不一樣的方式。思想是把大量的手寫數字作為訓練樣本,然後生成一個可以通過訓練樣本學習的系統。換句話說,神經網路使用樣本自動地推斷出識別手寫數字的規則。此外,通過增加訓練樣本的數量,該網路可以學到更多,並且更加準確。因此,當我展示下圖100個訓練樣本時,可能我們可以通過使用成千上萬甚至上億的訓練樣本來建立一個更好的手寫識別系統。、這裡寫圖片描述

該文我們將寫一個程式實現一個神經網路,學習如何識別手寫數字。在不使用神經網路程式碼庫的情況下,74行程式碼就可以完成。但是這短短的程式碼識別數字的準確率超過96%。此外,後面的文章我們將可以實現準確率高達99%的方法。事實上,最好的商業神經網路現在已經很好了,銀行可以用它們來處理支票,並通過郵局來識別地址。

的確,如果這篇文章只是描述如何實現一個手寫數字識別的程式碼,那麼很短的篇幅就可以講完。但是在這個過程中,我們會講到許多神經網路的核心思想,包括兩種重要型別的神經元(感知機和sigmoid神經元),和標準的神經網路的學習演算法,被稱為隨機梯度下降法。整篇文章我致力於解釋為什麼這樣做,並且建立你的神經網路觀念。在本文的結尾,我們將瞭解深度學習是什麼,和為什麼它很重要。

  • 感知機

    感知機是一類人造神經元,在許多神經網路中,主要的神經元模型是sigmoid神經元。我們將很快的瞭解什麼是sigmoid神經元,但是想要知道為什麼sigmoid要這麼定義,就需要我們花點時間去了解感知機。

    感知機如何工作?一個感知機通過一些二進位制的輸入x1,x2,...,然後產生一個二進位制的輸出:
    這裡寫圖片描述

    在上圖中,感知機有三個輸入x1,x2,x3,通常它可以有更多或者更少的輸入。Rosenblatt提出了一個簡單的規則來計算輸出,它用權重w1,w2...來表示各個輸入對輸出的重要性。神經元的輸出,要麼是0要麼是1,由權重和jwjxj的值是否小於或者大於某一閾值。和權重一樣,閾值也是一個實數,它是神經元的一個引數。用代數式表達就是:

    這裡寫圖片描述

    以上就是感知機的工作原理。

    這是基本的數學模型,你可以認為感知機是一種通過權衡各個因素做出決定的裝置。舉個例子,假設週末就要來了,你們城市有一場乳酪節,你很喜歡乳酪,你正在猶豫要不要去參加,你可能通過權衡下面三個因素來做出你的決定:

    1. 當天天氣怎麼樣
    2. 你的男朋友或者女朋友要不要一起去
    3. 交通是否方便

    我們可以通過對應的二進位制變數x1,x2,x3來表示這三個因素。比如,x1表示天氣很好,x1=0表示天氣很差,同樣x2=1表示女朋友想去,以此類推。

    現在,假設你真的非常喜歡乳酪,以至於你無論你女朋友去不去,或者交通十分不便,你都很想去。但是可能因為你又非常非常討厭惡劣天氣導致你絕對不會參加。這時你可以使用感知機來模擬這種決策。因為天氣對你的影響最大,你可以選擇w1=6來表示天氣的權重,w2=2,w3=2來表示其他的因素,w1的權重最大表示天氣因素對你影響最大。最後假設你選擇了5作為閾值,這樣以來,你的感知機決策模型就建立好了。也就是說這個模型在天氣好的時候會輸出1,天氣不好的時候輸出0,其實和其他兩個因素沒關係。

    顯然,人類的決策模型不僅僅只有感知機。但是這個例子說明了感知機如何做出決定的。一個複雜的感知機網路可以做出更加精準的決定似乎是合理的:

    這裡寫圖片描述

    在這個網路中,第一列感知機——我們稱作第一層感知機,通過權衡輸入用來做三個很簡單的決定。那麼第二層的感知機是幹什麼的呢?這些感知機每一個都通過權衡第一層輸出的結果作為輸入而做決定。這樣以來第二層的感知機可以比第一層做出更加複雜和抽象的決策。更復雜的決策可以在第三層做出。通過這種方式,一個第一層的感知機網路可以進行十分複雜的決策。

    順便說一下,我們定義的一個感知機都只有一個輸出,上圖的多層感知機看起來一個感知機有很多個輸出,其實它只是把同一個輸出傳遞給不同的下一層感知機用來利用,如果不嫌難看,你也可以先畫一條輸出線,然後再分支。

    讓我們簡化一下感知機的描述方式,首先我們可以使用向量點積的方式代替jwjxj,即WX=jwjxj,其中WX分別是權重值和輸入值所組成的向量。其次,我們可以把閾值threshold移到不等式的另一邊,即b=threshold,其中b被稱為感知機的偏差。通過偏差代替閾值,綜上,感知機規則改寫為:
    這裡寫圖片描述

    你可以把偏差b看作衡量感知機輸出1的難易程度。從生物學的角度來講,偏差衡量一個感知機是否容易啟用。如果偏差b是個很大的實數,那麼該感知機就很容易輸出1。顯然,目前引入偏差讓我們對感知機的描述只是產生了很小的改變,後面我們將會看到它導致的進一步簡化。後文我們將不再使用閾值而是使用偏差。

    前面已經說過感知機是一個權衡輸入做決定的方法。感知機的另一種使用方法是計算我們通常認為是底層計算的基本邏輯函式,如AND、OR和NAND。比如,假設我們有一個感知機有兩個輸入,每一個的權重都是-2,偏差是3,下圖是該感知機模型:
    這裡寫圖片描述

    然後我們看到輸入值為[0,0]的話,感知機輸出值就為1,因為(2)0+(2)0+3=3是正數。這裡使用*表示乘法是顯而易見的。同樣無論輸入[0,1]還是[1,0],最後產生的結果都是1,但是當輸入[1,1]的時候產生的結果是0,因為計算出來的表示式為-1。其實我們的感知機在這裡實現了一個NAND功能。

    該例子說明了感知機可以用來計算簡單的邏輯函式。事實上,我們可以使用感知機網路計算任何邏輯函式。因為任何邏輯計算都可以通過NAND組合而產生。比如,我們可以使用NAND門來構建一個含有兩位的電路x1x2。這需要按位求和,x1x2,也需要在x1x2都為1時該位設為1,也就是做按位乘積x1x2
    這裡寫圖片描述

    為了得到等價的感知機網路,我們將所有的NAND門替換為擁有兩個輸入,輸入權重均為-2,偏差全為3的感知機。下圖是所得的網路。
    這裡寫圖片描述

    需要注意的時,最左側的感知機的輸出被最下方的感知機作為輸入使用了兩次。前面的感知機模型的定義中並沒有說是否允許一個輸出被同一個感知機使用多次。事實上這並不重要。如果我們不想允許這種情況存在,我們可以簡單的將兩天直線合併,用一根權重為-4的線代替這兩根權重為-2的線。然後上述感知機網路變為下面這個等價的網路,其中沒有標記的輸入權重仍是-2:
    這裡寫圖片描述

    到目前為止,我都是把像x1,x2這樣的輸入當作變數畫在了網路的左側,事實上,通常我們會畫一個額外的感知機——輸入層,對輸入進行編碼:
    這裡寫圖片描述

    可以看到輸入感知器有輸出但沒有輸入.
    這裡寫圖片描述
    但它實際上並不是一個沒有輸入的感知機。如果我們確實有一個沒有輸入的感知機,那麼jwjxj的值一直都是0,因此感知機的輸出就只和偏差b有關,這時感知機僅僅輸出一個固定的值,而不是期望得到的值。我們最好把輸入感知機看作是一個特殊的單元,用來簡單的定義為了輸出所需要的那些值x1,x2...

    上述的例子論證了一個感知機網路可以用來模擬許多包含了NAND門的電路。因為NAND門是通用的計算方法,因此感知機也通用於計算。

    感知機的計算普遍性既讓人欣慰,又讓人失望。安心是因為感知機網路可以和其他任意的計算裝置相媲美,失望是因為它看起來僅僅像是一種新型的邏輯閘,而不是什麼NB的技術。

    然而事實上並不是這這樣的,事實證明我們可以設計出能夠自動調節人工神經元網路引數和偏差的學習演算法。這種調參是對外部刺激的相應,不需要程式設計師的干預。這些學習演算法使我們能夠以一種與傳統的邏輯閘截然不同的方式使用人工神經元。它並不是明確的列出閘電路,我們的神經網路可以簡單的學習解決問題,有些問題是很難通過設計傳統電路就能解決的。

  • Sigmoid神經元

    學習演算法看起來非常好。但是我們如何才能為神經網路設計一個這樣的演算法呢?假設我們有一個感知器網路,我們想讓它學習著去解決一些問題。舉個例子,網路的輸入可能是手寫數字的原始掃描畫素資料。我們想讓這個網路學習出一個可以識別出對應數字的引數和偏差。為了瞭解如何學習,假設我們對網路中的權重和偏差做了一些小的改變。我們想要這個小的權重的改變造成一點網路中對應的輸出的改變,這個特性讓學習變得可能。下圖是我們想要的(這個網路太簡單不能做手寫數字的識別):
    這裡寫圖片描述

    如果對權重和偏差一個曉得調節可以造成輸出的很小的變化,然後我們就可以根據這個事實修改權重和偏差,使得我們的網路以我們想要的方式做得更多。舉個例子,假設這個網路總是把9分類為8,我們可以想辦法對網路的權重和偏差做一些小的改變,使得網路可以將圖片分為9。然後我們重複這樣做,一次又一次改變權重和偏差,使得輸出越來越好,網路就得到了學習。

    問題是當你的網路包含感知機時不會發生這種情況。事實上,任何一個感知機上發生一點小的改變有時可能導致感知機的結果翻轉(要麼翻轉要麼不變),由0變為1或者相反。這樣的翻轉可能造成造成一系列連鎖反應,造成其他所有感知機的複雜變化。也就是當你可能調節到數字9可以被很好的識別時,網路在其他影象上的行為已經變得完全難以控制。這使得我們通過一點點除錯引數和偏差讓網路更接近期望的行為變得艱難。或許有一些巧妙得方法來解決這個問題,但是如何使用一個感知機網路學習並不是那麼容易的事情。

    我們可以通過一種新的人造神經元來解決上述問題——sigmoid神經元。Sigmoid神經元和感知機很相似,但是它卻可以實現當對權重和偏差做微小的改變時,輸出量的改變也是微小的。這將使得sigmoid神經元網路可以學習成為了可能。

    下面開始描述sigmoid神經元。我們將像描述感知機那樣描述sigmoid神經元:
    這裡寫圖片描述

    和感知機一樣,sigmoid函式也擁有輸入向量,但是它的輸入向量不再僅限於0和1,而是0到1之間的連續值。比如,0.1314可以作為sigmoid神經元的輸入值。同樣,sigmoid神經元對每個輸入都有分配權重和一個總的偏差。但是輸出也不再是0和1,而是σ(wx)+b,其中

    相關推薦

    神經網路深度學習——初識神經網路

    神經網路和深度學習 神經網路:一種可以通過觀測資料使計算機學習的仿生語言範例 深度學習:一組強大的神經網路學習技術 神經網路和深度學習目前提供了針對影象識別,語音識別和自然語言處理領域諸多問題的最佳解決方案。傳統的程式設計方法中,我們告訴計算機如何去做,將

    神經網路深度學習—— 反向傳播工作原理

    本文轉自:https://blog.csdn.net/qq_31192383/article/details/77198870 反向傳播演算法工作原理 在上一篇文章,我們看到了神經網路如何通過梯度下降演算法學習,從而改變權重和偏差。但是,前面我們並沒有討論如何計算代價函

    深度學習筆記——神經網路深度學習淺層神經網路

    1.神經網路概覽 神經網路的結構與邏輯迴歸類似,只是神經網路的層數比邏輯迴歸多一層,多出來的中間那層稱為隱藏層或中間層。從計算上來說,神經網路的正向傳播和反向傳播過程只是比邏輯迴歸多了一次重複的計算。正向傳播過程分成兩層,第一層是輸入層到隱藏層,用上標[1]來表示;第二層是隱藏層到輸出層,用上標

    系統學習深度學習 --深度學習神經網路關係

           假設我們有一個系統S,它有n層(S1,…Sn),它的輸入是I,輸出是O,形象地表示為: I =>S1=>S2=>…..=>Sn => O,如果輸出O等於輸入I,即輸入I經過這個系統變化之後沒有任何的資訊損失(呵呵,大牛說,這是不可能的。資訊理論中有個“資訊逐層丟失”

    分享《神經網路深度學習Michael Nielsen 著》中文版PDF+英文版PDF+原始碼

    下載:https://pan.baidu.com/s/18_Y7fJMaKwFRKKuGjYIreg 更多資料分享:http://blog.51cto.com/3215120 《神經網路與深度學習(美)Michael Nielsen 著》中文版PDF+英文版PDF+原始碼中文版PDF,206頁,帶書籤目錄

    深度學習——deepNN模型實現攝像頭實時識別人臉表情C++python3.6混合程式設計

    一、背景介紹 最近需要做人臉識別方向的東西,就被分配了新的任務,利用攝像頭實時檢測人臉表情,並製作成一個小軟體,這裡當然要用C++實現,並用C++做成一個介面。 由於博主之前用python做過類似的小程式,因此這裡的模型實現主要採用了python,為了用C++實現介面,這裡採用C++呼叫py

    機器學習深度學習系列連載: 第二部分 深度學習十三迴圈神經網路 1Recurre Neural Network 基本概念

    迴圈神經網路 1(Recurre Neural Network 基本概念 ) 迴圈神經網路的特點: • RNNs 在每個時間點連線引數值,引數只有一份 • 神經網路出了輸入以外,還會建立在以前的“記憶”的基礎上 • 記憶體的要求與輸入的規模有關 當然,他的深度不只有一層:

    深度學習 計算機如何處理識別圖片揭祕

    前言        先來一張美景圖,欣賞一下大自然,順便大家猜猜這是哪裡?        有時候真感嘆大自然的雄偉壯闊,自然形成了無數的山和風景不需要任何點綴,有

    神經網路深度學習Michael Nielsen 著》中文版PDF+英文版PDF+原始碼下載

    《神經網路和深度學習》是一本免費的線上書。本書會教會你: • 神經網路,一種美妙的受生物學啟發的程式設計正規化,可以讓計算機從觀測資料中進行學習 • 深度學習,一個強有力的用於神經網路絡學習的眾多技術的集合 神經網路和深度學習目前給出了在影象識別、語音識別和自然語言處理領

    深入淺出神經網路深度學習-neuroph介紹

    1.1   Neuroph如果你是神經網路的初學者,你只是想嘗試一下他們如何工作而不需要複雜的理論和實施,或者你需要他們快速的為你的研究專案,neuroph是很好的選擇。它是小型的,文件化的,易於使用,並且非常靈活的神經網路框架.1.1.1 下載2.9版本下載地址:解壓jav

    [神經網絡與深度學習]使用神經網絡識別手寫數字

    線性 部分 logs 結構 這一 可用 調整 重復 http 1.1 感知器 感知器的輸出為: wj為權重,表示相應輸入對輸出的重要性; threshold為閾值,決定神經元的輸出為0或1。 也可用下式表示: 其中b=-threshold,稱為感知器的偏置

    深度學習深度學習資料

    一、學習清單 1、綜合類 2、計算機視覺 3、NLP領域 (3)部落格推薦:http://www.wildml.com/  包含了RNN、LSTM、Attention機制等教程,最主要的是講解的淺顯易懂,讓我等菜鳥受益匪淺

    亞馬遜採摘挑戰中6D姿態估計的多檢視自監督深度學習

    倉庫自動化近年來引起了人們的極大興趣,也許最引人注目的是亞馬遜採摘挑戰賽(APC)。實現完全自主的取放系統需要強大的視覺系統,可以可靠地識別物體及其6D姿勢。然而,由於雜亂的環境,自我遮擋,感測器噪聲和各種各樣的物體,解決方案避開了倉庫設定。在本文中,我們提出了一個視覺系統,

    深度學習-CNN原理研究

     https://blog.csdn.net/xiake001/article/details/78403482 基本概念 協方差矩陣 線性與非線性 “線性”=”齊次性”+”可加性”,  “齊次性”是指類似於: f(ax)=af(x),  “可加性”是指類似

    機器學習之numpymatplotlib學習

    整個教程有參考網上其他一些大牛的看法,總體的教學應該是從numpy和matplotlib開始教學,然後最後進入SK-learn學習,整個課程的程式碼之後會推送到github上面去。對於教程,採用程式碼註

    乾貨 | 個性化推薦系統五大研究熱點之深度學習

    【編者按】在這個科技高速發展、資訊爆炸的時代,毫不誇張地說,推薦系統已經完全融入了我們的生活。我們去哪一家餐館、買哪一件衣服、瀏覽哪一類資訊、觀看哪一種視訊,很大程度上都取決於背後的推薦系統。 在本文中,微軟亞洲研究院社會計算組的研究員們從深度學習、知識圖譜、強化學習、使用者畫像、可解釋性推薦等五個方面,展望

    servletjsp學習

    1,網路應用程式的架構(瞭解) (1)主機/終端 特點: 主機負責所有的計算(處理業務),終端只負責輸入輸出(不做任何計算)。 優點: 可靠,安全,i/o能力強。 缺點: 昂貴,擴充套件困難。 (2)client/server

    關於計算機網路原理的學習概論

                前言:這是我第一次寫部落格,有很多不足或者錯的地方,希望大家指出來。我寫部落格的出發點更多的是記錄我自己的成長曆程和一些知識點的回顧。對於計算機網路原理,對於很多人來說這是很基礎的東西。我也只是簡單的瞭解一下。畢竟學的很深並不是一件容易的事情,我只是

    深度學習--反向傳播演算法

    本文從李飛飛的課件cs231n的得到啟發,將關於反向傳播演算法的內容做下總結。 下圖是對深度學習的直觀解釋: 該圖右側表示影象空間,通過幾個分介面將影象空間分成幾個不同的區域,每個區域的影象具有相似的特徵。 左側為卷積神經網路的簡單版,將輸入影

    計算機網路基礎知識點學習概述

    1.通常所說的網路是指“三網”,即電信網路、有線電視網路、計算機網路。發展最快並起到核心作用的是計算機網路。 2.計算機網路向用戶提供的最重要的功能:連通性-計算機網路使上網使用者之間都可以交換資訊;