从导数到方向导数和梯度,一步步理解深度学习中的梯度下降算法
文章首发于慕课网原文地址,因csdn对数学公式支持更好故重新编辑整理发表于此,方便需要的读者阅读理解。
吴恩达的深度学习课程五门里已经学了四门,课后的编程练习也都跟着做了,在学习的过程中,时常忍不住去探究背后的数学原理,毕竟大学里也学过高等数学,概率论和线性代数这几门机器学习的必备数学课程,又考过研。虽然不是数学天才,但自认为对数学还是蛮感兴趣的,而吴恩达的这门课恰好相对弱化了数学理论,我就自己去翻书+Google学习了。最近偶然翻自己以前的笔记,看到写的关于梯度的概念的部分,感觉还是有些不清晰和遗忘的地方,梯度是梯度下降算法的基础,而梯度下降算法又是神经网络最基本的算法,于是我又花了一天的时间复习了一下。为了防止自己以后再遗忘,也希望对其他在初学的小伙伴们有帮助,我决定总结一下相关数学知识,这篇手记会从导数的概念开始,一步步引出梯度下降算法。
导数的定义
函数y=f(x)y=f(x)y=f(x)在点x0x_0x0处的导数:
f′(x0)=limΔx→0f(x0+Δx)−f(x0)Δxf'(x_0)=lim_{\Delta x \to 0}\frac{f(x_0+\Delta x)-f(x_0)}{\Delta x}f′(x0)=limΔx→0Δxf(x0+Δx)−f(x0)
自变量xxx在x0x_0x0处取得增量Δx\Delta xΔx时,相应的因变量取得增量Δy=f(x0+Δx)−f(x0)Δy=f(x_0+Δx)-f(x_0)Δy=f(x0+Δx)−f(x0),函数在x0处的导数就是ΔyΔyΔy与ΔxΔxΔx之比在Δx0Δx_0Δx0时的极限,导数其实就是因变量y在点x0处的变化率,它反映了因变量随自变量的变化而变化的快慢程度。另一方面,从几何意义上来说,函数在一点的导数值就是过这一点的切线的斜率。
根据导数的定义可以知道,当f′(x)>0f'(x)\gt0f′(x)>0时,f(x)f(x)f(x)单调递增,减小xxx可以减小f(x)f(x)f(x),当f′(x)<0f'(x)\lt0f′(x)<0时,f(x)f(x)f(x)单调递减,增大xxx可以减小f(x)f(x)f(x)。由此可知f(x−αf′(x))<f(x)(其中α>0)f(x-αf'(x)) \lt f(x)(其中α>0)f(x−αf′(x))<f(x)(其中α>0),因此我们可以将x往导数的反方向移动一小步来减小f(x),即x:=x-αf’(x)。这就是梯度下降法。
方向导数与神经网络中的梯度下降
在训练神经网络时,我们都是通过定义一个代价函数(cost function),然后通过反向传播更新参数来最小化代价函数,深度神经网络可能有大量参数,因此代价函数是一个多元函数,多元函数与一元函数的一个不同点在于,过多元函数的一点,可能有无数个方向都会使函数减小。这样说可能不太直观,我们以日常生活中登山运动为例,当你下山的时候,可以走从山顶到山脚的一条直道,也可以走环山的路或者S型的路,显然环山的路和S型的路要绕着山走,花费的时间更长,路更平缓,而直道则更陡峭,下山的速度更快,花费的时间更短。引申到数学上,我们可以把山这样的曲面看作一个二元函数z=f(x,y),二元函数是多元函数里最简单的情形,也是易于可视化直观理解的。前面提到一元函数导数的几何意义是切线的斜率,对于二元函数,曲面上的某一点(x0,y0,z0)会有一个切平面,切平面上的无数条直线都是过这一点的切线,这些切线的斜率实际上就是过这一点的无数个方向导数的值,和一元函数一样,方向导数的值实际反映了多元函数在这一点沿某个方向的变化率。正如下山必然有一条最陡峭、最快的路径,方向导数也有一个最小值,在最小值对应的方向上,函数下降最快,而这个方向其实就是梯度的反方向。对于神经网络,在方向导数最小的方向更新参数可以使代价函数减小最快,因此梯度下降法也叫最速下降法。
偏导数的定义
上面对方向导数和梯度下降的解释偏感性,下面为了从数学上明确方向导数和梯度的概念,加深理解,我们先来看看偏导数的定义。
在一元函数中,导数表示了函数的变化率。对于多元函数,自变量不止一个,因变量与自变量的关系比一元函数复杂,我们先考虑多元函数关于其中一个自变量的变化率,这就引出了偏导数的概念。
还是以二元函数z=f(x,y)z=f(x,y)z=f(x,y)为例,当yyy固定为y0y_0y0,xxx在x0x_0x0处有增量ΔxΔxΔx时,相应的函数有增量f(x0+Δx,y0)−f(x0,y0)f(x_0+Δx,y_0)-f(x_0,y_0)f(x0+Δx,y0)−f(x0,y0),那么:
limΔx→0f(x0+Δx,y0)−f(x0,y0)Δxlim_{\Delta x\to0}\frac{f(x_0+Δx,y_0)-f(x_0,y_0)}{Δx}limΔx→0Δxf(x0+Δx,y0)−f(x0,y0)
即为z=f(x,y)z=f(x,y)z=f(x,y)在点(x0,y0)(x_0,y_0)(x0,y0)处对xxx的偏导数,记为fx(x0,y0)f_x(x_0,y_0)fx(x0,y0),对y的偏导数定义与之类似,记为fy(x0,y0)f_y(x_0,y_0)fy(x0,y0)。
方向导数与梯度
偏导数实际上反映了多元函数沿坐标轴方向的变化率,那么函数沿某一非坐标轴方向的指定方向的变化率如何衡量呢?
设lll是xOyxOyxOy平面上以点P0(x0,y0)P_0(x_0,y_0)P0(x0,y0)为起始点的一条射线,el=(cosα,sinα)e_l=(cosα,sinα)el=(cosα,sinα)是与l同方向的单位向量,则射线l的参数方程为:
x=x0+tcosα,y=y0+tsinα(t≥0)x=x_0+tcosα,\\ y=y_0+tsinα (t≥0)x=x0+tcosα,y=y0+tsinα(t≥0)
P(x0+tcosα,y0+tsinα)P(x_0+tcosα,y_0+tsinα)P(x0+tcosα,y0+tsinα)为lll上另一点,那么:
limt→0+f(x0+tcosα,y0+tsinα)−f(x0,y0)tlim_{t \to0^+}\frac{f(x_0+tcosα,y_0+tsinα)-f(x_0,y_0)}{t}limt→0+tf(x0+tcosα,y0+tsinα)−f(x0,y0)
为f(x,y)f(x,y)f(x,y)在点P0P_0P0沿方向lll的方向导数,不难发现,函数f(x,y)f(x,y)f(x,y)在xxx和yyy坐标轴方向的方向导数分别就是其关于x和y的偏导数,可以证明,函数f(x,y)的方向导数就等于:
fx(x0,y0)cosα+fy(x0,y0)sinαf_x(x_0,y_0)cosα+f_y(x_0,y_0)sinαfx(x0,y0)cosα+fy(x0,y0)sinα
这个式子其实可以看成是两个向量(fx(x0,y0),fy(x0,y0))(f_x(x_0,y_0),f_y(x_0,y_0))(fx(x0,y0),fy(x0,y0))和(cosα,sinα)(cosα,sinα)(cosα,sinα)的点积,根据点积的计算公式,假设上述两个向量的夹角为θ,上式可化为:
∣∣(fx(x0,y0),fy(x0,y0))∣∣cosθ||(f_x(x_0,y_0),f_y(x_0,y_0))||cosθ∣∣(fx(x0,y0),fy(x0,y0))∣∣cosθ
向量(fx(x0,y0),fy(x0,y0))(f_x(x_0,y_0),f_y(x_0,y_0))(fx(x0,y0),fy(x0,y0))就是函数f(x,y)f(x,y)f(x,y)在点P0(x0,y0)P_0(x_0,y_0)P0(x0,y0)的梯度,由此引出梯度的概念,梯度就是一个向量,这个向量的每个元素分别是多元函数关于每个自变量的偏导数。从上式可以看出,当θ=0时,方向导数的值最大,多元函数增加最快,也就是说梯度的方向就是函数增加最快的方向,当θ=π时,方向导数的值最小,多元函数减小最快,也就是在梯度相反的方向上,方向导数最小。
总结
- 导数、偏导数和方向导数衡量的都是函数的变化率;
- 梯度是以多元函数的所有偏导数为元素的向量,代表了函数增加最快的方向;
- 在梯度反方向上,多元函数的方向导数最小,函数减小最快,在神经网络中,在梯度反方向更新参数能最快使代价函数最小化,所以梯度下降法也叫最速下降法。
参考资料
- 高等数学 第六版 上下册 —— 同济大学数学系编 高等教育出版社
- 深度学习(花书)—— Ian GoodFellow
- 如何直观形象的理解方向导数与梯度以及它们之间的关系? —— 知乎
本作品采用知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。要查看该许可协议,可访问 http://creativecommons.org/licenses/by-nc-sa/4.0/ 或者写信到 Creative Commons, PO Box 1866, Mountain View, CA 94042, USA。
从导数到方向导数和梯度,一步步理解深度学习中的梯度下降算法相关推荐
- 深度学习中的梯度消失、梯度爆炸问题
写在前面: 有些博主对这个问题的解释很好,这里参考了: 详解机器学习中的梯度消失.爆炸原因及其解决方法 我在这方面的工作经验和知识面还不够,还需要积累后再做出更为专业的解答. 参考我之前转发过的一篇文 ...
- 深度学习中的梯度下降算法
深度学习中的梯度下降算法 梯度下降算法-----致力于找到函数极值点的算法,深度学习中的核心算法. 所谓的学习便是改进模型参数,以便通过大量训练步骤将损失最小化. 有了这个概念,将梯度下降法应用于寻找 ...
- ICLR 2020 Spotlight!从梯度信噪比来理解深度学习泛化性能 | AI TIME PhD
AI TIME欢迎每一位AI爱好者的加入! 深度学习在诸多应用领域取得了巨大的成功,但是其背后的基础理论确相对有些滞后.与传统浅层学习模型不同,深度学习所得到的深度神经网络(DNNs)层次更为复杂,然 ...
- 深度学习中的梯度下降优化算法综述
1 简介 梯度下降算法是最常用的神经网络优化算法.常见的深度学习库也都包含了多种算法进行梯度下降的优化.但是,一般情况下,大家都是把梯度下降系列算法当作是一个用于进行优化的黑盒子,不了解它们的优势和劣 ...
- 关于深度学习中的梯度下降,了解一下
原文 一篇让你很容易理解什么是梯度下降的博客 0 什么是梯度下降 梯度下降法的基本思想可以类比为一个下山的过程.假设这样一个场景:一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷 ...
- 深度学习中的梯度消失与梯度爆炸及解决方案
1.梯度消失与梯度爆炸 反向传播算法在神经网络中非常常见,可以说是整个深度学习的基石.在反向传播中,经常会出现梯度消失与梯度爆炸的问题.梯度消失产生的原因一般有两种情况:一是结构较深的网络,二是采用了 ...
- 深度学习相关概念:梯度下降
深度学习相关概念:梯度下降法.动量法与自适应梯度 1. 梯度下降概念 2. 梯度下降的目的 3. 梯度下降的原理 4. 梯度计算 5. 梯度下降算法的类别及计算效率 5.1 批量梯度下降(BGD) 5 ...
- cnn 反向传播推导_深度学习中的参数梯度推导(三)下篇
前言 在深度学习中的参数梯度推导(三)中篇里,我们总结了CNN的BP推导第一步:BP通过池化层时梯度的计算公式.本篇(下篇)则继续推导CNN相关的其他梯度计算公式. 注意:本文默认读者已具备深度学习上 ...
- nfa确定化 dfa最小化_深度学习中的优化:梯度下降,确定全局最优值或与之接近的局部最优值...
深度学习中的优化是一项极度复杂的任务,本文是一份基础指南,旨在从数学的角度深入解读优化器. 一般而言,神经网络的整体性能取决于几个因素.通常最受关注的是网络架构,但这只是众多重要元素之一.还有一个常常 ...
- eta 深度学习 参数_深度学习中的参数梯度推导(一)
必备的数学知识 矩阵微分与求导 前言 深度学习向来被很多人认为是"黑盒",因为似乎很多人都不清楚深度学习的运作方式,本系列<深度学习中的数学>的连载文章主要目的就是向大 ...
最新文章
- FD_READ FD_WRITE触发时机
- ppt格式刷快捷键_高效地制作PPT
- 【Linux】10_存储管理EXT4文件系统详解
- 微信跳一跳python全部代码_微信跳一跳python代码
- python-socket
- NS3可视化问题及解决办法
- Java反射 field
- oracle 数据库bak文件怎么打开,Oracle数据库的参数文件备份与恢复
- 阿里云服务器ECS选型
- PancakeBunny获160万美元战略融资,Binance Labs领投
- [LibTorch Win] 各版本 LibTorch 下载
- 谈360下拉词360下拉框的优势及360搜索推广方法有哪些?
- python怎么读取excel-python怎么读取excel中的数值
- rapidxml对unicode的支持
- UOJRoundPLUS+
- The Code is successfully generatd...使用stm32cude生成工程时报错
- python学习方法总结(内附python全套学习资料)
- 华硕路由搭建php网站,华硕路由器操作模式
- C#画布的创建和圆的画法
- Mysql语句计算文本字数_使用SQL确定文本字段的字数统计
热门文章
- react-ative安装expo-linking后运行报错
- 飞桨AI Studio之加州房价预测——机器学习的Hello world
- 苹果手机有护眼模式吗_玩手机还能护眼?用这 2 款 App,可能比开深色模式更有效...
- 淘宝直通车新功能智能推广 智能推广计划设置 智能推广优化 智能推广优化原则
- java pfx 和cer_pfx证书和CER证书
- 网络基础之交换机原理及4大功能
- rockchip RGMII+mv88e6390 管理型交换机功能调试及vlan定制+Mac绑定
- 几何分布的众数为什么是1
- windows安装mmdetection
- QT C++ Luhn算法验证银行卡号合法性