山重水复疑无路,最快下降问梯度

标题来自张玉宏老师书的目录《深度学习之美》

之前的推文中使用最小二乘法求损失函数的最小值,但是在机器学习和深度学习中更通用的方法是使用梯度下降方法找到最优解。

名词解释

梯度下降:核心就是希望能够通过数学意义上的迭代运算,从一个随机点出发,一步步逼近最优解。

梯度:有大小和方向,用导数求得大小,目标函数变化最快的方向的反方向作为移动的方向

方向:往哪个方向走

步长:每一步走多远

学习率:在梯度下降过程中,学习率乘以梯度大小为步长。学习率如果过小,损失函数的变化速度很慢,会大大增加网络的收敛复杂度,并且很容易被困在局部最小值或者鞍点

迭代:数学上的迭代,第一步运算的结果带入到第二步的函数中,以此类推

用代数表示梯度下降迭代过程

目标方程(多元一次方程)


那么多元一次方程可以写为(矩阵形式表示)

令其损失函数为

其实是预测值减去真实值的平方除以2倍的样本数m(即0.5*MSE),多乘以0.5可以消除掉平方求导后的系数2

迭代过程

对任意一个有,即在某个具体的点上带入w值,对损失函数求导

计算步长

是学习率。步长 = 梯度 * 学习率

更新所有参数w

移动的方向从减号表示出来,减号表示梯度的反方向

简单的示例

x是特征,只有一个,y是真实标签

如果需要对建模的话,需要找到一个a和b,使得损失函数L最小

x y

1 2

2 4

3 6

所以特征矩阵X为(多出来的全为1的一列为截距b)

真实标签矩阵y为

那么参数矩阵w为

令损失函数为

一阶导数

函数实现

设步长, 初始点,迭代次数为10000

import torch

def g(X, y, alpha = torch.tensor(0.01, requires_grad = True), n = 10000):

    b=torch.ones(X.shape[0], requires_grad = True,dtype=torch.float32).reshape(-1,1)

    X = torch.cat([X,b],1)

    m, nc = X.shape

    w = torch.zeros(nc, 1, requires_grad = True)

    for _ in range(n):

        grad = torch.mm(X.t(), (torch.mm(X, w) - y))/m

        w = w - alpha * grad

    return w

因为函数g中,可以给X增加一列全为1所以输入的时候就不需要写了

X = torch.tensor([[1],[2],[3]], requires_grad = True,dtype=torch.float32)

X

# tensor([[1.],

#        [2.],

#        [3.]], requires_grad=True)

y = torch.tensor([2,4,6], requires_grad = True,dtype=torch.float32).reshape(-1,1)

y

# tensor([[2.],

#        [4.],

#        [6.]], grad_fn=<ReshapeAliasBackward0>)

计算结果,其实用最小二乘法令一阶导数为0即可求的a=2,b=0

g(X,y, n = 10000)

# tensor([[2.0000e+00],

#        [1.9127e-05]], grad_fn=<SubBackward0>)

计算此时的损失函数值,改写原来的g函数

def g(X, y, alpha = torch.tensor(0.01, requires_grad = True), n = 10000):

    b=torch.ones(X.shape[0], requires_grad = True,dtype=torch.float32).reshape(-1,1)

    X = torch.cat([X,b],1)

    m, nc = X.shape

    w = torch.zeros(nc, 1, requires_grad = True)

    for _ in range(n):

        grad = torch.mm(X.t(), (torch.mm(X, w) - y))/m

        w = w - alpha * grad

    loss = torch.mm((torch.mm(X,w)-y).t(), torch.mm(X,w)-y)/m*0.5

    return w,loss

此时的损失函数非常接近于0

w,loss=g(X,y)

loss

#  tensor([[2.9644e-11]], grad_fn=<MulBackward0>))

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

推荐阅读更多精彩内容