AI学习笔记:[3]梯度下降和反向传播

上一篇回顾:《AI学习笔记:[2]神经网络向量化和成本函数》

回忆一下:要求解的问题

上一节学到成本函数 J(w,b) ,我们的目标是:求解 w 和 b 使得全局的成本J(w,b) 最小

回顾一下成本函数 J(w,b):

再回顾一下神经网络的递推公式:

这里:

  1. w[l] 的维度为 (n[l], n[l-1])
  2. b[l] 的维度为 (n[l], 1)

因此,对于 L 层神经网络,我们要求出 (n[0] * n[1] + n[1] * n[2] + ... + n[L-1] * n[L]) 个 w[l](i) 以及 (n[1]+...+n[L]) 个 b[l](i),这里的 w[l] 和 b[l](i) 都是实数。

以如下这个2层的神经网络为例:

2层神经网络

其中:

  1. L=2,n[0]=2, n[1]=4, n[2]=1
  2. 要求解的对象 w[1] 为 (2, 4) 的矩阵,w[2] 为 (4, 1) 的矩阵,共 8 个 w;
  3. 要求解的对象 b[1] 为 (4, 1) 的列向量,b[2] 为 (1, 1) 的列向量,共 5 个 b。

梯度下降法

梯度下降法是一种求最优解(但并不一定是真正的解,只是无限接近真正解)的算法。用负梯度方向为搜索方向,最速下降法越接近目标值,步长越小,前进越慢。详见 维基百科-梯度下降法

举个例子可能更好理解。

比如函数:f(x)=x2-2x,高中数学告诉我们,这个函数的顶点为 (1, -1),其最小值为-1。

f(x)=x^2-2x

首先求解f '(x):

我们尝试用梯度下降法求解其最小值的方法 Python 代码为:

def f(x):
  return x**2 - 2*x

def df(x):
  return 2*x - 2

def gd(start_x, step_x, iter_cnt, df):
    """
    Args:
        start_x  起点
        step_x   迭代步长,也称为learing rate
        iter_cnt 迭代次数
        df       函数f(x)的导数
    """
    x = start_x
    for i in range(iter_cnt):
        g = df(x)
        x -= g * step_x
        print('[%2d] x=%f df(x)=%f f(%f)=%f' %(i, x, g, x, f(x)))
        if abs(g) < 1e-6:
            break;
    return x

# 从x=5起步,每次往前走0.05,迭代100次,前面定义的df当做导数函数传入
gd(5, 0.05, 100, df)

输出结果为:

[ 0] x=4.600000 df(x)=8.000000 f(4.600000)=11.960000
[ 1] x=4.240000 df(x)=7.200000 f(4.240000)=9.497600
[ 2] x=3.916000 df(x)=6.480000 f(3.916000)=7.503056
[ 3] x=3.624400 df(x)=5.832000 f(3.624400)=5.887475
[ 4] x=3.361960 df(x)=5.248800 f(3.361960)=4.578855
[ 5] x=3.125764 df(x)=4.723920 f(3.125764)=3.518873
[ 6] x=2.913188 df(x)=4.251528 f(2.913188)=2.660287
[ 7] x=2.721869 df(x)=3.826375 f(2.721869)=1.964832
...
[24] x=1.287159 df(x)=0.638132 f(1.287159)=-0.917540
...
[35] x=1.090114 df(x)=0.200252 f(1.090114)=-0.991880
...
[99] x=1.000106 df(x)=0.000236 f(1.000106)=-1.000000

可以看到,开始的时候,梯度较大,因此下降速度很快,0到24步就逼近了1.9,而后面的35到99步才缓慢逼近到1.0,f(x) 找到的点(1.000106, -1.0) 非常接近于(1, -1)。

在神经网络中,由于变量 w 和 b 都是多维度的,因此问题从“求一个自变量函数的导数”转变成“多变量函数的偏导数”。如下图所示:

梯度下降法

用三维的图形表示就是,实际上神经网络远远比三维图形要复杂,用直观的方式无法表达。

梯度下降法示意图

数学回顾(1):导数以及链式法则

梯度下降法里面很重要的一步是求导数,然而并不是所有的函数都像x2-2x这么规范、这么容易求导的,这时候就要用到反向传播。但在学习反向传播之前,我们先重拾一下 导数 以及在神经网络中非常重要的 求导链式法则

  1. 浅谈导数的意义
  2. 如何理解导数的概念 ?
  3. 微分和导数的关系是什么?两者的几何意义有什么不同?为什么要定义微分 ?

导数的计算公式和四则运算法则:

导数的计算和四则计算

导数的链式法则:

链式法则

数学回顾(2):偏导数以及计算方法

偏导数的定义详见:偏导数

偏导数

正向传播以及反向传播

我们再来看一下整个神经网络的计算过程,先以 Logistic Regression 为例。

始终牢记在心里:我们最终是为了求解 w 和 b,使得 J(w,b) 最小。因此,我们要先求解 dw 和 db,然后通过梯度下降法,每个迭代中通过 w=w-dw,不断地往前找,一直找到 dw 接近0为止(梯度为0,为最小值)。

再强调一下,在吴恩达的课程中,dw表示的是dL(a,y)/dw,可以认为只取了分母而忽略了分子。

如下图所示,正向传播分成三个步骤:

  1. 计算z
  2. 计算a
  3. 计算L(a, y)

相反,我们需要计算的 dw, db,使用链式法则可以计算出,如图所示:

逻辑斯蒂回归反向传播

对图中的公式进行整理,如下:


所以,我们最终需要计算如下四个算子:

da、dz、dw、db的计算步骤如下图所示,注意其中计算 dσ(z)/dz 的计算过程和前文中的一样。

逻辑斯蒂回归反向传播2

最终得到:

最终,我们得到了 dw 和 db 的计算公式,将其代入到梯度下降算法,当 dw 趋近于
0 以及 db 趋近于 0 时对应的 w 和 b 就是我们要找的值。

不知不觉中又写了不少了,这里只讲解到逻辑斯蒂回归的反向传播,多层神经网络网络的反向传播以及对应的伪代码就留到下次继续了。

提到反向传播,最近有一个比较有意思的新闻是《被Geoffrey Hinton抛弃,反向传播为何饱受质疑?(附BP推导)》,至少学习完这个课程,你可以看懂这篇新闻了。的确,像Hinton所说的那样,人类大脑的原理并不是反向传播,其实吴恩达也在各种各样的场合反复撇清深度学习和人类大脑的关系,虽然人工智能的概念被炒作得非常火,但是我们还是应该意识到,深度学习只是一种更好的机器学习方法而已,至于人类大脑是怎么运作的,我们还知之甚少,更不用说去模拟或者仿造了。但是我们也应该感到自豪的是,人类已经开始往这个方向努力,就和文艺复兴一样,多年以后回首会认为这是一个非常了不起的时代。

下一步

学到这里,一直是比较枯燥的数学推导,吴恩达非常讲究实战与理论结合,因此下一周首先将反向传播学习完,然后开始做课后练习了。我看GitHub上有人将课后Programming Assignments & Quiz Solutions,也是非常贴心的。

如果你喜欢本文,请不要吝啬你的点赞或打赏~ 同时,欢迎你通过评论来一起交流或指正文中的错误

请关注我的账号,预计会以一周一篇的频率进行更新~

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

推荐阅读更多精彩内容