Fork me on GitHub
Guoxing Lan

Journey To Truth


  • Home

  • About

  • Categories

  • Tags

  • Archives

凸优化基础知识笔记-凸集、凸函数、凸优化问题

Posted on 2019-08-11 | In Mathematical Fundamentals

[TOC]

1. 凸集

集合$C$被称为凸集,如果C中任意两点间的线段仍然在$C$中。即对于任意$x_1,x_2\in C$和满足$0\leq \theta \leq 1$的$\theta$都有

2. 凸函数

凸函数的原始定义:

函数$f:{\rm{R}}^n\rightarrow{\rm{R}}$是凸的,如果${\rm dom}\ f$是凸集,且对于任意$x,y\in {\rm dom}\ f$和任意$0\leq \theta\leq 1$,有

严格凸:上式中当$x\not=y$且$0\leq \theta \leq 1$时,不等式严格成立(即取小于号)
几何意义:上述不等式意味着点$(x,f(x))$和$(y,f(y))$之间的线段在函数$f$的图像上方。

2.1. 凸函数的一阶条件

假设$f$可微(即其梯度$\nabla f$在开集${\rm dom}\ f$内处处存在),则函数$f$是凸函数的充要条件是${\rm dom}\ f$是凸集且对于任意$x,y\in {\rm dom}\ f$,下式成立:

几何意义:凸函数的一阶Taylor近似是原函数的一个全局下估计,也即凸函数任意一点处的切线都在原函数图像的下方。反之亦然(充分必要条件)
2.2. 凸函数的二阶条件

假设$f$二阶可微,即对于开集${\rm dom}\ f$内的任意一点,它的Hessian矩阵或者二阶导数$\nabla ^2f$存在,则函数$f$是凸函数的充要条件是其Hessian矩阵是半正定阵:即对于所有的$x\in {\rm dom}\ f$有:

几何意义:函数图像在点$x$处具有正(向上)的曲率。

2.1. 凸函数例子

常见的凸函数:

  • 指数函数:$e^{ax},\forall a \in R$
  • 范数: $\lVert x\rVert_p=\left(\lvert x_1\rvert^p+\lvert x_2\rvert^p+\cdots+\lvert x_n\rvert^p\right)^{1/p},p\geq 1$。${\rm R}^n上的任意范数均为凸函数$。
  • 负熵函数:函数$xlog{x}$在其定义域($R_{++}或者R_X$)上是凸函数。

3. 凸优化问题

优化问题的标准形式:

我们称$x\in R^n$为优化变量,称函数$f_0:R^n\rightarrow R$为为目标函数或代价函数;不等式$f_i(x)\leq 0$称为不等式约束,$h_i:R^n\rightarrow R$称为等式约束。优化问题的定义域是目标函数和约束函数的定义域的交集。满足约束条件的定义域中的点称为可行点;所有可行点的集合称为可行集。
问题$(3-1)$的最优值$p^{\star}$定义为:

如果问题不可行,则$p^{\star}=\infty$

凸优化问题的标准形式

其中,$f_0,f_1,\cdots,f_m$是凸函数
凸优化问题与一般优化问题的标准形式的区别在于以下三点:

  • 目标函数必须是凸的
  • 不等式约束函数必须是凸的
  • 等式约束函数必须是仿射函数

至于为什么等式约束必须是仿射函数,这里有个直观的解释:等式约束可以看成要同时满足$h_i(x)\leq 0$和$-h_i(x)\leq 0$,为了满足不等式约束的条件,要求$h_i(x)$同时是凸函数和凹函数,这样的函数只能是仿射函数。

凸优化问题有一个很好的性质:任意局部最优解也是全局最优解。
对于无约束条件的凸优化问题,$x$是其最优解的充要条件是:

4. 对偶

4.1. Lagrange函数与Lagrange对偶

回到前面提到的标准形式的优化问题:

注意,这里没有要求是凸优化问题。
Lagrange对偶的基本思想是,在目标函数中考虑$(4-1)$的约束条件,即添加约束条件的加权和,得到增广的目标函数,称之为Lagrange函数:

注意,Lagrange函数的定义域是$D\times R^m\times R^p$,在后面的讨论中,我们会假设$\lambda_i\geq 0$
向量$\lambda$和$\nu$成为对偶变量,或者是问题$(4-1)$的Lagrange乘子向量。
Lagrange对偶函数定义为Lagrange函数关于x取得的最小值:

Lagrange对偶函数是Lagrange函数的逐点下确界有,有个很重要的性质:无论原问题是不是凸的,Lagrange对偶函数都是凹函数。下面分别从理论上进行证明,以及从几何上形象地解释。
理论证明:
不难看出,$g(\lambda,\nu)$是关于$\lambda,\nu$的仿射函数,为了书写简简洁,我们用一个长的向量$\mu$代表$(\lambda,\nu)$
要想证明$g(\lambda,\nu)$是凹函数,只需证明$\forall \mu_1,\mu_2$下式都成立:

下面是证明过程:

得证!
注意,第一步到第二步是因为$L(x,\mu)$是关于$u$的仿射函数;第二步到第三步是因为,地二步中取得最小值时,括号中两项中的$x$是取相同的值的,而第三步中两项分别取最小值不要求$x$一定取相同值(也即能够比第二步涵盖更多情况),因此第三步可能取到的最小值肯定小于或等于第二步的最小值。
几何解释如下:
由于$L(x,\mu)$是关于$u$的仿射函数,我们将$\mu$退化为1维来形象地解释。$L(x,\mu)$可以看成是许多的直线簇组成。$g(x,\mu)$可以理解成:当$\mu$取某一个值时,取曲线簇在这个值上的最小值,遍历所有$\mu$,将曲线簇的一些最小值作为$g(x,\mu)$的值域。因此,$g(x,\mu)$可以看成下图中黄色区域的边界线,显然是一个凹函数。
逐点下确界几何解释

此外,Lagrange对偶函数还有如下性质:
$\forall \lambda \succeq 0$(每一维都大于0)和$\nu$,都有

其中$p^{\star}$是原问题的最优值。也即,对偶函数构成了原问题的最优值的下界。

4.2. 共轭函数

设函数$f:R^n\rightarrow R$,定义$f^{\star}:R^n\rightarrow R$为:

此函数成为函数$f$的共轭函数。共轭函数是一系列仿射函数的逐点上确界,所以必然是一个凸函数。
对于负熵函数$xlog{x}$,它的共轭函数不难推导出是$f^{\star}(y)=e^{y-1}$,这在后面会用到

4.3. Lagrange对偶问题

由$(4-6)$可以看到,对于任意一组$(\lambda,\nu)$,其中$\lambda \succeq0$,Lagrange对偶函数给出了优化问题$(4-1)$的最优值$p^{\star}$的一个下界。我们来看一下从Lagrange函数得到的最好下界。该问题可以表述为如下优化问题:

上述问题被称为原问题的Lagrange对偶问题。
满足$\lambda \succeq 0$和$g(\lambda,\nu)>0$的一组$(\lambda,\nu)$被称为一组对偶可行解。如果一组$(\lambda^{\star},\nu^{\star})$是对偶问题的最优解,那么称它是对偶最优解或者最优Lagrange乘子。
由于$g(\lambda,\nu)>0$必然是凹函数,且约束条件是凸函数,所以问题$(4-8)$必然是一个凸优化问题。
因此Lagrange对偶问题是一个凸优化问题,与原问题的凸性无关

记Lagrange对偶问题的最优值为$d^{\star}$,原问题的最优值为$p^{\star}$。显然有$d^{\star}\leq p^{\star}$,这个性质称为弱对偶性。

4.4. 强对偶性与Slater约束准则

如果前面的有$d^{\star}=p^{\star}$,则强对偶性成立。
强对偶性成立的一个简单的约束条件是:存在一点$x\in relint\ D$使得下式成立:

如果不等式约束函数中有一些是仿射函数时,Slater条件可以进一步改进为:不是仿射函数的那些不等式约束函数需要满足$(4-9)$。换言之,仿射不等式不需要严格成立。
由此可以得到一个推论:当所有约束条件是线性等式或线性不等式且$dom\ f_0$是开集时,改进的Slater条件就是可行性条件。也即只要问题是可行的,强对偶性就成立。
Boyd的《Convex Optimization》一书中,证明了当原问题是凸问题且Slater条件成立时,强对偶性成立。

4.5. 最优性条件

注意,此小节讨论的问题并不要求是凸问题。

4.5.1. 互补松弛性

如果强对偶性成立,则有:

上式可以得到几个有用的结论:

  • 由于第三个不等式取等号,说明$L(x,\lambda^{\star},\nu^{\star})$在$x^{\star}$处取得局部最小值,也即该点处导数为0
  • $\lambda_i^{\star}f_i(x^{\star})=0,i=1,2,\cdots,m$,这个称为互补松弛条件,意味着在最优点处,不等式约束要么取等号$(f_i(x^{\star})=0)$,要么它对应的Lagrange乘子为零$\lambda_i^{\star}=0$

4.5.2. KKT最优性条件

这小节讨论的目标函数$f_0$和约束函数$f_1,f_2,\cdots,f_m,h_1,h_2,\cdots,h_p$是可微的,但并不要求它们都是凸函数。
结合上一小节的内容,我们可以推出,对于目标函数和约束函数可微的任意优化问题,如果强对偶性成立,则任一对偶问题的最优解和对偶问题的最优解必须满足下列的式子:

上式被称为非凸问题的KKT条件:
如果原问题是凸问题,则满足KKT条件的点也是原、对偶问题的最优解。这个定理很重要!
上述定理的证明:前面两个条件说明了$x^{\star}$是原问题的可行解;因为$\lambda^{\star}\geq 0$,所以$L(x,\lambda^{\star},\nu^{\star})$是x的凸函数;最优一个条件说明了Lagrange函数在$x^{\star}$处导数为零,也即Lagrange函数取得全局最小值,因此此时有:

上述意味着对偶间隙为0,强对偶性成立,因此得证。

4.5.3. 通过解对偶问题求解原问题

由前面可知,如果强对偶性成立,且存在一个对偶最优解$(\lambda^{\star},\nu^{\star})$,那么任意原问题最优点也是$L(x,\lambda^{\star},\nu^{\star})$的最优解。利用这个性质,我们可以从对偶最优方程中去求解原问题最优解。确切的讲,如果强对偶性成立,对偶最优解$(\lambda^{\star},\nu^{\star})$已知,并且下列问题的解唯一:

(Lagrange函数是严格凸函数时上述最优化问题的解是唯一的),如果上式问题的解是原问题的可行解,那么它就是原问题的最优解;如果它不是原问题的可行解,那么原问题不存在最优解(或者无法达到)。当对偶问题比原问题更容易求解时,上述方法很有意义。

5. 利用Lagrange对偶求解最优化问题的例子

5.1. 熵的最大化问题

这个例子在机器学习中可能会经常遇到。问题描述如下:

定义域为$R_{++}$
记目标函数为$f_0(x)$Lagrange函数为:

Lagrange对偶函数为:

其中$f_0^{\star}$是$f_0$的共轭函数。对于负熵函数$xlog{x}$,它的共轭函数不难推导出是$f^{\star}(y)=e^{y-1}$,因此不难得出$(5-3)$可进一步化为:

假设原问题可行,也即Slater条件成立(注意这里的约束条件都是仿射函数),那么此时强对偶性成立。因此对Lagrange函数求最小值即可求得原问题的最小值解。注意到Lagrange函数是严格凸函数,很容易求得最小值点

其中$a_i$是$A$的列向量,如果$x^{\star}$是原问题的可行解,则必定是原问题的最优解。

卷积神经网络入门

Posted on 2018-06-28 | In Tutorials of Deep Learning

1. 计算机视觉(Computer Vision)领域介绍

图片分类(Image Classification)、目标检测(Object detection)、神经风格转换(Neural Style Transfer)。
计算机视觉的一大挑战就是输入样本的尺寸可以任意大,进一步导致神经网络的参数很多,容易过拟合并且对计算机的内存和运算速度要求极高。为了解决这个问题,可以引入卷积运算。

2. 卷积运算

2.1. 一维场合

卷积的一个重要物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。 对于线性时不变系统,如果知道该系统的单位响应,那么将单位响应和输入信号求卷积,就相当于把输入信号的各个时间点的单位响应 加权叠加,就直接得到了输出信号。 形象的物理含义见怎样通俗易懂地解释卷积? - 知乎
给定一个输入信号序列$x(t), t=1,···,n$,和单位响应序列(有时也称滤波器)$f(t), t=1,···,m$,一般情况下单位响应的长度$m$远小于输入信号长度$n$。 则卷积输出:

在卷积神经网络中,对于不在$[1,n]$范围之内的$x(t)$用零补齐(zero-padding),输出长度一般为$n+m-1$。此时也称为宽卷积。另一类是窄卷积,输出长度为$n-m+1$

2.2. 二维场合

二维卷积经常用在图像处理中。给定一个图像$x_{ij}, 1\le i\le M,1\le j\le N$,和滤波器$f_{ij}, 1\le i\le m,1\le j\le n$,一般$m << M,n << N$。
卷积的输出为:

在图像处理中,常用的均值滤波(mean filter)就是当前位置的像素值设为滤波器窗口中素有像素的平均值,也就是$f_{uv}=\frac{1}{mn}$。
上面的运算是信号与系统里面的定义,在实际的操作中通常要将卷积核进行翻转(水平和竖直方向上分别进行一次翻转)再与输入信号进行逐元素相乘(再相加)。但是在深度学习中,简化了翻转的操作,因此其实不适用于上述的公式。深度学习里面的卷积,更严谨的称呼是交叉相关(cross-correlation),但是由于习惯,还是叫做卷积。

3. 卷积操作的作用和优点

3.1. 参数共享和连接的稀疏性

假设输入图像形状为$32\times 32\times 3$,卷积核形状为$5\times 5\times 6$,则卷积后的图像大小为$28\times 28\times 6$。如果是传统的神经网络,那么参数个数为:$3072\times 4704\approx 14M$,而在卷积神经网络中参数个数为$(5\times 5+1)\times 6=156$
卷积核在图像上移动时,参数不变(参数共享)
输出图像上的每个像素只来源于上一层图像的一个局部(连接的稀疏性)

3.2. 平移不变性

3.2. 边缘检测

4. Padding(填充)

常规卷积操作的后果:

  • shrinking image没经过一次卷积操作,图片都会缩小
  • throw away info from edge(忽视边界信息) ,角落或者边界上的像素被使用的次数比中间的像素少很多

记输入图片尺寸为$n\times n$,滤波器大小为$f\times f$,填充的数量为$p$,下面是两种常用的填充方式:

  • “valid”: no padding $n\times n\ *\ f\times f \rightarrow n-f+1\ \times\ n-f+1$
  • “Same”: Pad so that output size is the same as the input size $(n+2p-f+1)\times (n+2p-f+1)$, 其中$p=\frac{f-1}{2}$。

在计算机视觉领域,f基本上是奇数。因为如果是偶数,需要不对称的填充。而且奇数的滤波器有一个中心,这样可以描述滤波器的位置。$3\times3$的滤波器最常见

5. Strided Convolutions(带步长的卷积)

假设padding p, stride S,则卷积操作的尺寸运算为:$(n\times n)*(f\times f)\ \rightarrow\ \left(\frac{n+2p-f}{S}+1\right)\times \left(\frac{n+2p-f}{S}+1\right)$
如果不能整除,则向下取整:$\lfloor\frac{n+2p-f}{S}+1\rfloor\times \lfloor\frac{n+2p-f}{S}+1\rfloor$ ,这意味着滤波器必须全部落在(填充后的)图像上。

6. 对三维图片(RGB)的卷积操作

RGB图像有三个通道(channel),或者叫做深度(depth),因此卷积核也应该有三个通道。卷积核的三个通道分别与RGB图像的三个通道逐元素相乘,再将乘积结果相加,得到卷积后的图像。下图是检测红色垂直边缘(上)和整体图像的垂直边缘(下)的例子:

图6.1 RGB图像卷积操作例子
有时为了检测多种类型的边缘,可以用同时多个滤波器对图像进行卷积操作,具体的尺寸运算总结如下: $n\times n\times n_c\ *\ f\times f\times n_c\ \rightarrow\ n-f+1\times n-f+1\times n_c'$ 其中$n_c$代表通道数,通常图像的通道数与滤波器的通道数相等;$n$和$f$分别代表图像和滤波器每个通道的尺寸;$n_c'$代表滤波器的个数
图6.2 同时用多个卷积核对图像进行卷积操作

7. 一层卷积层的例子

图7.1 一层卷积层的例子

卷积核相关说明:

卷积核的形状为:

输入输出的形状:

其中:

Activations: $a^{[l]}=n_H^{[l]}\times n_W^{[l]}\times n_c^{[l]}$
Batch or mini batch: $A^{[l]}=m\times n_H^{[l]}\times n_W^{[l]}\times n_c^{[l]}$
Weights: $f^{[l]}\times f^{[l]}\times n_c^{[l-1]}\times n_c^{l}$
bias: $n_c^{[l]}\rightarrow (1,1,1,n_c^{[l]})$

8. 卷积神经网络的一个完整例子

一个完整的卷积神经网络模型:

图8.1 一个完整卷积神经网络例子

在设计卷积神经网络中的许多工作是选择合适的超参数,例如总单元数多少?步长多少?padding多少?使用了多少滤波器等。
Types of layer in a convolutional network:

  • Convolution (CONV)
  • Pooling (POOL )
  • Fully connected (FC)

9. Pooling layer(池化层)

Max pooling 没有参数,因此不需要通过反向传播来学习参数
多通道图片时,对每个通道分别进行max pooling
pooling层的作用:平移不变性,减少图片尺寸pooling层的作用-知乎

The pooling (POOL) layer reduces the height and width of the input. It helps reduce computation, as well as helps make feature detectors more invariant to its position in the input.
max pooling比较常用,average pooling不常用
hyperparameters:

  • f: filter size (f=2,s=2,used quite often)
  • s: stride
  • Max or average pooling

    10. 卷积神经网络经典模型

    10.1 Outline

    经典的网络结构:
  • LeNet-5
  • AlexNet
  • VGG
  • ResNet
  • Inception

    10.1 LeNet-5

    在计算层数时通常把有参数的算作一层,因为pooling层没有参数,因此conv层和pooling层放在一起当作一层.
    LetNet-5结构图:
    图10.1 LeNet-5模型结构图
    LetNet-5参数表
    图10.2 LetNet-5参数说明
  • 用的是sigmoid/tanh激活函数
  • 由于那时的计算机性能比较差,采用了比较复杂的训练技巧
    注意:
  • 最大池化没有任何参数
  • 卷积层趋向于拥有越来越少的参数,多数参数集中在神经网络的全连接层上
  • 随着神经网络的深入,激活输入大小也逐渐变小。如果减少得太快,通常不利于网络性能

    10.2 AlexNet

    图10.3 AlexNet模型结构图
  • 与LSNet-5架构相似,但是规模大许多,约60M个参数
  • 用了ReLU激活函数
  • 由于计算机性能仍然不是很好,采用复杂的训练技巧(将不同的层放在两个GPU上分别训练)
  • 用了Local Response Normalization,但是后面被发现不太有效

    10.3 VGG-16


    图10.4 VGG-16模型结构图

    138M个参数
    16是指有16层含有参数的层。
    前面两层都是64个$3\times 3$的卷积核进行卷积操作。

神经网络之将二分类问题推广到多分类问题

Posted on 2018-06-25 | In Tutorials of Deep Learning

@[toc]

将神经网络应用到多类分类问题中时,输出层的形式不能用logistic函数(sigmoid激活函数),而应该推广到softmax函数。二分类问题与多分类问题的神经网络模型的最大区别就是输出层。因此下面重点讲解softmax函数的原理。

1. Softmax回归详解

在softmax回归中,我们解决的是多分类问题(相对于logistic回归解决的二分类问题),标记$y$可以取$k$个不同的值。对于训练集$\{(x^{(1)},y^{(1)}),\cdots,(x^{(m)},y^{(m)})\}$,我们有$y^{(j)}\in \{1,2,\cdots,k\}$。
对于给定的测试输入$x$,我们想用假设函数针对每一个类别$j$估算出概率值$P(y=j|x)$。因此,我们的假设函数要输出一个$k$维的向量(向量元素的和为1)来表示$k$个估计的概率值。我们采用如下形式的假设函数$h_{\theta}(x)$:

假设输入向量$x$的维数为$n$,则参数$\theta$是一个$k\times (n+1)$的参数矩阵,之所以是$n+1$是因为把截距项$b$表示成了$\theta_0\times x_0$,其中$x_0=1$是一个人工辅助变量。
利用极大似然估计的方法,可以得到每一类的后验概率表达式:

似然函数为:

对数似然函数为:

上面的$(1-4)$就是loss function。
cost function为:

多分类问题的目标就是利用训练数据来训练模型参数$\theta$使其能够最小化$(1-5)$。$(1-5)$是一个凸函数,可以利用梯度下降法得到全局最小值。

创建机器学习项目的注意事项

Posted on 2018-06-25 | In Tutorials of Deep Learning

1. Orthogonalization(正交化)

正交化的思想就是,每个输入单独控制一个属性,不要让一个输入同时控制多个属性。不同属性的控制是独立的,这样便于调试。
如果模型在training set上表现好,在dev set上表现不好,则可以正则化;
如果在dev set上表现好,在test set上表现不好,则可以增大dev set的规模;
如果在test set上表现好,在真实世界表现不好,则可以改变dev set或者cost function。
在神经网络中一般不用early stopping

2. 使用单一的量化评价指标

2.1. 状态与决策

  • True: 预测正确的样本数
  • False: 预测错误的样本数
  • Positive: 预测为正样本的样本数
  • Negative: 预测为负样本的样本数

    2.2. 状态与决策的组合

  • TP: 将正样本预测为正样本的样本数 (真阳性)
  • FP: 将负样本预测为正样本的样本数 (假阳性)
  • TN: 将负样本预测为负样本的样本数 (真阴性)
  • FN: 将负样本预测为负样本的样本数 (假阳性)

    2.3. 评价指标

  • Precision(精确率):P=TP/(TP+FP),反映了被分类器判定的正例中,真正的正例样本的比重;
  • Accuracy(准确率):A=(TP+TN)/(P+N)=(TP+TN)/(TP+FN+FP+TN),反映了分类器对整个样本集的判定能力——能将正的判定为正,负的判定为负的能力;
  • Recall(召回率):R=TP(TP+FN)=1-FN/T,反映了呗正确判定的正例占总的正例的比重;
    在实际中, 一般同时用Precision和Recall来综合评价一个分类器,我们希望分类器的这两个指标都很高。
    采用$F_1$ score来衡量分类器的性能,可以兼顾Precision和Recall。它是Precision和Recall的调和平均数:更为一般地,定义$F_{\beta}$ score:一个好的验证机和单一量化评估指标可以提高迭代的效率
    如果有多个指标(例如准确率和运行时间),选择其中一个加以优化,并使其他指标满足一个阈值,有时候是一个合理的策略。

    2.3. 关于train/dec/test set

    三者的分布应该一样,并且都应该对未来的实际数据的分布基本一样。
    关于三者的尺寸,在传统的机器学习时代,尤其是数据规模不大(万级以下的时候,如果只有train和test,则70%:30%比较合适;如果三者都有,则60%:20%:20%比较合适。在现代机器学习中,数据规模很大,一般都是百万级,那么98%:1%:1%比较合适。

    2.4. 与人类表现比较

    当训练集准确率与人类表现相差比较大时(高偏差),应该优先考虑消除偏差;当偏差小,但是测试集与训练集准确率相差大(高方差)时,应该优先考虑消除高方差。
    贝叶斯误差是理论上的最小误差,人类表的误差略大于贝叶斯误差,一把可以用人类误差来估计贝叶斯误差。除非过拟合,否则机器学习模型在训练集上的误差不会小于人类误差(贝叶斯误差)

    3. 错误分析

    在实际应用中,人工对分类错误的样本进行统计(记录错误的类别),然后制定相应的改进策略,能够提高模型迭代效率。
    训练集比较大时,有少量标签错误的样本影响不大,因为深度学习算法对随机错误很稳健,但是对系统误差不那么稳健;在开发集(dev set)中,如果由于标签错误导致的错误率占比较大,则应该考虑去纠正标签错误。
    dev set和test set必须严格服从相同的分布,而train set的分布可以有稍微的不同。
    如果你要构建机器学习应用系统,一般可以先建立一个简单的系统,然后采取前面提到的各种方法进行迭代,除非是你经验特别丰富的领域或者学术界有很多参考文献的领域(这个时候你可以直接建立一个复杂的系统)

    4. train set和dev/test set不匹配的问题

    如果你获得了两个分布不同的数据集,一种看似可行的方案是可以把它们混合后随即排列,再用来进行train/dev/test划分。这种方案可能会出现问题,例如当我们关心的那个分布的数据集(记为A,相应地不太关心的数据集记为B)比较小时,会出现dev set中A的比例很小的情况。而dev set是用来选择、迭代模型的,应该对我们关心的数据集更加侧重。因此可以考虑,train set中包含所有的B以及少量的A,而dev set和test set包含剩余的A。
    当train set与dev set的分布不一样,而两者的错误率相差很大时,不能贸然地下结论说模型的variance很大。此时可以将train set进一步划分为train set和train-dev set,这两个set分布一样,可以用来检验模型的泛化能力。

    5. 从多个任务中学习

    如果你训练好了一个识别猫的网络,想用这个网络进一步得到识别医学影像的网络,可以用少量医学影像的数据来训练该网络的最后一层和输出层,或者用很多医学影像的数据训练网络的所有参数,此时训练识别猫的阶段成为预训练(pre-training),更新网络参数的阶段叫做微调(fine tuning)。
    迁移学习(transfer learning)可以把一个拥有大量数据的问题模型,迁移到一个先对之下仅有很少数据的问题模型中。
    迁移学习是有先后顺序的,而多任务学习(multi-task learning)在一开始就尝试让一个神经网络同时做几件事。比如在一张图片中识别是否有车、行人、红绿灯、交通标示牌等。这要比训练多个单独的网络(每个网络解决一个问题)的效果要好。损失函数的形式:而且你在标注图片的时候,哪怕图片里面只标了部分任务的标签,多任务学习也可以正常进行下去,因为$(5-1)$只对0或者1的标签进行统计,没有标记的任务可以不统计。
    目标检测就是多任务学习的一个例子。总体而言,多任务学习比迁移学习的场景要少一些。

    6. 端到端(end-to-end)学习

    端到端学习就是省略了传统的多阶段过程,但是需要大量的数据。如果只有中等的数据,可以考虑折中一下,分阶段进行。

神经网络中的优化方法

Posted on 2018-06-15 | In Tutorials of Deep Learning

1. Mini-batch decent方法

1.1. Batch vs. mini-batch

Batch:利用矢量化编程的方法,对整个训练集运用梯度下降法。梯度每下降一小步,都要处理整个训练集。这样的效率比较慢。
Mini-batch:将训练集拆分为更小的训练集,成为小批量训练集(mini-batch)
Mini-batch t: $X^{\{t\}},Y^{\{t\}}$
对每个mini-batch都进行一次完整的前向和反向传播过程,当对所有的mini-batch都进行了前向和反向过程后,我们称完成了对训练集的一次遍历(epoch)。
Batch gradient descent,原则上cost应该是单调下降(除非learning rate太大了);Mini-batch gradient descent,整体趋势下降,但是局部是振荡的。

1.2. Choosing mini-batch size

  • 如果mini-batch size=m: 等价于batch gradient descent,一般可以收敛到全局最小值点;
  • 如果mini-batch size=1:等价于stochastic gradient descent,不一定收敛到全局最小值点,一般会在该点处振荡。
    如果训练集较小(<2000),就使用batch gradient descent;否则,可以选择64到512之间(2的幂数)的mini-batch size。确保可以放入CPU/GPU的内存中

2. 指数加权平均方法(exponentially weighted averages)

图2.1 指数加权平均例子-寻找温度趋势

第t天的指数平均值的通项公式:

近似公式:

如图2.2所示,当$\beta$增大时,曲线向右平移(绿线);$\beta$减小时,曲线振荡加剧(黄线),

图2.2 β大小对曲线形状的影响

2.1. Bias Correction(偏差修正)

原因:$v_0=0$导致初始阶段的点估计不准
解决方法:用$\frac{v_t}{1-\beta^t}$代替$v_t$

3. Gradient descent with momentum(动量梯度下降)

背景问题:当目标函数的等高线为图3.1所示时,梯度下降的过程中可能会发生振荡:

图3.1 梯度下降振荡的例子>

Momentum:
On iteration t:
  Compute $dw,db$ on current mini-batch.

采用前面提到的指数加权平均可以使梯度的下降过程更平滑。
一般$\beta$取0.9就好,而且实际中一般不用修正偏差,因为迭代几步后偏差就自动减小很多了。

4. RMSprop(Root Mean Square prop,均方根传递)

On iteration t:
  Compute $dw,db$ on current mini-batch.

垂直方向除以一个较大的数,水平方向除以一个较小的数(假设b是垂直方向,w是水平方向)。为了防止分母出现零的情况,可以在分母加上一个小的$\epsilon$

5. Adam优化算法

Adam的本质是将动量和RMSprop结合起来。
$v_{dw}=0,s_{dw}=0.v_{db}=0,s_{db}=0.$
On iteration t:
  Compute $dw,db$ on current mini-batch.

超参数:
$\alpha$:人工调整
$\beta_1:0.9$,$(dw)$
$\beta_2:0.999$,$(dw^2)$
$\epsilon$:$10^{-8}$

6. 学习率衰减(learning rate decay)

图6.1 固定学习率导致不能完全收敛的示意图

解决方法:让学习率$\alpha$逐渐下降。
下降的形式:

  • $\alpha=\frac{1}{1+decay-rate\ *\ epoch-num}$
  • $\alpha=0.95^{epoch-num}\cdot\alpha_0$
  • $\alpha=\frac{k}{\sqrt epoch-num}\alpha_0$
  • …

神经网络中的正则化

Posted on 2018-06-12 | In Tutorials of Deep Learning

Adding regularization will often help To prevent overfitting problem (high variance problem ).

1. Logistic regression

回忆一下训练时的优化目标函数

其中

$L_2 \ \ regularization $ (most commonly used):

其中

Why do we regularize just the parameter w? Because w Is usually a high dimensional parameter vector while b is A scalar. Almost all The parameters are in w rather than b.
$L_1 \ \ regularization $

其中

w will end up being sparse. In other words the w vector will have a lot of zeros in it. This can help with compressing the model a little.

2. Neural network “Frobenius norm”

其中

$L_2$ regulation is also called Weight decay:

能够防止权重$w$过大,从而避免过拟合

3. inverted dropout

对于不同的训练样本都可以随机消除一部分结点
反向随机失活(前向和后向都需要dropout):

this inverted dropout technique by dividing by the keep.prob, it ensures that the expected value of a3 remains the same. This makes test time easier because you have less of a scaling problem.
测试时不需要使用drop out

神经网络中的激活函数

Posted on 2018-06-12 | In Tutorials of Deep Learning

$tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}$效果严格地比$sigmoid$函数好,因为该函数的对称中心在$(0,0)$,具有将数据归一化为0均值的效果。当然,二分类的输出层的激活函数还是一般用$sigmoid(z)$,因为$sigmod$函数能将输出值映射到$0\sim1$之间(概率值)
$Relu(z)=max(0,z)$出现后,神经网络默认都用$Relu$函数(rectified linear)来作为激活函数。此时一般默认$z>0$
$leaky(z)=max(0.01z,z)$可以避免$z<0$时斜率为零的情况 输出层有时也用线性激活函数(房价预测)

1. Sigmoid activation function

图1.1 激活函数-sigmoid

2. Tanh activation function

图2.1 激活函数-tanh

3. ReLU and Leaky ReLU

图3.1 激活函数-ReLU

ReLU:

Leaky ReLU:

图3.2 激活函数-Leaky ReLU

4.选择激活函数的准则

  • 如果处理的问题是二分类问题,输出为0和1,那么输出层选择sigmoid函数,其他神经元选择ReLU(有时也可用tanh),理论上Leaky ReLU比ReLU好,但是实践中差不多。

从logistic回归到神经网络

Posted on 2018-06-05 | In Tutorials of Deep Learning

@[toc]

参考Andrew NG Coursera课程《Neural Networks and Deep Learning》
有任何问题请联系 languoxing@126.com

本文是深度学习入门教程序列的第一篇,通过介绍logistic回归的原理,进而引入一层神经网络的前向传播和后向传播公式,并提供了示例代码。

1.logistic回归详解

logistic回归模型是用来解决二分类问题的,因此我们将首先在概率的框架下描述什么是分类问题。分类问题的一般描述如下图所示:
在这里插入图片描述

图1.1 分类问题的一般描述

用X代表输入空间,是输入向量的所有可能取值的集合,也叫特征空间;Y代表输出空间,是输出的所有可能取值的集合。$x^{(i)}\in X$代表特征空间的一个样本,$y^{(i)}\in Y$代表其类别(标签)。分类问题的一般描述可总结为:利用已知标签的训练集$X_{train}$训练出一个模型,该模型包含一个映射关系$h:X\rightarrow Y$,$h$应该能够对新的数据点$x^{(m+1)}$预测其类别$y^{(m+1)}$,并且预测结果应该尽可能好。通常情况下,这种“好”的标准为正确率尽可能高。

以二分类问题为例,用0和1代表可能的类别,也即$Y=\{0,1\}$。我们从概率的框架下来讨论二分类问题:给定输入特征向量$x$,我们希望估计出它分别属于两类的概率$P(y=0|x;\theta)$和$P(y=1|x;\theta)$。因为现在讨论的是二分类问题,可令$\hat y=P(y=1|x;\theta)$,那么只要估计出$\hat y$就可以了。在估计之前,需要选择合适形式的函数对各类别的后验概率建模,一种最简单也是最笨的方法就是令$\hat y=w ^T x+b$,也即线性回归。但是这样可能会导致$\hat y$的值大于1或者大于0,这和概率的定义相违背。因此,我们可以在线性回归的表达式前面加上一层sigmoid函数,也即$\hat y=\sigma\left(\omega ^T x+b\right)$。sigmoid函数的表达式为:

其函数图像为:
在这里插入图片描述

到此,我们得到了logistic回归模型:

注意,在$(1-2)$中,我们将参数项b用$x_0$表示,这样能够写成更紧凑的形式。为了突出参数$\theta$,我们用$h_\theta$表示公式$(2)$中的函数,它代表了在已知特征$x$的情况下,类别为$y=1$的概率,也即$P(y=1|x;\theta)=h_\theta$;显然,$P(y=0|x;\theta)=1-h_\theta$
假设我们的目标是让分类的错误率最小(即最小错误率决策准则,这是最普遍的一种分类准则)。不难证明,最小化错误等价于最大化各类的后验概率。因此,若$(1-2)$的值大于0.5,则判定为类别1;否则判定为类别0。

注意,logistic模型仍然是一个线性分类模型,因为它的决策面是$0=w ^T x+b$,我一个线性决策面。

2.损失函数的选取

选取好了模型后,接下来要选取损失函数(Loss function),然后在训练集上利用一定的算法(例如梯度下降法)最小化损失函数,从而确定$h_{\theta}$中的参数$\theta$。一种很自然的想法是选取$L\left(\hat y,y\right)=\frac{1}{2}\left(\hat y-y\right)^2$作为损失函数,但是这会导致在后面学习参数的过程中,最优问题不是一个凸问题。我们在这里采用极大似然估计的方法来推导出一个更合理的损失函数,并且该损失函数是凸函数。

2.1.最大化后验概率与极大似然估计

回忆一下极大似然估计的思想:对于可观测的样本$X$及其观测值$Y$,写出该观测值的概率表达式(记为$L\left(\theta\right)$),该概率表达式一般依赖于参数$\theta$,极大似然估计的目标是寻找$\theta$的估计值$\hat \theta$使得$L\left(\theta\right)$最大。
对于某一个观测样本$x^{(i)}$和观测值$y^{(i)}$,有:

$L(\theta)$也叫似然函数。
对数似然函数为:

$(2-2)$就是单个样本的损失函数。下面讨论训练集上的代价函数(cost function)。
对于多个观测样本$X$和观测值$Y$,似然函数可写成:

对数似然函数为:

因为对数似然函数需要最大化,而损失函数需要最小化,因此我们选择如下表达式作为损失函数:

$(2-5)$就是代价函数(cost function),它等价于对所有的$(2-2)$取平均。
损失函数(loss function)是定义在单个样本上的,代价函数(cost function)是定义在多个样本上的。

3.梯度下降方法求解最优的参数$w$和$b$(一层神经网络)

利用logistic可以构造一个只含有输出层的神经网络,其结构图如下:
在这里插入图片描述

图3.1 用logistic回归表示的单层神经网络结构图

下面介绍其作为神经网络时的前向传播、反向传播过程,为后面理解更复杂的神经网络打下基础。
logistic回归的代价函数的凸函数,因此可以用梯度下降的方法求得全局最优值,并且与初始化的方式无关,一般利用零初始化。

注意,Andrew NG在Cousera开设的深度学习课程中,求偏导用的是符号$d$,我们这里不区分$\partial$和$d$。
下面我们讨论只有输入层和输出层(激活函数为sigmoid函数)的简单神经网络的前向传播和反向传播过程,也即logistic回归。

3.1.前向传播

$(3-2)$中从上到下的顺序可以代表前向传播过程。

3.2.反向传播

先对求导公式进行一些化简:

有了$(3-4)$,我们就能得到$\rm{d}\it{Z}=A-Y$。因此反向传播过程如下:

注意,$(3-5)$的流程可以理解为先对每一个样本求损失函数关于$z$的梯度,并对每个样本求出$\rm{d}\it{w}$,在对所有样本的$\rm{d}\it{w}$球平均,因此有$1/m$。
在这里插入图片描述

图3.2 logistic回归梯度下降

也可以对$m$个样本的代价函数一次性直接求偏导,这需要一定的向量微分和复合函数微分的知识。这样的话,在$\rm{d}\it{Z}$中就会有一个$1/m$,那么在求$\rm{d}\it{w}$时就不用另外再加一个$1/m$了,并且形状可能互为转置,最终的结果是一样的。具体过程这里省略,有兴趣的读者可以自行推导。

4.单层神经网络示例代码

网络结构见图3.1
请点击下面的超链接跳转至github页面:
用logistic回归实现一层神经网络用来识别猫的图片
其中Logistic_Regression_with_a_Neural_Network_mindset.ipynb文件包含详细的注释和图示,但需要在jupyternotebook中运行;Logistic_Regression_with_a_Neural_Network_mindset.py文件可直接用“python”命令运行,两者的功能是一样的。

5.两层神经网络

5.1.前向传播

$(5-1)$中从上到下的顺序可以代表前向传播过程。

5.2.反向传播

$(5-2)$中从上到下的顺序可以代表前向传播过程。

5.3.关于参数的初始化

在单层神经网络(logistic回归)中,可以将参数初始化wie全零值;但是在多层神经网络中,$W$不能初始化为0,否则每一层的各个节点对应的$W$会训练成一样的值;$b$可以初始化为0 $W$不能初始化为特别大,浅层网络一般是0.01量级;因为太大了的话,激活函数的自变量要么正向很大,要么负向很大,导致斜率趋近于0 ,收敛速度很慢。尤其是你使用$sigmoid$或$tanh$激活函数。如果不使用这些激活函数,但是你是二分类问题(输出层是sigmoid函数),也会出现这个问题.

5.4.2层神经网络示例代码

对如下二维平面上的点进行分类:
在这里插入图片描述

图5.1 二维平面上的非线性二分类数据集例子

网络结构如下:
在这里插入图片描述

图5.2 2层神经网络结构例子

点击下面的超链接查看完整代码:
2层神经网络的示例代码
其中Palnar_data_clf_with_one_hidden_layer.ipynb文件包含详细的注释和图示,但需要在jupyternotebook中运行;Palnar_data_clf_with_one_hidden_layer.py文件可直接用“python”命令运行,两者的功能是一样的。

6.深层神经网络

6.1.每层的参数及变量的尺寸

6.2.前向传播递推公式

6.3.反向传播递推公式

6.4.多层神经网络的示例代码

点击如下超链接。
对比了2层神经网络和5层神经网络在对猫分类时的性能
Deep Neural Network - Application.py
Deep Neural Network - Application.ipynb

Hello World

Posted on 2018-01-27 | In About Me

Hi! I am Guoxing Lan(兰国兴)! I’m a master student majoring in Control Science and Engineering in Tsinghua University, Beijing, China. My interests are in theories and applications of Machine Learning and Deep Learning. My research work during my Master’s Program is focused on Data-driven Fault Diagnosis and Remaining Useful Estimation of Aircraft Engine. I am going to record and share my journey of studying Artificial Intelligence here. You are also welcome to visit my other Blog on CSDN—lankuohsing的博客 to find things not only restrict to AI. Click here to visit my GitHub! I hope we can enjoy the joy of sharing knowledge !

参数估计之最大似然估计

Posted on 2017-06-27 | In Tutorials of Statistics

参数估计之最大似然估计

(本章内容是后面logistic回归和softmax回归的基础)
基本思路:对于离散总体,设有样本观测值$x_1,x_2,\cdots ,x_n$,我们写出该观测值出现的概率,它一般依赖于某个或某些参数,用$\theta$表示,将该概率看成$\theta$的函数,用$L(\theta)$表示,称为似然函数:

求最大似然估计就是找$\theta$的估计值$\hat {\theta}=\hat {\theta}(x_1,\cdots ,x_n)$使得上式的$L(\theta)$达到最大。

例子1

设产品分为合格品与不合格品两类,我们用一个随机变量$X$来表示某个产品经检查后的不合格品数,则$X=0$表示合格品,$X=1$表示不合格品,则$X$服从二点分布$b(1,p)$,其中$p$是未知的不合格率。先抽取n个产品看是否合格,得到样本$x_1,\cdots ,x_n$,这批观测值发生的概率为:

似然函数为

要求$p$使得$L(p)$最大,可将$(3)$两端取对数并关于$p$求导令其为0(这里其实省略了证明$(3)$是一个凹函数的过程),得到似然方程:

求解$(4)$即可得到$p$的最大似然估计,为

123
Guoxing Lan

Guoxing Lan

On The Journey To Truth

21 posts
5 categories
11 tags
© 2021 Guoxing Lan
Powered by Hexo
|
Theme — NexT.Pisces v5.1.4