热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习系列(3):几分钟了解正则化及python实现

“咦?训练集上的表现很不错,测试集和开发集怎么就下降了?有请正正正则化,这里是机器学习系列第三篇,

 咦?训练集上的表现很不错,测试集和开发集怎么就下降了?有请正...正...正则化,这里是机器学习系列第三篇,带你走进正则化,了解一下它是如何改善网络性能的吧。(文末有彩蛋哦)

 

图片挂了,大家移步以下链接

https://mp.weixin.qq.com/s?__biz=MzU4NTY1NDM3MA==&mid=2247483763&idx=1&sn=17b63b559ed0b6d22c3f59876467510a&chksm=fd86087ecaf181687998627eb5b175003e0b37c44e3f50827bc565ffdc24c2281d0e267929ff&token=255604471&lang=zh_CN#rd

                                                                                         

                                                         01 导言

 

深度学习可能会存在过拟合问题,也即有比较高的方差(variance),导致深度网络不能很好的泛化,针对这个问题,我们可以有不同的解决方式,比如采用正则化、增加数据集、减小网络规模、改变网络架构等,这个主题我们将讨论正则化。

申明

本文原理解释和公式推导均由LSayhi完成,供学习参考,可传播;代码实现的框架由Coursera提供,由LSayhi完成,详细数据和代码可在github中查询.

https://github.com/LSayhi/DeepLearning

微信公众号:AI有点可ai

                                                                    

                                                                                         

                                                   02 常见正则化

 

2.1、 L2范数正则化

  • 这种正则化方式是将原交叉信息熵代价函数


更改为

更改后的代价函数的第二部分中是范数,称为Frobenius norm,所以在书写时,矩阵写为,再代价函数增加的第二部分代价称为正则化cost。那么在反相传播过程中,,此处的相较于没有正则化的方式更大了,更新后的将更小,因此我们也称范数正则化为权重减轻。

  • 那么为什么正则化能够防止过拟合呢?直觉上可以这么认为,W越小,隐藏层神经元的影响越小,极端情况比如W=0,那么对应的神经元就没有发挥作用,神经元的数目越小,越不容易拟合,因此,如果之前是过拟合的情况,经过正则化可以降低方差,当然W的大小还与有关,这就是一个可以调试的参数。

2.2、L1范数正则化:

  • L1正则化与L2正则化不同的是,将改为,记为,称L1范数,L1正则化是将平方换成了绝对值。

  • L1和L2一样,都是引入对参数W的惩罚,“惩罚”意为降低W对网络的影响,极端情况就是使W中的某些值为0,降低网络的表达能力。

  • L1与L2不同的是,L1能够产生稀疏性,L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0(详细演绎待补充)

2.3、L0范数正则化

  • L0正则化, L0范数是指向量中非0的元素的个数。如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W的大部分元素都是0。由此,L0正则化将更大程度上降低网络的表达能力,在一定条件下,依概率1等价于,但L0范数优化是个NP-hard问题,人们于是倾向于用L1,L2范数。

2.4、dropout正则化

  • 这种正则化方式是将隐藏层的神经元随机消除,可以理解为随机抛弃了某些已经学习到的特征,以达到降低网络表达能力的效果。这和PCA有点类似,PCA是对输入层数据进行特征选择,而dropout是对隐藏层学习到的特征进行(随机)选择,不依赖于某一特征,这样可以降低网络对某些参数的过拟合。

2.5、Early stopping

  • 提前停止,这种方式是通过迭代次数和代价两者的曲线,取一个中等大小的迭代次数,此时对应中等大小的W,可以防止过拟合。

2.6、数据扩增

  • 如果数据量过少,则深度血虚可能会产生过拟合,那么通过人工产生新的数据,则可以扩大数据集,对于图像识别比如将图片翻转、裁剪等,对于数字识别将数字扭曲,旋转等,通过增加数据量减少过拟合。


 

                                                                                             

                                                       03 效果展示

 

任务:假设现在我们有一些足球比赛数据,这些数据记录着当法国队守门员发球后,在足球场上不同地点是哪方头球接球成功。利用这些数据,用神经网络预测在不同位置,是哪个队的球员头球成功获得控球权。

                                    

训练集数据如下图

                                         

采用同样的网络结构,利用不同正则化方式,我们对比下效果:

未使用正则化:

                                        

L2正则化:

                                         

dropout正则化

                                       

result table

                                                  

可以看出正则化方式减小了过拟合,提高了测试集预测正确率。

 

                                                                                         

                                                  04 python实现

 

 

4.1 本文相应的代码及资料已经以.ipynb文件和.pdf形式在github中给出。

  • .ipynb文件在链接/Coursera-deeplearning深度学习/课程2/week1/

  • .pdf文件在链接/Coursera-deeplearning深度学习

  • github地址:https://github.com/LSayhi/DeepLearning

 

点击【蓝字链接】,github传送门了解一下。

觉得有帮助的话别忘了star

 

有时候,不追求完美,反倒是一种美,我知道你并非完美,但却瑕疵的那么可爱

-by LSayhi的神经网络


                                                                                

                                                    


 

 


推荐阅读
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 小程序自动授权和手动接入的方式及操作步骤
    本文介绍了小程序支持的两种接入方式:自动授权和手动接入,并详细说明了它们的操作步骤。同时还介绍了如何在两种方式之间切换,以及手动接入后如何下载代码包和提交审核。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 鄂维南:从数学角度,理解机器学习的「黑魔法」,并应用于更广泛的科学问题...
    作者|Hertz来源|科学智能AISI北京时间2022年7月8日晚上22:30,鄂维南院士在2022年的国际数学家大会上作一小时大会报告(plenarytalk)。今 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
author-avatar
七仙女跳皮筋
这个家伙很笨,什么也不会!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有