五:最优化方法:梯度下降(20191202-1208)

0x00 内容

梯度下降:实现梯度下降、线性回归中的梯度下降

随机梯度下降:相关代码即调用

0x01  梯度下降法(回顾四:0x04 梯度下降法)

最小二乘法求损失函数的最小值,但是这只是一个特例。大多数复杂复杂情况下,损失函数就需要用到“梯度算法”。

从损失值出发,去更新参数,且要大幅降低计算次数。

多元函数的导数(derivative)就是梯度(gradient),分别对每个变量进行微分,然后用逗号分割开,梯度是用括号包括起来,说明梯度其实一个向量。

解决局部最低点方案,:首先随机产生多个初始参数集,然后分别对每个初始参数集使用梯度下降法,直到函数值收敛于某个值,最后从这些值中找出最小值,这个找到的最小值被当作函数的最小值。

0x02  梯度下降之前需要使用归一化(回顾四:0x05)

真实数据整体不在一个规模上,解决的方式,就是在梯度下降之前进行数据归一化

0x03 速度更快的随机梯度下降法

批量梯度下降法BGD(Batch Gradient Descent):每次更新参数时计算所有样本,通过对数据集所有样本的计算来求解梯度的方向。这种方法在数据量很大时计算的时间成本很高

随机梯度下降法SGD(stochastic gradient descent):每次迭代使用一个样本来对参数进行更新。虽然不是每次迭代得到的损失函数都向着全局最优方向,但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。(相比于批量梯度,这样的方法更快,结果也是可以接受的。)

3.1 随机取值的公式推导

从数学的角度来看:将批量梯度下降损失函数(J(θ)=MSE(y,y^))求导后矩阵,乘以m。(样本数量求和这一操作去掉)得:

注意,得到的向量是搜索方向不是梯度方向,因此已经不算是函数的梯度了。

3.2 随机下降与学习率的取值

随机梯度下降过程就是:每次随机取出一个i,得到一个向量,沿着这个随机产生的向量的方向进行搜索,不停的迭代,得到的损失函数的最小值。

批量搜索,那么每次都是沿着一个方向前进;随机梯度下降法则不能保证随机选择的方向是损失函数减小的方向(更不能保证一定是减小速度最快的方向),所以搜索路径会呈现随机特性。即随机梯度下降有着不可预知性

随机梯度下降法的过程中,学习率η是逐渐递减。因为如果学习率取一个固定值,可能会导致已经在最小值附近的点θ,由于固定步长(点θ的取值)跳出这个点的范围。

设计一个函数,使学习率η随着下降循环次数的增加而减小。(分子变为常数t0,并在分母上增加一个常数项t1缓解初始情况下,学习率变化太大的情况,且更灵活。)η=t0/(Ii ter+t1)

0x04 BGD&SGD效果比较

梯度下降算法主要比较运行时间迭代次数这两个指标。

不同:

1.表达式为:X_b_i.T.dot(X_b_i.dot(theta) - y_i) * 2(传递的不是整个矩阵Xb和整个向量y,而是其中一行X_b_i、其中的一个数值y_i)

2.内置学习率:η=t0/(Ii ter+t1)

3.终止循环条件:循环次数达到上限

代码中随机梯度下降,只使用1/3。并且随机梯度下降中只考虑的1/3的样本量,且得到的结果一定达到了局部最小值的范围内。

批量梯度下降法BGD(Batch Gradient Descent)

优点:全局最优解;易于并行实现;

缺点:当样本数据很多时,计算量开销大,计算速度慢。

随机梯度下降法SGD(stochastic gradient descent)

(每次迭代使用一个样本来对参数进行更新)

优点:计算速度快;

缺点:收敛性能不好 。

0x05   梯度下降另外一种调试方式

一种简单的方法,能够对梯度下降法中求梯度的公式推导进行调试。 

以一维为例,求某一点(红色)相应的梯度值(导数),就是曲线在这个点上切线的斜率。可以使用距离该点左右两侧的两个蓝色点的连线的斜率,作为红点处切线斜率。

从数学上来看比较直观,每个维度上都要求两次带入,因此时间复杂度变高了。作为一个调试的手段,在还未完成时,可以使用小数据量,进行计算,得到最终结果。(然后再通过推导公式的方式得到的梯度结果,是否和其相同。)在求梯度的时候,可以用这种通用的debug方式先在小数据集上对求导公式进行检验。

0xFF 总结

批量梯度下降法BGD(Batch Gradient Descent),每次对所有样本都看一遍,缺点是慢,缺点是稳定。

随机梯度下降法SGD(stochastic gradient descent),每次随机看一个,优点是快,缺点是不稳定。

小批量梯度下降法 MBGD(Mini-Batch Gradient Descent),优点:减少了计算的开销量,降低了随机性。(在每次更新时用b个样本,其实批量的梯度下降就是一种折中的方法,用一些小样本来近似全部。)

代码相关:

1.Jupyter中使用IPython的魔法(Magic)命令“%%time”表示代码块用时,必须首行。

参考阅读:

1.《还不了解梯度下降法?看完这篇就懂了!》(回顾四)

2.《手动实现梯度下降(可视化)》 (回顾四)

3.《线性回归中的梯度下降》 (回顾四)

4.《速度更快的随机梯度下降法》

5.《梯度下降番外:非常有用的调试方式及总结》

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容