依然是Michael Nielsen的书,依然是神经网络,上文说到的是神经网络有关于损失函数的调整使得学习速度加快,但是还是有几个问题没有解决:
- 过拟合问题
- 权重和b初始化问题
一,首先来看第一个问题:过拟合(overfitting)
什么是overfitting,我这个人不是典型的学院派,所以正儿八经的定义也不会用,用我的话说就是学习过度,主要表现在两个方面:第一,在现有的训练数据上模型已经不能更加优化了,但是整个学习过程仍然在学习;第二,对于局部数据噪声(noise)学习过度,导致模“颠簸”(这个词是我自创的),所谓对局部噪声学习过度表现在对于给定的训练数据,模型过度学习了局部的噪声,而这些噪声对于模型的泛化(generalization)并没有实际用处。
来看下具体的过度学习的例子:
1)在现有数据下学习过度:
还是以前面文章所说的图片识别的例子为例,我们建立784*30*10的神经网络模型,但是在本例中我们使用训练数据将不是之前的50000个数据,而是50000个数据中的10000个数据,使用的步长为0.5,我们看下其在测试数据的表现:
可以看到,对于测试数据的准确性在打了约280代左右的时候达到峰值,之后的训练对准确率的提高并没有实际的提高,因此在280代以后的数据训练,我们可以称之为overfitting
2)局部噪声学习过度,导致模型颠簸
这个问题可以用回归问题作为典型的例子,看下面的数据:
我们对上面的数据进行回归分析,有多种拟合方法,考虑最简单的两种,一是线性回归,二是多项式回归
使用线性回归的话,我们得到的可能是y=2*x,如下图:
使用多项式拟合y=a0+a1*x+a2*x^2+...+a9*x^9,我们可能看到如下结果:
对于给定的数据点,我们无法确定哪一种拟合方法是对的,但是对于一般模型而言,我们往往认为简单的参数模型具有更大的普适性(书中并没有给出实质意义上的证明),不去争论这句话的正确性,暂且认为这种假设是对的,也就是说我们认可上面的y=2x的结果,如此一来,我们就认为多项式拟合是overfitting,其过度学习到了数据的局部噪音,而这些局部噪音对整个模型的一般性没有用。
以上两个例子可以通俗的解释过拟合现象,那么问题来了,我们如何解决上述的两个过拟合问题。
【1】对于第一个过拟合问题,也就是参数学习过程过多,我们在之前的training data和test data之外,又引入了新的数据集validate data,validate的数据集与training data和test data都是不一样的,validate 的主要作用是防止训练过度。
我们来看一下validate数据是怎么发挥作用的:
其实很简单,在模型每一代训练出的模型的时候,使用validate data计算正确率,一旦该正确率不在出现明显变化的时候就需要停止训练了。
。另外,训练数据越多,出现过拟合的现象会越少,所以扩大训练数据集也是解决过拟合的一个办法。
【2】对于第二个过拟合问题,解决方法是引入规则化(Regularization)机制
什么是规则化,其实也很简单,对于损失函数是交叉熵的神经网络,那么其损失函数变换成下面的形式:
式子加号 后面的表达式就是规则化(Regularization),那么对于使用平方损失函数,其形式也是一样的:
其实从式子中可以看出,加入规则化因子之后,整个模型其实是奔着选取较小的w而进化的,因为如果需要损失函数值小的话,一旦选取了比较大的w,那么只有等式右边第一项式子的值比较小的情况下才行,因此规则化的目的其实是减轻比较大的w值对损失函数的影响,为什么需要这么做,我们假设对于线性回归而言,有一个数据特别偏离主模型,这样的话,往往会导致模型受这个影响比较大,从而偏离主模型,这时候就需要抵消这个数据对结果的影响,这就用到了规范化,目的是消除其某些损失函数值过大的点影响,对于神经网络,正则化的目的是为了消除太大的W对结果的影响,其结果就是局部的变化因素(个别w的变化)不会影响整个模型的数据,只有对全部模型起变化的因素才能影响到模型的建立,这样就消除了局部噪声的影响。
当加入规则化因子之后,对于w和b求导的并没有什么实质性的变化,与之对应的代码也不用做太多修改:
然后让我们看一下使用了规范因子之后的结果,以之前的训练数据为例,训练集:50000个,测试集:10000个,步长为5:
规范化以后的正确率最好是在96.49%左右,比没有使用规则化的95。49%还是提高了不少。
需要说明的是规范化因子的lambda是一个大于0的度量值,如果lambda比较大的话那么就是说明模型倾向更小的权重,当lambda比较小的时候说明模型倾向大的权重,所以lambda算是一个平衡值,而这个平衡值往往需要通过实验确定比较好的值。
当然规范化还有很多方法,上面的方法称之为L2规范化,也叫权重衰减规范化还有一些比较主流的正则化方法,如L1正则化、Dropout正则化,数据集拓展方法,详情可以见,正则化方法一文,有较详细的解释,这里就不一一解释。
二,然后来看第二个问题:权重初始化问题
回忆之前使用的初始化权重方法,我们是按照标准为1,均值为0的高斯分布随机生成数据集,但是这个会存在一些问题,以有1000个输入的单个神经元而言,我们假设输入的1000个数的500个为0,500个为1,w和b均服从(0,1)的高斯分布,那么对于z=w*x+b的输出,其服从标准差为sqrt(501)=22.4,均值为0的高斯分布, 其图像是:
这上面会有很多的远大于1和远小于-1的值,一旦选择了这些值,由于这些值比较大,因此可能导致最终的输出结果接近0或者接近1,从而在梯度下降过程中改变值非常小,从而导致训练速度减缓。
按照上面的想法,其实我们是想要w的值尽量分布在(-1,1)之间,但是我们看到高斯分布符合一个规律:标准差越小,分布曲线越尖,标准差越大越扁平,因此我们需要根据数据集修正其标准差即可。
因此,我们有了新的初始化高斯分布:
对于有N个w值的神经元,我们将每个w初始化为服从(0,sqrt(n))高斯分布的值,但是b不变,还是服从(0,1)高斯分布,那么对于上个问题,其输出z=w*x+b就服从(0,sqrt(3/2))的高斯分布,因为其方差等于:1/1000 * 500+1=3/2.,其图像为:
可以看到,其分布就会集中在0附近,因此不会导致输出的值z过大从而引起学习速度减慢的结果。
这里需要说明的是之所以选择b仍然服从(0,1)高斯分布是因为b的选取对最终结果并没有实质性的影响,因此b的可以选择0也可以选择其他的值,这里是选择服从(0,1)高斯分布。
这就是神经网络的调参过程。
相关推荐
神经网络与深度学习(英文+中文文档,by Micheal Nielsen),介绍了神经网络与深度学习背后的许多核心概念,如反向传播算法、神经⽹络可以计算任何函数的可视化证明,作者是一位量子物理学家,科学作家,计算机编程...
《神经网络与深度学习》是由Michael Nielsen撰写的一部关于神经网络和深度学习的入门级专著。本书详细阐述了深度学习的基本概念和算法,通过理论讲解和实践案例相结合的方式,使得读者可以系统地了解并掌握深度学习...
10. **优化与性能**:考虑到页面加载速度,可能对图片进行了压缩,使用了相对路径而不是绝对路径,以及可能使用了CDN(内容分发网络)来加速静态资源的加载。 以上是对这个致敬页项目中可能涉及的HTML技术的详细...
本研究对一种新型碳基固体酸催化剂进行了探讨,特别是在Michael加成反应中的应用。碳基固体酸催化剂以对甲...这种催化剂的开发和应用,对于推动化学反应的绿色化、提高化学过程的效率和减少环境影响都具有重要的意义。
"HEIST_expansion:uwu micheal偷偷溜过机器人去了brrrrrr" 这个标题似乎是在描述一个游戏场景,可能是一个基于HEIST(可能是游戏或软件项目的名字)的扩展内容,其中角色Micheal悄悄地避开了机器人守卫。这个场景...
Linux教程 Micheal Joseph Miller著 曾国平 赵胜龙 王志军译 Windows用户转向Linux的12个步骤
### 三、C++语言基础与新特性 第三章专注于从C语言向C++的过渡,概述了C++相较于C语言的新功能,如注释、声明语句、作用域解析运算符、内联函数、默认函数参数、引用类型、常量类型、重载函数以及new和delete运算符...
巨擘版的算法分析与设计,而且还是完整版哦!下到就是赚到!
代数 第二版 [美] Micheal Artin 著;郭晋云 译。 高清带全书签版
- **声速剖面拟合**:可以选择不同的拟合方法,例如立方样条插值('S')、线性插值('C')等。 - **上界面类型**:根据不同的需求选择真空('V')、完全刚性('R')或声学半空间('A')等选项。 - **底介质吸收...
arduino 请将README.md档案增加自我介绍,包含...我是南宁高中的新生,我的名字是陈孟泽,是四年三班的八号同学。我喜欢在户外活动,偶尔晒晒太阳也是不错的啦~~~ 我最喜欢吃的就是面食啦,每天几乎都会吃上一碗的呢!
概率图模型是机器学习、统计和计算机科学领域内一种强有力的建模工具,它允许研究人员和工程师处理含有复杂依赖关系的大规模随机变量集合。Michael I. Jordan在文章《Graphical Models》中对概率图模型的基本原理...
《稀疏表示与字典学习算法深度探讨》 在当今的数字信息时代,数据的处理和分析变得至关重要,尤其是在图像处理、信号处理和机器学习等领域。稀疏表示和字典学习算法作为现代数据分析的重要工具,已经得到了广泛的...
描述中的"Ruby on Rails教程:示例应用程序 这是第三个应用程序,称为示例"进一步证实了这个项目是作为教学目的而创建的,它可能是教程系列中的第三个练习项目,用于帮助学习者逐步掌握Rails开发技巧。 **Ruby on ...
USPS数据集常用于验证和比较不同的机器学习算法,尤其是支持向量机(SVM)、神经网络和卷积神经网络(CNN)。这些模型通过学习特征来识别手写数字,从而实现高精度的分类。 【预处理步骤】: 1. **数据加载**:将...
根据提供的文件信息,我们可以了解到这些内容是关于Michael Artin所著《代数》第二版(Artin's Algebra, Second Edition)的精选解答集。这本书是代数学领域的一部经典之作,广泛应用于高等教育的数学课程。解答集...
通过学习【清华大学飞思卡尔智能车教程】,学员不仅可以掌握飞思卡尔微控制器的硬件接口和软件开发,还能了解到智能车系统的整体设计思想,为未来从事自动驾驶、机器人技术等领域的工作打下坚实基础。同时,这份教程...