陈凯
在人工智能教学中,大概很难绕过人工神经网络这部分内容。神经网络的搭建和训练既抽象又繁杂,在基础教育阶段,教学课时以及学习者的技能水平有限,教师需要仔细权衡如何选择教学重点和教学方式。本文介绍一个名叫“神经网络训练营”的活动项目,该活动以“MemBrain”软件为工具,让学习者扮演神经元的教官,亲自体验搭建并训练神经网络的整个过程,高效地完成“神经网络怎么搭建”与“神经网络怎么训练”的学习目标。在达成此学习目标后,便可比较平滑地进阶到神经网络框架和神经网络算法的学习。
● 训练营开班啦
考虑到教官能力有限,神经网络训练营初级班的学员不多,来到本班的共有四个神经元,先给神经元们安排下座位吧,如图1所示。
工具栏里有一个画着正方形的“Insert new neurons”按钮,用这个按钮来安排学员座位。学员的学号默认为从1到4。
● 教官布置任务
默认情况下,神经元们非常“笨”,不知道要做些什么。教官的训练任务挺简单,名称叫“谦虚友善而又不浪费机会的决策者”,任务情境如下:假设有两张游乐园的票,若已经有两个人举手抢票,那么决策者就决定不参与抢票,如果只有一人举手抢票或没有人抢票,那么决策者就拿下这张票。用表格呈现出来就如表1所示。
如果把不抢票标为0,抢票标为1,则可发现,这其实是与非门(NAND)的逻辑关系。所以说,教官的任务,就是让四个神经元能相互合作,表现出与非门的运算过程。
● 给学员分配角色
将1号神经元和2号神经元作为输入A和输入B,4号神经元作为输出O,分配角色的方法很简单,双击神经元,打开“Edit Object Properties”对话框,在“Type”下拉菜单里选择“Input”或“Output”即可,如图2所示。
3号神经元的作用比较特殊,将它也设置为“Input”类型,但它在后面的训练过程中,起的并不是输入的作用,而是协助计算的作用,稍后就可知道原因。除了“Input”和“Output”类型之外,还有一种“Hidden”类型,在将来解决分类识别问题时极其有用。
● 学员手拉手
神经元没有眼睛、耳朵、嘴巴、鼻子,为了让它们之间能相互协作,可以将神经元连接起来,通过手拉手(触手相连)的方式来传递信息,如图3所示。
你是不是发现4号神经元有三只手?这不奇怪,它们是神经元,有再多只触手都是可以的。通过触手可以将一个神经元的信息传递给另一个神经元,不过所谓的信息,只是一个可正可负的强度值。好比一个人握住你的手,他可能握得很重也可能握得很轻,但你并不能知道某一次重重的握手代表的究竟是欣赏还是讨厌。
如果双击4号神经元,可以发现,作为输出类型的神经元,它有着更多可选项,用来决定接受到何种程度刺激后才被激活,如图4所示。
选中“Lock Act. Thres. for Teacher”,表示将神经元受刺激的阈值固定下来,由于输入的刺激信号有正有负,默认情况下,如果接受的刺激信号为正,则当前神经元被激活(模拟表现为闪闪发光),否则就不产生动作。神经元没有被激活时保持静默,被激活后就会对外界发送信息。在“MemBrain”中,被激活的神经元会闪闪发光。
虽然说,神经元发出信号只有1(发光)和0(不发光)两种状态,可在信号的传递中,由于触手的强度不同,它传出的以及对方神经元所接收到的信号的强度大小也会不同。触手的强度值有一个专业的术语,称为权重。点击神经元之间的线条,就可以查看当前的权重值。
● 教官发放训练要求
神经元各自的任务以及神经元之间的连接关系确立后,教官就可以发放训练要求了。点击工具栏里的书写板形状的“Show Lesson Editor”按钮,填写训练要求,如图5所示。
第一条训练要求是,1号和2号神经元输入为“0”和“0”,4号神经元输出为“1”,然后点击“New Pattern”按钮输入其他规则,由于3号神经元为协助运算,所以总是填写“1”,输入和输出规则如表2所示。
● 开始训练
点击工具栏里的“灯泡”按钮,就可以一步一步训练神经元啦。所谓训练,其實就是调整神经元之间的触手强度值即权重,使得这个神经网络的信号传递能够越来越接近预先设定的训练要求。可以点击神经元之间的连线,观察触手的强度值,即权重是怎么一点一点发生变化的(至于权重是怎么一点一点发生变化的,就要深入学习神经网络的算法了)。如果不喜欢反复点“灯泡”按钮一步一步训练,还可以点“感叹号”按钮自动执行批量的训练。一般在训练开始之前,可将初始的权重值设置为随机值。
这一次的训练结果如图6所示,三条连线的权重分别是-23.4、-23.4和35.1。
如果1号和2号神经元数值分别为0和1,则4号神经元获得强度值的计算过程是:0*-23.4+1*-23.4+ 1*35.1=11.7。结果是接受到一个强度为正的刺激,所以4号神经元被激活闪闪发光。如果1号和2号神经元数值都是0,因为3号神经元是正值,所以最后4号神经元接受到的也是正值,这里就可以看出3号神经元是如何促成逻辑运算结果成立的。
如果1号和2号神经元数值都是1,则4号神经元获得强度值的计算过程是:1*-23.4+1*
-23.4+1*35.1=-11.7。接受到的是一个强度为负的刺激,所以4号神经元不发光。
到此为止,预定任务都已达成,神经元训练营初级班顺利结营。然而,这只是学习的开始。要想让神经网络做更多的事情,就还要:①了解不同的刺激函数,利用不同刺激函数以及不同的激发阈值,在接收信号强度和被激活状况两者间建立起对应关系;②尝试在神经网络中添加隐藏(Hiddeen)层,使其能完成复杂的分类任务,比如说,可以试着用两个输入神经元、三个隐藏层神经元、一个输出神经元来实现异或运算;③了解神经元连线强度即信号传递权重以及神经元的被激活阈值是如何逐渐自动调整的,这就涉及不同的神经网络算法,最终无疑要落实到程序设计上。
本文的例子,或许能够用来说明一个较为有效的人工智能教学活动项目应该有的几个特征:它具有比较强的直观性和互动性,能够很快为学习者提供反馈;它上手简单,知识技能进阶平缓;它能够根据特定任务快速建立起学习框架,在框架中提供给学习者充分的自主探索的空间;它能将复杂的原理封装成模块,既能将这些模块以黑箱的形式进行组装实验,又提供了打开黑箱深入了解内部原理的途径;它能够揭示知识和技能之间的逻辑关系,清晰地指明未来进阶学习的路径。