从本系列文章开始,作者正式开始研究Python深度学习、神经网络及人工智能相关知识。前六篇文章讲解了神经网络基础概念、Theano库的安装过程及基础用法、theano实现回归神经网络、theano实现分类神经网络、theano正规化处理,这篇文章讲解加速神经网络训练的方法,为什么有激励函数以及过拟合,均是基础性知识。主要是学习"莫烦大神" 网易云视频的在线笔记,后面随着深入会讲解具体的项目及应用。基础性文章和在线笔记,希望对您有所帮助,本系列作者采用一篇基础一篇代码的形式讲解,也建议大家一步步跟着学习,同时文章中存在错误或不足之处,还请海涵~

"莫烦大神" 网易云视频地址:http://study.163.com/provider/1111519/course.html

同时推荐前面作者另外三个Python系列文章。

从2014年开始,作者主要写了三个Python系列文章,分别是基础知识、网络爬虫和数据分析。

  • Python基础知识系列:Pythonj基础知识学习与提升
  • Python网络爬虫系列:Python爬虫之Selenium+Phantomjs+CasperJS
  • Python数据分析系列:知识图谱、web数据挖掘及NLP

  

前文参考:
[Python人工智能] 一.神经网络入门及theano基础代码讲解
[Python人工智能] 二.theano实现回归神经网络分析
[Python人工智能] 三.theano实现分类神经网络及机器学习基础
[Python人工智能] 四.神经网络和深度学习入门知识
[Python人工智能] 五.theano实现神经网络正规化Regularization处理
[Python人工智能] 六.神经网络的评价指标、特征标准化和特征选择

PSS:最近参加CSDN2018年博客评选,希望您能投出宝贵的一票。我是59号,Eastmount,杨秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index

五年来写了314篇博客,12个专栏,是真的热爱分享,热爱CSDN这个平台,也想帮助更多的人,专栏包括Python、数据挖掘、网络爬虫、图像处理、C#、Android等。现在也当了两年老师,更是觉得有义务教好每一个学生,让贵州学子好好写点代码,学点技术,"师者,传到授业解惑也",提前祝大家新年快乐。2019我们携手共进,为爱而生。

一. 为什么需要激励函数

首先,为什么需要激励函数(Activation Function)呢?

因为现实并没有我们想象的美好,激励函数是为了解决我们日常生活中不能用线性概括的问题而提出,如二分类问题。假设女生越漂亮,喜欢的男生人数越多,这是一个线性方程(Linear)问题,但假设场景发生在校园里,校园里男生人数有限,这就变成了一个非线性问题,并且女生不可能是无线漂亮的。

神经网络中的每个节点接受输入值,并将输入值传递给下一层,输入节点会将输入属性值直接传递给下一层(隐层或输出层)。在神经网络中,隐层和输出层节点的输入和输出之间具有函数关系,这个函数称为激励函数。

首先把整个神经网络简化为一个式子:y = W · x
其中,y称为预测值、W是参数、x称为输入值。那么,非线性方程如何描述这个问题呢?我们增加一个AF()函数,如下所示。

非线性方程:y = AF( W · x )
其中,AF就是所谓的激励函数。如下所示,常见的激励函数包括relu(x为-1时值为0,x为1时值为1)、sigmoid、tanh等。这些激励函数能够强行将原有线性结构弄弯,使输出结果具有非线性特征。
Sigmoid函数:是连续、可导、有界,关于原点对称的增函数,呈S形,具体可用反正切函数arctan或指数函数exp来实现,如f(x)=arctan(x)/(pi/2), f(x)=1/(1+e-x)。

我们甚至可以创造自己的激励函数,但需要保证它们是可以微分的,因为误差反向传递时,只有这些可微分的激励函数才能把误差传递回去(不太理解)。

当使用AF激励函数,如果神经层只有2-3层时,对于隐藏层使用任意激励函数都能掰弯直线,而当存在多层神经层时,随意选择AF会造成梯度爆炸、梯度消失等问题。
激励函数选择:
  1.少量神经层,多种选择;
  2.卷积神经网络,使用Relu;
  3.循环神经网络,使用Relu、Tanh。

二. 什么是过拟合

实际生活中,机器学习过于自信,甚至自负,在自己的小圈子里非凡,但在大圈子里却处处碰壁。机器学习中的自负表现在哪些方面呢?

这条直线是希望机器学习学到的直线。假设蓝色直线与所有黄色点的总误差为10,有时机器过于追求误差小,它学到的可能是红色这条虚曲线,它经过了所有的数据点,误差为1。

可是,误差小真的好吗?当我们拿这个模型预测实际值时,如下图所示“+”号;这时,蓝色误差几乎不变,而红色误差突然升高,而红线不能表达除训练数据以外的数据,这就叫做过拟合。

同样,分类中的过拟合如下图所示,有黄色两个“+”号没有很好的被分隔,这就是过拟合在作怪。

那么,怎么解决过拟合呢?
方法一:增加数据量
大多数过拟合的原因是数据量太小,如果有成千上万数据,红线也会被拉直,没有这么扭曲,所以增加数据量能在一定程度上解决过拟合问题。

方法二:L1, L2 Regularization
正规化是处理过拟合的常见方法,该方法适合大多数机器学习。
机器学习:y = W · x
其中,W是参数。过拟合中W往往变化太大,为了让变化不会太大,我们在计算误差时需要做些手脚。
     L1:cost = (Wx - real y)^2 + abs(W)
=>L1正规化是预测值与真实值平方,加上W的绝对值

L2:cost = (Wx - real y)^2 + (W)^2

=>L2正规化是预测值与真实值平方,加上W的平方
     L3:加立方,L4:加四次方

由于过度依赖的W会很大,我们在上述L1和L2公式中惩罚了这些大的参数。如果W变化太大,我们让cost也跟着变大,变成一种惩罚机制,把W自己也考虑进来,从而解决过拟合。

方法三:Droput Regularization
该方法是训练时,随机忽略一些神经元和连接,神经网络会变得不完整,用不完整的神经网络训练一次,紧接着第二次再随机训练,忽略另一部分的神经元和连接,让每次结果不依赖特定的神经元,Droput从根本上解决过拟合。

三. 加速神经网络

Speed Up neural network training process
如何加速神经网络训练呢?

越复杂的神经网络,越多的数据,我们需要花费在神经网络上的时间就越多,其原因是计算量太大了,可是往往为了解决复杂的问题、复杂的结构和大数据,又是不可避免的。所以我们需要找一些方法,让神经网络变得聪明起来、快起来。

最简单方法:SGD(Stochastic Gradient Descent)

假设红色方块是我们要训练的数据Data,如果使用普通的训练方法,需要重复的将整套数据放入神经网络NN中训练,这样消耗的计算资源会很大。我们需要换一种思路,将数据拆分成小批小批的,然后再分批不断放入NN中计算,这就是SGD的正确打开方式。

SGD每次使用批量数据,虽然不能反映整体数据的情况,但在很大程度上加速神经网络的训练过程,而且不会丢失太多准确率。

如果还是嫌SGD训练速度太慢,怎么办呢?
事实证明,SGD并不是训练最快的方法,图中红线是SGD的训练过程,时间相对较长,其他途径可以加速训练。

方法二:Momentum
大多数其他方法是在更新神经网络参数时动手脚,如下所示:

W += - Learning rate * dx

参数W的更新,是将原始W累加上一个负的学习效率(Learning rate)乘以校正值(dx),这种方法可能会让学习过程曲折无比,看起来就像一个喝醉酒的人回家时摇摇晃晃走了很多弯路,所以我们把这个人从平地上放到斜坡上,只要他往下坡的方向走一点点,由于向下的惯性,他走的弯路也会不自觉的变小 ,称为Momentum的方法,它的数学形式如下所示。

m = b1*m - Learning rate * dx

W += m

方法三:AdaGrad
该方法是在学习率上动手脚,使得每一个参数的更新都有与众不同的学习效率,它的作用和Momentum类似,不过不是给喝醉的人安排一个斜坡,而是给喝醉酒的人一双不好走的鞋子,使得他摇晃走路时,发现脚疼,鞋子变成了走弯路的阻力,逼着他往前直着走,它的数学形式如下。

v += dx^2

W += -Learning rate * dx / √v

方法四:RMSProp
如果把下坡和不好走的鞋子结合起来,是不是就更好呢?我们这就有了RMSProp方法,通过Momentum的惯性原则,加上AdaGrad对错误发生了阻力,就合并成如下所示的RMSProp,同时具有两则优点。

不过细心的同学可能发现了RMSProp中少了些什么?原来我们是没有完全合并Momentum,少了Momentum中的“-Learning rate * dx”部分,所以我们会在Adam中补上这种想法。
计算m时有Momentum的下坡属性,计算v时有AdaGrad的阻力属性 ,然后再更新参数时,把m和v都考虑进去。实验证明,大多数使用Adam都能又快又好的达到目标,迅速收敛,所以在加速神经网络训练时,一个下坡,一双破鞋,就能实现。

基础性文章,希望对您有所帮助,推荐大家阅读莫烦大神的学习视频,也建议大家一步步跟着学习,同时文章中存在错误或不足之处,还请海涵~真是太忙了,有时候挤点时间出来写文章,才能让自己放平心态,谁又能写一辈子博客呢?又有几个人能做自己喜欢的事情,哎。看到学生也开始写文章,还是高兴的。
(By:Eastmount 2018-06-25 晚上12点  http://blog.csdn.net/eastmount/ )

[Python人工智能] 七.加速神经网络、激励函数和过拟合相关推荐

  1. [Python人工智能] 七.什么是过拟合及dropout解决神经网络中的过拟合问题

    从本专栏开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前一篇文章通过TensorFlow实现分类学习,以MNIST数字图片为例进行讲解:本文将介绍什么是过拟合,并采用drop ...

  2. [Python人工智能] 八.卷积神经网络CNN原理详解及TensorFlow编写CNN

    从本专栏开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前一篇文章介绍了什么是过拟合,并采用droput解决神经网络中过拟合的问题,以TensorFlow和sklearn的lo ...

  3. [Python人工智能] 一.TensorFlow环境搭建及神经网络入门

    从本篇文章开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.第一篇文章主要讲解神经网络基础概念,同时讲解TensorFlow2.0的安装过程及基础用法,主要结合作者之前的博客和& ...

  4. [Python人工智能] 三十四.Bert模型 (3)keras-bert库构建Bert模型实现微博情感分析

    从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章开启了新的内容--Bert,首先介绍Keras-bert库安装及基础用法及文本分类工作.这篇文章将通过keras- ...

  5. [Python人工智能] 二十二.基于大连理工情感词典的情感分析和情绪计算

    从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章分享了CNN实现中文文本分类的过程,并与贝叶斯.决策树.逻辑回归.随机森林.KNN.SVM等分类算法进行对比.这篇 ...

  6. [Python人工智能] 三.theano实现分类神经网络及机器学习基础

    从本篇文章开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前两篇文章讲解了神经网络基础概念.Theano库的安装过程及基础用法.theano实现回归神经网络,这篇文章主要讲解机 ...

  7. [Python人工智能] 一.神经网络入门及theano基础代码讲解

    从本篇文章开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.第一篇文章主要讲解神经网络基础概念,同时讲解Theano库的安装过程及基础用法,主要结合 "莫烦大神&quo ...

  8. [Python人工智能] 三.TensorFlow基础之Session、变量、传入值和激励函数

    从本篇文章开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前一篇文章讲解了TensorFlow基础和一元直线预测的案例:本篇文章将详细介绍Session.变量.传入值和激励函数 ...

  9. [Python人工智能] 五.theano实现神经网络正规化Regularization处理

    从本系列文章开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前四篇文章讲解了神经网络基础概念.Theano库的安装过程及基础用法.theano实现回归神经网络.theano实现 ...

最新文章

  1. springAop @AfterReturning注解 获取返回值
  2. 解决win10安装MySQL数据库出现服务无法启动的问题
  3. python中tell_Python的File tell()方法使用方法及作用解析(实例)
  4. IntelliJ IDEA普通的Java项目如何转成Maven Web项目
  5. P1217 [USACO1.5]回文质数 Prime Palindromes(技巧+暴力枚举+线性筛)
  6. 一个月 200 题,命中 80%,拿下 BAT,我独特的高效刷题法
  7. Table of Contents
  8. SQL:postgresql查询、删除名字中包含某些字段的视图
  9. 关于fork()父子进程返回值的问题
  10. 思科模拟器简单校园网设计,期末作业难度
  11. word计算机板书,Word板书设计怎么写
  12. 旋转立方体相册HTML+CSS
  13. 大芒果mysql下载_魔兽世界大芒果单机版下载|单机魔兽世界大芒果下载v3.3.5 安卓版_ 2265游戏网...
  14. 【人物志】美团首席科学家夏华夏:不断突破边界的程序人生
  15. html5 自动分享到朋友圈,html5手机端分享微信朋友圈代码
  16. restful api 与 GraphQL 分析比较
  17. 《微机原理第五版》期末知识总结(第五章---第七章)
  18. nacos的feign报错Error creating bean with name ‘configurationPropertiesBeans‘ defined in class path reso
  19. spring框架中的单例Beans是线程安全的么?
  20. 注册苹果开发者帐号 用什么银行的什么卡好? 收款帐号呢?

热门文章

  1. 解决goldengate复制进程应用缓慢一例
  2. Oracle 数据字典表 -- SYS.COL$
  3. P3272 [SCOI2011]地板(插头DP)
  4. 初赛问题求解及选择题数学相关整理
  5. vs code 添加jquery的智能提示
  6. python学习笔记(字典)
  7. 第六讲:Obj-C 内存管理4 - 自动释放池
  8. 自动生成存储过程的脚本
  9. STL源码学习----集合相关算法
  10. html页面取js里面的值,如何在javascript中获取HTML元素的样式值?