一、神经网络简介
机器学习与神经网络
- 机器学习是一类实现人工智能的方法总称,让计算机模拟或实现人类的学习行为
- 神经网络是实现机器学习的一种模型
- 实现机器学习的模型还有支持向量机,决策树,朴素贝叶斯分类器等
神经网络能用来做什么
- 已知7人的身高和体重,以及是否达到8岁的数据
- 现在又来了个人,身高128cm, 体重24kg
- 如何判断此人是否达到8岁?
什么叫做神经网络
- 有现成的一组数据,既有其特征(自变量x,身高体重)也有其标签(因变量y,是否8岁了)
- 找出特征和标签之间的"关系"(建立神经网络模型)
- 从而利用该"关系",把另一组特征对应的标签给求出来
- 神经网络由多层的神经元(节点)构成,不同层之间的神经元通过权重连接
- 隐藏层和输出层的神经元中有激活函数,收到的数据作为自变量,计算出结果
- 计算出的结果与权重相乘后累加传递到下一层,或输出最终结果
二、适用赛题
预测类问题
- 预测未来的结果,一般为回归问题,即输出值y是连续的
- 美赛2022年C题比特币和黄金投资策略,LSTM(长短时记忆网络)进行预测
- 短时交通流量预测(小波神经网络的时间序列)
- 电力负荷预测(Elman神经网络,具有延时记忆,适合动态建模)
分类问题
- 对现有的对象进行分类,一般为离散问题,即输出值y是有限个离散值
- 美赛2021年C题黄蜂传播规律和目击准确性,卷积神经网进行图像识别
- 人体肿瘤诊断(LVQ神经网络,无需数据预处理,微适合模式识别和优化)
- 柴油机故障判断(SOM神经网络,适合需要聚类的问题)
评价类问题
- 嘉陵江水质评价(模糊神经网络),高校科研能力评价(离散Hopfield神经网络)
- 本质上与预测和分类相同,只不过题目问的是"评价结果"而已
先学会最基础的神经网络原理,遇到题目后再去翻书现学现用
注意事项
神经网络基本模型+其他模型=沃兹基胡硕德模型
- 需要针对具体问题量身定做,而不是把神经网络当做万能模版
- 不懂别乱用,否则将喜获成功参赛奖
- 近些年数模竞赛中,神经网络等启发式算法出现了严重的滥用
举个例子:计算1+1=?
- 正常做法:由数学公理可知,结果为2
- 舍本逐末:基于蚁群算法优化BP神经网络求得近似解为1.9987
不是不能用,而是不要滥用!!!
三、原理讲解
注:因为在MATLAB中神经网络一般不需要自己写代码,MATLAB有自带的工具箱,可以构建神经网络,所以这里只对神经网络的原理做一些介绍。
还是以刚刚的问题为例子:景区规定8周岁以下儿童可半价票,如何根据一个人的身高和体重,判断其是否可以买半价票?
生物学的神经网络
- 神经元树突收到输入信号
- 信号刺激细胞核,达到阈值后会产生输出
- 输出就是进一步的信号,传到下一个神经元
感知机模型:最简单的神经网络
- 输入层:输入身高x1和体重x2
- 激活函数:综合判断输入信号是否达到阈值
- 输出层:激活函数的函数值就是输出值y
只有输入层和输出层的神经网络,称为感知机
问题:如何综合考虑身高(x1)和体重(x2),判断是否达到了8周岁(阈值b)
- 结果只能有"未达到"和"达到"
- 需要的函数值只有0和1,可用阶跃函数作为激活函数
其他的激活函数
怎样实现"综合考虑"?
- 线性求和Σwixi(权重wi代表变量xi的重要性)
- 求和意味着身高和体重(即所有变量)都考虑到了
如何根据"综合考虑"的结果进行判断?
- 当设线性求和的结果足够大,与阈值的差值作为激活函数的自变量t = Σwixi - b
- wi是第i个变量的权重,区分不同变量对结果的影响程度
- 输入数据后,权重和阈值决定了输出结果
输出结果
- 可能结果:t = Σwixi - b ≥ 0 ⟺ f(t) = 1 ⟺ "综合考虑"身高和体重超过了"阈值"
- 感知机输出值为1,则判定此人达到了8周岁
- 阈值b看作数值固定为-1的节点(即x3 = -1)的权重w3
神经网络的核心,就在于如何确定权重,以确保输出正确答案
基本模型:
- xi为第i个已知的参数
- y为待求的输出值
- 该模型还需确定权值wi
问题转化:权值wi该怎么设定
- 模型初始化时,wi随便设置个初始值
- 学习:从已知数据中学得模型参数(确定权重wi)
本质:不断地更改权重wi,使得模型求出的预测值尽可能地接近真实值
- Step1:模型初始化,人为设置权重wi初始值
- Step2:搜集多个人的身高x1、体重x2和是否达到8周岁y的数据
- Step3:将搜集到的x1和x2代入模型,求得估计值y
- Step4:将模型求的估计值y与搜集到的实际值y比较,差别越小越好
- Step5:直到满足终止条件,否则继续对权重wi进行优化,重复Step3到5
- 终止条件:估计值和实际值的差值小到一定程度为止
问题转换:Step5中,如何对权重wi进行优化?
本示例以差值作为的模型好坏的评估指标,更常见的有均方误差、平方绝对误差等
总结:景区规定8周岁的儿童以下可买半价票。但儿童往往没有身份证,难以准确判断年龄,如何根据一个人的身高和体重,判断其是否可以买半价票?
- 本题感知机:
- 激活函数f的表达式已知,身高x1和体重x2已知,需要确定权重wi
- 根据搜集到的训练数据集,不断优化权重wi
- 直到达到终止条件后模型就建好了
问题:既然单层的感知机能解决问题,为什么常见的神经网络都是多层的?
更复杂的情况
- 感知机只拥有输出层进行激活函数处理,若问题是线性可分的,则感知机一定会收敛
- 非线性可分问题:异或问题,感知机无法收敛
总结
- MATLAB和GitHub上都有现成的工具包,无需原创代码
- 再复杂的神经网络,思路都可总结为以下三点:
- 搜集数据集(xi, y),将xi代入初始的神经网络模型,计算估计值yy
- 根据yy与y的差异不断更改权重wi,使其误差尽可能的小(梯度下降)
- 大量数据训练后,再输入新的数据x,模型就可以求出y用于分类/预测/评价了
- 数据集是题目给的,或者自己搜集的,决定了整个模型的生死
- 记得做好数据预处理(处理缺失值、异常值)
模型的泛化能力:确保模型真的能用
如何证明你建立的神经网络模型是靠谱的?
- 留出法:将搜集到的数据划分为训练集、验证集和测试集
- 训练集进行学习、训练参数(权重)
- 验证集来检验性能(学习率等),以调整超参数或及时停止训练
- 测试集给出客观的评价
- (此外还有交叉验证法、自助法)
可能遇到的问题
- 过拟合:把特殊当一般(见过的天鹅都是白的,就以为天鹅只有白色的)
- 欠拟合:一般性质都没学好("后浪"里讲述的都是年轻人,就以为年轻人都是后浪)
过拟合是因为"死记硬背",欠拟合是因为"啥都不会"
过拟合的原因
- 数据集有噪声(缺失值、异常值,无用特征等等)
- 训练集的数据量不足(训练集的分布与总体样本的不一致)
- 训练模型过度,导致模型非常复杂(完全拟合了训练集、无法接受新数据)
过拟合的解决方法
- 尽量寻找更多的数据集,并做好预处理
- 去除无用的特征(判断一个人是否达到8岁,与他鞋子的颜色无关)
- 早停策略:在即将过拟合的时候立刻停止训练
- 正则化策略:损失函数中加入惩罚项来降低模型复杂度,特征越多惩罚越大
欠拟合
- 与过拟合相反,是由于训练不足造成的,可在模型中增加特征来增大网络复杂度
本篇帮大家快速了解神经网络的基本思想,避开了大量数学推理证明。对于做数模竞赛,先理解本篇讲的概念,然后学会使用MATLAB实现BP神经网络(不需要过于深究原理),等比赛时遇到赛题再去翻书查资料。机器学习/神经网络/深度学习背后的水很深,立志深耕该领域的话做好脱发的准备。