用Python 進行深度學習

摘要: 深度學習背後的主要緣由是人工智能應該從人腦中汲取靈感。本文就用一個小例子無死角的介紹一下深度學習!算法

人腦模擬編程

    深度學習背後的主要緣由是人工智能應該從人腦中汲取靈感。此觀點引出了「神經網絡」這一術語。人腦中包含數十億個神經元,它們之間有數萬個鏈接。不少狀況下,深度學習算法和人腦類似,由於人腦和深度學習模型都擁有大量的編譯單元(神經元),這些編譯單元(神經元)在獨立的狀況下都不太智能,可是當他們相互做用時就會變得智能。後端

    我認爲人們須要瞭解到深度學習正在使得不少幕後的事物變得更好。深度學習已經應用於谷歌搜索和圖像搜索,你能夠經過它搜索像「擁抱」這樣的詞語以得到相應的圖像。-傑弗裏·辛頓網絡

神經元架構

    神經網絡的基本構建模塊是人工神經元,它模仿了人類大腦的神經元。這些神經元是簡單、強大的計算單元,擁有加權輸入信號而且使用激活函數產生輸出信號。這些神經元分佈在神經網絡的幾個層中。函數

inputs 輸入 outputs 輸出 weights 權值 activation 激活性能

人工神經網絡的工做原理是什麼?學習

    深度學習由人工神經網絡構成,該網絡模擬了人腦中相似的網絡。當數據穿過這我的工網絡時,每一層都會處理這個數據的一方面,過濾掉異常值,辨認出熟悉的實體,併產生最終輸出。人工智能

輸入層:該層由神經元組成,這些神經元只接收輸入信息並將它傳遞到其餘層。輸入層的圖層數應等於數據集裏的屬性或要素的數量。輸出層:輸出層具備預測性,其主要取決於你所構建的模型類型。隱含層:隱含層處於輸入層和輸出層之間,以模型類型爲基礎。隱含層包含大量的神經元。處於隱含層的神經元會先轉化輸入信息,再將它們傳遞出去。隨着網絡受訓練,權重獲得更新,從而使其更具前瞻性。spa

神經元的權重

    權重是指兩個神經元之間的鏈接的強度或幅度。你若是熟悉線性迴歸的話,能夠將輸入的權重類比爲咱們在迴歸方程中用的係數。權重一般被初始化爲小的隨機數值,好比數值0-1。

前饋深度網絡

前饋監督神經網絡曾是第一個也是最成功的學習算法。該網絡也可被稱爲深度網絡、多層感知機(MLP)或簡單神經網絡,而且闡明瞭具備單一隱含層的原始架構。每一個神經元經過某個權重和另外一個神經元相關聯。

    該網絡處理向前處理輸入信息,激活神經元,最終產生輸出值。在此網絡中,這稱爲前向傳遞。

input layer 輸入層   hidden layer 輸出層  output layer 輸出層

激活函數

激活函數就是求和加權的輸入到神經元的輸出的映射。之因此稱之爲激活函數或傳遞函數是由於它控制着激活神經元的初始值和輸出信號的強度。

用數學表示爲:

    咱們有許多激活函數,其中使用最多的是整流線性單元函數、雙曲正切函數和solfPlus函數。

激活函數的速查表以下:

反向傳播

    在網絡中,咱們將預測值與預期輸出值相比較,並使用函數計算其偏差。而後,這個偏差會傳回這個網絡,每次傳回一個層,權重也會根絕其致使的偏差值進行更新。這個聰明的數學法是反向傳播算法。這個步驟會在訓練數據的全部樣本中反覆進行,整個訓練數據集的網絡更新一輪稱爲一個時期。一個網絡可受訓練數10、數百或數千個時期。

prediction error 預測偏差

代價函數和梯度降低

    代價函數度量了神經網絡對給定的訓練輸入和預期輸出「有多好」。該函數可能取決於權重、誤差等屬性。

    代價函數是單值的,並非一個向量,由於它從總體上評估神經網絡的性能。在運用梯度降低最優算法時,權重在每一個時期後都會獲得增量式地更新。

兼容代價函數

用數學表述爲差值平方和:

target 目標值 output 輸出值

    權重更新的大小和方向是由在代價梯度的反向上採起步驟計算出的。

其中η 是學習率

    其中Δw是包含每一個權重係數w的權重更新的向量,其計算方式以下:

target 目標值 output 輸出值

圖表中會考慮到單系數的代價函數

initial weight 初始權重 gradient 梯度 global cost minimum 代價極小值

    在導數達到最小偏差值以前,咱們會一直計算梯度降低,而且每一個步驟都會取決於斜率(梯度)的陡度。

多層感知器(前向傳播)

    這類網絡由多層神經元組成,一般這些神經元之前饋方式(向前傳播)相互鏈接。一層中的每一個神經元能夠直接鏈接後續層的神經元。在許多應用中,這些網絡的單元會採用S型函數或整流線性單元(整流線性激活)函數做爲激活函數

   如今想一想看要找出處理次數這個問題,給定的帳戶和家庭成員做爲輸入

    要解決這個問題,首先,咱們須要先建立一個前向傳播神經網絡。咱們的輸入層將是家庭成員和帳戶的數量,隱含層數爲1, 輸出層將是處理次數。

    將圖中輸入層到輸出層的給定權重做爲輸入:家庭成員數爲二、帳戶數爲3。

如今將經過如下步驟使用前向傳播來計算隱含層(i,j)和輸出層(k)的值。

步驟:

1, 乘法-添加方法。

2, 點積(輸入*權重)。

3,一次一個數據點的前向傳播。

4, 輸出是該數據點的預測。

i的值將從相鏈接的神經元所對應的輸入值和權重中計算出來。

i = (2 * 1) + (3 * 1)    → i = 5

一樣地,j = (2 * -1) + (3 * 1)   → j = 1

K = (5 * 2) + (1 * -1)   → k = 9

Python中的多層感知器問題的解決

激活函數的使用

    爲了使神經網絡達到其最大預測能力,咱們須要在隱含層應用一個激活函數,以捕捉非線性。咱們經過將值代入方程式的方式來在輸入層和輸出層應用激活函數。

這裏咱們使用整流線性激活(ReLU):

用Keras開發第一個神經網絡

關於Keras:

    Keras是一個高級神經網絡的應用程序編程接口,由Python編寫,可以搭建在TensorFlow,CNTK,或Theano上。

    使用PIP在設備上安裝Keras,而且運行下列指令。

在keras執行深度學習程序的步驟

1,加載數據;

2,建立模型;

3,編譯模型;

4,擬合模型;

5,評估模型;

開發Keras模型

   全鏈接層用Dense表示。咱們能夠指定層中神經元的數量做爲第一參數,指定初始化方法爲第二參數,即初始化參數,而且用激活參數肯定激活函數。既然模型已經建立,咱們就能夠編譯它。咱們在底層庫(也稱爲後端)用高效數字庫編譯模型,底層庫能夠用Theano或TensorFlow。目前爲止,咱們已經完成了建立模型和編譯模型,爲進行有效計算作好了準備。如今能夠在PIMA數據上運行模型了。咱們能夠在模型上調用擬合函數f(),以在數據上訓練或擬合模型。

咱們先從KERAS中的程序開始,

神經網絡一直訓練到150個時期,並返回精確值。

做者:【方向】

原文連接

相關文章
相關標籤/搜索