当前位置: 首页 > news >正文

神经网络之调参

  接着上一节,继续计算神经网络的梯度。

  

  如上图所示,计算损失函数J对W14(1)的导数,这是为了更新W14(1)的值。

    

  如上图所示,损失函数J就是S,S对W14(1)进行求导。首先看,W14(1)的变化导致了一号神经元的变化,而2号神经元没有发生变化。所以,对W14(1)的求导,与2号神经元没有关系,可以简化为上图中的下半部分。因此,s可表示为W1(2)与a1(2)的乘积。而W1(2)是个常数,可以提出。上图中的σ代表激活函数。最后的结果可表示为上节课最后所定义的δ函数。

那什么是δ呢?它是损失函数J对z的梯度,a4(1)是输入。

  从误差分布的角度解释反向传播:

    

  那从δ(k)到δ(k-1)是怎么传播的呢?如下图所示:

  

  所谓的反向传播,其实质就是传播的误差。为什么是反向的?因为误差是从后往前计算的。就是从δ(k)到δ(k-1)的计算。

2. 常用的激活函数: 

  

3.正则化:

  

  正则化:将左边正常的神经网络中的一些神经元剔除掉,如果右边剩余的有缺失结构神经元还能够训练出不错的成绩和结果来,并且能够进行信息还原的话,那原网络有很大的鲁棒性,效果很好。

调参:

    

  你训练完神经网络之后,会得到以上两幅图像。第一幅图是随着训练次数的增加,你的损失函数变化的关系。第二幅图是测试集和训练集分类准确率的关系。

  那请问你如何根据上述两幅图调参?

  首先,你希望你的损失函数是什么样的呢?你希望的肯定是下图总红色部分的形式,看着确实舒坦。

  

  那如何把上述损失函数调到你所希望的形式呢?该调哪个参数呢?没错,调学习率。学习率调大还是调小呢?应该先调大后调小。如果你先调小,应该会使一开始更加的平缓,而不是更加的陡峭。后边调大的画会更加震荡,而我们后边要趋于平稳,所以后边应该调小。

  那还应该调什么参数呢?你想想,震荡的原因是什么?是gradient不够稳定对吧。为什么不够稳定?是因为可能你对训练数据进行了采样,你没用到全部的训练数据。那batch_size(http://m.elecfans.com/article/566619.html)是调大还是调小呢?如果把整个数据集喂给它,那可能会趋于稳定了,所以应该把batch_size调大。可是实际情况下这很花钱的,靠GPU容量来称的。

  那回到上边那幅图中的下半部分,是什么现象呢?是欠拟合现象。而不是过拟合。过拟合应该是对测试集结果表现不佳,而且两条线之间的差距比较大。欠拟合对训练数据就表现不佳,对测试集的效果和训练集的效果差不太大。那怎样解决欠拟合的问题呢?

  有两种方法,一是说明你这个网络的表征能力不够强悍,你会换一个比较更厉害的特征提取的网络。第二个方法,说明你的训练数据不够,增大训练集,可是你要增加训练数据的话,你是要消耗更多的硬件gpu资源的,你的老板肯定不会同意的。在计算机视觉领域,有一种方法叫做数据增强,叫Data Augmentation(https://blog.csdn.net/l_xyy/article/details/71516071)就行啦,会使数据集猛然增强。

  

  

转载于:https://www.cnblogs.com/carlber/p/9783822.html

相关文章:

  • 数组Array的API1
  • Linux下tomcat日志打印和传参乱码问题
  • React Native vs. Cordova.
  • BigDecimal使用中的一些注意事项
  • 4 - MySQL:多表查询
  • 运算
  • 走进软件第一次作业——组建团队 第四组作业
  • 部署 Django
  • react学习三
  • javascript编写带阴历的黄历
  • AS导入项目报错:Plugin with id 'com.android.application' not found.
  • 2018.10.17 NOIP模拟 管道(状压dp)
  • flask_sqlalchemy
  • Python语言程序设计基础(3)—— 基本数据类型
  • c# 反射实现模型深拷贝
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 2017-09-12 前端日报
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript DOM 10 - 滚动
  • Material Design
  • Node 版本管理
  • Python - 闭包Closure
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Terraform入门 - 1. 安装Terraform
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 阿里云购买磁盘后挂载
  • 从零开始在ubuntu上搭建node开发环境
  • 飞驰在Mesos的涡轮引擎上
  • 给第三方使用接口的 URL 签名实现
  • 机器学习 vs. 深度学习
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 我的业余项目总结
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 移动端解决方案学习记录
  • 06-01 点餐小程序前台界面搭建
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 阿里云ACE认证之理解CDN技术
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (13):Silverlight 2 数据与通信之WebRequest
  • (175)FPGA门控时钟技术
  • (C#)获取字符编码的类
  • (c语言)strcpy函数用法
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (转)程序员疫苗:代码注入
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET Framework杂记
  • .NET4.0并行计算技术基础(1)
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比