以下是链接我个人关于深度学习的所有见解,其后会对深度学习思想,正反向传播,损失函数,正则惩罚,梯度下降,矩阵求导,网络搭建,等等都进行详细的讲解!只有你想不到的,没有我讲不到的。让我用最通俗的语言,为你留下最深刻的印象,后来的年轻人以及我徒弟,好好加油! 深度解剖(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倍。
讲解链式法则,主要是为了下小节的反向传播做铺垫,本想一篇博客把两个都讲解完成的,但是怕显得太过于拥挤,所以决定做一个单独的章节,因为反向传播我想要讲解得详细些,下篇博客再见。