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

作者: 读芯术 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 招工速度放缓,求职者兴趣下降
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

为什么神经网络如此强大?

众所周知,神经网络非常强大,可以将其用于几乎任何统计学习问题,而且效果很好。 但是您是否考虑过为什么会这样? 为什么在大多数情况下此方法比许多其他算法更强大?

闻数起舞 ·  1天前
你在打王者农药,有人却用iPhone来训练神经网络

在 iOS 设备上也可以直接训练 LeNet 卷积神经网络,而且性能一点也不差,iPhone 和 iPad 也能化为实实在在的生产力。

佚名 ·  2天前
画图太丑拿不出手?有人做了套机器学习专用画图模板,还有暗黑模式

论文、博客写好了,里面的图可怎么画?对于很多研究人员和开发者来说,内容的「可视化」是一个大问题。如果从头开始画,配色、空间布局都很伤脑筋,而且画丑了也拿不出手,要是有模板可以套就好了。

张倩、魔王 ·  4天前
GitHub近10万星:印度小哥用Python和Java实现所有AI算法

今天两个算法实现的项目又登上了GitHub热榜,每逢招聘季必上榜?此前,这两个项目曾多次登顶,分别用Python和Java实现了面试中常考的算法,AI行业就业形势日趋严峻,而算法岗更是竞争激烈,是时候复习一下基本功了!

佚名 ·  2020-05-19 14:27:10
神经网络?决策树?都做不到!谁能解决可解释性AI?

神经网络是准确的,但无法解释;在计算机视觉中,决策树是可解释的,但不准确。可解释性AI(XAI)试图弥合这一分歧,但正如下面所解释的那样,“XAI在不直接解释模型的情况下证明了决策的合理性”。

读芯术 ·  2020-05-14 08:40:57
超简单的神经网络构建方法,你上你也行!

假如你只是了解人工神经网络基础理论,却从未踏足如何编写,跟着本文一起试试吧。你将会对如何在PyTorch 库中执行人工神经网络运算,以预测原先未见的数据有一个基本的了解。

读芯术 ·  2020-05-11 13:44:38
机器学习修炼手册:从倔强青铜到最强王者

居家隔离期间只顾着玩游戏刷剧真的不会坐立不安吗?与其心神不安打Boss,不如来面对机器学习这个大BOSS。笔者整理的这套课程从入门到高级,快来提升你的段位吧!

读芯术 ·  2020-05-10 18:02:42
人工智能的另一方向:基于忆阻器的存算一体技术

过去的十年以深度神经网络为代表的人工智能技术深刻影响了人类社会。但深度神经网络的发展已经进入瓶颈期,我们仍处于弱人工智能时代。如何更近一步,跨入强人工智能,敲击着每一位智能研究者的心。

蒋宝尚 ·  2020-05-08 10:20:35
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载