基於TensorFlow的深度神經網絡簡介

Tensorflow之深層神經網絡

1,深度學習與深層神經網絡

維基百科對深度學習的定義:一類通過多層非線性變換對高複雜性數據建模算法的合集。
深層神經網絡是實現多層非線性變換的最常用方法,因此實際中深度學習成爲深層神經網絡的代名詞。深度學習有兩個重要特性:多層和非線性。
1.1 線性模型的侷限性
y = (xw_1)w_2 = x(w_1w_2) = xw_1
從上面這個推理可以看出線性的兩層神經網絡與單層的網絡並沒有區別。以此類推,只通過
線性變換,任意層的全連接神經網絡和單層神經網絡模型的表達能力沒有任何區別,而且它們都是線性模型,而線性模型能夠解決的問題是有限的。

1.2 激活函數實現去線性化
常用激活函數:
在這裏插入圖片描述
TensorFlow提供了7種不同的非線性激活函數,tf.nn.relu、tf.sigmod和tf.tanh是最常用的三個激活函數。

1.3 多層網絡解決異或運算
1958年Frank Rosenblatt提出了感知機(perceptron)模型,從數學上完成了對神經網絡的精確建模。1969年,Marvin Minsky和Seymour Papert提出感知機無法模擬異或運算。
當神經網絡加入隱藏層之後,異或問題可以得到很好解決。深層神經網絡實際上有組合特徵提取的功能,這個特性對於解決不易提取特徵向量的問題(比如圖片識別、語音識別)有很大幫助。

2,損失函數定義

2.1 經典損失函數
交叉熵,softmax迴歸在這裏插入圖片描述

均方誤差:
Mse = tf.reduce_mean(tf.square(y_ - y))

2.2 自定義損失函數
在這裏插入圖片描述

3,神經網絡優化算法

深度學習中主要使用反向傳播算法(backpropagation)和梯度下降算法(gradient decent)來調整神經網絡中參數的取值。
神經網絡的優化過程可以分爲兩個階段,第一個階段先通過前向傳播算法計算得到預測值,並將預測值和真實值作對比得出兩者之間的差距。然後第二個階段通過反向傳播算法計算損失函數對每一個參數的梯度,再根據梯度和學習率使用梯度下降算法更新每一個參數。

4,神經網絡進一步優化

4.1 學習率的設置
學習率決定了參數每次更新的幅度;過大可能導致無法收斂,過小導致訓練次數過多。
TensorFlow提供了一種更加靈活的學習率設置方法—指數衰減法。tf.train.exponential_decay函數實現了指數衰減學習率。
Decayed_learning_rate = learning_rate * decay_rate ^(global_step/decay)
Decayed_learning_rate爲每一輪優化時使用的學習率,learning_rate爲事先設定的初始學習率,decay_rate爲衰減係數,decay_steps爲衰減速度。

4.2 過擬合問題
所謂過擬合,指的是當一個模型過於複雜之後,它可以很好地“記憶”每一個訓練數據中隨機噪音的部分而忘記了要去“學習”訓練數據的通用的趨勢。過擬合雖然可以得到非常小的損失函數,但是對於未知數據可能無法做出可靠的判斷。
在這裏插入圖片描述
Tensorflow可以優化任意形式的損失函數,以下爲一個簡單的帶L2正則化的損失函數的定義:
在這裏插入圖片描述
當網絡結構複雜之後,損失函數的定義變得複雜,可讀性差,容易出錯。爲了解決這個問題,可以使用TensorFlow中提供的集合(collection),它可以在一個計算圖中保存一組實體。

4.3 滑動平均模型
在這裏插入圖片描述

小結:

設計神經網絡的兩個總體原則–非線性結構和多層結構,這也是解決複雜問題的必要方法。神經網絡是一個優化問題,而損失函數就刻畫了神經網絡需要優化的目標,不同的損失函數對神經網絡參數優化結果影響很大。最常用的優化算法是梯度下降算法和反向傳播算法。還有隨機梯度下降和batch對訓練速度的優化。設置學習率和正則化可以解決神經網絡優化過程中遇到的部分問題。滑動平均模型可以讓最後得到的模型在未知數據上更加健壯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章