您当前的位置: 首页 > 
  • 2浏览

    0关注

    417博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

深度解剖(2):只需几千字,彻底明白链式法则来龙去脉

江南才尽,年少无知! 发布时间:2019-09-28 22:50:46 ,浏览量:2

以下是链接我个人关于深度学习的所有见解,其后会对深度学习思想,正反向传播,损失函数,正则惩罚,梯度下降,矩阵求导,网络搭建,等等都进行详细的讲解!只有你想不到的,没有我讲不到的。让我用最通俗的语言,为你留下最深刻的印象,后来的年轻人以及我徒弟,好好加油! 深度解剖(0):最通俗易懂,详细无死角的深度学习讲解(目录) 如果有说得不对的地方,欢迎大家指出,我会第一时间进行更正,有兴趣可以加微信a944284742一起讨论技术,如果觉得喜欢,一定要点赞,因为这是对我最大的鼓励。

链式法则

在了解反向传播之前,需要一些预备知识,其中一个要点就是链式法则。那么什么是链式法则呢?先看下图: 在这里插入图片描述 假如我们的一个等式如上图所示: f ( x , y , z ) = ( x + y ) ∗ z f(x,y,z) =(x+y) * z f(x,y,z)=(x+y)∗z,其中 x , y , z x,y,z x,y,z都可以看作是自变量,其是一个三元函数。首先我们把 ( x + y ) (x+y) (x+y)看作一个整体 q q q(注意,这里是假设,原本是不存在变量 q q q),那么表达式就变成了 f ( q , z ) = q ∗ z f(q,z) = q * z f(q,z)=q∗z,在这个基础上:

对 q q q求偏导为: φ f φ q = z \frac{\varphi f}{\varphi q}=z φqφf​=z

对 q q q求偏导为: φ f φ z = q \frac{\varphi f}{\varphi z}=q φzφf​=q

注意下面的解释 \color{#FF0000}{注意下面的解释} 注意下面的解释 上面我们求了偏导,但是偏导又什么用?为什么要求偏导。根据表达式 f ( q , z ) = q ∗ z f(q,z) = q * z f(q,z)=q∗z我们可以轻松的知道,如果 q q q增加1,则 f ( q , z ) f(q,z) f(q,z)的结果会增加 z z z,这个应该是很好理解的,如1x2=2,当1增加1的时候,结果会变成4,比原来的2增加了2。反过来,也是同样的道理,当 z z z增加1的时候, f ( q , z ) f(q,z) f(q,z)的结果会增加 q q q值得大小。

如果明白了上面得讲解,我们继续往下面看,现在我们把 f ( q , z ) = l o s s f(q,z)=loss f(q,z)=loss(如果不是很了解得朋友,可以根据博客开头,找到上篇博客得网址),总的来说 l o s s = 真实值 − 预测值 loss = 真实值 - 预测值 loss=真实值−预测值 可以说loss表示的是真实样本标签和预测结果的差值,或者说真实样本和预测样本的偏差值。当这个偏差值越小的时候,预测的结果和样本真实的标签越接近,如 l o s s = 0 loss=0 loss=0的时候,表示 真实值 = 预测值 真实值 =预测值 真实值=预测值。

假如,我们通过算法,进行了前向传播,得到预测值,又根据真实标签求得 l o s s loss loss,那么也就是说,预测得值比真实的值增加了 l o s s loss loss这么多的数值,前面也分析过了, l o s s loss loss为0的时候我们预测是最准确的。在根据前面的公式可以知道 l o s s = f ( q , z ) = q ∗ z loss = f(q,z) = q * z loss=f(q,z)=q∗z,其主要受到变量 q , z q,z q,z的影响,那么我们要怎么去调节 q , z q,z q,z才能让loss怎么为0呢?这个先放一放,我们先来看看表达式 q = x + y q = x+y q=x+y。

前面我们假设 q = x + y q = x+y q=x+y,但是我们来看看先前的图: 在这里插入图片描述 我们可以发现是没有 q q q这个变量的,也就是说,我们还要把 q q q继续往下传递,直到他传递给 x , y x,y x,y,因为我们没有办法对变量 q q q进行更新,但是可以对变量 x , y x,y x,y进行更新,下面又涉及到了对 q q q对 x , y x,y x,y求偏导:

对 x x x求偏导为: φ q φ x = 1 \frac{\varphi q}{\varphi x}=1 φxφq​=1

对 y y y求偏导为: φ q φ y = 1 \frac{\varphi q}{\varphi y}=1 φyφq​=1

这里和前面反馈出了一个类似的问题: 当 x x x增加1的时候, q q q的结果会增加1,当 y y y增加1的时候, q q q的结果同样是增加1。下面就是链式法则闪亮登场了。

前面提到了,我们因为不存在 q q q这个标量,所以要继续把 q q q进行传递,知道传递到 x , y x,y x,y身上,简单明了的说,就是我们要找到变量 x , y x,y x,y与 l o s s = f ( q , z ) = q ∗ z loss = f(q,z) = q * z loss=f(q,z)=q∗z之间直接联系,即 x + 1 x+1 x+1或者 y + 1 y+1 y+1,其对应的 l o s s = f ( q , z ) = q ∗ z loss = f(q,z) = q * z loss=f(q,z)=q∗z会发生多少的变化。为了方向讲解,我先直接贴出链式法则的推导过程: q ( x , y ) = x + y 对应 x , y 偏导分别为 : φ q φ x = 1 , φ q φ y = 1 q(x,y)=x+y 对应x,y偏导分别为: \frac{\varphi q}{\varphi x}=1,\frac{\varphi q}{\varphi y}=1 q(x,y)=x+y对应x,y偏导分别为:φxφq​=1,φyφq​=1

f ( q , z ) = q ∗ z 对 q 求偏导 : φ f φ q = z f(q,z) =q*z 对q求偏导: \frac{\varphi f}{\varphi q}=z f(q,z)=q∗z对q求偏导:φqφf​=z

那么 f ( x , y , z ) f(x,y,z) f(x,y,z)对x,y求偏导为: f x ( x , y , z ) = φ f φ q ⋅ φ q φ x = z ∗ 1 = z f_x(x,y,z) = \frac{\varphi f}{\varphi q} · \frac{\varphi q}{\varphi x} = z*1 = z fx​(x,y,z)=φqφf​⋅φxφq​=z∗1=z

f y ( x , y , z ) = φ f φ q ⋅ φ q φ y = z ∗ 1 = z f_y(x,y,z) = \frac{\varphi f}{\varphi q} · \frac{\varphi q}{\varphi y} = z*1 = z fy​(x,y,z)=φqφf​⋅φyφq​=z∗1=z

可以看到,当 x x x或者 y y y增加1的时候, l o s s loss loss增加大小为 z z z。这样,我们就知道了 x , y , z x,y,z x,y,z会分别直接对 l o s s = f ( q , z ) = q ∗ z loss = f(q,z) = q * z loss=f(q,z)=q∗z产生多大的影响,通过修改三个变量,我们能找到一个合适的值,让 l o s s loss loss为0.

其实,链式法则的原理很简单,假设自行车是行人的五倍速度,同时汽车是自行车的五倍,那么汽车就是行人速度的25倍。

讲解链式法则,主要是为了下小节的反向传播做铺垫,本想一篇博客把两个都讲解完成的,但是怕显得太过于拥挤,所以决定做一个单独的章节,因为反向传播我想要讲解得详细些,下篇博客再见。

关注
打赏
1592542134
查看更多评论
立即登录/注册

微信扫码登录

0.2147s