理解神經元和函式

Mark_Aussie發表於2020-10-15

捋順神經網路的前後向傳播的過程

輸入:x1, x2,...,xn

輸出:y

輸入和輸出關係:y = (x1 * w1 + x2 * w2 +...+xn * wn) + b

改寫輸入:x = [x1, x2, ..., xn]T

改寫權重:w = [w1, w2, ...,wn]

y = [w1, w2, ..., wn] * [x1, x2, ..., xn]T

階躍函式在x=0時不連續不可導,在非0處導數為0。輸出限定在[0-1],但不具備絲滑的特性。

在非0處導數為0,就是硬飽和,沒梯度可言,梯度意味著神經元傳播間是有反應的。

啟用函式的特徵:非線性,導數不是常數;幾乎處處可導,便於後向傳播演算法。

輸出範圍有限,一般在0-1

非飽和,當輸入比較大時輸出幾乎沒變化(飽和,梯度消失),sigmoid和tanh是軟飽和(輸入趨於無窮大的時候輸出無限接近上線),階躍函式是硬飽和(輸入非0輸出就已經始終都是上限值);Relu是非飽和的

單調性:即導數符號不變

sigmoid函式:y = 1/(exp(-x) + 1),導數:y' = y * (1 - y)

圖片來自參考文章

輸入:i1 = 0.1, i2 = 0.2

輸出(目標):O2 = 0.01, O2 = 0.99

權重:w1 = 0.1, w2 = 0.2, w3 = 0.3, w4 = 0.4,

           w5 = 0.5, w6 = 0.6, w7 = 0.7, w8 = 0.8

偏置:b1 = 0.55, b2 = 0.56, b3 = 0.66, b4 = 0.67

正向傳播:

input(h1) = w1 * i1 + w2 * i2 + 1 * b1 = 0.6

output(h1) = 1 / (exp(-input(h1)) + 1)

input(O1) = w5 * output(h1) + w6 * output(h2) + 1 * b3

output(O1) = 1 / (exp(-input(O1)) + 1)

反向傳播:更新權重,計算總誤差(誤差平方和)

Error(total) = Error(output(O1)) + Error(output(O2))

                   = 1/2 * [(expected_ouput(O1) - output(O1))^2 + (expected_ouput(O2) - output(O2))^2]

                   = 1/2 * [(O1 - output(O1))^2 + (O2 - output(O2))^2]

更新w5:dError(total) / w5 = d(Error(total) / output(O1)) * d(output(O1) / input(O1)) * d(input(O1) / w5)

new_w5 = w5 - a * dError(total) / w5

 

參考文章:http://m.elecfans.com/article/696026.html

相關文章