什么?神经网络还能创造新知识?

作者: 读芯术 2019-07-02 13:37:23

神经网络(NNs)可以在不知道用显式算法执行工作的情况下被设计和训练于特定的任务,很多人都对此表示惊叹。例如,著名的手写体数字识别教程很容易执行,但其背后的逻辑还是隐藏在神经网络下,仅能通过层次化结构、权值和激活函数略知一二。

神经网络

图片来源:Unsplash

本文通过神经网络透明原则来揭示其“黑盒知识”,为此来检验一个布尔异或函数的神经网络。首先,利用已知异或属性过程构造了一个自底向上的神经网络,即清晰包含已知的代数关系。在第二步中使用TensorFlow Keras从简易图形化编程工具到异或逻辑运算训练神经网络。

***比较两种方法。将Keras神经网络分解为布尔组件,发现逻辑设置与***步中构造的神经网络不同。被训练的神经网络发现了使用不同布尔函数的另一种异或运算表示方法。

这另一种异或公式在数学领域不是未知的,但至少很新奇。这或许表明神经网络可以创造新的知识。但要提取它,必须能够将神经网络的设置和参数转化为显式规则。

自底向上构造异或运算神经网络(XOR NN)

异或运算是由映射定义的布尔函数,

  1. XOR (0,0) = XOR (1,1) = 0 
  2. XOR (1,0) = XOR (0,1) = 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。

可以用以下异或运算的表示来建构其他的神经网络:

  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) ) ) 

然而这些标识列导致了更复杂的网络。

此外,由于异或运算不能通过线性可分(且激活函数严格单调),因此,不可能建立两层的神经网络。

但也许还有其他方法可以构建异或运算的神经网络呢?下一节将通过训练神经网络来寻找另一种解决方案。

使用TensorFlow Keras构建异或神经网络

Keras是一个功能强大且易于使用的神经网络库。上一节中建立了一个三层的2-2-1模型,并与之前建构的神经网络进行了比较。

使用梯度下降优化器与学习率1和均方误差损失函数的误差反向传播,这是建构神经网络的标准方法。

以下是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()) 

异或运算的好处是可以训练整个参数空间,因为只有四种可能的配置可以教。然而,需要一些在神经网络中传递数据集的过程来驱动模型达到零损耗和100%精准,即输出趋向于一个分别是(0,1)、(1,0)和(0,0)、(1,1)的零。

异或运算神经网络的Loss和epochs对比

异或运算神经网络的Loss和epochs对比

异或运算神经网络的Accuracy 和epochs对比

异或运算神经网络的Accuracy 和epochs对比

然而,训练期也可能陷入停滞,无法衔接。接着精准度停止在75%甚至50%,即一个或两个二元元组的映射是不正确的。在这种情况下就要重新构建神经网络,直到得到合适的解决方案。

分析和结论

现在验证Keras神经网络是否与建构的具有相似结构。通过返回权值(参见代码片段的末尾),得到了权值和偏差值。

Python的脚本输出

Python的脚本输出

使用这些参数来重建神经网络(再次使用Excel)。由三个操作符组成。

基于Keras训练的异或运算神经网络

基于Keras训练的异或运算神经网络

通过输入所有可能的配置,可以识别与H1、H2和O操作符关联的布尔函数。

Keras在异或运算神经网络中的布尔函数

Keras在异或运算神经网络中的布尔函数

有趣的是,本以为Keras 神经网络与所建构的逻辑是一样的,但它却创建了另一种解决方案。使用OR,AND和(相对没人知道的)INH,而非操作符NAND, OR 和AND,即神经网络找到的公式。

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

这表明神经网络可以获得以前没有的知识!当然“新知识”是相对的,并且取决于知道的程度。也就是说,若一个人知道异或运算的所有表示形式,Keras 神经网络就不会有其他价值。

此外,对于更复杂的神经网络,将权值转换为显式算法或公式并不容易。但也许这种专业知识是未来人工智能专家必须具备的能力。

神经网络 运算 Python
上一篇:JavaScript教程:为Web应用程序添加人脸检测功能 下一篇:求职网站Indeed统计:AI 招工速度放缓,求职者兴趣下降
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

新的人工神经元设备可以使用极少能量运行神经网络计算

加州大学圣地亚哥分校的研究人员开发了一种新的人工神经元装置,训练神经网络来执行任务。

佚名 ·  2021-04-29 08:50:39
进行三万多次地震训练后,他们发现了快速预测震动强度的新方法

用来训练DeepShake网络的地震数据是来自于2019年加州Ridgecrest序列的地震记录。

大数据文摘 ·  2021-04-28 14:35:55
为什么Python是机器学习的理想选择?

Python 人工智能项目在各种形式和规模的公司中变得非常流行。以下是 Python 语言非常适合 ML 开发的原因。

佚名 ·  2021-04-25 10:26:34
高数有救了!神经网络不到一秒就能求解偏微分方程

对于特别复杂的偏微分方程,可能需要数百万个CPU小时才能求解出来一个结果。随着问题越来越复杂,从设计更优秀的火箭发动机到模拟气候变化,科学家们需要一个更「聪明」的求解方法。

新智元 ·  2021-04-22 09:44:40
有了这支矢量神经风格画笔,无需GAN也可生成精美绘画

一种新的神经风格画笔能够生成矢量形式的绘画作品,在统一框架下支持油画、马克笔、水彩画等多种笔触,并可进一步风格化。

机器之心 ·  2021-04-21 14:58:49
ICLR 2021研究挖掘游戏技能包?有序记忆决策网络帮你实现

在现实世界里,人类尤其具有这种将复杂任务有效分解为多个子任务的能力。这种能力帮助人类面对新环境时加速自身的学习过程并获得更好的泛化能力。

Yucheng Lu, Yikang Shen等 ·  2021-04-19 13:57:12
CPU比GPU训练神经网络快十几倍,英特尔:别用矩阵运算了

神经网络训练通常是 GPU 大显身手的领域,然而莱斯大学和英特尔等机构对 GPU 的地位发起了挑战。

机器之心 ·  2021-04-09 15:45:08
Facebook创造了两个会交流的神经网络来描述颜色

尽管人类世界拥有数千种语言,但是使用词语来表示不同颜色的方式是非常一致的。

佚名 ·  2021-03-30 17:16:44
Copyright©2005-2021 51CTO.COM 版权所有 未经许可 请勿转载