机器视觉面试宝典–深度学习补缺补漏篇

一、深入理解Batch Normalization批标准化

机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢?BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。

BN的基本思想其实相当直观:因为深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。

BN在训练的时候可以根据Mini-Batch里的若干训练实例进行激活数值调整,但是在推理(inference)的过程中,从所有训练实例中获得的统计量来代替Mini-Batch里面m个训练实例获得的均值和方差统计量。

BatchNorm为什么NB呢,关键还是效果好。**①不仅仅极大提升了训练速度,收敛过程大大加快;②还能增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果;③另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等。**总而言之,经过这么简单的变换,带来的好处多得很,这也是为何现在BN这么快流行起来的原因。

二、拉格朗日乘子法和 KKT 条件

为了方便和好记,就把原来的优化问题写成f(x,y)+λh(x,y)的形式,然后分别对λ,x,y求偏导,并且令偏导为0就行了,和之前得到的方程组是一样的。这种方法叫拉格朗日乘数法

**这个就是 KKT 条件。**它的含义是这个优化问题的极值点一定满足这组方程组。(不是极值点也可能会满足,但是不会存在某个极值点不满足的情况)它也是原来的优化问题取得极值的必要条件,解出来了极值点之后还是要代入验证的。但是因为约束比较多,情况比较复杂,KKT 条件并不是对于任何情况都是满足的。要满足 KKT条件需要有一些规范性条件(Regularity conditions),就是要求约束条件的质量不能太差,常见的比如:

  1. LCQ:如果 h(x)和g(x)都是形如Ax+b的仿射函数,那么极值一定满足 KKT 条件。
  2. LICQ:起作用的g(x)函数(即g(x)相当于等式约束的情况)和h(x)函数在极值点处的梯度要线性无关,那么极值一定满足 KKT 条件。
  3. Slater条件:如果优化问题是个凸优化问题,且至少存在一个点满足h(x)=0和g(x)=0,极值一定满足 KKT 条件。并且满足强对偶性质(下面会讲)。

三、L0、L1、L2范式

一般来说,监督学习可以看做最小化下面的目标函数:
w∗=arg⁡min⁡w∑iL(yi,f(xi;w))+λΩ(w)w^{*}=\arg \min _{w} \sum_{i} L\left(y_{i}, f\left(x_{i} ; w\right)\right)+\lambda \Omega(w) w∗=argwmin​i∑​L(yi​,f(xi​;w))+λΩ(w)
其中,第一项L(yi,f(xi;w)) 衡量我们的模型(分类或者回归)对第i个样本的预测值f(xi;w)和真实的标签yi之前的误差。因为我们的模型是要拟合我们的训练样本的嘛,所以我们要求这一项最小,也就是要求我们的模型尽量的拟合我们的训练数据。但正如上面说言,我们不仅要保证训练误差最小,我们更希望我们的模型测试误差小,所以我们需要加上第二项,也就是对参数w的规则化函数Ω(w)去约束我们的模型尽量的简单。

正则函数部分:规则化函数Ω(w)也有很多种选择,一般是模型复杂度的单调递增函数,模型越复杂,规则化值就越大。比如,规则化项可以是模型参数向量的范数。然而,不同的选择对参数w的约束不同,取得的效果也不同,但我们在论文中常见的都聚集在:L0范数,L1范数,L2范数,迹范数,Frobenius范数,核范数等。

1、L0范数

L0范数是指向量中非0的元素的个数。如果用L0规则化一个参数矩阵W,就是希望W中大部分元素是零,实现稀疏

L0范数的应用:

1)特征选择:实现特征的自动选择,去除无用特征。稀疏化可以去掉这些无用特征,将特征对应的权重置为零

2)可解释性(interpretability):例如判断某种病的患病率时,最初有1000个特征,建模后参数经过稀疏化,最终只有5个特征的参数是非零的,那么就可以说影响患病率的主要就是这5个特征。

2、L1范数

L1范数是指向量中各个元素绝对值之和。L1范数也可以实现稀疏,通过将无用特征对应的参数W置为零实现。

L1范数:
∥x∥1=∑i=1N∣xi∣\|x\|_{1}=\sum_{i=1}^{N}\left|x_{i}\right| ∥x∥1​=i=1∑N​∣xi​∣
既然L0可以实现稀疏,为什么不用L0,而要用L1呢?个人理解一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。

3、L2范数

L2范数是指向量各元素的平方和然后求平方根。,用在回归模型中也称为岭回归(Ridge regression)。

L2范数:
∥x∥2=∑i=1Nxi2\|\mathbf{x}\|_{2}=\sqrt{\sum_{i=1}^{N} x_{i}^{2}} ∥x∥2​=i=1∑N​xi2​​
L2避免过拟合的原理是:让L2范数的规则项
∥x∥2\|\mathbf{x}\|_{2} ∥x∥2​
尽可能小,可以使得W每个元素都很小,接近于零,但是与L1不同的是,不会等于0;这样得到的模型抗干扰能力强,参数很小时,即使样本数据x发生很大的变化,模型预测值y的变化也会很有限。

L2范数的作用:1)学习理论的角度:从学习理论的角度来说,L2范数可以防止过拟合,提升模型的泛化能力。2)优化计算的角度:从优化或者数值计算的角度来说,L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题。

四、L1 Loss& L2 Loss&smooth L1 Loss

1、L1 Loss

L1 我理解成 1 维向量的距离。

使用L1损失函数也被叫做最小化绝对误差(Least Abosulote Error)。这个名称非常的形象。LAE就是最小化**真实值yi和预测值f(xi)**之间差值[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sNQpr2LH-1641782692695)(CV总复习–深度学习补缺补漏篇.assets/clip_image002.png)]的绝对值的和。
DL1=∑i=1n∣yi−f(xi)∣D_{L 1}=\sum_{i=1}^{n}\left|y_{i}-f\left(x_{i}\right)\right| DL1​=i=1∑n​∣yi​−f(xi​)∣
这里的其实就是平均绝对误差(MAE),使用L1损失函数也就是min

公式:
L1=∑i=1n∣yi−f(xi)∣L 1=\sum_{i=1}^{n}\left|y_{i}-f\left(x_{i}\right)\right| L1=i=1∑n​∣yi​−f(xi​)∣
导数:
dL1(x)dx={1if x≥0−1otherwise \frac{\mathrm{d} L_{1}(x)}{\mathrm{d} x}=\left\{\begin{array}{ll} 1 & \text { if } x \geq 0 \\ -1 & \text { otherwise } \end{array}\right. dxdL1​(x)​={1−1​ if x≥0 otherwise ​

2、L2 Loss

L2 就是二维空间向量的距离。

公式:
L2=∑i=1n(yi−f(xi))2L 2=\sum_{i=1}^{n}\left(y_{i}-f\left(x_{i}\right)\right)^{2} L2=i=1∑n​(yi​−f(xi​))2
导数:
dL2(x)dx=2x\frac{\mathrm{d} L_{2}(x)}{\mathrm{d} x}=2 x dxdL2​(x)​=2x

3、smooth L1 Loss:

公式:
smooth⁡L1(x)={0.5x2if ∣x∣<1∣x∣−0.5otherwise \operatorname{smooth}_{L_{1}}(x)=\left\{\begin{array}{ll} 0.5 x^{2} & \text { if }|x|<1 \\ |x|-0.5 & \text { otherwise } \end{array}\right. smoothL1​​(x)={0.5x2∣x∣−0.5​ if ∣x∣<1 otherwise ​
导数:
dsmooth⁡L1dx={xif ∣x∣<1±1otherwise \frac{\mathrm{d} \operatorname{smooth}_{L_{1}}}{\mathrm{~d} x}=\left\{\begin{array}{ll} x & \text { if }|x|<1 \\ \pm 1 & \text { otherwise } \end{array}\right.  dxdsmoothL1​​​={x±1​ if ∣x∣<1 otherwise ​

Smooth L1=0.5x2,∣x∣<1∣x∣−0.5,x<−1or x>1\text { Smooth } \quad L_{1}=\begin{array}{l} 0.5 x^{2}, \quad|x|<1 \\ |x|-0.5, \quad x<-1 \text { or } x>1 \end{array}  Smooth L1​=0.5x2,∣x∣<1∣x∣−0.5,x<−1 or x>1​

x,∣x∣<1Smooth L1′=−1,x<−11,x>1\begin{aligned} & x, \quad|x|<1 \\ \text { Smooth } \quad L_{1}^{\prime}=&-1, \quad x<-1 \\ & 1, \quad x>1 \end{aligned}  Smooth L1′​=​x,∣x∣<1−1,x<−11,x>1​

比较:

1、L1 loss 在零点不平滑,用的较少;L1loss在零点不平滑,学习慢;
2、Smooth L1 Loss 改善了零点不平滑问题。

smooth L1 loss和L1 loss函数的区别在于,L1 loss在0点处导数不唯一,可能影响收敛。smooth L1 loss的解决办法是在0点附近使用平方函数使得它更加平滑。

smooth L1 loss让loss function对于离群点更加鲁棒,即:相比于L2损失函数,其对离群点/异常值(outlier)不敏感,梯度变化相对更小,训练时不容易跑飞。

Smooth L1 Loss 相比L1修改零点不平滑问题,而且在x较大的时候不像L2对异常值敏感,是一个缓慢变化的loss;

3、L2 loss:对离群点比较敏感,如果feature 是 unbounded的话,需要好好调整学习率,防止出现梯度爆炸的情况。

L2loss学习快,因为是平方增长,但是当预测值太大的时候,会在loss中占据主导位置(如真实值为1,预测多次,有一次预测值为100,其余预测为2)。

4、一般来说,L1正则会制造稀疏的特征,大部分无用特征的权重会被置为0。 L2正则会让特征的权重不过大,使得特征的权重比较平均。

python numpy实现

五、Sigmoid与softmax的区别

1、Sigmoid函数

sigmoid常用于二元分类,将二元输入映射成0和1。

函数:
f(z)=11+e−zf(z)=\frac{1}{1+e^{-z}} f(z)=1+e−z1​
导数:
f′(z)=f(z)(1−f(z))\mathrm{f}^{\prime}(\mathrm{z})=\mathrm{f}(\mathrm{z})(1-\mathrm{f}(\mathrm{z})) f′(z)=f(z)(1−f(z))
sigmoid函数推导:
f′(z)=(11+e−z)′=e−z(1+e−z)2=1+e−z−1(1+e−z)2=1(1+e−z)(1−1(1+e−z))=f(z)(1−f(z))\begin{aligned} f^{\prime}(z) &=\left(\frac{1}{1+e^{-z}}\right)^{\prime} \\ &=\frac{e^{-z}}{\left(1+e^{-z}\right)^{2}} \\ &=\frac{1+e^{-z}-1}{\left(1+e^{-z}\right)^{2}} \\ &=\frac{1}{\left(1+e^{-z}\right)}\left(1-\frac{1}{\left(1+e^{-z}\right)}\right) \\ &=f(z)(1-f(z)) \end{aligned} f′(z)​=(1+e−z1​)′=(1+e−z)2e−z​=(1+e−z)21+e−z−1​=(1+e−z)1​(1−(1+e−z)1​)=f(z)(1−f(z))​
其实logistic函数也就是经常说的sigmoid函数,它的几何形状也就是一条sigmoid曲线(S型曲线)。A logistic function or logistic curve is a common “S” shape (sigmoid curve). 也就是说,sigmoid把一个值映射到0-1之间。

该函数具有如下的特性:当x趋近于负无穷时,y趋近于0;当x趋近于正无穷时,y趋近于1;当x= 0时,y=0.5.

**优点:**1.Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。2.求导容易,处处可导,导数为:f′(x)=f(x)(1−f(x))

**缺点:**1.由于其软饱和性,容易产生梯度消失,导致训练出现问题。2.其输出并不是以0为中心的。

2、Softmax函数

公式:
σ(z)j=ezj∑k=1Kezkfor j=1,…,K\sigma(\mathbf{z})_{j}=\frac{e^{z_{j}}}{\sum_{k=1}^{K} e^{z_{k}}} \quad \text { for } j=1, \ldots, K σ(z)j​=∑k=1K​ezk​ezj​​ for j=1,…,K
其中 θi和x是列向量,
θiTx\theta_{i}^{T} x θiT​x
可能被换成函数关于x的函数 fi(x)。

参考链接

https://www.cnblogs.com/guoyaohua/p/8724433.html

https://www.cnblogs.com/xinchen1111/p/8804858.html

https://zhuanlan.zhihu.com/p/51912576

https://blog.csdn.net/hejunqing14/article/details/48980321/

机器视觉面试宝典--深度学习补缺补漏篇相关推荐

  1. 计算机视觉面试宝典--深度学习机器学习基础篇(四)

    计算机视觉面试宝典–深度学习机器学习基础篇(四) 本篇主要包含SVM支持向量机.K-Means均值以及机器学习相关常考内容等相关面试经验. SVM-支持向量机 支持向量机(support vector ...

  2. 计算机视觉面试宝典--文本检测与GAN篇

    计算机视觉面试宝典–文本检测与GAN篇 1.LSTM(长短期记忆)原理,其中的参数是否相同/画出LSTM的结构图/写一下LSTM的公式 Lstm由输入门,遗忘门,输出门和一个cell组成.第一步是决定 ...

  3. 转载:机器视觉中使用深度学习所面临的对抗攻击——Survey(下)

    前言 本篇博客出于学习交流目的,主要是用来记录自己学习中遇到的问题和心路历程,方便之后回顾.过程中可能引用其他大牛的博客,文末会给出相应链接,侵删! 这篇博客记录大部分来自一篇Survey,文章总结了 ...

  4. 机器视觉中使用深度学习所面临的对抗攻击——Survey(下)

    前言 本篇博客出于学习交流目的,主要是用来记录自己学习中遇到的问题和心路历程,方便之后回顾.过程中可能引用其他大牛的博客,文末会给出相应链接,侵删! 这篇博客记录大部分来自一篇Survey,文章总结了 ...

  5. 深度学习——数据预处理篇

    深度学习--数据预处理篇 文章目录 深度学习--数据预处理篇 一.前言 二.常用的数据预处理方法 零均值化(中心化) 数据归一化(normalization) 主成分分析(PCA.Principal ...

  6. 动手学深度学习番外篇 01.为什么from d2l import torch as d2l

    动手学深度学习番外篇 01.为什么from d2l import torch as d2l 在跟着网站动手学深度学习学习的时候,发现代码开头中经常要运行这样一句话 from d2l import to ...

  7. 【树莓派4B深度学习 垃圾分类】Chap.3 树莓派安装opencv并测试视频接口实时视频流的垃圾分类【深度学习 招式篇】

    [树莓派4B深度学习 垃圾分类]Chap.3 树莓派安装opencv并测试视频接口实时视频流的垃圾分类[深度学习 招式篇] 后记 1.激活虚拟环境+进入代码+更改测试集路径(这里是安装成功后测试的代码 ...

  8. STM32运行深度学习指南基础篇(3)(STM32CubeMX.AI+Tensorflow)

    STM32运行深度学习指南基础篇(3)(STM32CubeMX.AI+Tensorflow) 在上一篇文章中我们已经有训练好的tflite模型,接下来我们要在Clion中实现,如果是Keil的朋友可以 ...

  9. 梅卡曼德机器人| 机器视觉算法、深度学习算法、软件开发等海量岗位

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 梅卡曼德机器人 2020招聘火热进行中 梅卡曼德机器人,英文为Mech-Mind,意为机器之意识.我们 ...

最新文章

  1. vue.js $refs和$emit 父子组件交互
  2. php从入门到精通19天笔记,传智播客-PHP从入门到精通(19天)-video
  3. poj-2406(kmp水题)
  4. web.config中的session配置详解
  5. python 数据分析学习笔记 (第三章)
  6. JAVA_OA(八):springMVC对JDBC的操作小项目a
  7. matlab 双向链表,双向链表基本操作(C语言实现)
  8. Fegion-3覆写Fegion的默认配置及Fegion的日志
  9. c调用python脚本 效率,尝试用C调用Python脚本#
  10. 计算机组成原理个人笔记(二)
  11. 中国能源变革令西方相形见绌
  12. 16-elasticsearch6.x {“error“:“Content-Type header [application/x-www-form-urlencoded] is not support
  13. ef core 批量update 非id_Entity Framework (EF) Core
  14. 客户说发货慢怎么回复_买家投诉卖家物流送货慢怎么处理
  15. 2018年 数据挖掘“泰迪杯” C题 第一问
  16. 我win10下载红警-尤里复仇黑屏,能运行,下载这个好了
  17. Error starting userland proxy: listen tcp 0.0.0.0:xxx端口: bind: address already in use解决办法
  18. 如何在华为云上服务器部署WEB网站
  19. APK无法识别gsensor问题剖析
  20. 信贷风控报表常用指标解读(一)

热门文章

  1. 【傅里叶变换】DFT详细分析与Python实现
  2. Linux常用操作指令
  3. python123字符串替代_python字符串批量替换
  4. SpringBoot 运行机制
  5. 赤裸的职场-金融圈混子手记
  6. 如何应付全英文的技术面试(三)
  7. 坑之四 千年 (上)
  8. [算法] 当今世界最为经典的十大算法--投票进行时
  9. C语言怎么计算任意一天事星期几,怎么计算任意一年某个月的第一天是星期几...
  10. 安卓获取摄像头帧率_一种基于android终端提高USB2.0摄像头高分辨率高帧率的方法_2015109767475_说明书_专利查询_专利网_钻瓜专利网...