论文部分内容阅读
摘要:该文从几何的视角来看待感知机和神经网络,采用两个简单、便于演示的例子来解释感知机和BP神经网络的分类功能,并结合Python动画演示其权值、偏置值在训练中逐步收敛的过程。本文介绍的方法在教学实践中收到了较好的效果,可以帮助学生对感知机和BP神经网络产生感性认识。
关键词:Python;可视化;感知机;BP神经网络;教学实践
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2018)19-0178-03
Abstract: In this paper, we perceive the perceptron and BP neural network from a geometric perspective. We explain the classification function of perceptron and neural network with two examples that simple and easy to visualize. We also use python animation to demonstrate how the weights and biases converge gradually. The method introduced in this paper has good effect in the teaching practice, and can help students to build perceptual knowledge of the perceptron and the BP neural network.
Key words: Python; visualization; perseptron; BP neural network;teaching practice
深度学习在图像、语音、自然语言识别,文本分类等方面展现出强大的功能,而深度学习的基础是神经网络。神经网络的原理和训练方法在教学中向来是难点、重点。学生在学习中往往感觉抽象、不易理解掌握。传统的教学中往往着重对原理进行阐述,对权值更新公式进行推导。这种围绕原理和公式为中心的教学方式不够直观,难以让学生对网络的运行过程产生感性的认识。
本文提出的教法围绕两个易于可视化的案例来展开教学。这两个案例基于二维向量,易于用Python语言实现,可以用动画方式来展示神经网络的训练、收敛过程,能方便地修改初始参数,让学生观察不同的初始化数据对网络训练产生的影响。相比传统教学方式,有直观、灵活性强的优点。在教学实践中,收到了较好的效果。
1 Python和matplotlib库介绍
作为一种语法简练的动态语言,Python[1]非常适合初学编程者,可以让初学者把精力集中在编程对象和算法实现上,而不被复杂的语法、变量类型等细节因素干扰思维。Python作为一种脚本语言,非常适合开发小应用,尤其是在课堂教学中用来演示软件模型的结构和功能。
当然,Python也有着运行效率低的缺点。由于是动态语言,还是解释型,所以运行速度比半编译半解释的Java还慢,更不必说以性能见长的C/C 了。其运行时需要占用更多的内存、处理器资源。但对于当前PC机动辄4G、8G,服务器100多G的内存,以及双核、四核甚至32核的处理器来讲,用这点性能损失换取高度的可读性、灵活性和扩展性是非常值得的。
基于Python语言的上述优点,目前有大量的深度学习框架基于Python语言进行开发。例如最早的深度学习框架Theano[2]就是基于Python语言开发的。谷歌公司的开源框架TensorFlow[3]支持Python和C 。图像、视频处理方面的优秀深度学习框架Caffe[4]也提供Python接口。在Python学习热潮的影响下,Facebook公司将原本用Lua语言开发的深度学习框架Torch[5],用Python语言实现,推出了PyTorch。Python的深度学习模块scikit-learn提供了几乎所有的机器学习主流算法。因此,采用Python作为神经网络教学语言,不但能在学习中获得丰富的支持,也能让学生接触技术市场中的主流技术,減少学习成本。
Python中的matplotlib库中包含丰富的绘图函数模块,pyplot模块中的subplot()函数可以将感知机和神经网络权值、偏置值变化过程用一系列的子图绘制出来,加深学生对训练过程的理解。animation模块则提供了动画功能,通过实现init()、animate()函数和调用FuncAnimation()函数,可以进一步把感知机和神经网络权值、偏置值变化过程以更直观的动画的方式演示出来,给学生更加直观的感受。
2 感知机的可视化教学
如图2-1,符号"x"表示分类为-1的元素,符号" "表示分类为1的元素。如果感知机的参数正确,则标"x"的点应位于直线下方,标" "的点应位于直线上方。很明显,当前直线不能正确的将两类点分开,存在3个误分类点。图2-2中,算法选择错误分类点(-1,0)来更新权值和偏置值(每次选中的错误分类点在图2中用菱形标出),使直线移动到了点(-1,0)的上方,该点成为正确分类点。这次更新也让直线越过了点(0,0),使其成为正确分类点,只留下了点(2,0)尚未正确分类。图2-3中,算法使用唯一的一个错误分类点(2,0)来更新权值和偏置值,将直线向(2,0)移动,但这次更新移动距离较小,并未让直线越过该点,该点还是错误分类点。图2-4中,算法继续使用点(2,0)来更新权值和偏置值,直线继续向点(2,0)的方向移动,并成功越过该点。此时得到的感知机参数对7个训练数据完成了分类工作。
对于三维数据,可以用三维图形来演示。对于三维以上的数据,目前无法用图形方式直接表示。但对学生而言,只要彻底理解了二维和三维的感知机算法,更高纬度的算法仅仅是增加了维度,属于量变,其原理本质上是相同的。 3 BP神经网络的可视化教学
为了便于学生理解,教学中可以采用最简单的两层网络来做演示,选择经典的异或问题来训练网络。异或运算Z=X⊕Y,即不带进位的二进制加法,真值表如下:
将输入X、Y作为坐标,将Z作为分类号的话,則这四个点无法通过一条直线将其分为两类,即非线性可分。该问题单层的感知机无法处理,需要用两层神经网络来解决。
神经网络的构造如图所示:
图4-1是原始输入对应的四个点,这四个点是线性不可分的;随机初始化的输出层权值、偏置值确定的直线无法将其正确分类。图4-2中,四个输入点经过了隐藏层的处理,映射到了新的位置,因为随机初始化权值和偏置值都是接近0的量,所以隐藏层两个节点计算求和的值也接近0,而sigmoid(0)的值是0.5,表现在图4-2中就是经过隐藏层处理后的新位置都在点(0.5,0.5)附近。随着算法继续进行,新的权值和偏置值对原位置的改变越来越大,直到图4-6,变换后的四个点变得线性可分,而此时输出层权值和偏置值确定的直线也调整到了合适的位置,将这四个点成功分为两类。
通过动画序列可以直观地看出:两层的神经网络学习算法中,原始的4个输入点在中间层权值矩阵和偏置向量的作用下,每个输入点被映射到了新的位置,使得原本线性不可分的两组点,变得线性可分。而隐藏层只有一个节点,本质上就是一个感知机,其权值和偏置值确定的直线可以将映射变换后线性可分的四个点正确的划分为两类。通过动画演示过程,学生可以加深对BP神经网络的理解。
4 结束语
感知机和神经网络是在计算机和相关专业中的重要课程,其原理抽象、和数学结合紧密。随之而来的是教学中难度大,学生不易理解、不易掌握。本文以数形结合、动画演示的方式来讲解感知机和神经网络的原理和训练过程,为该课程的教学方法做出了一点探索。文中所使用的代码和gif动态图片,可以通过baidu网盘https://pan.baidu.com/s/1brlQ0Jd下载。
由于可视化在教学方面的巨大优势,Google深度学习部门Google Brain的资深工程师Jeff Dean开发了神经网络的可视化工具:Tensorflow游乐场(网址http://playground.tensorflow.org),该工具提供了四种形态的待分类数据,通过网页的形式和用户交互,能灵活的调整网络结构、网络参数和数据特征。对于希望做进一步学习的学生,可以利用该可视化工具来研究其他形态数据在神经网络中训练的情况。
参考文献:
[1] Chun W. Core Python Programming[J].Prentice Hall Ptr Core.2006.
[2] Team T T D,Al-Rfou R, Alain G, et al. Theano: A Python framework for fast computation of mathematical expressions[J]. ArXiv e-prints.2016.
[3] Abadi M, Agarwal A, Barham P, et al. TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems[J]. 2016.
[4] Jia, Yangqing, Shelhamer, et al. Caffe: Convolutional Architecture for Fast Feature Embedding[J]. 2014: 675-678.
[5] Collobert R, Bengio S, Marithoz J. Torch: A Modular Machine Learning Software Library[J]. Idiap. 2002.
[6] Rosenblatt. The perception: a probabilistic model for information storage and organization in the brain[J]. Psychological Review. 1958, 65(6): 386.
[7] 焦李成. 神经网络系统理论[M]. 西北工业大学出版社, 1990.
关键词:Python;可视化;感知机;BP神经网络;教学实践
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2018)19-0178-03
Abstract: In this paper, we perceive the perceptron and BP neural network from a geometric perspective. We explain the classification function of perceptron and neural network with two examples that simple and easy to visualize. We also use python animation to demonstrate how the weights and biases converge gradually. The method introduced in this paper has good effect in the teaching practice, and can help students to build perceptual knowledge of the perceptron and the BP neural network.
Key words: Python; visualization; perseptron; BP neural network;teaching practice
深度学习在图像、语音、自然语言识别,文本分类等方面展现出强大的功能,而深度学习的基础是神经网络。神经网络的原理和训练方法在教学中向来是难点、重点。学生在学习中往往感觉抽象、不易理解掌握。传统的教学中往往着重对原理进行阐述,对权值更新公式进行推导。这种围绕原理和公式为中心的教学方式不够直观,难以让学生对网络的运行过程产生感性的认识。
本文提出的教法围绕两个易于可视化的案例来展开教学。这两个案例基于二维向量,易于用Python语言实现,可以用动画方式来展示神经网络的训练、收敛过程,能方便地修改初始参数,让学生观察不同的初始化数据对网络训练产生的影响。相比传统教学方式,有直观、灵活性强的优点。在教学实践中,收到了较好的效果。
1 Python和matplotlib库介绍
作为一种语法简练的动态语言,Python[1]非常适合初学编程者,可以让初学者把精力集中在编程对象和算法实现上,而不被复杂的语法、变量类型等细节因素干扰思维。Python作为一种脚本语言,非常适合开发小应用,尤其是在课堂教学中用来演示软件模型的结构和功能。
当然,Python也有着运行效率低的缺点。由于是动态语言,还是解释型,所以运行速度比半编译半解释的Java还慢,更不必说以性能见长的C/C 了。其运行时需要占用更多的内存、处理器资源。但对于当前PC机动辄4G、8G,服务器100多G的内存,以及双核、四核甚至32核的处理器来讲,用这点性能损失换取高度的可读性、灵活性和扩展性是非常值得的。
基于Python语言的上述优点,目前有大量的深度学习框架基于Python语言进行开发。例如最早的深度学习框架Theano[2]就是基于Python语言开发的。谷歌公司的开源框架TensorFlow[3]支持Python和C 。图像、视频处理方面的优秀深度学习框架Caffe[4]也提供Python接口。在Python学习热潮的影响下,Facebook公司将原本用Lua语言开发的深度学习框架Torch[5],用Python语言实现,推出了PyTorch。Python的深度学习模块scikit-learn提供了几乎所有的机器学习主流算法。因此,采用Python作为神经网络教学语言,不但能在学习中获得丰富的支持,也能让学生接触技术市场中的主流技术,減少学习成本。
Python中的matplotlib库中包含丰富的绘图函数模块,pyplot模块中的subplot()函数可以将感知机和神经网络权值、偏置值变化过程用一系列的子图绘制出来,加深学生对训练过程的理解。animation模块则提供了动画功能,通过实现init()、animate()函数和调用FuncAnimation()函数,可以进一步把感知机和神经网络权值、偏置值变化过程以更直观的动画的方式演示出来,给学生更加直观的感受。
2 感知机的可视化教学
如图2-1,符号"x"表示分类为-1的元素,符号" "表示分类为1的元素。如果感知机的参数正确,则标"x"的点应位于直线下方,标" "的点应位于直线上方。很明显,当前直线不能正确的将两类点分开,存在3个误分类点。图2-2中,算法选择错误分类点(-1,0)来更新权值和偏置值(每次选中的错误分类点在图2中用菱形标出),使直线移动到了点(-1,0)的上方,该点成为正确分类点。这次更新也让直线越过了点(0,0),使其成为正确分类点,只留下了点(2,0)尚未正确分类。图2-3中,算法使用唯一的一个错误分类点(2,0)来更新权值和偏置值,将直线向(2,0)移动,但这次更新移动距离较小,并未让直线越过该点,该点还是错误分类点。图2-4中,算法继续使用点(2,0)来更新权值和偏置值,直线继续向点(2,0)的方向移动,并成功越过该点。此时得到的感知机参数对7个训练数据完成了分类工作。
对于三维数据,可以用三维图形来演示。对于三维以上的数据,目前无法用图形方式直接表示。但对学生而言,只要彻底理解了二维和三维的感知机算法,更高纬度的算法仅仅是增加了维度,属于量变,其原理本质上是相同的。 3 BP神经网络的可视化教学
为了便于学生理解,教学中可以采用最简单的两层网络来做演示,选择经典的异或问题来训练网络。异或运算Z=X⊕Y,即不带进位的二进制加法,真值表如下:
将输入X、Y作为坐标,将Z作为分类号的话,則这四个点无法通过一条直线将其分为两类,即非线性可分。该问题单层的感知机无法处理,需要用两层神经网络来解决。
神经网络的构造如图所示:
图4-1是原始输入对应的四个点,这四个点是线性不可分的;随机初始化的输出层权值、偏置值确定的直线无法将其正确分类。图4-2中,四个输入点经过了隐藏层的处理,映射到了新的位置,因为随机初始化权值和偏置值都是接近0的量,所以隐藏层两个节点计算求和的值也接近0,而sigmoid(0)的值是0.5,表现在图4-2中就是经过隐藏层处理后的新位置都在点(0.5,0.5)附近。随着算法继续进行,新的权值和偏置值对原位置的改变越来越大,直到图4-6,变换后的四个点变得线性可分,而此时输出层权值和偏置值确定的直线也调整到了合适的位置,将这四个点成功分为两类。
通过动画序列可以直观地看出:两层的神经网络学习算法中,原始的4个输入点在中间层权值矩阵和偏置向量的作用下,每个输入点被映射到了新的位置,使得原本线性不可分的两组点,变得线性可分。而隐藏层只有一个节点,本质上就是一个感知机,其权值和偏置值确定的直线可以将映射变换后线性可分的四个点正确的划分为两类。通过动画演示过程,学生可以加深对BP神经网络的理解。
4 结束语
感知机和神经网络是在计算机和相关专业中的重要课程,其原理抽象、和数学结合紧密。随之而来的是教学中难度大,学生不易理解、不易掌握。本文以数形结合、动画演示的方式来讲解感知机和神经网络的原理和训练过程,为该课程的教学方法做出了一点探索。文中所使用的代码和gif动态图片,可以通过baidu网盘https://pan.baidu.com/s/1brlQ0Jd下载。
由于可视化在教学方面的巨大优势,Google深度学习部门Google Brain的资深工程师Jeff Dean开发了神经网络的可视化工具:Tensorflow游乐场(网址http://playground.tensorflow.org),该工具提供了四种形态的待分类数据,通过网页的形式和用户交互,能灵活的调整网络结构、网络参数和数据特征。对于希望做进一步学习的学生,可以利用该可视化工具来研究其他形态数据在神经网络中训练的情况。
参考文献:
[1] Chun W. Core Python Programming[J].Prentice Hall Ptr Core.2006.
[2] Team T T D,Al-Rfou R, Alain G, et al. Theano: A Python framework for fast computation of mathematical expressions[J]. ArXiv e-prints.2016.
[3] Abadi M, Agarwal A, Barham P, et al. TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems[J]. 2016.
[4] Jia, Yangqing, Shelhamer, et al. Caffe: Convolutional Architecture for Fast Feature Embedding[J]. 2014: 675-678.
[5] Collobert R, Bengio S, Marithoz J. Torch: A Modular Machine Learning Software Library[J]. Idiap. 2002.
[6] Rosenblatt. The perception: a probabilistic model for information storage and organization in the brain[J]. Psychological Review. 1958, 65(6): 386.
[7] 焦李成. 神经网络系统理论[M]. 西北工业大学出版社, 1990.