什麼?神經網路還能創造新知識?
神經網路(NNs)可以在不知道用顯式演算法執行工作的情況下被設計和訓練於特定的任務,很多人都對此表示驚歎。例如,著名的手寫體數字識別教程很容易執行,但其背後的邏輯還是隱藏在神經網路下,僅能透過層次化結構、權值和啟用函式略知一二。
本文透過神經網路透明原則來揭示其“黑盒知識”,為此來檢驗一個布林異或函式的神經網路。首先,利用已知異或屬性過程構造了一個自底向上的神經網路,即清晰包含已知的代數關係。在第二步中使用TensorFlow Keras從簡易圖形化程式設計工具到異或邏輯運算訓練神經網路。
最後比較兩種方法。將Keras神經網路分解為布林元件,發現邏輯設定與第一步中構造的神經網路不同。被訓練的神經網路發現了使用不同布林函式的另一種異或運算表示方法。
這另一種異或公式在數學領域不是未知的,但至少很新奇。這或許表明神經網路可以創造新的知識。但要提取它,必須能夠將神經網路的設定和引數轉化為 顯式 規則。
自底向上構造異或運算神經網路(XOR NN)
異或運算是由對映定義的布林函式,
XOR (0,0) = XOR (1,1) = 0
XOR (1,0) = XOR (0,1) = 1
為異或運算構造一個已知的神經網路或谷歌標識列
XOR (x,y) = AND ( NAND (x,y) , OR (x,y) )
這很有幫助,因為運算子AND、NAND(而非AND)和OR是眾所周知的,並且都可以用簡單的神經網路來表示,其中有2個輸入和1個輸出結點、偏移量和sigmoid啟用函式。
在此基礎上可透過連線NAND、AND和OR的NNs來構造異或運算神經網路。所以異或變成了一個三層神經網路。
輸送可能的輸入配置並檢查輸出(本文使用Excel工作表)。分別得到有效的(0,0)、(1,1)的0.0072以及(0,1)、(1,0)的0.9924。
可以用以下異或運算的表示來建構其他的神經網路:
XOR (x,y) = OR ( AND ( NOT(x) , y ) , AND ( x , NOT(y) ) )
XOR (x,y) = NAND ( NAND ( x , NAND ( x,y) ) , NAND ( y , NAND ( x,y) ) )
然而這些標識列導致了更復雜的網路。
此外,由於異或運算不能透過線性可分(且啟用函式嚴格單調),因此,不可能建立兩層的神經網路。
但也許還有其他方法可以構建異或運算的神經網路呢?下一節將透過訓練神經網路來尋找另一種解決方案。
使用TensorFlow Keras構建異或神經網路
Keras是一個功能強大且易於使用的神經網路庫。上一節中建立了一個三層的2-2-1模型,並與之前建構的神經網路進行了比較。
使用梯度下降最佳化器與學習率1和均方誤差損失函式的誤差反向傳播,這是建構神經網路的標準方法。
以下是Python的程式碼片段:
# Generate NN for XOR operation
# input layer: <NODES> nodes, one for each bit (0 = false and +1 = true)
# output layer: 1 node for result (0 = false and +1 = true)
# Use sigmoid activation function, gradient descent optimizer and mean squared error loss function
# Last update: 28.05.2019
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# Define model
nodes = 2
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(nodes, input_dim=2, activation=tf.nn.sigmoid))
model.add(tf.keras.layers.Dense(1, activation=tf.nn.sigmoid))
model.compile(optimizer=tf.train.GradientDescentOptimizer(1), loss=tf.keras.losses.mean_squared_error, metrics=['binary_accuracy'])
model.summary()
# Generate train & test data
epochs = 10000
data_in = np.array([[0,0],[0,1],[1,0],[1,1]])
data_out = np.array([0,1,1,0])
# Train model
history = model.fit(data_in, data_out, epochs=epochs, verbose=0)
# Analysis of training history
for key in history.history.keys():
plt.scatter(range(epochs), history.history[key], s=1)
plt.ylabel(key)
plt.xlabel('epochs')
plt.show()
# Predict with model
result = model.predict(data_in)
# Print results
def printarray(arr):
return np.array2string(arr).replace('
','')
print()
print('input', printarray(data_in))
print('output (calculation)', printarray(data_out))
print('output (prediction) ', printarray(result))
print('output (pred. norm.)', printarray(np.round(result)))
# Get weights of model
print()
print(model.get_weights())
異或運算的好處是可以訓練整個引數空間,因為只有四種可能的配置可以教。然而,需要一些在神經網路中傳遞資料集的過程來驅動模型達到零損耗和100%精準,即輸出趨向於一個分別是(0,1)、(1,0)和(0,0)、(1,1)的零。
然而,訓練期也可能陷入停滯,無法銜接。接著精準度停止在75%甚至50%,即一個或兩個二元元組的對映是不正確的。在這種情況下就要重新構建神經網路,直到得到合適的解決方案。
分析和結論
現在驗證Keras神經網路是否與建構的具有相似結構。透過返回權值(參見程式碼片段的末尾),得到了權值和偏差值。
使用這些引數來重建神經網路(再次使用Excel)。由三個運算子組成。
透過輸入所有可能的配置,可以識別與H1、H2和O運算子關聯的布林函式。
有趣的是,本以為Keras 神經網路與所建構的邏輯是一樣的,但它卻建立了另一種解決方案。使用OR,AND和(相對沒人知道的)INH,而非運算子NAND, OR 和AND,即神經網路找到的公式。
XOR (x,y) = INH ( OR (x,y), AND (x,y) )
這表明神經網路可以獲得以前沒有的知識!當然“新知識”是相對的,並且取決於知道的程度。也就是說,若一個人知道異或運算的所有表示形式,Keras 神經網路就不會有其他價值。
此外,對於更復雜的神經網路,將權值轉換為顯式演算法或公式並不容易。但也許這種專業知識是未來人工智慧專家必須具備的能力。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2649094/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 背後技術:雙11還能創造什麼?
- 為什麼說BP神經網路就是人工神經網路的一種?神經網路
- 3.4 神經網路為什麼這麼強神經網路
- 漫畫版:什麼是神經網路?神經網路
- 【人工神經網路基礎】為什麼神經網路選擇了“深度”?神經網路
- 初識神經網路----一神經網路
- 圖神經網路知識神經網路
- 人工神經網路初學:是什麼以及為什麼?神經網路
- 【智慧製造】這份智慧製造行業白皮書能讓你的神經網路炸裂行業神經網路
- 人工智慧教程 - 1.1.1 什麼是神經網路人工智慧神經網路
- 圖神經網路,這到底是個什麼?神經網路
- 人工智慧的神經網路到底是什麼?人工智慧神經網路
- 使用深度神經網路為什麼8位足夠?神經網路
- 深度神經網路中深度究竟帶來了什麼?神經網路
- 神經網路:numpy實現神經網路框架神經網路框架
- 我們能創造意識嗎?
- 神經網路神經網路
- 基於神經網路的OCR識別神經網路
- 【Python】keras神經網路識別mnistPythonKeras神經網路
- 【原創】python實現BP神經網路識別Mnist資料集Python神經網路
- 初識卷積神經網路第一講!卷積神經網路
- 卷積神經網路知識點總結卷積神經網路
- 卷積神經網路進行影像識別卷積神經網路
- 使用神經網路識別手寫數字神經網路
- 卷積神經網路—基礎知識(1)卷積神經網路
- LSTM神經網路神經網路
- 8、神經網路神經網路
- BP神經網路神經網路
- 模糊神經網路神經網路
- 聊聊從腦神經到神經網路神經網路
- 如何簡單形象又有趣地弄懂神經網路是什麼?神經網路
- 圖神經網路GNN 庫,液體神經網路LNN/LFM神經網路GNN
- TensorFlow 卷積神經網路之貓狗識別卷積神經網路
- 【Python】keras卷積神經網路識別mnistPythonKeras卷積神經網路
- 用神經網路來識別人物影象性別神經網路
- 卷積神經網路的小基礎知識卷積神經網路
- 神經網路篇——從程式碼出發理解BP神經網路神經網路
- 【深度學習篇】--神經網路中的卷積神經網路深度學習神經網路卷積