神經網路中交叉熵代價函式 求導

2021-07-11 05:27:17 字數 1995 閱讀 8619

import numpy as np

# sigmoid function

defnonlin

(x,deriv=false):

if(deriv==true):

return x*(1-x)

return

1/(1+np.exp(-x))

# input dataset

x = np.array([ [0,0,1],

[0,1,1],

[1,0,1],

[1,1,1] ])

# output dataset

y = np.array([[0,0,1,1]]).t

# seed random numbers to make calculation

# deterministic (just a good practice)

np.random.seed(1)

# initialize weights randomly with mean 0

syn0 = 2*np.random.random((3,1)) - 1

for iter in xrange(10000):

# forward propagation

l0 = x

l1 = nonlin(np.dot(l0,syn0))

# how much did we miss?

l1_error = y - l1

# multiply how much we missed by the

# slope of the sigmoid at the values in l1

l1_delta = l1_error * nonlin(l1,true)

# update weights

syn0 += np.dot(l0.t,l1_delta)

print

"output after training:"

print l1

確實該博文運用淺顯的語言解釋了神經網路的基本來龍去脈(剩下的由開發者自由發揮了),從輸入層到隱藏層到最終的輸出,基本都是這樣一張圖描述的:

下面該講重點了,就是最核心的運用梯度下降來訓練模型,加快計算的效率,這個就是** l1_delta = l1_error * nonlin(l1,true) 的功效,只可惜這行**看似簡單,背後涉及了的公式推導還不少,其實很多演算法看似簡單的編碼背後都是隱藏了大量的公式推導,這個才是最困難的,不廢話,講重點。

神經網路中的損失函式採用了交叉熵的公式,而沒有採用通常的差的平方和公式(具體解釋可看這個目的當然是為了簡化計算的複雜度,深度學習也是因為簡化了神經網路的計算複雜度得以推廣了,公式如下,x,y代表了訓練集中的輸入樣本x及真實類別值y:

其中,a是神經元中的sigmod函式,也是最終的**值,即上圖中的f(·)函式值,表示式為:

其中,對a求導後的表示式為,a的求導值可以用a表示:

而z是輸入樣本x的線性組合,這乙個神經元的處理跟邏輯回歸很像的,即:

然後,基本公式都列出來(盜圖,σ()就是f()),可以求使得c取得最小值的w,b了,分別對w,b求導,然後就會得出:

最終,梯度下降法就是為了計算對於w,b的更新速率,這裡面的好處可以參考更權威的解釋了。

在神經網路中使用交叉熵代價函式

是用來衡量人工神經網路 ann 的 值與實際值的一種方式。與二次代價函式相比,它能更有效地促進ann的訓練。在介紹交叉熵代價函式之前,本文先簡要介紹二次代價函式,以及其存在的不足。ann的設計目的之一是為了使機器可以像人一樣學習知識。人在學習分析新事物時,當發現自己犯的錯誤越大時,改正的力度就越大。...

神經網路的交叉熵損失函式

常見的損失函式包含以上幾個。在神經網路中樣本的平方損失函式一般會定義為 ed 12 i zi yi 2,方便求導後約掉係數。使用誤差逆傳播訓練神經網路時會使用梯度下降法來更新每個神經網路中的權重,根據鏈式求導法可以得到權重更新公式,ed wji ed nod ej n odej wji ed nod...

交叉熵代價函式 損失函式 及其求導推導

j 1m i 1my i log h x i 1 y i log 1 h x i j 1m i 1my i log h x i 1 y i log 1 h x i 以及j 對j 對引數 的偏導數 用於諸如梯度下降法等優化演算法的引數更新 如下 jj 1m i 1m h x i y i x i j j...