前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >梯度下降法公式推导过程--再次补充:导数部分化简

梯度下降法公式推导过程--再次补充:导数部分化简

作者头像
俺踏月色而来
发布2019-06-25 10:21:16
1.1K0
发布2019-06-25 10:21:16
举报
文章被收录于专栏:月色的自留地

前面一篇就是基础性的推导过程。从反馈的情况看,总体还是讲明白了。但是在导数的部分,仍有不少的存疑。 其实在数学方面,我也是学渣。所以尽我所能,希望再次的补充能讲的明白。若有谬误,期盼指正。

基础公式

所需基础公式抄录于下,不明白的请至上篇查看详解。

假设函数

$$ y' = h_θ(x) = \sum_{i=0}^nθ_ix_i $$

均方差损失函数

$$ J(θ) = \frac1{2m}\sum_{i=1}^m(h_θ(x^{(i)}) - y^{(i)})^2 $$

梯度下降求解θ

$$ θ_j := θ_j - α\frac∂{∂θ_j}J(θ) $$ 摘出来上面公式步长α之后的部分: $$ \begin{align} \frac∂{∂θ_j}J(θ) & = \frac∂{∂θ_j}\frac1{2m}\sum_{i=1}^m(h_θ(x^{(i)}) - y^{(i)})^2 \\ & = \frac1m\sum_{i=1}^m(h_θ(x^{(i)}) - y^{(i)})x_j^i \end{align} $$

嗯,问题一般就是出在这里了,很多人尝试了化简,得不到上面的化简结果。

导数公式

化简上面的式子,需要微积分导数的一些知识,我抄录用到的部分于此,以方便对照查看:

导数

导数的目的是求得在给定点的切线方向,以保证梯度下降的下一步会向收敛方向(也即上面的损失函数最小化方向)迭代一个步长α。这个很多教程都讲过了,这里不再废话。

(偷懒从网上搜了张图,侵删。图中的W实际是我们公式中的θ,J(W)就是我们讲的J(θ))

首先公式(\frac∂{∂θ_j})就是求导数的意思,别当做普通的分式,直接分子、分母把∂化简掉成为(\frac1{θ_j})。当然大多数人不会这样做了,我只是见过这样的情况,说出来以防万一。

事实上,你把(\frac∂{∂θ_j})换成常用的函数描述(f(θ_j))可能更贴切。

对函数的和求导法则

为了描述起来方便,我们下面使用'符号来代表求导:

\[ (u + v)' = u' + v' \] 在上面的公式中推广一下,Sigma求和不影响求导的传导,直接把Sigma符号提到前面就好: \[ (\sum_{i=1}^mu^{(i)})' = \sum_{i=1}^m(u^{(i)})' \]

对函数的积求导法则

$$ (uv)' = u'v+uv' $$

幂函数求导法则

$$ (x^u)' = ux^{(u-1)} $$

对常数求导

这是我最爱的部分:

\[ (C)' = 0 \]

链式法则

这是我最不喜欢的部分: 假设我们希望对变量z求导,而变量z依赖变量y,变量y又依赖变量x。例如:

\[ z = f(y) \\ y = g(x) \] 也即: \[ z = f(g(x)) \] 那么对z求导就构成了链式法则: \[ (z)' = (f(g(x)))'·(g(x))' \] 注意最后面乘上内部依赖函数求导的过程,简直是反人类的天外来客,经常会忘。但我等遵循自然界规则的凡人又能如何,死记而已。

推导

基本公式列完,开始推导过程:

\[ \frac∂{∂θ_j}J(θ) = \frac∂{∂θ_j}\frac1{2m}\sum_{i=1}^m(h_θ(x^{(i)}) - y^{(i)})^2 \] 根据上面说的求和函数求导法则: \[ = \frac1{2m}\sum_{i=1}^m(\frac∂{∂θ_j}(h_θ(x^{(i)}) - y^{(i)})^2) \] 别急着对幂求导,考虑对中间的损失函数的依赖,实际要先处理链式法则: \[ = \frac1{2m}\sum_{i=1}^m(\frac∂{∂θ_j}(h_θ(x^{(i)}) - y^{(i)})^2)·(\frac∂{∂θ_j}(h_θ(x^{(i)}) - y^{(i)}) \] 现在方程式前面的部分可以幂求导了,后面的部分把假设函数先展开: \[ = \frac1{2m}\sum_{i=1}^m2·(h_θ(x^{(i)}) - y^{(i)}))·(\frac∂{∂θ_i}(\sum_{i=0}^nθ_ix_i - y^{(i)})) \] 因为展开的假设函数中使用i代表第i个权重,所以前面的求导也换成了(θ_i),不是指第i个批次的样本数据。这里原来没有打算展开讲,所以使用的符号名称有点容易混,但概念清楚的话不应当闹误会。

继续,式子前半部分的2跟1/2会抵消掉,这是前篇做均方差时候乘1/2的目的;后面的Sigma求导继续使用求和函数求导法则展开:

\[ = \frac1{m}\sum_{i=1}^m(h_θ(x^{(i)}) - y^{(i)}))·(\sum_{i=0}^n\frac∂{∂θ_i}θ_ix_i - \frac∂{∂θ_i}y^{(i)}) \] 前半部分的化简已经完成,简单起见,我们只把后面部分摘出来: \[ \sum_{i=0}^n\frac∂{∂θ_i}θ_ix_i - \frac∂{∂θ_i}y^{(i)}\\ = \frac∂{∂θ_i}(θ_0x_0+θ_1x_1+...+θ_ix_i+...+θ_nx_n) - \frac∂{∂θ_i}y^{(i)} \] 根据求和函数求导法则展开,等于对其中每一项求导。而我们在对(θ_i)进行求导的时候,其余各项对我们来说,实际上就是一个常数,它们在求导这一刻是固定不能变的。嗯嗯,记得上一篇最后的提醒吗?θ在每个循环内固定不变,在计算完所有的θ之后,才一次代入,并在下个循环内保持不变。

而对常数求导,刚才说过了,那是我的最爱,因为结果是0。还有我们抄了好几行的(y^{(i)})求导,我忍得好辛苦,因为那也是样本集给出的常数,所以结果也是0: \[ = 0 + 0 + ... + \frac∂{∂θ_i}θ_ix_i + ... + 0 - 0 \] 现在需要对乘积函数求导展开了: \[ = \frac∂{∂θ_i}θ_i·x_i + θ_i·\frac∂{∂θ_i}x_i \] 你看,这世界不总是那么残酷的,后面的(x_i)又双叒叕是一个常量,所以求导之后乘上(θ_i)仍然是0。 前面对(θ_i)的求导结果是1,原因很简单,你可以把(θ_i)看做1次幂。 \[ \begin{align} & = \frac∂{∂θ_i}(θ_i)^1·x_i + 0 \\ & = 1·θ_i^{(1-1)}·x_i \\ & = 1·1·x_i \\ & = x_i \\ \end{align} \] 只是瞬间,这个世界就清净了。原来对假设函数求导的最终结果,不过是(θ_i)的系数(x_i)。

前面我们两次把等式的局部摘出来化简,现在是把它们组合回去的时候了:

\[ \begin{align} θ_j & = θ_j - α\frac∂{∂θ_j}J(θ) \\ & = α\frac∂{∂θ_j}\frac1{2m}\sum_{i=1}^m(h_θ(x^{(i)}) - y^{(i)})^2 \\ & = α\frac1m\sum_{i=1}^m(h_θ(x^{(i)}) - y^{(i)})x_j^i \end{align} \]

希望不用再写补充的补充的补充了吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础公式
    • 假设函数
      • 均方差损失函数
        • 梯度下降求解θ
        • 导数公式
          • 导数
            • 对函数的和求导法则
              • 对函数的积求导法则
                • 幂函数求导法则
                  • 对常数求导
                    • 链式法则
                    • 推导
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档