3 實際程式設計操作中的一些tips
以下均是有監督的學習
我們學習的資料一般有兩種形式,一種是結構化資料,每乙個資料項都有明確的含義;另一種是非結構化資料,計算機理解此類資料比較難,而人類卻很容易理解非結構化資料。
在神經網路發展的初期,實質上是資料量和計算能力的進步,近期演算法方面的進步開始大幅提高模型的學習能力和效能。例如學習演算法上的乙個進步就是從sigmoid函式變成使用relu(修正線性單元,rectified linear unit),這一改變使梯度下降更快,因為relu的梯度不會逐漸趨向於0。
神經網路架構的設計有時候比較靠直覺,創新的流程一般如下圖所示,所以迭代速度很重要:
我們將訓練集中m張的特徵提取出來,組成乙個nx×m矩陣,其中nx=中畫素點總數,而我們在神經網路中一般將每個的特徵表示成乙個列向量的格式:
我們將訓練集的標籤也用向量y表示:
而w則是nx維向量,b是乙個常數(m個訓練樣本共同訓練乙個w和b),但是在向量化的表示中,為了便於矩陣運算,我們會將b擴充套件成乙個1×m維向量,每個元素都相同,當然也可不手動擴充套件,利用python中的廣播功能自動擴充套件也可以。
為了將優化問題轉換為凸優化問題,便於應用梯度下降演算法求解模型,我們將損失函式(loss function)定義如下:
而不用誤差平方的方式,因為誤差平方的方法會出現多個區域性極小值。
上圖的損失函式(loss function)衡量的是在乙個訓練樣本上的效能,而代價函式(cost function)衡量的是在整個訓練集中的效能:
一張圖直觀的理解梯度下降:
那我們該如何在logistics回歸中使用梯度下降演算法呢,我們首先把logistics回歸的計算過程寫成計算圖的形式:注意,此處的l(a, y)是衡量在乙個訓練樣本上的效能損失函式(loss function)
通過求導的鏈式法則,我們可以求出:
在大資料集的深度學習演算法中,使用向量化技術來代替for進行計算對提高演算法速度至關重要。上圖中演算法的向量化實現如下圖所示:
以上是梯度下降更新一次引數的操作,如果要多次迭代更新引數,我們還是要用乙個迴圈,知道收斂到全域性最小值。
在使用numpy時的乙個小tip:不要使用1維陣列(向量),而要使用2維的矩陣,為了防止廣播功能導致**中難以檢測的奇怪錯誤,我們可以使用如下語句:
課後作業及答案請看這位博主的部落格:
神經網路概述
分享鏈結 史丹福大學公開課 深度學習教程 知乎專欄 的機器學習 神經網路技術起源於上世紀 五 六十年代,當時叫感知機 perceptron 擁有輸入層 輸出層和乙個隱含層。輸入的特徵向量通過隱含層變換達到輸出層,在輸出層得到分類結果。早期感知機的推動者是rosenblatt。但是,rosenblat...
神經網路概述
在這裡我們來討論一下神經網路。在我們這裡所要討論的神經網路,不是動物或者人的神經網路,而是為計算機量身定製的神經系統。計算機神經網路是一種模仿生物神經網路或者是動物的神經中樞,特別是大腦的結構或者功能,它是一種數學模型或者是計算機模型。神經網路有大量的人工神經元連線進行計算,大多情況下人工神經網路可...
BP神經網路概述
bp神經網路是一種多層前饋神經網路,該網路的主要特點是訊號的向前傳遞,誤差反向傳播。在前向傳遞中,輸入訊號從輸入層經隱含層逐層處理,直至輸出層。每一層的神經網路狀態只影響下一層的神經元的狀態。如果輸出層得不到想要的輸出,則轉入反向傳播,根據 誤差調整網路的權值和閥值,從而使bp神經網路 輸出不斷的逼...