[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

智能推荐

Springboot/java/node/python/php基于springboot+vue手机售后管理系统【2024年毕设】-程序员宅基地

文章浏览阅读779次,点赞19次,收藏24次。springboot微信小程序的小疾病问诊服务系统的设计与实现。springboot基于spring的物业管理系统的设计与实现。springboot基于Java的高校学生请假系统。ssm基于Android的购物商场APP设计与实现。springboot基于微信小程序的智慧校园系统。ssm基于Android的英语词典的设计与开发。ssm基于SSM+Vue的学生实践管理平台开发。ssm基于android的企业员工考勤系统。ssm基于web的暗香小店系统的设计与实现。ssm基于Web的高等学校公费医疗管理系统。

css中hover属性的使用技巧_css hover的用法-程序员宅基地

文章浏览阅读2.3w次,点赞15次,收藏63次。hover属性用不同的书写方式,来改变不同关系的元素样式。元素:hover 表示聚焦后改变自己元素:hover 元素 表示聚焦后改变其子元素元素:hover + 元素 表示聚焦后改变其指定的“亲兄弟”(条件是该兄弟元素与其相邻)元素元素:hover ~ 元素 表示聚焦后改变其指定的兄弟元素,两个元素相不相邻都行。示例:.first:hover {color: white;}/* 聚焦我改变自己 */.three:hover .three-son {font-size: 20px._css hover的用法

coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习_pca反向压缩-程序员宅基地

文章浏览阅读6k次,点赞3次,收藏15次。coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习1聚类算法clutering1聚类算法简介2K-means21kmeans的目标函数22随机初始化23选择类别数3考试quiz维数约减 dimensionality reduction1数据压缩2数据可视化3维度约简-主成分分析法PCA1 PCA_pca反向压缩

vim插件安装及常用技巧_bxbx.vim-程序员宅基地

文章浏览阅读5.2k次。一、插件安装Vundle是vim的一个插件管理器, 同时它本身也是vim的一个插件。插件管理器用于方便、快速的安装、删除、Vim更新插件。mkdir -p ~/.vim/bundlegit clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim管理器安装完成后,vim ~/.vimrc命令创建.vimrc文件syntax on" tab宽度和缩进同样设置为4set tabstop=4set softta_bxbx.vim

java.lang.ClassNotFoundException:如何解决-程序员宅基地

文章浏览阅读7.2w次,点赞10次,收藏41次。本文适用于当前面临java.lang.ClassNotFoundException挑战的Java初学者。 它将为您提供此常见Java异常的概述,这是一个示例Java程序,可支持您的学习过程和解决策略。 如果您对与更高级的类加载器相关的问题感兴趣,我建议您复习有关java.lang.NoClassDefFoundError的文章系列,因为这些Java异常密切相关。 java.lang..._java.lang.classnotfoundexception:

串口通信数据帧_一帧数据-程序员宅基地

文章浏览阅读1.2k次,点赞9次,收藏17次。不同的设备间建立连接往往需要通信,而串口通信是十分常用的一种。UART串口通信需要两根线来实现,一根用于串口发送,另外一更用于串口接收。UART串口发送或者接收过程中一帧数据包括1位起始位、8位数据位、1位停止位,为了提高数据的可靠性可以在停止位前加上1位奇偶校验位。串口通信虽然十分简单,但是在不同设备间发送的数据往往不止1个字节,往往需要多个字节组成的数据包。当我们按照数据包发送时我们需要考虑到以及,因此我们可以采用定义数据帧的方式解决上述两个问题。_一帧数据

随便推点

【图像去噪】偏微分方程PDE图像去噪(含SNR)【含Matlab源码 1890期】_pdnet 深度学习 偏微分方程 去噪-程序员宅基地

文章浏览阅读987次,点赞20次,收藏19次。偏微分方程PDE图像去噪(含SNR)完整的代码,方可运行;可提供运行操作视频!适合小白!_pdnet 深度学习 偏微分方程 去噪

Ubuntu18.04安装教程(很详细)_ubuntu18安装-程序员宅基地

文章浏览阅读6.6w次,点赞128次,收藏962次。Ubuntu18.0详尽版安装教程下载Ubuntu18.04下载VMware Workstation安装虚拟机下载Ubuntu18.04官方网站:http://old-releases.ubuntu.com/releases/18.04.4/?_ga=2.44113060.1243545826.1617173008-2055924693.1608557140下载VMware Workstation这个在网上有很多教程下载,这里我就不写了,我用的版本是14 pro。如下图:安装虚拟机1、打开_ubuntu18安装

Android四大组件之Activity--管理方式_android activityrecord中的activitytype-程序员宅基地

文章浏览阅读1.7k次。1. 概览Activity的管理有静态和动态两层涵义: 静态是指Activity的代码组织结构,即Application中声明的Activity的集合,这些Activity被组织在一个APK中,有特定的包名。 在编写应用程序时,Activity对应到用户界面,它定义了用户界面的布局、交互行为、启动方式等,最重要的,是Activity的生命周期函数。 在应用进程看来,只需要按照Android定义的规范,实现生命周期函数的具体逻辑即可,所有的用户界面都遵循同一个规范。 编写完一个应用程序的所有用户界面_android activityrecord中的activitytype

[LINUX]sed查找不包含某个字符串的行,并进行替换_sed不包含字符串-程序员宅基地

文章浏览阅读5.5k次,点赞3次,收藏7次。sed 查找不包含某个特性 sed -i "/src/!s/xxx/bbb/g" xxx将不包含src的行中的xxx替换为bbb_sed不包含字符串

问题解决:shared_ptr Assertion px != 0 failed 及debug经验分享_typename boost::detail::sp_dereference<t>::type bo-程序员宅基地

文章浏览阅读6.8k次,点赞11次,收藏18次。问题解决:shared_ptr Assertion px != 0 failed及debug经验分享问题详细描述:/usr/include/boost/smart_ptr/shared_ptr.hpp:646: typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = pcl::PointCloudpcl::pointxyz; typename boost::detail::sp_typename boost::detail::sp_dereference::type boost::shared_ptr::operat

看不见的“网” ,一文读懂阿里云基础设施网络_阿里云网络基线理解-程序员宅基地

文章浏览阅读553次。编者按:在这个万物智联的时代,无论是在线网络购物,还是网络强国、数字中国建设,都离不开一张“看不见的网”——基础设施网络。2009年,首届双11每秒交易订单创建峰值400;2021年,双11每秒交易订单创建峰值58.3万,12年交易数字量猛增的背后,是阿里云在庞大分布式系统上计算和IO能力的飞跃,更离不开阿里云基础设施底层网络技术的支撑。图|阿里云全球基础设施网络系统作为阿里云基础设施的重要组成部分,阿里云基础设施网络团队负责整个阿里云全球基础设施网络,包括大规模高性能数据中心网络,全球数据中心互联_阿里云网络基线理解

推荐文章

热门文章

相关标签