梯度下降

简介

监督学习模型通常都有一个目标函数,用来描述预测值和真实值之间的差异。训练模型就是要寻找可以取到目标函数最小值的参数,而梯度下降(Gradient Descent)就是一种求解的方法。

网上通常用下山描述这种方法:

  • 在当前位置寻找山坡最陡峭的方向
  • 水平迈出一步,落到新的位置
  • 重复以上,直到垂直高度不再降低,也就是到达山底。

这里的山坡可以看作二元二次函数,最陡峭的方向就是梯度的方向,也就是两个未知数偏导数切线矢量和的方向。设步长为s,切线斜率为\theta ,对于水平的一步s来说,垂直方向下降的距离是s\times\theta(这里s是固定的,\theta 是会变的,不同的未知数有不同的\theta),当垂直下降的距离小于某个值的时候,就可以认为已经达到最低点了。这种算法很好理解,但是自己实现的话又觉得一些细节不是很清楚,所以在这里总结一下。

举例

以一元线性回归模型为例,假设
X = \begin{vmatrix} 1 & 1 \\ 2 & 1 \end{vmatrix} , Y = \begin{vmatrix} 0 \\ 1 \end{vmatrix}
(其中X中第二列为截距),很容易算出模型是y = x - 1,现在使用GD计算其参数。

设模型为y = ax + b,该模型的目标函数是MSE
L = \frac {1}{2m}\sum(\hat{y} -y)^2=\frac{1}{4}((a + b)^2 + (2a + b -1)^2)
现在要寻找使的L最小的a和b的值。

  • 先求偏导数

\theta_a = \frac{1}{2} ((a+b)\times1+(2a+b-1)\times2) = 2.5a +1.5b -1 \\ \theta_b = \frac{1}{2} ((a+b)\times1+(2a+b-1)\times1) = 1.5a +b -0.5

  • 再按照a = a - \theta_a \times s, b=b-\theta_b\times s的方法不停迭代,直到找到合适的a,b

Python代码如下,计算出来的结果是a= 0.9999999915660277 ,b= -0.9999999863535461

def theta_a(a, b):
    return 2.5 * a + 1.5 * b - 1

def theta_b(a, b):
    return 1.5 * a + b - 0.5

a = 0
b = 0
s = 0.1
t = 1e-10

while True:
    desc_a = theta_a(a, b) * s
    desc_b = theta_b(a, b) * s
    
    if abs(desc_a) < t and abs(desc_b) < t:
        break
    a = a - desc_a
    b = b - desc_b

print(a, b)

由偏导数求解可以看出,\theta_a = mean((\hat{y}-y)\times X_a), \theta_b = mean((\hat{y}-y)\times X_b),可以用矩阵运算改进上述算法。

import numpy as np
s = 0.1
t = 1e-10

X = np.array([[1,1],[2,1]])
y = np.array([[0], [1]])
param = np.array([[0.0], [0.0]])

while True:
    desc = (np.dot(X, param) - y) * X
    desc = desc.mean(0) * s
    if np.all(np.abs(desc) < t):
        break
    param -= desc.reshape(-1, 1)
    
print(param)

总结

这里主要介绍了GD算法,我觉得容易迷糊是因为公式中既有X,y又有a,b,而这里X,y是已知的,要求解的是a,b;另一个问题是矩阵运算容易搞不清楚。因此找个实例一步步算下来,对于搞清这个问题是个不错的方法。

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