自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

什么?神經(jīng)網(wǎng)絡(luò)還能創(chuàng)造新知識(shí)?

人工智能 深度學(xué)習(xí) 開發(fā)工具
本文通過(guò)神經(jīng)網(wǎng)絡(luò)透明原則來(lái)揭示其“黑盒知識(shí)”,為此來(lái)檢驗(yàn)一個(gè)布爾異或函數(shù)的神經(jīng)網(wǎng)絡(luò)。

神經(jīng)網(wǎng)絡(luò)(NNs)可以在不知道用顯式算法執(zhí)行工作的情況下被設(shè)計(jì)和訓(xùn)練于特定的任務(wù),很多人都對(duì)此表示驚嘆。例如,著名的手寫體數(shù)字識(shí)別教程很容易執(zhí)行,但其背后的邏輯還是隱藏在神經(jīng)網(wǎng)絡(luò)下,僅能通過(guò)層次化結(jié)構(gòu)、權(quán)值和激活函數(shù)略知一二。

[[269379]]

圖片來(lái)源:Unsplash

本文通過(guò)神經(jīng)網(wǎng)絡(luò)透明原則來(lái)揭示其“黑盒知識(shí)”,為此來(lái)檢驗(yàn)一個(gè)布爾異或函數(shù)的神經(jīng)網(wǎng)絡(luò)。首先,利用已知異或?qū)傩赃^(guò)程構(gòu)造了一個(gè)自底向上的神經(jīng)網(wǎng)絡(luò),即清晰包含已知的代數(shù)關(guān)系。在第二步中使用TensorFlow Keras從簡(jiǎn)易圖形化編程工具到異或邏輯運(yùn)算訓(xùn)練神經(jīng)網(wǎng)絡(luò)。

***比較兩種方法。將Keras神經(jīng)網(wǎng)絡(luò)分解為布爾組件,發(fā)現(xiàn)邏輯設(shè)置與***步中構(gòu)造的神經(jīng)網(wǎng)絡(luò)不同。被訓(xùn)練的神經(jīng)網(wǎng)絡(luò)發(fā)現(xiàn)了使用不同布爾函數(shù)的另一種異或運(yùn)算表示方法。

這另一種異或公式在數(shù)學(xué)領(lǐng)域不是未知的,但至少很新奇。這或許表明神經(jīng)網(wǎng)絡(luò)可以創(chuàng)造新的知識(shí)。但要提取它,必須能夠?qū)⑸窠?jīng)網(wǎng)絡(luò)的設(shè)置和參數(shù)轉(zhuǎn)化為顯式規(guī)則。

自底向上構(gòu)造異或運(yùn)算神經(jīng)網(wǎng)絡(luò)(XOR NN)

異或運(yùn)算是由映射定義的布爾函數(shù),

  1. XOR (0,0) = XOR (1,1) = 0 
  2. XOR (1,0) = XOR (0,1) = 1 

為異或運(yùn)算構(gòu)造一個(gè)已知的神經(jīng)網(wǎng)絡(luò)或谷歌標(biāo)識(shí)列

  1. XOR (x,y) = AND ( NAND (x,y) , OR (x,y) ) 

這很有幫助,因?yàn)椴僮鞣鸄ND、NAND(而非AND)和OR是眾所周知的,并且都可以用簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)來(lái)表示,其中有2個(gè)輸入和1個(gè)輸出結(jié)點(diǎn)、偏移量和sigmoid激活函數(shù)。

神經(jīng)網(wǎng)絡(luò)

布爾函數(shù)操作符的神經(jīng)網(wǎng)絡(luò)

在此基礎(chǔ)上可通過(guò)連接NAND、AND和OR的NNs來(lái)構(gòu)造異或運(yùn)算神經(jīng)網(wǎng)絡(luò)。所以異或變成了一個(gè)三層神經(jīng)網(wǎng)絡(luò)。

異或運(yùn)算的神經(jīng)網(wǎng)絡(luò)

異或運(yùn)算的神經(jīng)網(wǎng)絡(luò)

輸送可能的輸入配置并檢查輸出(本文使用Excel工作表)。分別得到有效的(0,0)、(1,1)的0.0072以及(0,1)、(1,0)的0.9924。

可以用以下異或運(yùn)算的表示來(lái)建構(gòu)其他的神經(jīng)網(wǎng)絡(luò):

  1. XOR (x,y) = OR ( AND ( NOT(x) , y ) , AND ( x , NOT(y) ) ) 
  2. XOR (x,y) = NAND ( NAND ( x , NAND ( x,y) ) , NAND ( y , NAND ( x,y) ) ) 

然而這些標(biāo)識(shí)列導(dǎo)致了更復(fù)雜的網(wǎng)絡(luò)。

此外,由于異或運(yùn)算不能通過(guò)線性可分(且激活函數(shù)嚴(yán)格單調(diào)),因此,不可能建立兩層的神經(jīng)網(wǎng)絡(luò)。

但也許還有其他方法可以構(gòu)建異或運(yùn)算的神經(jīng)網(wǎng)絡(luò)呢?下一節(jié)將通過(guò)訓(xùn)練神經(jīng)網(wǎng)絡(luò)來(lái)尋找另一種解決方案。

使用TensorFlow Keras構(gòu)建異或神經(jīng)網(wǎng)絡(luò)

Keras是一個(gè)功能強(qiáng)大且易于使用的神經(jīng)網(wǎng)絡(luò)庫(kù)。上一節(jié)中建立了一個(gè)三層的2-2-1模型,并與之前建構(gòu)的神經(jīng)網(wǎng)絡(luò)進(jìn)行了比較。

使用梯度下降優(yōu)化器與學(xué)習(xí)率1和均方誤差損失函數(shù)的誤差反向傳播,這是建構(gòu)神經(jīng)網(wǎng)絡(luò)的標(biāo)準(zhǔn)方法。

以下是Python的代碼片段:

  1. # Generate NN for XOR operation 
  2. # input layer: <NODES> nodes, one for each bit (0 = false and +1 = true
  3. # output layer: 1 node for result (0 = false and +1 = true
  4. # Use sigmoid activation function, gradient descent optimizer and mean squared error loss function 
  5. # Last update: 28.05.2019 
  6.   
  7. import tensorflow as tf 
  8. import numpy as np 
  9. import matplotlib.pyplot as plt 
  10.   
  11. # Define model 
  12. nodes = 2 
  13. model = tf.keras.Sequential() 
  14. model.add(tf.keras.layers.Dense(nodes, input_dim=2activation=tf.nn.sigmoid)) 
  15. model.add(tf.keras.layers.Dense(1, activation=tf.nn.sigmoid)) 
  16. model.compile(optimizer=tf.train.GradientDescentOptimizer(1), loss=tf.keras.losses.mean_squared_error, metrics=['binary_accuracy']) 
  17. model.summary() 
  18.   
  19. # Generate train & test data 
  20. epochs = 10000 
  21. data_in = np.array([[0,0],[0,1],[1,0],[1,1]]) 
  22. data_out = np.array([0,1,1,0]) 
  23.   
  24. # Train model 
  25. history = model.fit(data_in, data_out, epochsepochs=epochs, verbose=0
  26.   
  27. # Analysis of training history 
  28. for key in history.history.keys(): 
  29.     plt.scatter(range(epochs), history.history[key], s=1
  30.     plt.ylabel(key) 
  31.     plt.xlabel('epochs') 
  32.     plt.show() 
  33.   
  34. # Predict with model 
  35. result = model.predict(data_in) 
  36.   
  37. # Print results 
  38. def printarray(arr): 
  39.     return np.array2string(arr).replace('\n','') 
  40.   
  41. print() 
  42. print('input', printarray(data_in)) 
  43. print('output (calculation)', printarray(data_out)) 
  44. print('output (prediction) ', printarray(result)) 
  45. print('output (pred. norm.)', printarray(np.round(result))) 
  46.   
  47. # Get weights of model 
  48. print() 
  49. print(model.get_weights()) 

異或運(yùn)算的好處是可以訓(xùn)練整個(gè)參數(shù)空間,因?yàn)橹挥兴姆N可能的配置可以教。然而,需要一些在神經(jīng)網(wǎng)絡(luò)中傳遞數(shù)據(jù)集的過(guò)程來(lái)驅(qū)動(dòng)模型達(dá)到零損耗和100%精準(zhǔn),即輸出趨向于一個(gè)分別是(0,1)、(1,0)和(0,0)、(1,1)的零。

異或運(yùn)算神經(jīng)網(wǎng)絡(luò)的Loss和epochs對(duì)比

異或運(yùn)算神經(jīng)網(wǎng)絡(luò)的Loss和epochs對(duì)比

異或運(yùn)算神經(jīng)網(wǎng)絡(luò)的Accuracy 和epochs對(duì)比

異或運(yùn)算神經(jīng)網(wǎng)絡(luò)的Accuracy 和epochs對(duì)比

然而,訓(xùn)練期也可能陷入停滯,無(wú)法銜接。接著精準(zhǔn)度停止在75%甚至50%,即一個(gè)或兩個(gè)二元元組的映射是不正確的。在這種情況下就要重新構(gòu)建神經(jīng)網(wǎng)絡(luò),直到得到合適的解決方案。

分析和結(jié)論

現(xiàn)在驗(yàn)證Keras神經(jīng)網(wǎng)絡(luò)是否與建構(gòu)的具有相似結(jié)構(gòu)。通過(guò)返回權(quán)值(參見代碼片段的末尾),得到了權(quán)值和偏差值。

Python的腳本輸出

Python的腳本輸出

使用這些參數(shù)來(lái)重建神經(jīng)網(wǎng)絡(luò)(再次使用Excel)。由三個(gè)操作符組成。

基于Keras訓(xùn)練的異或運(yùn)算神經(jīng)網(wǎng)絡(luò)

基于Keras訓(xùn)練的異或運(yùn)算神經(jīng)網(wǎng)絡(luò)

通過(guò)輸入所有可能的配置,可以識(shí)別與H1、H2和O操作符關(guān)聯(lián)的布爾函數(shù)。

Keras在異或運(yùn)算神經(jīng)網(wǎng)絡(luò)中的布爾函數(shù)

Keras在異或運(yùn)算神經(jīng)網(wǎng)絡(luò)中的布爾函數(shù)

有趣的是,本以為Keras 神經(jīng)網(wǎng)絡(luò)與所建構(gòu)的邏輯是一樣的,但它卻創(chuàng)建了另一種解決方案。使用OR,AND和(相對(duì)沒(méi)人知道的)INH,而非操作符NAND, OR 和AND,即神經(jīng)網(wǎng)絡(luò)找到的公式。

  1. XOR (x,y) = INH ( OR (x,y), AND (x,y) ) 

這表明神經(jīng)網(wǎng)絡(luò)可以獲得以前沒(méi)有的知識(shí)!當(dāng)然“新知識(shí)”是相對(duì)的,并且取決于知道的程度。也就是說(shuō),若一個(gè)人知道異或運(yùn)算的所有表示形式,Keras 神經(jīng)網(wǎng)絡(luò)就不會(huì)有其他價(jià)值。

此外,對(duì)于更復(fù)雜的神經(jīng)網(wǎng)絡(luò),將權(quán)值轉(zhuǎn)換為顯式算法或公式并不容易。但也許這種專業(yè)知識(shí)是未來(lái)人工智能專家必須具備的能力。

責(zé)任編輯:趙寧寧 來(lái)源: 讀芯術(shù)
相關(guān)推薦

2022-06-07 11:14:23

神經(jīng)網(wǎng)絡(luò)AI中科院

2015-10-22 09:05:12

2020-05-29 17:21:33

神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)函數(shù)

2018-07-03 16:10:04

神經(jīng)網(wǎng)絡(luò)生物神經(jīng)網(wǎng)絡(luò)人工神經(jīng)網(wǎng)絡(luò)

2023-12-15 12:52:32

模型數(shù)據(jù)

2021-10-26 09:00:00

圖形機(jī)器學(xué)習(xí)深度學(xué)習(xí)

2024-07-08 08:43:19

2022-06-23 12:12:31

達(dá)摩院自動(dòng)駕駛

2024-12-02 01:10:04

神經(jīng)網(wǎng)絡(luò)自然語(yǔ)言DNN

2025-02-19 15:12:17

神經(jīng)網(wǎng)絡(luò)PyTorch大模型

2021-03-30 17:16:44

神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)圖形

2025-04-27 09:23:00

模型訓(xùn)練AI

2017-09-10 07:07:32

神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)集可視化

2025-02-25 14:13:31

2017-03-22 11:59:40

深度神經(jīng)網(wǎng)絡(luò)

2020-07-22 18:11:07

神經(jīng)網(wǎng)絡(luò)函數(shù)代碼

2018-05-16 09:41:13

神經(jīng)網(wǎng)絡(luò)NN函數(shù)

2025-02-20 08:10:00

神經(jīng)網(wǎng)絡(luò)模型AI

2020-08-06 10:11:13

神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)算法

2017-05-04 18:30:34

大數(shù)據(jù)卷積神經(jīng)網(wǎng)絡(luò)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)