20210209 -

0. 引言

本次写这篇文章是因为最近在训练的过程中,遇到了这个问题,而遇到这个问题其实也挺奇葩。因为之前的时候,也遇到过,但是那时候没有这样想,没有往这个方向想也是因为现象不同。因此也因为这个问题让我反思。

首先来说一下具体现象。

今天在进行调试神经网络的时候,简单修改了层数和神经元个数,一开始没当回事,但是在重新测试的时候,却发现性能大不如从前,最后损失值稳定在了一个值。

这个问题很简单,没什么大不了的,但是如果是以前的话,我就会觉得,肯定是这个数据不太好(因为之前遇到过这种情况,跟别人论文中得到的效果差不多),但是这次的这个数据相对来说比较简单,而且我确信,之前的时候是肯定能达到非常好的效果的。

我感觉,前面的现象是落入了局部最优点(数据都是一样的,没有经过随机化)。而以前的时候可能不会这么想,那么这就让我反思自己,是不是我之前的时候也遇到了这种问题呢?(当然,那种跟别人的效果差不多的除外)。

总的来说,在最近的实验中发现,我明明能够达到比较好的效果,有时候修改了一些内容,有时候没有修改内容,结果性能相差很大。如果不是因为看到了有非常好的效果存在,我可能都想不到这个问题。这让我反过来思考这个问题。

其实之前的时候,也看到过过很多文章或者书籍提到,局部最优解的问题,或者说训练过程中遇到的问题,但是平时可能很少遇到,光看理论自然就没啥用。特别是,平时如果是仅仅学习网上的文章,跟着实验一下,但是这种实验一般效果都非常好,就导致无法意识到这些问题。

所以这篇文章就来记录一下,当然,文章的主题应该更具体,面更大一点,那就是,当神经网络的性能不好怎么办

1. 怎么寻找问题

这里的问题就是,如果是发现了这种情况,应该怎么办。目前来看,根据以前看过的一些书籍也好,文章也好,是无法从别的地方能够体现出来是不是陷入了局部最优点的,这一点很像之前的之后学习核函数的时候看的内容,你也不知道哪一种是最好的,你只能一个一个尝试。

所以这篇文章自然也给不出万能的解决方案,也只能是给出一些提示。

那么既然讨论到了这个地方,就首先来看看平时使用神经网络的过程。

1.1 使用神经网络的过程

这里主要分析分类过程,对于回归或者预测过程来说,是相似的。

  1. 处理输入数据,归一化数据,归一化数据是为了能够让神经元更好的拟合,有些激活函数的输出范围是0-1或者-1-1.
  2. 处理输出数据,输出数据主要是将标签数据配合神经网络的输出,二分类只需要一个输出元就可以了,多分类最后一层的激活函数需要softmax来处理;一般都需要将输出标签输出为类别的个数。
  3. 训练过程,在定义好相关的损失函数之后,就需要利用训练过程来逐步优化损失函数,训练过程就是逐步调整神经元的权值,求到一个优化解。
  4. 测试过程,训练完成之后,就是通过测试数据来当前的模型

实际上,在上面的步骤中,训练过程是最重要的;将整个过程定义为一个优化问题,那么也就是要找到最好的权值,这个权值能够得到比较好的分类效果。

1.2 训练过程

在神经网络的训练过程中,目标就是找到全局最优解,当然有时候最优解可能也不是最好的,可能这个时候已经过拟合了[1];这里暂时不考虑这种情况。先来说,全局最优解。

在神经网络代码的编写过程中,例如使用keras库,都需要指定优化器,也可以不指定,他会默认选择一个。优化器的作用就是,帮助训练过程时进行神经元的权值调整。那么这个时候,可能遇到的问题就是局部最优解。

到达了局部最优解的时候,神经网络的损失函数就不再下降了。这里仅仅介绍了局部最优解的问题,实际上,还有两个问题[2]。在训练过程中,优化问题存在3个重点问题,或者说挑战:

  1. 局部最优解
  2. 平缓区域,又称为鞍点
  3. 高维数据

而这三个挑战,在训练过程上导致的结果也有3个:

  1. 可行解质量不行,也就是获得了一个局部最优解
  2. 训练时间非常长,由于优化方法一般都是采用了递归计算的方式,那么只能逐步到达优化解
  3. 训练失败,损失函数不再下降,到达了平缓区域,无法继续下降。

1.3 寻找问题

前面已经列出了使用神经网络的大致过程,而比较重要的就是训练过程,当数据都已经预处理完成了。(归一化是必须的)

那么如此来说,训练过程中有哪些步骤可以选择?不仅仅是训练过程的优化器,还有整个神经网络的设计过程,这里不考虑神经元个数和层数的问题,而是考虑其他的内容,这里简单列举几个部分:
1)神经元的初始权值,在有些书籍中已经指出,神经元权值的初始化很重要,有时候也是导致局部最优解的原因
2)优化器,有些优化器就是为了解决局部最优解而提出的
3)激活函数,这个是我以前测试的时候发现的。

目前来说,我能想到的问题就是这些,其他的肯定还有,但是个人能力有限。

2. 问题的解决

前面列举了一些关键的问题,包括训练过程中可能遇到的几个问题,这里暂时不考虑训练时间长的问题。那么重点也就是局部最优解和平缓区域的问题。但是这种问题,怎么说呢,从理论上来进行思考,有点难。平时的时候,主要还是通过调参,调整各个部分的数据,来实现更好的效果。这里这不可能将所有的为解决方案都找到,所以这里作为后续学习过程中记录低点。当前来看,我能想到的一个办法,就是权值初始化,另外一个就是优化器的选择,不过,这个优化器之间他们虽然各有优点,但是怎么样从数据的角度得到指示,让我知道这个优化器不好呢?!
当然前面也说到,这种不是很好做到,就像是核函数的角度一样,你无法知道哪个是最好的,只能逐个试。但是我觉得,应该也有人做过相关的研究,能够有一些经验性的结论。

2.1 权值初始化

这部分可以作为后续可以选择的方案。

2.2 优化器的选择

实验过程中,直接使用了默认的优化器,即没有指定具体的参数,这个时候最高效果只有88%;而更换了SGD之后,可以达到99%,当然即使是这样,也并不能说明这种方法在任何情况下都会有效果。

model.compile(loss = 'categorical_crossentropy',optimizer = SGD(),#optimizer = Adam(learning_rate=0.01),metrics = [tf.keras.metrics.Precision(),tf.keras.metrics.Recall(), tf.keras.metrics.categorical_accuracy]
)

参考

[1]Understanding Local Minima in Neural-Network Training
[2]Why Training a Neural Network Is Hard

当神经网络的性能不好怎么办?相关推荐

  1. DeepMind最新发现!神经网络的性能竟然优于神经符号模型

    来源:  新智元 本文约1700字,建议阅读5分钟 根据研究人员的最新发现,神经网络对数据的要求,居然比神经符号模型还要低! [ 导读 ]DeepMind最新的研究结果再一次打破了传统认知--根据研究 ...

  2. 机器学习速成课程 | 练习 | Google Development——编程练习:提高神经网络的性能

    提高神经网络性能 学习目标:通过将特征标准化并应用各种优化算法来提高神经网络的性能 注意:本练习中介绍的优化方法并非专门针对神经网络:这些方法可有效改进大多数类型的模型. 设置 首先,我们将加载数据. ...

  3. Java多线程学习二十七:AtomicInteger 在高并发下性能不好,如何解决?为什么?

    AtomicInteger 在高并发下性能不好,如何解决?以及为什么会出现这种情况? 我们知道在 JDK1.5 中新增了并发情况下使用的 Integer/Long 所对应的原子类 AtomicInte ...

  4. 思考:机器学习方法性能不好怎么办?!

    20210110 - 起笔于10点29分 0. 引言 我觉得这个问题很值得思考,你跑了一个算法,然后发现算法性能不好,这个时候该怎么办?在以前的时候,阅读某些材料时,看到过这样的说法:如果算法结果不好 ...

  5. 神经网络怎么看训练效果,神经网络训练效果不好

    神经网络训练时准确度突然变得急剧下降,为啥? 谷歌人工智能写作项目:神经网络伪原创 神经网络训练一定次数后准确率突然下降怎么回事? 神经网络训练为什么效果不佳 那是肯定有影响的.你这样理解,就像你让一 ...

  6. 神经网络训练时间太长,神经网络训练效果不好

    一般神经网络要训练多久 谷歌人工智能写作项目:小发猫 神经网络优缺点, 优点:(1)具有自学习功能AI爱发猫.例如实现图像识别时,只在先把许多不同的图像样板和对应的应识别的结果输入人工神经网络,网络就 ...

  7. 2*2矩阵训练集比例对BP神经网络分类性能影响

    r1 r2     <1 <1 吸引子 c >1 >1 排斥子 p >1 <1 鞍点 a <1 >1 反鞍点 fa 构造一个网络 d2( x(a||fa ...

  8. 神经网络推理_分析神经网络推理性能的新工具

    神经网络推理 Measuring the inference time of a trained deep neural model on different hardware devices is ...

  9. 神经网络拟合函数表达式,神经网络拟合效果不好

    神经网络,什么过拟合?,什么是欠拟合? 欠拟合是指模型不能在训练集上获得足够低的误差.而过拟合是指训练误差和测试误差之间的差距太大.考虑过多,超出自变量的一般含义维度,过多考虑噪声,会造成过拟合. 可 ...

最新文章

  1. CA双向认证的时候,如果一开始下载的证书就有问题的,怎么保证以后的交易没有问题?...
  2. 【❤️算法系列之顺序二叉树的实现(前序遍历、中序遍历、后序遍历)❤️】
  3. linux shell命令行及脚本编程实例详解_超全整理!这些Shell编程必备知识你都掌握了吗?...
  4. 持续集成与持续部署宝典Part 2:创建持续集成流水线
  5. postgresql 使用pg_restore时显示role root does not exist的解决办法
  6. 关于 Appium 各种版本的安装,都在这里
  7. 访问HDFS报错:org.apache.hadoop.security.AccessControlException: Permission denied
  8. shell一周学习心得
  9. 通过笔记本设置wifi共享
  10. 转盘抽奖脚本html,转盘抽奖脚本自己撸
  11. ps如何图片调色教程及ps有哪些好用的调色滤镜插件
  12. 台式机U盘安装Centos 安装界面黑屏并且没有网卡驱动
  13. 编程语言【JAVA】编程(4)---摇色子
  14. Mathematica(26)-在软件中插入图片
  15. “逃犯克星”张学友演唱会完成八杀,幕后功臣竟然是它
  16. pandas DataFrame数据重命名列名的几种方式
  17. vue后台管理upload(图片上传)
  18. Lua阿拉伯数字转中文大写数字
  19. Java通过javacsv实现读取csv文件数据
  20. 【操作系统】I/O系统

热门文章

  1. 低成本人体红外+环境光感应的可充电小夜灯电路及PCB设计
  2. vivoX20连续点击android版本,用户体验至上!vivo X20等老机型正式推送安卓8.1稳定版本...
  3. 指纹识别智能门锁方案设计开发
  4. mysql新建数据库关系图_创建数据库关系图失败解决方法
  5. SDWebUI:AI绘图本地部署及绘图效率实验
  6. ORB-SLAM3 细读单目初始化过程(下)
  7. 11.5对宿管阿姨的采访
  8. 三种方法解决 IDEA乱码问题
  9. 什么是度量学习?度量学习如何实现?
  10. Min-Max容斥总结