首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅谈人工智能(下)

书接上文,今天让我们来谈谈神经网络。最初提出神经元模型的是上面的这两位老兄,他们提出了MP(他们两位名字的合写)神经元模型。

采用简图描述就是一个神经元,其从上游神经元获得若干输入(a1、a2、a3等),对这些输入设定权值(w1、w2、w3等),然后进行运算,得到结果Z。他们研究发现,神经元自身会通过调整某个权值来改变最终的运算结果Z。这一模型成为随后三代神经网络的理论基础。

第一代是感知机;

第二代是BP(反向传播,Back-propagate)神经网络;

第三代就是现在应用广泛的CNN、RNN等神经网络;

25种神经网络模型

这些网络模型看起来五花八门,如果深入研究会发现有很多共同之处。比如几乎都有输入层、隐含层及输出层;层与层之间进行连接等。主要区别在于连接方式上,有些是全网全连接、有些层间全连接,有些则是层间局部连接。

就拿上图的DCN(深度卷积网络)为例,为了减少运算量,输入层与隐含层进行局部连接,通过不断的卷积、池化,图像关键特征被提取出来,最后经过一个全连接层进行最终的分类。DCN只不过是CNN(卷积神经网络)的另外一种叫法。

[神经网络实战]

源代码来自GITHub网站,有兴趣的同学可以从如下连接获取源代码https://github.com/burness/tensorflow-101/tree/master/chinese_hand_write_rec/src

中科院自动化所(CASIA)对外发布了一套手写字库并且已经完成标注。GitHub上的代码就是使用这套字库进行的手写识别训练。

1、字库采用GNT格式编码,文字的图像信息及标注(tag_code,其实就是图片对应汉字的GBK编码)信息被编码在这些GNT文件中。我们借助data_to_png.py代码将其转换为PNG文件。这个转换过程很有趣,其按照tag_code对图片进行分类归档。比如创建文件夹“00000”,将汉字“一”所有的手写图片都放在这个文件夹下;其余手写图片按照类似方式处理。

但因为汉字“一”的GBK编码并不是“00000”,所以,转换函数还生成一个无扩展名的文件(char_dict),按照理解应该是“00000”与汉字“一”GBK编码的对应关系。

下图是对汉字“乒”的归并处理结果样例

2、然后就是训练,运行chinese_rec.py,就可以看到程序不断有输出信息,告诉当前训练的成果,比如图片识别准确率0.0001...................0.82等。我在GPU环境下,训练一个下午,可以得到准确率在80+%的训练结果。

chinese_rec.py文件中与神经网络模型相关的关键代码如下:

def build_graph(top_k):

......

完成第一次卷积与池化

conv_1 = slim.conv2d(images, 64, [3, 3], 1, padding='SAME', scope='conv1') max_pool_1 = slim.max_pool2d(conv_1, [2, 2], [2, 2], padding='SAME')

完成第二次卷积与池化

conv_2 = slim.conv2d(max_pool_1, 128, [3, 3], padding='SAME', scope='conv2')

max_pool_2 = slim.max_pool2d(conv_2, [2, 2], [2, 2], padding='SAME')

完成第三次卷积与池化

conv_3 = slim.conv2d(max_pool_2, 256, [3, 3], padding='SAME', scope='conv3')

max_pool_3 = slim.max_pool2d(conv_3, [2, 2], [2, 2], padding='SAME')

......

经过全连接得到图片是什么的概率

最终程序得到CheckPoint文件,我们借助这个文件进行新的手写汉字识别,效果还可以,能够一定概率识别出汉字是什么。

[思考]

chinese_rec.py的训练函数在整个训练过程中没有访问char_dict文件,而这个算法又宣称是监督学习,那所谓的监督又从何而来?

其实对于训练程序而言,其是拿着那个文件夹的名字(比如 “00000”)来理解这个汉字是什么。在推理阶段,首先将新的手写字图片对应到这些编码上(比如“00000”、“03729”等),为了让人可以看懂,再从char_dict文件中找到对应“00000”的汉字是什么,给人看的就是“一”。

此时,我们还觉得机器是否真的具有智能?真是大打折扣,灰心丧气。其只是具备基于特征的一种机械式概率回馈。

与同事交流此事时,有些同事认为这也是一种智能,只是机器与我们理解的物质本质有差别而以,其不是已经认出这个字是什么了,如果再给其配备一个强大的知识库,其就可以讲出“一”到底是什么。

记得之前看过一个蓝绿色盲的例子。某人对于蓝绿两色的认知与普通人正好相反,但是在真实的测试中,较难测试出来。比如遇到绿灯,他也会停下来,但在他的大脑认知里,映射的是常人所说的“蓝色”,而他从起始认知时,就被人告诉这就是绿色。

与之类似的情况在真实社会上普遍存在,比如讨论问题时,我们问“你是否明白”,对方坚定的说“我明白”。但我们又如何真的知道其明白,即使明白也是我们认为的明白。

物自体是德国古典哲学家康德提出的哲学的一个基本概念。它指认识之外的,又绝对不可认识的存在之物。它是现象的基础,人们承认可以认识现象,必然要承认作为现象的基础的物自体的存在。

桌子在我脑海里的理解真的和你脑海里的理解一样吗?好吧,再聊就要上升到宗教了。就此打住。

[总结]虽说机器已经可以识别汉字,但其尚未具备真实思考能力,只是一种机械式的特征反馈,期待真正的人工智能时代到来。

[附录]

GitHub上的这套代码,因其设定的神经网络层次比较浅,汉字识别准确率有限。为了进一步提升汉字识别准确性,还需要多借鉴下业界的成功模型,比如VGGNet等。

VGGNet由牛津大学的视觉几何组(Visual Geometry Group)提出,是ILSVRC-2014中定位任务第一名和分类任务第二名。其突出贡献在于证明使用很小的卷积(3*3),增加网络深度可以有效提升模型的效果,而且VGGNet对其他数据集具有很好的泛化能力。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180414G19A3800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券