陈建敏,徐苏丽,马晓松,程茜宇
关键字:深度学习;精准资助;深度神经网络;贫困生
当代社会各个领域都在向着智能化迈进,高校精准扶贫方面也不例外。利用深度学习的有关技术进行预测和分类评定,实现精准分类识别贫困生,以解决贫困资助评定标准单一化、不一致以及诸多人为因素,可见智能化在解决贫困生资助问题上已经越来越重要。本文通过对深度神经网络算法的研究,利用TensorFlow框架,通过研究分析数据,精准识别高校贫困生及精准评估,并结合智慧校园建设,实现动态监管,实现学生资助的实时更新,从而高效、科学、公平地实现贫困生资助。
九十年代中期,高校贫困资助才开始研究,并于二十世纪初期才形成较完整成熟的理论体系。国家精准扶贫的战略布局,使得社会也非常关注高校贫困生的精准资助问题。《高校贫困生发展性资助理念及管理体系研究》高度总结和概括了现行的高校资助工作[1]。直至2004年6月,才建立了风险补偿机制,并且调整了助学贷款政策,使得贷款风险降低。2007年5月,国家在高等教育阶段设立师范生免费教育、学费减免、励志奖学金等多种资助体系,给很多家庭贫困的学生带去了上大学的机会和保障。但目前贫困生认定工作还是存在着以下问题。
高校都是从申请人填写的各种情况调查表中认定困难学生,这些表中涉及的“年收入”这一项主要是学生自己估计数字填写,当地民政等相关部门难以全面细致掌握本地全部家庭经济情况,又出于各种因素考虑,只要学生申请就予以盖章,从而就会出现各种问题,比如说学生填报的经济情况不真实,分不清学生填写的家庭困难情况的真假[2]。
目前,高校资助工作中对贫困生的认定,都是在每年九月份进行并录入资助平台。录入平台的贫困生,高校就不会从贫困生库中去移除某个贫困生,但是现实中,有些学生在认定为贫困生时确实是贫困的,但是随着时间推移,该学生家庭收入增加,各方面已经不属于贫困生行列。不能及时掌握每位贫困生家庭经济变化情况,也就无法动态管理贫困生并做到精准资助[3],这是精准资助动态管理亟待解决的问题。
精准识别贫困生是高校资助工作的关键,高校资助工作的公平取决于是否能精准识别贫困生的等级。现阶段,界定高校贫困生的办法主要是依据学生提供的申请表,对于提出申请的学生,学校成立评议小组并进行评议。一般评议小组根据贫困生的申请,根据申请表内容、消费水平或者是居民最低生活保障线比照等方法界定贫困生等级,这些方法仅限于学生申请表的内容,很难真实反映学生的实际贫困情况,同时更难发现不提交申请但确实属于贫困的学生[4]。
本文提取学校各大系统平台中的学生的基本信息、家庭信息、各类消费信息以及学习、生活情况。以现存的大量贫困生基础信息为依据,通过深度学习,形成一个稳定的贫困等级分类认定模型,从而实现精准资助的目的。
精准资助,不仅要完成对高校贫困生资助,还要求让每一个贫困学生都享受到相对应等级的资助,以达到助学的目的。除此之外,还要实现动态监测,实时监控贫困学生家庭经济变化情况,动态生成贫困学生贫困等级,深度分析出潜在贫困对象,提供相关数据,使得有关部门能有针对地做好资助工作。
高校困难学生资助工作中,精准资助工作的关键在于界定贫困生,掌握真实的贫困生需求,动态地管理贫困生。立足于大数据,借助于深度学习技术,建立动态的、精准的资助管理平台,从而实现精准资助。
Python既支持面向过程编程又完全支持面向对象编程,通俗易懂,并且拥有大量的几乎支持所有领域的应用开发的成熟扩展库;Python具有开源、可移植性高、解释性语言、丰富的扩展库和规范的代码格式等特点。Python常用开发工具很多,本文使用的是Anaconda,Anaconda包含了大量的Python和conda的科学包。
人工智能(Artificial Intelligence),英文缩写是AI,研究关键着眼于人的思维、意识,并将人的这些行为通过数学工具运算与分析让机器模拟实现。人工智能运用范围很广泛,其中包括了虹膜识别、人脸识别、智能搜索、博弈、遗传编程等。
人工智能的核心是机器学习。机器学习,即Machine Learning,简写ML。就是让机器像人一样有学习能力,或者说让机器模拟人类实现学习的一种行为。
深度学习,即Deep Learning,是机器学习的分支,类似于仿生学,只是仿生的对象是人,而学习者是机器。深度学习就是让机器依照人类大脑的思考方式和神经接收、反馈信息的方式进行学习。
深度学习过程是训练多层神经网络的过程。神经网络,即Deep Neural Network,缩写是DNN。DNN指的是全连接的神经元结构,包括输入层、隐藏层和输出层。DNN的不断优化,其主要优势是将神经网络的隐藏层成功地推动到七层甚至更多,从而解决之前对稍复杂的函数都无能为力的状况。
神经网络就是一个前向计算,反向传播的过程。每一层都在计算z=wx+b,a=g(z)。算出最后输出层的时候,使用方向传播,更新权重值w。更新的方式就是求梯度,也就是方向导数,w赋予新值w=w-梯度值,如此循环下去,不断迭代。DNN中Relu函数代替了原有Sigmoid函数,Relu函数是一个分段函数,当“x>0”时,“y=x”,当“x≤0 ”时,“y=0 ”。反向传播函数也就是对该函数分段求导。
TensorFlow框架是在Python语言的基础上,一种深度学习的工具。Tensor Flow是Google公司2015年年底发布的机器学习平台,为神经网络学习提供服务。整个系统主要分为七层,分别是设备层、网络层、数值计算层、高维计算层、计算图层、工作流层、视图层。
借助于高校已有的系统平台和云服务器,从高校各大系统平台提取相应的数据信息,构建样本库,并对样本库中数据进行预处理,以原有贫困资助数据为基础,利用DNN算法,利用随机梯度下降算法优化,构造出能动态监测和预测出贫困生等级分类的高校精准资助模型,如图1所示。
图1 基于深度学习的高校精准资助模型
构建的基于深度学习的高校精准资助模型,按照数据采集、数据分析、预测分类三个层次构建,每层都与各大系统平台通过云服务器进行交互,动态训练数据集,动态地得出最精准的贫困预测分类信息。
1.数据采集
利用高校中的高招、教务教学、学生管理、一卡通等系统平台,通过云服务平台收集所需的数据信息,构建样本库。收集的数据包括学生姓名,生源地信息,家庭人数、家庭年收入,家庭是否有重大疾病患者,学生在校的基础信息,食堂、超市消费,上网费用及消费,学习成绩,旷课信息,课堂表现信息,教师评价,门禁信息等数据。
2.数据分析
数据采集来自于不同系统,数据是否有不规范、是否有缺失不得而知,数据样本分布不均衡,数据分析和预处理也就是解决这些问题。首先,进行数据抽取,所有采集的数据并不是都有利用价值,也不需要全部加入模型预测的维度中,有些数据需要进行整合形成新的维度。其次,进行数据清洗,分析出数据的基本情况,并将缺失、不规范等数据“清洗干净”,本文利用平均值法填充缺失数据。最后,清洗完成的数据还需要进行处理,对于非数值型信息需要数值化和归一化处理,因为有些数值之间不存在大小关系,比如说学生的生源地信息,取其生源地代码,但生源地之间没有大小之分,必须弱化数值的大小带来的负面影响,采取归一化处理方式。
3.预测分类
在Tensor Flow框架中,使用深度神经网络DNN模型,引入随机梯度下降算法,对样本数据集进行训练。将样本数据处理为矩阵和标签,并创建新的数据集,对数据集进行洗牌,并且重复50次,对每个批次50个样本进行训练,这样保证了样本的随机性,同时也保证了模型训练时数据能源源不断供应。训练完成后需要调用模型评估方法利用测试集去测试模型的准确率,随后才能投入到数据的预测中去,准确率达不到理想状态的,需要调整维度和优化算法。
样本数据越齐全和丰富,训练出来的模型就越精准。除此之外,构建验证集来验证其分类准确率。本文中的模型不仅仅实现了对高校贫困生的精准分类预测,实时交互,将结果反馈给系统平台,系统平台实时更新数据,贫困生等级也是根据数据的变化而变化的。
基于深度学习的高校精准资助模型,以Python语言为基础,算法伪代码实现如下。
(1)从各大系统平台中提取数据,汇总抽取所需的数据,利用Python中的Numpy和Pandas包对数据进行分析,并清洗预处理数据。
(2)对清洗后的数据,利用One-Hot编码进行归一化处理。ohe=OneHotEncoder(),X=pd.DataFrame[ohe.fit_transform(X).toarray()],X.columns=X.columns.map(lambda x:f"c{x}")。
(3)利用“with...open”设置函数poverty_level_result(path,data)保存预测结果。
(4)定义训练方法和评估方法。使用参数传递过来的特征矩阵与标签,创建数据集:dataset=tf.data.Dataset.from_tensor_slices((dict(features),labels))。对数据集进行洗牌,并重复50次,每批次50个样本,进行训练:dataset=dataset.shuffle(10000,seed=0).repeat(50).batch(50)。
(5)定义深度神经网络,加载数据并进行训练和预测。
classifier=tf.estimator.DNNClassifier(feature_columns=my_feature_columns,hidden_units=[700]*2,n_classes=6,config=config,optimizer="SGD"),给出定义,用来进行分类,采用随机梯度下降算法,隐藏层为700*2。
对模型进行训练定义,classifier.train(input_fn=lambda:train_input_fn(train_X,train_y))。调用测试方法预测数据,predictions=classifier.predict(input_fn=lambda:eval_input_fn(test_X))。
神经网络不是隐藏层层次越多越好,也不是神经元个数越多越理想。多个隐藏层其实是对输入特征多层次的抽象,最终的目的就是为了更好地线性划分不同类型的数据。隐藏层次是从1屋至5层逐层递增,每一层神经元个数也是以50涨幅从50个增至1000个。测试结果是2层700个神经元最佳。
除此之外,增加L1与L2正则化,调整权重,避免过度拟合;增加动量学习因子,基于上一轮的梯度,加快权重更新的学习;使用自适应学习率来代替传统的固定学习率,自适应学习率是随着时间的增长,学习率会逐渐减少,以便于更好地收敛。
鉴于此模型依赖于深度神经网络DNN算法,模型的运行环境除了最基本的操作系统外,还需要配置Python、导入涉及的tensor Flow、Pandas、Numpy等数据包及配置其相关工具的运行环境。
(1)官网下载Anaconda并进行安装。安装完成后已经集成了Python,如使用Pycham开发工具,则需要先到官网下载Python数据包,可以下载Python3.6.4以满足模型算法实现,安装完后需要配置环境变量。
(2)配置Tensor Flow(CPU版)框架。以Windows10为例,进入到Anaconda Prompt模式(可以通过cmd进入),首先,利用conda—version语句回车监测Anaconda是否安装成功。其次,在Anaconda Prompt中利用conda create-n tensorflow Python=3.5命令创建一个Python3.5的环境,环境名称为Tensor Flow。完成后,利用pip install Tensor Flow安装Tensor Flow(CPU版)框架。如使用的是Pycham工具,则在Pycham中直接借助于豆瓣网站资源安装Tensor Flow框架,命令如:pip install tensorflow-i http://pypi.douban.com/simple/。
本文采用的结果标签是贫困等级,共有5万个样本。包含六类,学生的贫困等级样本集为S={0,1,2,3,4,5},0表示非贫困等级,1表示一般贫困等级,2表示贫困等级,3表示重点贫困等级,4表示特殊贫困等级,5表示潜在困难等级。从各个等级分析来看,整个贫困生的分布相差还是比较均衡的,潜在贫困生的人数最少,非贫困生人数最多,符合实际情况。
通过模型训练,贫困生分类的结果精准度高达99.95%以上,同时损失率也有效保障了贫困生认定,允许将个别非贫困生纳入贫困等级中,尽可能避免贫困生被排除到非贫困等级。
随着人工智能技术的不断发展,胶囊网络(Capsule Network)、联合学习(Federated Learning)和强化学习(Reinforcement Learning)的不断深入研究和应用,高校精准资助需求也越来越个性化,在确定贫困分类的基础上,下一步将深入对每个贫困学生的最适合需求进行研究。