前置知识

  导数,矩阵的逆

知识地图

  正则化是通过为参数支付代价的方式,降低系统复杂度的方法。牛顿方法是一种适用于逻辑回归的求解方法,相比梯度上升法具有迭代次数少,消耗资源多的特点。

过拟合与欠拟合

  回顾线性回归和逻辑回归这两个算法,我们发现特征这个词汇在频繁出现。特征是从不同的角度对事物进行描述,特征数量会决定模型的复杂程度和最终的性能表现。

  为了方便讨论,我们通过添加高阶多项式的方法来增加特征数量。原始数据集中只有一个特征,依次添加原始特征的2次方,3次方......直至6次方作为新的特征。

  当特征数量不足时会使得模型太简单,模型不能很好地拟合样本。这种情况称为欠拟合,如下图所示:

  随着特征数量的增加,模型的复杂度也逐渐增加,模型对样本的拟合程度也在逐步提升,如下图所示:

  当特征数量过多时会使得模型太复杂,模型可以极好地拟合样本。这种情况称为过拟合,如下图所示:

  显然欠拟合的情况是不好的,那么过拟合的情况如何呢?虽然模型很好地拟合了数据集,然而这不是一个好的模型,它对数据集过度拟合以至于对新样本的泛化能力很差。

  “如无必要,勿增实体”。参数是特征的权重,当参数越大时特征的影响越大,当参数越小时特征的影响越小。如果能让参数尽量变小,就可以降低模型的复杂度。

  为了避免出现过拟合的情况,可以在代价函数中加入正则化项,正则化项是关于参数的代价。因为存在代价,算法在寻找全局最优点的过程中,必须使得参数尽量最小化。

正则化

  线性回归原代价函数如下:

  线性回归新代价函数如下:

  λ称为正则化参数,和学习率α一样,这是一个需要手动调节的参数。正则化参数λ的作用是调节以下两个目标间的平衡关系:

  目标一:使模型更好地拟合数据;

  目标二:使参数θ尽量最小化;

  当正则化参数λ减小时,需要为参数θ支付的代价变小,模型的复杂度提高,存在的风险是可能会出现过拟合。

  当正则化参数λ增大时,需要为参数θ支付的代价变大,模型的复杂度降低,存在的风险是可能会出现欠拟合。

  注:1/2是为了后续求导的方便;

  正则化项的含义是,平均每个样本需要为参数支付的代价,代价以参数平方的形式体现。数据集中原本有n个特征,加入一列全为1的常数项后一共有n+1个特征,对应n+1个参数。

  下图为特征相同的情况下,当正则项参数不同时模型的变化。随着正则项参数增大,需要为参数所支付的代价增大。为了最小化代价函数,必须降低特征的权重,进而简化了模型。

  以下为对应的参数:

  注意j是从1开始算起的,也就是说,常数项对应的参数θ0不参与正则化。这是理解和实践中很容易混淆的地方,下面用对比图说明这样约定的原因。

  左图为所有参数都参与正则化的结果,因为正则化参数非常大,为了最小化代价函数,所有的参数都趋向于0。模型是经过原点的曲线,无法体现出样本的平均水平。

  右图为θ0不参与正则化的结果,因为正则化参数非常大,为了最小化代价函数,除了θ0外的参数都趋向于0。虽然模型的表现也很差,至少体现出样本的平均水平。

  注意在理论说明时向量的下标是从0开始计数,在代码编写时向量的下标是从1开始计数。向量θ中的第一个元素即常数项对应的参数,这个元素不参与正则化。

  将线性回归的函数更新如下:

  将逻辑回归的函数更新如下:

函数与导数

  当函数只有一个变量时,在二维空间中可以表现为一条曲线。假设函数在f(θ)=0处有解,已知导数是切线的斜率,根据这一点可以寻找到函数在该点的解。

  首先随机选择一个初始值作为第一个交点。

  求出函数在第一个交点的导数,将切线延长到x轴上,可以得到第二个交点。

  求出函数在第二个交点的导数,将切线延长到x轴上,可以得到第三个交点。

  在这个过程中,交点在不断地向目标靠近。如此反复,最终得到函数在f(θ)=0处的解。单变量的牛顿法迭代形式如下:

牛顿方法

  这个方法如何应用到逻辑回归算法中?当一阶导数为0时,函数处于极值点。要求代价函数的最优解,可转化为求一阶导数为0,这又可通过牛顿方法用二阶导数进行迭代。

  所以问题的关键在于如何求代价函数的二阶导数。因为代价函数中有多个变量,每个变量都有相对于其他变量的二阶偏导数。这些二阶偏导数表现为矩阵的形式,以两个变量为例。

  右边的符号表示第j个变量相对于第i个变量的二阶偏导数。虽然形式复杂,但本质上在求一个变量的偏导数时,是直接将其他变量视为常数,这就极大地简化了问题。

  左边是一阶导数向量,右边是二阶导数矩阵(Hessian Matrix),多维下的牛顿方法可表示为以下形式:

  逻辑回归一阶导数:

  逻辑回归二阶导数:

  蓝色部分相对于变量是常数项可以直接消去,等式最外面有一个负号不要遗漏了。现在的问题是该如何得到整个二阶导数矩阵呢?构造一个小规模的样本观察一下规律。

  假设j=1,k=2,将对应的二阶偏导数函数展开:

  观察上式,发现只有一种矩阵的组合方法满足要求,即:

  相比梯度上升法,牛顿方法的优点是不需要设置学习率,且所需迭代次数远远少于前者。缺点是需要计算二阶导数的逆矩阵,为避免求逆又衍生出了许多的改良版本。

总结

  正则化通过为参数支付一个代价,使得参数尽量最小化。参数是特征的权重,当权重降低的时候,特征对于模型的影响也随之降低。当模型复杂度降低时,往往能获得更好的表现。

  牛顿方法是通过二阶导数来更新参数的方法,在大规模机器学习问题中,求解二阶导数的逆矩阵难以实现,实际中常用的是伪牛顿法,如BFGS,L-BFGS等等。

非正规代码

版权声明

  1,本文为原创文章,未经作者授权禁止引用、复制、转载、摘编。

  2,对于有上述行为者,作者将保留追究其法律责任的权利。

Tieven

2019.1.9

tieven.it@gmail.com

AI之旅(5):正则化与牛顿方法的更多相关文章

  1. AI之旅(2):初识线性回归

    前置知识   矩阵.求导 知识地图   学习一个新事物之前,先问两个问题,我在哪里?我要去哪里?这两个问题可以避免我们迷失在知识的海洋里,所以在开始之前先看看地图.   此前我们已经为了解线性回归做了 ...

  2. 牛顿方法(Newton's Method)

    在讲义<线性回归.梯度下降>和<逻辑回归>中我们提到可以用梯度下降或梯度上升的方式求解θ.在本文中将讲解另一种求解θ的方法:牛顿方法(Newton's method). 牛顿方 ...

  3. 牛顿方法(Newton-Raphson Method)

    本博客已经迁往http://www.kemaswill.com/, 博客园这边也会继续更新, 欢迎关注~ 牛顿方法是一种求解等式的非常有效的数值分析方法. 1.  牛顿方法 假设\(x_0\)是等式的 ...

  4. 机器学习-牛顿方法&指数分布族&GLM

    本节内容 牛顿方法 指数分布族 广义线性模型 之前学习了梯度下降方法,关于梯度下降(gradient descent),这里简单的回顾下[参考感知机学习部分提到的梯度下降(gradient desce ...

  5. AI之旅(6):神经网络之前向传播

    前置知识   求导 知识地图   回想线性回归和逻辑回归,一个算法的核心其实只包含两部分:代价和梯度.对于神经网络而言,是通过前向传播求代价,反向传播求梯度.本文介绍其中第一部分. 多元分类:符号转换 ...

  6. AI之旅(1):出发前的热身运动

    前置知识   无 知识地图 自学就像在海中游泳   当初为什么会想要了解机器学习呢,应该只是纯粹的好奇心吧.AI似乎无处不在,又无迹可循.为什么一个程序能在围棋的领域战胜人类,程序真的有那么聪明吗?如 ...

  7. Dropout正则化和其他方法减少神经网络中的过拟合

    1. 什么是Dropout(随机失活) 就是在神经网络的Dropout层,为每个神经元结点设置一个随机消除的概率,对于保留下来的神经元,我们得到一个节点较少,规模较小的网络进行训练. 标准网络和dro ...

  8. 斯坦福《机器学习》Lesson4感想--1、Logistic回归中的牛顿方法

    在上一篇中提到的Logistic回归是利用最大似然概率的思想和梯度上升算法确定θ,从而确定f(θ).本篇将介绍还有一种求解最大似然概率ℓ(θ)的方法,即牛顿迭代法. 在牛顿迭代法中.如果一个函数是,求 ...

  9. AI:IPPR的数学表示-CNN方法

    前言: 随着超量类别PR和高精度的需求,人工特征方法局限性凸显出来,固定的特征hash压缩映射因其压缩损失.表现为特定的特征hash方法,在海量的同类数据集上近邻特性变差,而在不同类别的数据上面隔离性 ...

随机推荐

  1. 阿里云Oss对象存储

    将文件保存到阿里云上. 1.添加对象存储OSS空间 (新建Bucket) 可以在阿里云后台对象存储里面添加,也可以通过api添加.添加之后设置权限. skd使用. 1安装 Aliyun.OSS.SDK ...

  2. 不同版本的IDE ,对应的选项 有变化

    xx.dproj对应的项目级选项 也不同,所以,要分别保存为不同的文件. 如果不同的IDE,打开同一个 .dproj文件,会因为 选项界面的选项不同,提示一些错误.

  3. centos7搭建时间服务器

    时区概念 GMT.UTC.CST.DST UTC:整个地球分为二十四个时区,每个时区都有自己的本地时间,在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时间(UTC:Univers ...

  4. js jquery 正则去空字符

    1.正则去空字符串: var str1=" a b c "; var strtrim=str1.replace(/\s/g,""); 2.js去前后空字符串: ...

  5. STL中set的使用方法

    第一次想认真地学学set,是在我做一题treap的时候产生的念头.(HNOI2004 宠物收养场,洛谷P2286) 嗯,虽然学过一丢丢的treap和splay,但是这编程复杂度貌似有点高…… 无奈翻开 ...

  6. Vue组件化应用构建 官网例子 Unknown custom element: <todo-item>

     [博客园cnblogs笔者m-yb原创,转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708] htt ...

  7. springboot接收delete或者put方法体参数

    springboot默认配置了hiddenHttpMethodFilter(可以在springboot启动日志中看到) 因为hiddenHttpMethodFilter只会拦截get和post请求方式 ...

  8. linux中常见的命令

    linux 中的命令非常多,但是玩过linux的人也从来不会因为Linux的命令如此之多而烦恼,我们只需要掌握其中常见的命令即可,可以在使用时去找man,会帮助你解决不少问题.下面就列出一些常见的li ...

  9. dom编程艺术笔记1--第二章

    第二章语法部分: 1.js注释:<!-- XXXXX 而“-->”这部分js会认为是注释内容的一部分 2.var 声明变量 不用声明变量类型 3.声明使用一个数组语法:var object ...

  10. Java虚拟机学习-Java内存区域(一)

    Java虚拟机内存划分为以下几个区域: 1.方法区:方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据.虽然Java虚拟机规范把方法区描述为 ...