[3]数值计算与基于梯度的优化算法-程序员宅基地

技术标签: 深度学习笔记  

1 数值计算

1.1 上溢和下溢以及softmax函数

计算机在存储连续数学信息的时候,只能通过有限位数来近似逼近我们期望的“无限长度”的数字。
下溢指的是当数据过小导致计算机近似成0,极小的数和零是有区别的,零的出现往往会直接改变函数的某些性质。
上溢指的是当数据过大时,计算机将它处理成无穷大,也就是经常程序可能返回的NaN占位符,让数值计算失效。
解决上溢下溢的有效方法是使用softmax函数,其定义为:
s o f t m a x ( x ) i = e x p ( x i ) ∑ j = 1 n e x p ( x j ) softmax(x)_i=\frac{exp(x_i)}{\sum_{j=1}^nexp(x_j)} softmax(x)i=j=1nexp(xj)exp(xi)
式中x是输入向量,等式左边表示经softmax函数处理过后的向量的第i个分量。直观上看softmax将每个分量处理成了“分量在总量中的占比”的形式。
但是往往我们不会直接用softmax函数处理向量x,而是处理 z = x − m a x { x } z=x-max\{x\} z=xmax{ x}原因见下
如果用softmax函数直接处理向量x,我们假设x的每个分量都是一个常数c,那么理想状态下函数映射的结果应该是1/n。

  • 如果c是一个很小的量,以至于计算机近似成了0,那么分母会出现下溢,结果出错
  • 如果c是一个很大的量,仍然导致结果包含NaN的非数字占位符

如果使用 z = x − m a x { x } z=x-max\{x\} z=xmax{ x}将会解决这些问题

  • 由softmax函数的形式易知,输入向量加一个常量不会改变输出结果,也就是说用softmax函数处理z和x得到的结果相同
  • 由于每一项减去了最大项,导致exp的参数最大为0,于是排除了上溢的可能性
  • z必有一项是0,也就是分母一定是大于1的,排除了分母下溢的可能性

综上,使用softmax函数处理z向量的方法可以一定程度上有效解决数值计算上下溢的问题,但其实仍不够全面。如果要开发底层库,数值计算的上下溢应该是需要仔细考量的问题,但是好在已经有足够全面解决这些问题的软件包了,并且已经封装好的机器学习算法都在内部实现了对数值计算问题的处理。

1.2 病态条件

条件数指的是函数相对于输入的微小变化而变化的快慢程度。
通常考虑的是线性方程Ax=b,其中b是输入向量,产生x输出解向量,A的条件数很大就意味着输入的小偏差会导致输出的大偏差。
假设输入产生偏差导致了输出的偏差 A ( x + Δ x ) = b + Δ b A(x+\Delta x)=b+\Delta b A(x+Δx)=b+Δb,由于A是线性映射,可知 A Δ x = Δ b A\Delta x =\Delta b AΔx=Δb,这里假设A存在逆,那么 Δ x = A − 1 Δ b \Delta x=A^{-1}\Delta b Δx=A1Δb
对上面的两个式子两边取二范数,并利用范数定义的不等式性质:
∣ ∣ A x ∣ ∣ ≤ ∣ ∣ A ∣ ∣ ⋅ ∣ ∣ x ∣ ∣ = ∣ ∣ b ∣ ∣ ∣ ∣ Δ x ∣ ∣ = ∣ ∣ A − 1 Δ b ∣ ∣ ≤ ∣ ∣ A − 1 ∣ ∣ ⋅ ∣ ∣ Δ b ∣ ∣ ||Ax|| \le||A||\cdot||x||=||b|| \\ ||\Delta x|| = ||A^{-1}\Delta b|| \le||A^{-1}||\cdot||\Delta b|| AxAx=bΔx=A1ΔbA1Δb
综合两式可得
∣ ∣ Δ x x ∣ ∣ ≤ ∣ ∣ A ∣ ∣ ⋅ ∣ ∣ A − 1 ∣ ∣ ⋅ ∣ ∣ Δ b b ∣ ∣ ||\frac{\Delta x}{x}||\le ||A||\cdot||A^{-1}||\cdot||\frac{\Delta b}{b}|| xΔxAA1bΔb
其中A的条件数cond(A)就被定义为 ∣ ∣ A ∣ ∣ ⋅ ∣ ∣ A − 1 ∣ ∣ ||A||\cdot||A^{-1}|| AA1,可以发现:

  • 当cond(A)很大时,同样的输入误差会导致输出误差的上限很大
  • 当cond(A)很小时,同样的输入误差会导致输出误差的上限很小

根据矩阵二范数的定义,可以求出不同性质的矩阵具体的条件度是多少,通常我们考虑简单的情况,也就是矩阵A具有特征值分解,那么其条件数就是
m a x i , j { λ i λ j } max_{i,j}\{\frac{\lambda_i}{\lambda_j}\} maxi,j{ λjλi}
即矩阵A最大特征值除以最小特征值。关于更详细的条件数计算方法可以参考百度百科条件数
由于在计算机计算的时候不可避免地会使用近似值代入计算,所以我们总希望矩阵运算具有较小的条件数。对于一个很大条件数的矩阵,使用计算机计算会累计产生很明显的偏差。具有很大条件数的矩阵就被成为病态矩阵

2 基于梯度的优化方法

2.1 基本概念

大多数深度学习算法都涉及某种形式的优化优化指的是改变x使得函数f(x)最大或者最小,通常我们只讨论使最小的情况即可,使最大可以通过使-f(x)最小来转换。

其中被优化函数f(x)被称为目标函数(objective function)、准则(criterion),当要把f(x)最小化的时候,也称为代价函数(cost function)、损失函数(loss function)、误差函数(error function)
使f(x)被优化的x值被记作 x ∗ = a r g   m i n f ( x ) x^*=arg\ minf(x) x=arg minf(x)

2.2 梯度下降

只有在多维情况下,梯度才有讨论的意义,但是一维情况可以帮助理解梯度下降的思想。
将函数f(x)做一阶展开
f ( x + ϵ ) ≈ f ( x ) + ϵ f ′ ( x ) f(x+\epsilon)\approx f(x)+\epsilon f'(x) f(x+ϵ)f(x)+ϵf(x)
导函数的符号可以说明函数在某一点是在下降还是上升,为了完成使f(x)最小的优化问题,完全可以让x向着导函数小于零的方向前进一个小步长 ϵ \epsilon ϵ来逼近最小点。
所以我们更新 x n e x t = x − ϵ s i g n ( f ′ ( x ) ) x_{next}=x-\epsilon sign(f'(x)) xnext=xϵsign(f(x))
可以想象到当步长很小的时候,函数会下降到一个局部最小点,但是局部最小点并不一定是全局最小点,如果这一个局部最小点还不够小,没有达到优化可接受的程度,或许需要设定一个大步长“迈出”这个低谷,往后寻找更小的局部最小点。
找到绝对的全局最小点具有难度,有时候一些局部最小点已经显著低于周边的函数值,与全局最小点差别已经没有很大了,我们完全可以接受它作为优化的近似结果。
局部最小和全局最小
这时我们将情况拓展到多维。向量函数f(x)进行一阶展开的结果为:
x n e c t = x − ϵ ∇ f ( x ) x_{nect}=x-\epsilon \nabla f(x) xnect=xϵf(x)
因为梯度指向函数增长最快的方向,所以取逆方向增长步长 ϵ \epsilon ϵ,这种方法被称为梯度下降法,步长 ϵ \epsilon ϵ被称为学习率

2.3 Jacobian和Hessian矩阵

Jacobian矩阵可以表达n维向量y对于m维向量x的偏导数情况,雅克比矩阵J定义为 J i , j = ∂ ∂ x j y i J_{i,j}=\frac{\partial}{\partial x_j}y_i Ji,j=xjyi

梯度下降的方法仅仅采用了一阶近似,但是二阶导数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/GrandpaDZB/article/details/116563765

智能推荐

python中文显示不出来_解决Python词云库wordcloud不显示中文的问题-程序员宅基地

文章浏览阅读2.6k次。解决Python词云库wordcloud不显示中文的问题2018-11-25背景:wordcloud是基于Python开发的词云生成库,功能强大使用简单。github地址:https://github.com/amueller/word_cloudwordcloud默认是不支持显示中文的,中文会被显示成方框。安装:安装命令:pip install wordcloud解决:经过测试发现不支持显示中文..._词云python代码无法输出文字

台式计算机cpu允许温度,玩游戏cpu温度多少正常(台式电脑夏季CPU一般温度多少)...-程序员宅基地

文章浏览阅读1.1w次。随着炎热夏季的到来,当玩游戏正爽的时候,电脑突然死机了,自动关机了,是不是有想给主机一脚的冲动呢?这个很大的原因是因为CPU温度过高导致的。很多新手玩家可能都有一个疑虑,cpu温度多少以下正常?有些说是60,有些说是70,到底多高CPU温度不会死机呢?首先我们先看看如何查看CPU的温度。下载鲁大师并安装,运行鲁大师软件,即可进入软件界面,并点击温度管理,即可看到电脑各个硬件的温度。鲁大师一般情况下..._台式机玩游戏温度多少正常

小白自学Python日记 Day2-打印打印打印!_puthon打印任务收获-程序员宅基地

文章浏览阅读243次。Day2-打印打印打印!我终于更新了!(哭腔)一、 最简单的打印最最简单的打印语句: print(“打印内容”)注意:python是全英的,符号记得是半角下面是我写的例子:然后进入power shell ,注意:你需要使用cd来进入你保存的例子的文件夹,保存时名字应该取为xxx.py我终于知道为什么文件夹取名都建议取英文了,因为进入的时候是真的很麻烦!如果你没有进入正确的文件夹..._puthon打印任务收获

Docker安装:Errors during downloading metadata for repository ‘appstream‘:_"cenerrors during download metadata for repository-程序员宅基地

文章浏览阅读1k次。centos8问题参考CentOS 8 EOL如何切换源? - 云服务器 ECS - 阿里云_"cenerrors during download metadata for repository \"appstream"

尚硅谷_谷粒学苑-微服务+全栈在线教育实战项目之旅_基于微服务的在线教育平台尚硅谷-程序员宅基地

文章浏览阅读2.7k次,点赞3次,收藏11次。SpringBoot+Maven+MabatisPlusmaven在新建springboot项目引入RELEASE版本出错maven在新建springboot项目引入RELEASE版本出错maven详解maven就是通过pom.xml中的配置,就能够从仓库获取到想要的jar包。仓库分为:本地仓库、第三方仓库(私服)、中央仓库springframework.boot:spring-boot-starter-parent:2.2.1.RELEASE’ not found若出现jar包下载不了只有两_基于微服务的在线教育平台尚硅谷

随便推点

Discuz!代码大全-程序员宅基地

文章浏览阅读563次。1.[ u]文字:在文字的位置可以任意加入您需要的字符,显示为下划线效果。2.[ align=center]文字:在文字的位置可以任意加入您需要的字符,center位置center表示居中,left表示居左,right表示居右。5.[ color=red]文字:输入您的颜色代码,在标签的中间插入文字可以实现文字颜色改变。6.[ SIZE=数字]文字:输入您的字体大小,在标签的中间插入文..._discuzcode 大全

iOS NSTimer定时器-程序员宅基地

文章浏览阅读2.6k次。iOS中定时器有三种,分别是NSTimer、CADisplayLink、dispatch_source,下面就分别对这三种计时器进行说明。一、NSTimerNSTimer这种定时器用的比较多,但是特别需要注意释放问题,如果处理不好很容易引起循环引用问题,造成内存泄漏。1.1 NSTimer的创建NSTimer有两种创建方法。方法一:这种方法虽然创建了NSTimer,但是定时器却没有起作用。这种方式创建的NSTimer,需要加入到NSRunLoop中,有NSRunLoop的驱动才会让定时器跑起来。_ios nstimer

Linux常用命令_ls-lmore-程序员宅基地

文章浏览阅读4.8k次,点赞17次,收藏51次。Linux的命令有几百个,对程序员来说,常用的并不多,考虑各位是初学者,先学习本章节前15个命令就可以了,其它的命令以后用到的时候再学习。1、开机 物理机服务器,按下电源开关,就像windows开机一样。 在VMware中点击“开启此虚拟机”。2、登录 启动完成后,输入用户名和密码,一般情况下,不要用root用户..._ls-lmore

MySQL基础命令_mysql -u user-程序员宅基地

文章浏览阅读4.1k次。1.登录MYSQL系统命令打开DOS命令框shengfen,以管理员的身份运行命令1:mysql -u usernae -p password命令2:mysql -u username -p password -h 需要连接的mysql主机名(localhost本地主机名)或是mysql的ip地址(默认为:127.0.0.1)-P 端口号(默认:3306端口)使用其中任意一个就OK,输入命令后DOS命令框得到mysql>就说明已经进入了mysql系统2. 查看mysql当中的._mysql -u user

LVS+Keepalived使用总结_this is the redundant configuration for lvs + keep-程序员宅基地

文章浏览阅读484次。一、lvs简介和推荐阅读的资料二、lvs和keepalived的安装三、LVS VS/DR模式搭建四、LVS VS/TUN模式搭建五、LVS VS/NAT模式搭建六、keepalived多种real server健康检测实例七、lvs持久性工作原理和配置八、lvs数据监控九、lvs+keepalived故障排除一、LVS简介和推荐阅读的资料 学习LVS+Keepalived必须阅读的三个文档。1、 《Keepalived权威指南》下载见http://..._this is the redundant configuration for lvs + keepalived server itself

Android面试官,面试时总喜欢挖基础坑,整理了26道面试题牢固你基础!(3)-程序员宅基地

文章浏览阅读795次,点赞20次,收藏15次。AIDL是使用bind机制来工作。java原生参数Stringparcelablelist & map 元素 需要支持AIDL其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。