Deep Learning - 1 神經網絡

Artificial Neuron

人工神經元有:es6

  • Perceptrons(感知機)
  • Sigmoid

Perceptron

感知機input是多個二進制output是一個二進制算法

graph LR x1((x1))-->B((perceptron)) x2((x2))-->B x3((x3))-->B B-->output((output))

感知機規則

\[output= \begin{cases} 0& \text{if } \sum_{j}w_{j}x_{j}\le \text{threshold}\\ 1& \text{if } \sum_{j}w_{j}x_{j}\gt \text{threshold} \end{cases} \]
  • x是evidence
  • w是weight權值
  • threshold是閾值

感知機經過賦予不一樣evidence權值,升高或下降threshold來達到做出決策的目的。網絡

  • 其中,$\sum_w_x_能夠用向量點積表示爲\cdot$
  • threshold從不等式右側移至左側,並用bias(偏置)表示,\({b}\equiv{-threshold}\)

更新後的感知機規則:app

\[output= \begin{cases} 0& {w}\cdot{x}+b\le0\\ 1& {w}\cdot{x}+b\gt0 \end{cases} \]

bias能夠理解爲使神經元被激活的容易度的度量。ide

咱們經過設計 Learning Algorithm 去自動地調整 Network of Artificial Neuron 的 Weights 和 Biases。這種調整,能夠對外部刺激做出響應。函數

Sigmoid Neurons

網絡經過學習 Weights 和 Biases 以便最終正確地分類。咱們但願在網絡的 Weights 和 Biases 上做出一些小的改變時,只會引發輸出上的小幅變化。只有這樣,學習才變得可能。經過不斷地修改 Weights 和Biases 來產生愈來愈好的結果。學習

若是網絡中包含感知機的話,輕微的改變甚至會致使感知機的輸出徹底翻轉,很難實現逐步改變 Weights 和 Biases 來使網絡行爲更加接近預期。ui

Sigmoid 神經元在輕微改變 Weights 和 Biases 時只會引發小幅的輸出變化。這是因爲 Sigmoid 神經元構成的網絡可以學習的關鍵因素。spa

graph LR x1((x1))-->S((Sigmoid)) x2((x2))-->S x3((x3))-->S S-->O((Output))

輸入和輸出都是介於0到1之間的浮點數。設計

\[\sigma(z)=\frac{1}{1+e^{-z}} \]

將 Evidence,Weight,Bias 代入$\sigma$,輸入是$\cdot+b$,輸出是

\[\sigma({w}\cdot{x}+b)=\frac{1}{1+exp^{(-{w}\cdot{x}-b)}} \]

sigmoid function

step function

Sigmoid 神經元使用 \(\sigma\) 函數,若是將 \(\sigma\) 函數換成 Setp(階躍) 函數,就變成了感知機。

\(\sigma\) 函數的平滑屬性,讓咱們在 \(\triangle w_{j}\)\(\triangle b\) 輕微改變時,神經元的輸出也只是輕微地變化 \(\triangle output\)

\(\sigma\) 有時也被稱做 Logistic Function,對應的神經元被稱爲 Logistic Neurons。

Activation Function 主要有:

  • Sigmoid
  • Maxout
  • ReLu

Loss Function 主要有:

  • Mean Squared Error(均方偏差)
  • Cross Entropy(交叉熵)

神經網絡的結構

神經網絡的結構

  • 一個神經元只有一個輸出,多個輸出箭頭僅表示它的輸出被用做其它幾個神經元的輸入。
  • 這個網絡有4層,2個隱藏層。
  • Hidden Layers 的第1層經過賦予輸入的 evidence 權重,作出了3個很是簡單的決策。第2層賦權重給第1層的決策結果,來做出決策。經過這種形式,一個多層網絡能夠做出更加複雜精細的決策。
  • 出於歷史緣由,這樣的多層網絡又叫作 Multilayer Perception(MLP)多層感知機。可是構成網絡的並不是感知機,而是 Sigmoid 神經元。

對於判斷一個手寫數字是否是9這個問題,咱們使用$64\times64$的灰度圖像。

輸入層須要4096個神經元,每一個神經元接收標準化的0-1之間的灰度值。

輸出層須要一個神經元,用於分類。

Normalization

標準化是將數據按比例縮放,使之落入一個小的特定區間。

好處有
  • 提高模型的收斂速度
  • 可能提升模型的精度
方法有

Min-Max Normalization 線性歸一化

\[x'=\frac{x-min(x)}{max(x)-min(x)} \]

Z-Score Standardization

\[x'=\frac{x-\mu}{\sigma} \]

非線性歸一化

\[x'=\frac{ln(x)}{ln(max(x))} \]

FeedForward Neural Networks

前饋神經網絡,是把上一層的輸出,做爲下一層的輸入。信息老是向前傳播,從不反向回饋。

用簡單的網絡結構去識別手寫數字

數據是$28\times28$的灰度圖像

  1. 輸入層要784個神經元,接收0-1之間的標準化灰度值。
  2. 輸出層要10個神經元,哪一個神經元的激活值最高,咱們認爲數字是哪一個。
  3. 隱藏層設置n個神經元,實驗不一樣的n的取值。

神經網絡從根本原理上在作什麼?

爲何輸出層用10個神經元?神經元輸出二進制的話,$2^4=16$,用4個神經元就足夠了。

隱藏層在作什麼?

隱藏層的第1個神經元用於檢測圖像中是否存在特定模式。若是有,它會對特定模式在圖像中對應部分的像素賦予較大的權重,對其它部分賦予較小的權重。

隱藏層的第2個神經元會檢測另外一種模式。若是有,也會給對應部分的像素較大權重,其它像素較小權重。

輸出層在作什麼?

輸出層有10個神經元,它的第1個神經元經過權衡從隱藏層獲得的信息,告訴咱們這個數字是否是0。若是輸出層的第1個神經元檢測到隱藏層的某幾個神經元被激活,那麼能夠推斷這個數字是0。

Gradient Descent

Cost Function

代價函數,有的地方也叫

  • Loss Function,損失函數
  • Objective Function,目標函數

咱們訓練神經網絡的目的,是尋找合適的 Weights 和 Biases 來最小化代價函數。

MSE代價函數:

\[C(w,b)=\frac{1}{2n}\sum_{x}||y(x)-a||^2 \]
  • y(x)是預期的輸出結果
  • a是激活函數的輸出結果

梯度降低法

梯度降低法,是一種能夠解決最小化問題的技術。

在$v_{1}\(方向上移動很小的量\)\triangle v_{1}$,在$v_{2}\(方向移動很小的量\)\triangle v_{2}$,C將會發生以下變化:

\[\triangle C \approx \frac{\partial C}{\partial v_{1}}\triangle v_{1}+\frac{\partial C}{\partial v_{2}}\triangle v_{2} \]
  • $\triangle C$是C的變化
  • $\triangle v_{1}$是$v_{1}$的變化
  • $\triangle v_{2}$是$v_{2}$的變化

咱們用$\triangle v$來描述v的變化

\[\triangle v \equiv (\triangle v_{1},\triangle v_{2})^T \]

用$\nabla C$表示梯度向量

\[\nabla C=\left(\frac{\partial C}{\partial v_{1}},\frac{\partial C}{\partial v_{2}}\right)^T \]

這樣,C發生的變化能夠表示爲

\[\triangle C\approx \nabla C \cdot \triangle v \]

若是想讓C一直下降,$\triangle C$就得是負的。

咱們能夠這樣選取$\triangle v$,以確保$\triangle C$爲負數:

\[\triangle v= - \eta \nabla C \]

$\eta$是很小的正數,也就是 Learning Rate。這樣,

\[\triangle C \approx - \eta || \nabla C ||^2 \]

從而保證$\triangle C \le 0$。

若是從爲止v移動到v',變化$\triangle v$爲

\[v \rightarrow v' = v - \eta \nabla C \]

而後反覆迭代地更新,C會一直下降到咱們想要尋找的全局最小值。

梯度降低法工做原理

梯度降低算法工做的方式是重複計算梯度$\nabla C$,而後沿着梯度的反方向運動,即下山坡。

同時,梯度降低法也被視爲一種經過在C降低最快的方向上作微小變化,來使得C當即降低的方法。

Stochastic Gradient Descent

Cost Function能夠這樣寫:

\[C_{x} = \frac{||y(x)-a||^2}{2} \]
\[C = \frac{1}{n} \sum_x C_x \]
  • $C_x$是每一個獨立訓練樣本的代價函數
  • C是每一個樣本代價的平均值

這樣,咱們要爲每一個樣本x單獨計算梯度值$\nabla C_x$,而後求和再求平均值

\[\nabla C = \frac{1}{n} \sum_x \nabla C_x \]

梯度降低可能會花費大量時間,學習緩慢。

SGD隨機梯度降低,每次隨機選取少許輸入樣原本計算$\nabla C_x$和$\nabla C$,少許樣本能夠快速獲得梯度$\nabla C$,加快梯度降低過程,進而加速學習過程。

SGD工做原理

SGD將訓練數據隨機打散,而後劃分爲多個大小爲m的 mini-batch 。

經過計算隨機選取的mini-batch的梯度來估計總體的 Gradient ,更新 Weights 和 Biases 。

\[w_k \rightarrow w_k' = w_k - \eta \nabla C = w_k - \frac{\eta}{m} \sum_x \nabla C_x \\ b_l \rightarrow b_l' = b_l - \eta \nabla C = b_l - \frac{\eta}{m} \sum_x \nabla C_x \]

用這個 mini-batch 更新完 Weights 和 Biases 後,再選取另外一個 mini-batch去訓練,直到咱們用完全部訓練數據,就完成了一個 epoch 訓練。

Online Learning

也叫 Incremental Learning ,是 mini-batch=1 時的梯度降低極端版本。

相關文章
相關標籤/搜索