神經網路是機器學習中的乙個模型,可以用於兩類問題的解答:
分類:把資料劃分成不同的類別
回歸:建立資料間的連續關係
感知器演算法->誤差函式(梯度下降)
離散誤差與連續誤差
要使用梯度下降,誤差必須是連續的,誤差函式必須是可微分的
離散演算法:學生是否被錄取->連續演算法:學生被錄取概率
啟用函式:step function->sigmoid function
最大似然
最大化概率
交叉熵(cross entropy):
交叉熵低的模型誤差更小
純粹是因為好模型可以給更高的頻率,取對數取反(因為加法比乘法好計算)就變成更小的交叉熵了
目標:最大化概率->最小化交叉熵
**:def cross_entropy(y, p):
y = np.float_(y)
p = np.float_§
return -np.sum(y * np.ln§ + (1 - y) * np.ln(1 - p))
或def cross_entropy(y, p):
sum = 0
for i in range(0,len(y)):
a = -((y[i] * np.ln(p[i]) + (1 - y[i]) * np.ln(1 - p[i])))
sum += a
return sum
多類別交叉熵:
邏輯回歸:
計算誤差函式:
最小化誤差函式:
梯度下降
總之與感知器演算法是不是很相似!
感知器跟梯度下降演算法中,分類錯誤的點都希望告訴直線靠近點,因為最終都希望穿過這個點,使直線分類正確
但是對於分類正確的點:
感知器演算法就會告訴直線什麼都不要做
梯度下降中,分類正確的點會告訴直線離得遠點
神經網路的構建:
將bias當作單獨的節點:
多層級:
多個輸入:
多個輸出:多分類
多個隱藏層:深度神經網路
注:sigmoid 函式有乙個完美的導數:
池化層總的來說是用來:減小輸出大小、避免過擬合
降低過擬合是減小輸出大小的結果,它同樣也減少了後續層中的引數的數量。
近期,池化層並不是很受青睞。
部分原因是:
現在的資料集又大又複雜,我們更關心欠擬合問題。
dropout是乙個更好的正則化方法。
池化導致資訊損失。想想最大池化的例子,n個數字中我們只保留最大的,把餘下的n-1完全捨棄了。
設定h = height, w = width, d = depth
輸入維度是 4x4x5 (hxwxd)
濾波器大小 2x2 (hxw)
stride 的高和寬都是 2 (s)
新的高和寬的公式是:
new_height = (input_height - filter_height)/s + 1
new_width = (input_width - filter_width)/s + 1
池化層輸出的維度大小是2x2x5
神經網路學習筆記
隱含層數越多,越容易擬合複雜函式 為了擬合複雜函式需要的隱含節點數目,基本上隨著隱含層數目的增加呈現指數下降的趨勢,也就是說層數越多,神經網路所需要的隱含節點可以越少。層數越深,概念越抽象,需要背誦的知識點 神經網路的隱含節點 就越少。但是,層數越多,容易出現過擬合以及引數難以除錯以及梯度瀰散的問題...
神經網路學習筆記
sigmoid函式是一種常見的擠壓函式,其將較大範圍的輸入擠壓到 0 1 區間內,其函式的表示式與形狀如下圖所示 該函式常被用於分類模型,因為其具有很好的乙個特性f x f x 1 f x 這個函式也會被用於下面的神經網路模型中做啟用函式。生物的神經網路系統中,最簡單最基本的結構是神經元。每個神經元...
神經網路 學習筆記
神經網路是用來解決分類問題的模型。他與感知機有著緊密的聯絡。神經網路中,神經元接收到的總輸入將與神經元的閾值進行比較,然後通過 啟用函式 處理以產生神經元的輸出。最理想的啟用函式是階躍函式,但是他不連續,不光滑,所以,採用sigmoid函式來進行替代。感知機只有輸出層神經元進行啟用函式處理,即只擁有...