引言node
深度學習背後的主要原理是從大腦中汲取靈感。,這種觀點產生了「神經網絡」術語,大腦包含數十億個神經元,它們之間有數萬個鏈接。 在許多狀況下,深度學習算法相似於大腦,由於大腦和深度學習模型都涉及大量的計算單元(神經元),這些單元在未激活時並非活躍的,它們彼此交互時會變得智能化。python
神經元算法
神經網絡的基本構建模塊是人工神經元--模仿人類大腦神經元。 這些是強大的計算單元,具備加權輸入信號並使用激活功能產生輸出信號。 這些神經元分佈在神經網絡的幾個層中。網絡
什麼網絡是如何工做的?函數
深度學習由人工神經網絡組成,這些網絡以人腦中存在的相似網絡爲模型。 當數據經過這我的工網格時,每一個層處理數據的一個方面,過濾異常值,找到合適的實體,併產生最終輸出。學習
神經元的權重優化
權重是指兩個神經元之間鏈接的強度或幅度,若是您熟悉線性迴歸,則能夠比較輸入的權重,例如咱們在迴歸方程中使用的係數。權重一般被初始化爲較小的隨機值,例如 在0到1之間。spa
前饋深度網絡3d
前饋監督神經網絡是第一個也是最成功的學習算法。 它們也被稱爲深度網絡,多層感知器(MLP)或簡單的神經網絡,而且顯示出了具備單個隱藏層的鏈接體系結構。 code
網絡處理輸入變量,並向後傳遞,激活神經元,最終產生輸出值。這被稱爲網絡上的前向傳遞。
激活函數
激活函數是加權輸入與神經元輸出的加和的映射。 它被稱爲激活或者傳遞函數,由於它控制激活神經元的初始值和輸出信號的強度。
表達式:
經常使用的有:
反向傳播
將網絡的預測值與預期輸出進行比較,並使用函數計算偏差, 而後,該錯誤在整個網絡內傳播回來,一次一層,並根據它們對錯誤的貢獻值更新權重。 這個聰明的數學運算稱爲反向傳播算法。 對訓練數據中的全部示例重複該過程。 爲整個訓練數據集更新網絡的一輪稱爲紀元。 能夠訓練網絡數十,數百或數千個時期。
成本函數和梯度降低
成本函數是神經網絡對其給定的訓練輸入和預期輸出所作的「有多好」的度量。 它還可能取決於權重和誤差等屬性。
成本函數是單值的,而不是向量,由於它評估神經網絡做爲一個總體執行得有多好。 使用梯度降低優化算法,在每一個時期以後遞增地更新權重。
成本函數:
經過在成本梯度的相反方向上採起步驟來計算權重更新的大小和方向。
其中Δw是包含每一個權重係數w的權重更新的向量,其計算以下:
咱們計算梯度降低直到導數達到最小偏差,而且每一個步驟由斜率(梯度)的陡度肯定。
多層感知器(前向傳播)
這類網絡由多層神經元組成,一般之前饋方式互連(向前移動)。一層中的每一個神經元具備與後續層的神經元的直接鏈接。在許多應用中,這些網絡的單元應用sigmoid或ReLU做爲激活功能。
如今考慮一個問題,找出交易數量,給定賬戶和家庭成員做爲輸入。
首先要解決這個問題,咱們須要從建立前向傳播神經網絡開始。咱們的輸入圖層將是家庭成員和賬戶的數量,隱藏圖層的數量是一個,輸出圖層將是交易數量。
給定權重,如圖所示,從輸入層到隱藏層,其中家庭成員2的數量和帳戶數量3做爲輸入。
如今,將經過如下步驟使用前向傳播來計算隱藏層(i,j)和輸出層(k)的值。
處理過程
$i$的值將根據輸入值和與所鏈接的神經元相對應的權重來計算。
$i = (2 * 1) + (3 * 1)$
→ i = 5
相似的,
$j = (2 * -1) + (3 * 1)$
→ j = 1
$K = (5 * 2) + (1 * -1)$
→ k = 9
python 實現
爲了使神經網絡達到最大預測能力,咱們須要爲隱藏層應用激活函數。它用於捕獲非線性。 咱們將它們應用於輸入層,隱藏層以及值上的某些方程式。
這裏咱們使用ReLU激活函數。
import numpy as np def relu(input): # Rectified Linear Activation output = max(input, 0) return(output) print("Enter the two values for input layers") a = int(input()) b = int(input()) input_data = np.array([a, b]) weights = { 'node_0': np.array([1, 1]), 'node_1': np.array([-1, 1]), 'output_node': np.array([2, -1]) } node_0_input = (input_data * weights['node_0']).sum() node_0_output = relu(node_0_input) node_1_input = (input_data * weights['node_1']).sum() node_1_output = relu(node_1_input) hidden_layer_outputs = np.array([node_0_output, node_1_output]) model_output = (hidden_layer_outputs * weights['output_node']).sum() print(model_output)
輸出:
Enter the two values for input layers 2 3 9