TensorFlow 深度學習讀寫筆記Python搭建開發(fā)環(huán)境-Anaconda+PyCharm的安裝和入門教程 Jupyter Notebook神器-免費體驗來自微軟的Azure Notebook Windows 10 本地搭建TensorFlow(CPU版本)深度學習環(huán)境 主流深度學習框架-MXNet、Caffe、TensorFlow、Torch、Theano TensorFlow 的計算模型、數(shù)據(jù)模型和運行模型 Windows下的Jupyter Notebook 安裝與自定義啟動(圖文詳解) 結合TensorFlow Playground理解神經網絡的主要功能 TensorFlow讀書筆記:使用placeholder填充方式讀取數(shù)據(jù) 記錄TensorFlow訓練過程中數(shù)據(jù)變化趨勢-weight、bias、loss等 記錄TensorFlow訓練過程中數(shù)據(jù)變化趨勢-直方圖(Histogram) 本文主要介紹深度神經網絡的基本概念,包括激活函數(shù)、梯度下降算法、反向傳播算法和損失函數(shù)的概念,以及部分計算公式,省略了具體的推導公式。 深度神經網絡的基本結構和思想神經網絡的基本單位是神經元,每個神經元分別接受輸入和輸出,但與感知器(perceptron)不同的是,除了進行加權計算,還需要利用激活函數(shù)輸出。 網絡的最左邊一層被稱為輸入層,其中的神經元被稱為輸入神經元。 最右邊及輸出層包含輸出神經元。 中間層被稱為隱含層,因為里面的神經元既不是輸入也不是輸出。下面的4層網絡具有2個隱含層。 神經網絡的基本思想就是建立在感知器和激活函數(shù)上的。對于多個輸入,在神經網絡經過多個神經元計算之后,得到多個或者單個輸出。檢查輸出結果是否與期望的一致,如果不一致,就對神經網絡中神經元的權重進行調整,我們已經知道,神經元權重的細微調整會引起輸出結果的細微變化,這樣多個神經元組合起來,逐漸調整,直到符合預期的輸出結果,我們就可以認為神經網絡訓練成功了!這里所說的訓練調整的方法,利用到了梯度下降法,對神經網絡進行反向傳播。 對神經網絡的訓練過程,就是不斷調整網絡中w和b的值,目標是整個網絡表現(xiàn)出我們想要的行為。 激活函數(shù)的理論解釋激活函數(shù)是用來加入非線性因素的,解決線性模型所不能解決的問題。 激活函數(shù)用來對前面計算得到的結果做一個非線性計算,這樣,人工神經網絡的表現(xiàn)力會更好。 常見的激活函數(shù)有:sigmoid, tanh, relu 以及它們的變種。 神經元節(jié)點 a的值,可以寫成向量的形式: 再將每個節(jié)點的值的計算公式都整合在一起,寫成矩陣運算的方式: 神經網絡中的一層,就是對數(shù)據(jù)的一次非線性映射。 Wx+B 實現(xiàn)了對輸入數(shù)據(jù)的范圍轉換、空間旋轉以及平移操作,而非線性的激活函數(shù)f()則完成了對輸入數(shù)據(jù)原始空間的扭曲。 當網絡層數(shù)變多時,在前面層網絡已經學習到初步特征的基礎上,后面層網絡可以形成更加高級的特征,對原始空間的扭曲也更大。很多復雜的任務需要高度的非線性的分界面,深度更深的網絡可以比淺層的神經網絡有更好的表達。 梯度下降算法原理梯度下降方法是常用的參數(shù)優(yōu)化方法,經常被用在神經網絡中的參數(shù)更新過程中。 神經網絡中,將樣本中的輸入X和輸出Y當做已知值(對于一個樣本[X,Y],其中X和Y分別是標準的輸入值和輸出值,X輸入到模型中計算得到Y,但是模型中的參數(shù)值我們并不知道,所以我們的做法是隨機初始化模型的參數(shù),不斷更新迭代這些參數(shù),使得模型的輸出與Y接近),將連接權(weight)和偏置值(bias)當做自變量,誤差L(loss 損失函數(shù)的值)作為因變量。 梯度下降的目的是找到全部連接權和偏置值在取何值的情況下誤差最小。 經常有人把梯度下降的過程比作從山頂走到谷底,一次走多遠比作“學習率(Learning Rate)”。那么,它的數(shù)學表現(xiàn)形式是什么呢? 這就是梯度下降算法的迭代公式,當梯度下降為零時,w、b收斂,訓練結束。 其中 α 是學習率(Learing Rate);另外兩個分別是損失函數(shù)對W和b的偏導數(shù)。 用來訓練神經網絡的反向傳播算法是梯度下降法,它需要計算損失函數(shù)對眾多權重(weight)和偏置值(bias)的偏導數(shù)。 反向傳播算法(1)殘差δ定義:損失函數(shù)對神經元節(jié)點v 偏導數(shù)。 利用殘差可以以統(tǒng)一的形式表示各層節(jié)點的連接權和偏置值的迭代公式。 計算損失函數(shù)對權值 w 和 b 的偏導數(shù),可以轉換為計算每一層每個節(jié)點的“殘差”。 最后一層的殘差計算公式(省去推導過程): 即輸出層的第 i 個節(jié)點的殘差為:(該點的激活值a-該點的真實值y)*該點激活函數(shù)f() 對該點值(v)的導數(shù)。 對于第K-1層的殘差,可以根第K層的殘差計算出來。 倒數(shù)第二層的第 i 個節(jié)點的殘差的值,等于最后一層所有節(jié)點的殘差值和連接此節(jié)點的權值 w 相乘之后的累加,再乘以此節(jié)點上的激活函數(shù)對它的導數(shù)值。 不斷地重復這個過程,就得到了K-3, K-4, K-5,…2層上所有節(jié)點的殘差值。 (2)基于殘差,求偏導數(shù),計算更新值 在計算所有節(jié)點上的殘差之后,就可以根據(jù)公式得到損失函數(shù)對所有W和b的偏導數(shù): 獲得偏導數(shù)計算結果之后,在利用下面的公式對參數(shù)W和b進行更新。 如果多個樣本作為一個分組進行訓練,則將W和b的偏導數(shù)做累加求平均后,再更新參數(shù)值: (3)反向傳播算法的思路
損失函數(shù)(Loss Function)損失函數(shù)有很多種,可以根據(jù)使用場景選擇不同的損失函數(shù)。最簡單的情況是可以使用兩個值的差的絕對值作為損失函數(shù)。 總之,損失函數(shù)用于衡量預測值與實際值的偏離程度,損失值越小表示預測值越接近真實值。如果預測是完全精確的,則損失值為0;如果損失值不為0,則表示預測和真實值不一致。損失值越大,表示差的越遠。 |
|
來自: taotao_2016 > 《計算機》