2018-07-06 14:56:01 qq_26598445 阅读数 604
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40048 人正在学习 去看看 唐宇迪

一、单项选择题

SVM 分类和深度学习分类
B. SVM 只能应用于线性分类
    错误,SVM 可以应用于线性分类和非线性分类问题,取决于核函数的选取

C. SVM 是凸问题,深度学习都是非凸问题
    正确,深度学习算法的目标函数,几乎全都是非凸的。
    凸:指的是顺着梯度方向走到底就 一定是 最优解 。大部分 传统机器学习 问题 都是凸的。
   非凸:指的是顺着梯度方向走到底只能保证是局部最优,不能保证 是全局最优。深度学习以及小部分传统机器学习问题都是非凸的。

L1 和 L2 正则化区别
这里写图片描述
L1和L2的异同点

相同点:都用于避免过拟合

不同点:L1可以让一部分特征的系数缩小到0,从而间接实现特征选择。所以L1适用于特征之间有关联的情况。
L2让所有特征的系数都缩小,但是不会减为0,它会使优化求解稳定快速。所以L2适用于特征之间没有关联的情况

3.L1和L2的结合

L1和L2的优点可以结合起来,这就是Elastic Net
这里写图片描述

SVM 决策边界
四个点坐标为(1,1),(1,0),(-1,-1),(-1,0),用 SVM 分类的决策边界是
A. y = x
B. x = 0
C. y = -x
D. y = 0
SVM 是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在 margin ,并且需要使各侧的 margin 最大化。本题目四个选项的 margin 分别为 0、1、0.707、0,因此选择 B。

二、多项选择题

无监督学习方法
    强化学习、K-means 聚类、自编码、受限波尔兹曼机等

增大感受野方法
    dilated 卷积(空洞卷积)、池化、增大卷积核

正则化方法
B. 减少神经网络层数
    错误,减少网络层数实际上是减弱了网络的拟合能力
D. 减小权重衰减参数
    错误,应该是增大权重衰减系数,类似于 L2 正则化项中参数 lambda 的作用

三、填空题
经过下列卷积操作后,3×3 conv -> 3×3 conv -> 2×2 maxpool -> 3×3 conv,卷积步长为 1,没有填充,输出神经元的感受野是多大? 10*10
    https://blog.csdn.net/ifruoxi/article/details/78243499
    感受野的大小是由kernel size(filter)和stride size(步长)一起决定的,公式:
rfsize = f(out, stride, ksize) = (out - 1) * stride + ksize,其中out是指上一层感受野的大小,stride是当前层stride
最后一层不带入公式,它的ksize是前一层的out

100×100×3,3×3 卷积核,输出是 50×50×10,算进行了多少次乘-加操作?
    输出的每个像素点都要经过 3×3×3 = 27 次乘-加操作,因此总共需要进行 50×50×10×27 次乘-加操作。

四、简答题
简述梯度下降法和牛顿法的优缺点
    随机梯度下降法:适用于样本量大的情况,需要内存小;但每一步可能并不是向着最优解方向
    牛顿法:收敛速度快;但对目标函数有严格要求,必须有连续的一、二阶偏导数,计算量大

正样本 10000,负样本 1000,怎样训练
    正负样本悬殊具体数据记不太清楚了,1、异常检测算法(高斯分布算法),可以适用于异常(也就是负样本)比较少的情况,将负样本当成异常点,将算法的侧重点放到负样本上。2、或者分别进行正采样和负采样,平衡样本

Relu 相对于 sigmoid 函数的优缺点
    优点:分段线性,梯度较大,收敛速度快;Relu 会使一部分神经元的输出为 0,会造成了网络的稀疏性
    缺点:某些神经元可能永远不会被激活,导致相应的参数永远不能被更新

正则化方法
    数据增强(Data Augmentation)、L1 正则化、L2 正则化、Dropout、Drop Connect 和早停(Early stop)

说出物体检测、人脸识别、物体分割等某一领域的常见算法,并用一两句话简述其中一种算法的原理
物体检测:YOLO、R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD
YOLO 算法直接利用一个卷积神经网络就输出物体所在的位置以及所属的类别,是一个端到端的系统,因此检测速度特别快,可以达到实时性的要求。
五、编程题

输入序列 a, 判断是否存在 i < j < k, 满足 a[i] < a[k] < a[j],并写出算法复杂度
思路:三个循环,在最内层循环进行一个判断,算法复杂度 O(n^3)
输入多边形顶点坐标 List,判断是否为凸多边形(如果把一个多边形的所有边中,任意一条边向两方无限延长成为一直线时,其他各边都在此直线的同旁,那么这个多边形就叫做凸多边形)
思路:遍历所有相邻顶点,以两点坐标求得直线方程,判断其余顶点是否在直线同侧

链接:https://www.jianshu.com/p/27b623b47029
來源:简书

2017-12-18 20:37:22 JNingWei 阅读数 9198
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40048 人正在学习 去看看 唐宇迪

凸:

  • 指的是顺着梯度方向走到底就 一定是 最优解

  • 大部分 传统机器学习 问题 都是凸的。

非凸:

  • 指的是顺着梯度方向走到底只能保证是局部最优,不能保证 是全局最优。

  • 深度学习以及小部分传统机器学习问题都是非凸的。

2018-07-24 16:13:25 Beyond_2016 阅读数 726
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40048 人正在学习 去看看 唐宇迪

 

一、单项选择题

 

1. 考察SVM 分类和深度学习逻辑回归分类的区别 

 

B. SVM 只能应用于线性分类

错误,SVM 可以应用于线性分类和非线性分类问题,取决于核函数的选取。

 

C. SVM 是凸问题,深度学习都是非凸问题

正确,深度学习算法的目标函数,几乎全都是非凸的。

 

2. 考察 L1 和 L2 正则化的区别

 

L0 范数:向量中非0元素的个数。

L1 范数 (Lasso Regularization):向量中各个元素绝对值的和。

L2 范数(Ridge Regression):向量中各元素平方和再求平方根。

L0 范数和 L1 范数都能够达到使参数稀疏的目的,但 L0 范数更难优化求解,L1 范数是 L0 范数的最优凸近似,而且它比 L0 范数要容易优化求解。

L2 范数不但可以防止过拟合,提高模型的泛化能力,还可以让我们的优化求解变得稳定和快速。L2 范数对大数和 outlier 更敏感!

 

3. 考察 SVM 决策边界 


四个点坐标为(1,1),(1,0),(-1,-1),(-1,0),用 SVM 分类的决策边界是 
A. y = x 
B. x = 0 
C. y = -x 
D. y = 0

 

SVM 是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在 margin ,并且需要使各侧的 margin 最大化。本题目四个选项的 margin 分别为 0, 1, 0.707, 0,因此选择 B。

 

二、多项选择题

 

1. 无监督学习方法

 

强化学习、K-means 聚类、自编码、受限波尔兹曼机等

 

2. 增大感受野方法

 

dilated 卷积(空洞卷积)、池化、增大卷积核

 

3. 正则化方法

 

B. 减少神经网络层数

错误,减少网络层数实际上是减弱了网络的拟合能力

 

C. 减小权重衰减参数  

错误,应该是增大权重衰减系数,类似于 L2 正则化系数的作用

 

三、填空题

 

1.  经过下列卷积操作后,3×3 conv -> 3×3 conv -> 2×2 maxpool -> 3×3 conv,卷积步长为 1,没有填充,输出神经元的感受野是多大?

 

 

2. 100×100×3,3×3 卷积核,输出是 50×50×10,算进行了多少次乘-加操作?

 

输出的每个像素点都要经过 3×3×3 = 27 次乘-加操作,因此总共需要进行 50×50×10×27 次乘-加操作。

 

四、简答题

 

1.  简述梯度下降法和牛顿法的优缺点?

 

随机梯度下降法:适用于样本量大的情况,需要内存小;但每一步可能并不是向着最优解方向 ;

牛顿法:收敛速度快;但对目标函数有严格要求,必须有连续的一、二阶偏导数,计算量大。

 

2. 正样本 10000,负样本 1000,怎样训练?

 

正负样本悬殊具体数据记不太清楚了,异常检测算法(高斯分布算法),可以适用于异常(也就是负样本)比较少的情况。

 

3. Relu 相对于 sigmoid 函数的优缺点?

 

优点:分段线性,梯度较大,收敛速度快;Relu 会使一部分神经元的输出为 0,会造成了网络的稀疏性;
缺点:某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。

 

4. 正则化方法?

 

数据增强(Data Augmentation)、L1 正则化、L2 正则化、 Dropout、Drop Connect 和早停(Early stop)。

 

5. 说出物体检测、人脸识别、物体分割等某一领域的常见算法,并用一两句话简述其中一种算法的原理?

 

物体检测:YOLO、R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD 等;
YOLO 算法直接利用一个卷积神经网络就输出物体所在的位置以及所属的类别,是一个端到端的系统,因此检测速度特别快,可以达到实时性的要求。

 

五、编程题

 

1. 输入序列 a, 判断是否存在 i < j < k, 满足 a[i] < a[k] < a[j],并写出算法复杂度?

 

思路:三个循环,在最内层循环进行一个判断,算法复杂度O(n^3)。

 

2. 输入多边形顶点坐标 List,判断是否为凸多边形(如果把一个多边形的所有边中,任意一条边向两方无限延长成为一直线时,其他各边都在此直线的同旁,那么这个多边形就叫做凸多边形)?

 

思路:遍历所有相邻顶点,以两点坐标求得直线方程,判断其余顶点是否在直线同侧。

2018-01-20 21:05:27 xbinworld 阅读数 14857
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40048 人正在学习 去看看 唐宇迪

凸优化理论本身非常博大,事实上我也只是了解了一个皮毛中的皮毛,但是对于广大仅仅想要了解一下机器学习或者深度学习的同学来说,稍微了解一点凸优化也就够了。在实际工程问题中,比如现在我们用的最多的深度神经网络的求解优化问题,都是非凸的,因此很多凸优化理论中非常有价值的定理和方法,在非凸优化问题中不适用,或者说并没有收敛保证等。但是,作为知识的基础,依然有必要来理解和学习一下凸优化,本篇整理了非常基础的一些概念。主要参考网上一些资料,和《凸优化》这本书的一些概念。

凸优化理论基础中的基础

1. 为什么要学习凸优化?

凸优化在数学规划领域具有非常重要的地位。一旦将一个实际问题表述为凸优化问题,大体上意味着相应问题已经得到彻底解决,这是非凸的优化问题所不具有的性质。其应用非常广泛,机器学习中很多优化问题都要通过凸优化来求解;在非凸优化中,凸优化同样起到重要的作用,很多非凸优化问题,可以转化为凸优化问题来解决;

2. 什么是优化问题?
这里写图片描述

3. 什么是凸优化问题?
这里写图片描述

4. 什么是凸函数?
这里写图片描述
有一个经典的示意图:
这里写图片描述
凸函数的几何意义表示为函数任意两点的连线上的取值大于该点在函数上的取值
5. 凸函数的一阶充要条件
这里写图片描述
一阶条件的意义是,对于函数在定义域的任意取值,函数的值都大于或者等于对函数在这点的一阶近似。用图来说明就是下图:
这里写图片描述

口语化理解就是说凸函数总是在其任意一点的切线的上方(或者可以有部分相切的)。通过图可以很清楚地理解这个充要条件,但是,具体在应用中,我们不可能对每一个点都去计算函数的一阶导数,因此后面会说道利用凸函数的二阶特征来进行判断一个函数是否是一个凸函数。下面贴一下证明充分性和必要性的过程,来自《convex optimization》,不是很在意的同学可以跳过,直接看下一节。但是建议手推一下,还是比较简单的:

这里写图片描述

6. 凸函数的二阶充要条件
记函数的一阶导数和二阶导数为g和H,
g=f=[fx1fx2fxn]    H=2f=[2f2x12fx1x22fx1xn2f2x2x12fx222fx2xn2f2xnx12fxnx22fxn2]g = \nabla f = \begin{bmatrix} \frac{\partial f }{\partial x_1} \\ \frac{\partial f }{\partial x_2} \\ \vdots\\\frac{\partial f }{\partial x_n} \\ \end{bmatrix} \ \ \ \ \quad H = \nabla^2 f = \begin{bmatrix} \frac{\partial^2 f }{\partial^2 x_1}& \frac{\partial^2 f }{\partial x_1 x_2} & \cdots &\frac{\partial ^2 f }{\partial x_1x_n} \\ \frac{\partial^2 f }{\partial^2 x_2x_1}& \frac{\partial^2 f }{\partial x_2^2} &\cdots &\frac{\partial ^2 f }{\partial x_2x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2 f }{\partial^2 x_nx_1}& \frac{\partial^2 f }{\partial x_n x_2} &\cdots &\frac{\partial ^2 f }{\partial x_n^2} \\ \end{bmatrix}
这里写图片描述
其中要求函数ff二阶可微,则函数ff在定义域上式convex函数的充要条件是:函数的二阶导数(即Hessian矩阵)是半正定的,也就是所有的特征值都是大于等于0的。特殊的,对于一元函数,可以退化为f(x)0f''(x) \geq 0

凸函数举例 [10]

这里写图片描述

举例用二阶充要条件来证明log-sum-exp函数是convex的:
这里写图片描述
最后一步用到了柯西不等式,很巧妙。


Hessian矩阵与牛顿法

上面提到了函数的二阶导数是Hessian矩阵,Hessian矩阵经常用于牛顿法优化方法中。牛顿法是一种迭代求解方法,有一阶和二阶方法,主要应用在两个方面:1、求方程的根, 2、 最优化方法。

(1)牛顿迭代求解方程的根:

并不是所有的方程都有求根公式, 或者求根公式很复杂, 导致求解困难. 利用牛顿法, 可以迭代求解。原理是利用泰勒公式, 在x0x_0处展开, 且展开到一阶, x=x0+δx = x_0 + \delta
f(x)=f(x0)+(xx0)f(x0)f(x) = f({x_0}) + (x – {x_0})f’({x_0})

求解方程f(x)=0f(x) = 0,即f(x0)+(xx0)f(x0)=0f({x_0}) + (x – {x_0})f’({x_0}) = 0,整理后得到
x=x0f(x0)/f(x0)x = {x_0} – f({x_0})/f’({x_0})

但是因为我们用的是一阶泰勒展开,只能近似相等,求得的解并不能完全使f(x)=0f(x) = 0成立。记这个金近似解为x1x_1,只能说f(x1)f(x_1)f(x0)f(x_0)更接近f(x)=0f(x) = 0的解,因此我们可以写成一个递推公式:
xk+1=xkf(xk)/f(xk)(3){x_{k + 1}} = {x_k} – f({x_k})/f’({x_k}) \tag{3}
通过迭代, 这个式子必然在f(x)=0f(x^*)=0的时候收敛。 整个过程如下图:

一个比较形象的动态图[9]:从初始点开始每次找f(x)的切线和坐标轴的交点,慢慢逼近真正的f(x)=0点。
这里写图片描述

(2)二阶优化方法——牛顿法
对于非线性优化问题,牛顿法提供了一种求解的办法。假设任务是优化一个目标函数f(x)f(x), 求函数f(x)f(x)的极大或者极小问题, 可以转化为求解函数的导数f(x)=0f'(x)=0的问题, 这样求可以把优化问题看成方程求解问题。剩下的问题就和第一部分提到的牛顿迭代法求解很相似了。

我们先直接套用一下前面公式(3),但是现在我们要把f(x)f(x)想象成f(x)f'(x),要求f(x)=0f'(x)=0的根,则:
xn+1=xnf(xn)f(xn){x_{n + 1}} = {x_n} – \frac{f'({x_n})}{f''({x_n})}

当然,拓展一下思维,我们也必然可以从泰勒展开获得推导:泰勒展开到二阶:
f(x+Δx)=f(x)+f(x)Δx+12f(x)Δx2f(x + \Delta x) = f\left( x \right) + f'(x)\Delta x + \frac{1}{2}f''(x)\Delta {x^2}挪一下位置得到:
f(x+Δx)f(x)=f(x)Δx+12f(x)Δx2f(x + \Delta x) - f\left( x \right) = f'(x)\Delta x + \frac{1}{2}f''(x)\Delta {x^2}

假设我们要求f(x)f(x)的极小值(注:我们并没有假设f(x)f(x)是convex的,所以可能是一个局部极小值。如果有一定基础的同学,可以把f(x)f(x)理解为loss function),并且希望一步就要走到尽可能使f(x)f(x)变小最多(loss尽可能低),那么记,

F=f(x)Δx+12f(x)Δx20 F= f'(x)\Delta x + \frac{1}{2}f''(x)\Delta {x^2} \leq 0,并且绝对值最大,所以就是求F最小值。那就容易了,回到了初中数学~~~~对F求导等于0,得到
Δx=f(x)f(x)\Delta x{\rm{ = - }}\frac{{f'({x})}}{{f''({x})}}

得出牛顿法迭代公式:
xn+1=xnf(xn)f(xn),n=0,1,...{x_{n + 1}} = {x_n}{\rm{ - }}\frac{{f'({x_n})}}{{f''({x_n})}},n = 0,1,...

(这里稍微扯一下一阶方法梯度下降,其实在上一篇中我们已经提到了,这里再强化啰嗦一次,如果只泰勒展开到一阶,那么上面的f(x+Δx)f(x)=f(x)Δx0f(x + \Delta x) - f\left( x \right)= f'(x)\Delta x \leq 0,并且我们要求f(x)Δxf'(x)\Delta x的最小值,Δx\Delta x的模如果是一个常数,那么它的方向是$ - f(‘x)的方向时, 取到最小值。所以梯度下降的公式就是:{x_{n + 1}} = {x_n} - \eta \cdot f’(x)。其中\eta$是步长,表示每次沿着负梯度方向走多远。)

对于高维函数,牛顿法通用公式写成:
xn+1=xn[Hf(xn)]1f(xn),n0{x_{n + 1}} = {x_n} - {[Hf({x_n})]^{ – 1}}\nabla f({x_n}),n \ge 0

一般认为牛顿法可以利用到曲线本身的信息, 比梯度下降法更容易收敛(迭代更少次数), 如下图是一个最小化一个目标方程的例子, 红色曲线是利用牛顿法迭代求解, 绿色曲线是利用梯度下降法求解:

牛顿法在多变量问题上仍然适用迭代求解,但Hessian矩阵的引入增加了复杂性,特别是当:
▪ Hessian 矩阵非正定,导致目标函数不一定下降,从而牛顿法不收敛;
▪ Hessian 矩阵维度过大带来巨大的计算量。

针对这个问题,在牛顿法无法有效执行的情况下,提出了很多改进方法,比如 拟牛顿法(Quasi-Newton Methods)可以看作是牛顿法的近似。拟牛顿法只需要用到一阶导数,不需要计算Hessian矩阵 以及逆矩阵,因此能够更快收敛,关于拟牛顿法这里不再具体展开,也有更深入的 DFP、BFGS、L-BFGS等算法,大家可以自行搜索学习。总体来讲,拟牛顿法都是用来解决牛顿法本身的复杂计算、难以收敛、局部最小值等问题。


OK,到目前写的几篇深度学习/机器学习入门基础数学知识整理基本涵盖了最最简单的线性代数,矩阵,泰勒展开,凸优化,梯度下降,牛顿法等,如果这些概念你都差不多清楚了,那么就开始学习深度学习或者机器学习吧,可以参考我的机器学习方法系列,以及深度学习方法系列,详见http://blog.csdn.net/xbinworld


2018年2月10日补充,看了"为什么最速下降法中迭代方向是锯齿形的"[8],补充一下。

这里写图片描述
这里写图片描述
最速梯度下降法的算法步骤,如下:
这里写图片描述
最速梯度下降法中,我们在 xkx^{k} 移动到 xk+1x^{k+1} 的过程中,是对移动步长 tkt_{k} 进行一维搜索,找到最优的 xk+1x^{k+1} 。下面用演算纸说明一下

这里写图片描述

借用这个图一下[8],第三行就是第二行求偏导的展开,可以发现,变成了两个梯度的乘积=0,所以是垂直的。(稍微有一点小bug,因为上面公式中p是负梯度,所以第二行和第三行的+应该是-,不过问题不大。)

参考资料

[1] 《凸优化》(Stephen Boyd等著,王书宁等译)
[2] 凸优化(一)——概述 https://www.jianshu.com/p/fe2e7f0e89e5
[3] 【最优化】通俗理解凸函数及它的一阶特征 http://www.sohu.com/a/216564018_206784
[4] 凸优化简介 http://www.cnblogs.com/ooon/p/5726238.html
[5] 无约束优化方法(梯度法-牛顿法-BFGS- L-BFGS)http://www.cnblogs.com/ooon/p/5729982.html
[6] Jacobian矩阵和Hessian矩阵http://jacoxu.com/jacobian%E7%9F%A9%E9%98%B5%E5%92%8Chessian%E7%9F%A9%E9%98%B5/
[7] 牛顿法与Hessian矩阵
http://blog.csdn.net/linolzhang/article/details/60151623
[8] https://zhuanlan.zhihu.com/p/33428233
[9] https://blog.csdn.net/batuwuhanpei/article/details/51979831
[10] 凸优化(二):凸函数的基本概念

2018-06-28 20:34:28 Dynomite 阅读数 1212
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40048 人正在学习 去看看 唐宇迪

深度学习(一) 损失函数、输出单元、激活函数、反向传播

深度前馈网络

  1. 概述

    • 线性模型无论是凸优化还是闭式解都可以高效可靠地拟合,而它的缺陷是拟合能力局限于线性函数里,无法理解特征之间的相互作用。
    • 深度学习通过学习特征来优化模型,提高模型的性能。
    • 与线性模型的凸优化从任意初始解都能收敛到最优点不同的是,深度学习的代价函数往往是非凸的,使用梯度来进行模型的优化。这种非凸迭代优化对模型的初值敏感,使用不同的初始值会收敛到不同的点。
  2. 损失函数
    神经网络使用最大似然来进行训练:

    (1)J(θ)=Ex,yp^datalogpmodel(y|x)

    损失函数必须足够的大、足够的足有代表性,饱和函数的梯度非常的小,不适合作为损失函数
    常用损失函数:交叉熵、l2

  3. 输出单元
    • 线性单元
      (2)y^=WTh+b

      不易饱和,适合各种优化算法
    • sigmoid 二分类
      (3)y^=σ(wTh+b)
    • softmax 多分类
      (4)z=WTh+b

      (5)softmax(z)i=ezikezk
  4. 隐藏单元

    • sigmoid/tanh
      (6)g(z)=σ(z)

      (7)g(z)=tanh(z)=2σ(2z)1

      (8)σ(x)=ex1+ex=11+ex

      (9)σ(x)=σ(x)(1σ(x))

      (10)1σ(x)=σ(x)

      缺点
      a. sigmoid系函数两端扁平,十分易于饱和,simoid求导之梯度值在[0,1/4],易于产生梯度消失。
      b. sigmoid函数的输出不是0均值的,这会导致下一层二等输入信号为非0均值,如果输入神经元是数据是正的,那么计算的梯度全为正数或负数,导致梯度下降锯齿形(之字形)晃动,导致收敛速度缓慢。若梯度是批数据累加的则权值的更新准确一些。
      c. tanh函数的输出是0均值的,在实际应用中比sigmoid好
      d. 非0均值会导致下一层的bias shift。bias shift是指输出的均值比输入的均值大的多。
    • ReLU
      (11)g(z)=max(0,z)

      ReLU单侧抑制,左侧不能学习(Dying ReLU再也没有机会学习),它的优化与线性函数类似。
      什么叫Dying ReLU?
      假设ReL的输入为zn=i=0kwiain,经过ReLU后,ReLU=max(0,zn),假设一个简单的误差函数error=ReLUy,反向传播传回的梯度:
      (12)errorzn=ζn={1,zn00,zn<0

      权值更新:
      (13)errorwj=errorznznwj=ζnajn={ajn,zn00,zn<0

      当梯度为0,权值则不再更新,可以注意到若所有的输入都位于左侧,返回的梯度为0,该神经元就死了,权值将不再被更新。
      该问题的产生是由于在某个batch更新时,使得权值变得过于小,对于任何输入都有zn<0,权值不再被更新。
      过大的学习率将会放大这一问题。
    • Leaky ReLU
      (14)g(z)=max(αiz,z)

      Leaky ReLU的左侧也能进行学习,将αi固定为一个较小的常值,可以解决Dying ReLU问题
    • PReLU
      (15)g(z)=max(αiz,z)

      与 Leaky ReLU不同的是,PReLU的αi并不是一个常值,它也是一个参数,学习出来的,在较小的数据集中容易过拟合
    • ELU
      (16)g(z)=max(α(ez1),z)

      a. ReLU有bias shift问题,他的输出全为正值,没有负值。当激活值均值非0时,会对下一层造成一个bias,若激活值之间不能相互抵消,会对一下层的激活单元造成bias shift,如此叠加,单元越多,bias shift就越大。
      b. Leaky ReLU、 PReLU、 ELU可以取到负值,让激活单元可以更接近0,类似BN的效果,但降低了复杂度。
      c.相对 Leaky ReLU、 PReLU,ELU对于输入值较小具有软包和(最左则梯度近似0)性质,提升了对噪声的鲁棒性。
    • maxout
      (17)g(z)=maxjGzj

      maxout可以以任意精度逼近任意凸函数 学习激活函数本身,缺点是k倍增加了参数
      maxout以分段函数的形式去逼近凸函数,两端分段函数可以近似ReLU
  5. 初始化
      从正则化的角度,我们希望网络的权值小一点,降低过拟合的风险,而从优化的角度,我们希望初始化的大一点,权值大能够传递更多的信息。
      目比较流行初始化方法是Xavier初始化,采用启发式想法,将权值以wi,jU(6nin+nout,6nin+nout),它的方差为2nin+nout,使得信号在经过多层神经网络后还能保持在合理范围。(不至于太大或太小)

  6. 反向传播
    l=yTlogsoftmax(Wx)=yTlogsoftmax(a)

    softmax是元素级别的函数,返回的是向量
    基础公式:
    元素级别的函数求导 df(x)=f(x)dx
    yT1=11T(uv)=uTv
    推导:
    softmax(a)=ea1Tea

    l=yTlogea1Tea=yTa+yT1log(1Tea)l=yTa+log(1Tea)dl=yTda+1Tdea1Tea=yTda+1T(eada)1Tea=yTda+(ea)Tda1T+ea=tr(yTda+(ea)Tda1Tea)=tr((softmax(a)y)Tda)

    故:
    la=sorftmax(a)y

    dl=tr(laTda)=tr(laTdWx)=tr(xlaTdW)

    lw=laxT=(sorftmax(Wx)y)xT

    以两层神经网络推导为例:
    l=yTlogsoftmax(W2σ(W1x))

    其中,令:
    a1=W1x

    h1=σ(a1)

    a2=W2h1

    由之上的推导,可得
    la2=softmax(a2)y

    W2
    dl=tr(la2Tda2)=tr(la2TdW2h1)+tr(la2TW2dh1)

    lW2=la2h1T

    lh1=W2Tla2

    W1
    tr(lh1Tdh1)=tr(lh1T(σ(a1)da1))=tr((lh1σ(a1))Tda1)

    la1=lh1σ(a1)

    tr(la1Tda1)=tr(la1TdW1x)=tr(xla1TdW1)

    lW1=la1xT

    多层神经网络推导:
    记号:
    loss=C(y,an)

    al=act(wLal1+bl)=act(zl)

    推导最后一层的偏导
    tr(canTdan)=tr(canT(act(zn)dzn))=tr((canact(zn))Tdzn))

    固:
    gradn=czn=canact(zn)

    展开全微分
    tr(cznTdzn)=tr(cznTd(wnan1+bn))=tr(cznTdwnan1)+tr(cznTwndan1)+tr(cznTdbn)

    上面三项分别对应着:
    cwn=czn(an1)T=gradn(an1)T

    cbn=czn=gradn

    can1=(wn)Tczn=(wn)Tgradn

    向下一层传回梯度:
    tr(can1Tdan1)=tr(can1T(act(zn1)dzn1))=tr((can1act(zn1))Tdzn1))

    gradn1=czn1=can1act(zn1)=((wn)Tgradn)act(zn1)
没有更多推荐了,返回首页