回覆列表
  • 1 # 論智

    我們先來看下異或問題的真值表:

    從真值表上,我們看到,異或問題的輸出和任何單個輸入間都不存線上性關係,而是由兩個輸入同時決定。這就意味著,如果我們僅僅將輸入層和輸出層直接連線起來,網路無法成功學習異或運算。換句話說,我們至少需要一個隱藏層。

    所以,我們的神經網路將是一個三層架構:輸入層、隱藏層、輸出層。

    確定了網路的層數之後,我們接著考慮啟用函式。因為輸出是1或0,因此我們選用sigmoid作為啟用函式。

    隨機初始化權重,使用反向傳播和梯度下降,我們就得到了進行異或運算的神經網路。

    下面的示例程式碼使用Python,不過這一邏輯是通用的,換成其他語言也一樣。

    匯入numpy(這將是我們唯一的依賴)

    import numpy as np

    前向傳播(X為輸入資料,我們這裡省略了sigmoid的定義,和隨機化初始化權重w0、w0的過程)

    l0 = X

    l1 = sigmoid(np.dot(l0, w0))

    l2 = sigmoid(np.dot(l1, w1))

    看下當前誤差多少(y為ground truth,也就是標準答案)

    l2_error = y - l2

    反向傳播(deriv_sigmoid為sigmoid的導數,這裡我們省略了它的定義)

    l2_delta = l2_error * deriv_sigmoid(l2)

    l1_error = l2_delta.dot(w1.T)

    l1_delta = l1_error * deriv_sigmoid(l1)

    w1 += l1.T.dot(l2_delta)

    w0 += l0.T.dot(l1_delta)

    將以上過程迭代個幾萬次,就是訓練神經網路。

  • 2 # Galaxy3030

    智慧神經元函式自身在進行運算的時候要做向量轉移,向量是輸入或量化輸入,而向量則是行為趨向或行為定製與轉向,正因為轉向則是獨立和想象的關鍵。儲存區域分類決定智慧意識也決定行為向量的前進方向和邏輯方法,換句話說就是向量變換與轉向完成異或運算。

  • 3 # 程式設計快訊

    異或問題,即判斷兩個輸入x1,x2是否一致。

    下面是用Python實現的程式碼

    import numpy as npnp.random.seed(1)# 生成輸入向量XX = np.array([[0,0,1],[0,1,1],[1,0,1],[1,1,1]])# 生成目標向量yy = np.array([[0],[1],[1],[0]])# 定義sigmoid 和它的導函式def nonlin(x,deriv=False):if(deriv==True):return x*(1-x)return 1/(1+np.exp(-x))# 隨機生成初始的隨機向量syn0 = 2*np.random.random((3,4)) - 1syn1 = 2*np.random.random((4,1)) - 1# 一開始我們先來5萬次迴圈吧:)for j in xrange(50000):# 在反向傳播前先正向傳播,計算出每一層的輸出l0 = Xl1 = nonlin(np.dot(l0,syn0))l2 = nonlin(np.dot(l1,syn1))# 計算出輸入層和目標向量的差值(輸出誤差)l2_error = y - l2# 每迴圈一萬次,列印一次輸出誤差的數值if (j% 10000) == 0:print "Error:" + str(np.mean(np.abs(l2_error)))print(l2)# 計算輸出層的誤差l2_delta = l2_error*nonlin(l2,deriv=True)# 計算前一層對後一層的誤差影響l1_error = l2_delta.dot(syn1.T)# 計算輸入層對整體的誤差l1_delta = l1_error * nonlin(l1,deriv=True)# 修改權重向量讓結果越來越逼近目標向量syn1 += l1.T.dot(l2_delta)syn0 += l0.T.dot(l1_delta)

    如果你執行了上面的程式碼,你會發現這種非線性的多層神經網路成功地解決了異或問題,當輸入x1,x2 相同時,會輸出0,不相同時,會輸出1。

  • 中秋節和大豐收的關聯?
  • 如何成為一位優秀的影評人?質量差的電影劇該如何去看待?