/images/avatar.jpg

我的个人博客

梯度消失和梯度爆炸

参考 首先让我们先来了解一个概念:什么是梯度不稳定呢? 概念:在深度神经网络中的梯度是不稳定的,在靠近输入层的隐藏层中或会消失,或会爆炸。这种不稳定性才是深度神经网络中基于梯度学习的根本问题。 产生梯度不稳定的根本原因:前面层上的梯度是来自后面层上梯度的乘积。当存在过多的层时,就会出现梯度不稳定场景,比如梯度消失和梯度爆炸。 划重点:梯度消失和梯度爆炸属于梯度不稳定的范畴 1.梯度消失与梯度爆炸的概念 梯度消失:在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫梯度消失。 梯度爆炸:在神经网络中,当前面隐藏层的学习速率高于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫梯度爆炸。 2.梯度消失与梯度爆炸的产生原因 梯度消失:(1)隐藏层的层数过多;(2)采用了不合适的激活函数(更容易产生梯度消失,但是也有可能产生梯度爆炸) 梯度爆炸:(1)隐藏层的层数过多;(2)权重的初始化值过大 (1)隐藏层的层数过多  总结:从深层网络角度来讲,不同的层学习的速度差异很大,表现为网络中靠近输出的层学习的情况很好,靠近输入的层学习的很慢,有时甚至训练了很久,前几层的权值和刚开始随机初始化的值差不多。因此,梯度消失、爆炸,其根本原因在于反向传播训练法则,属于先天不足。具体见下图: 从上图可以非常容易的看出来:对于四个隐层的网络来说,第四隐藏层比第一隐藏层的更新速度慢了两个数量级!!! (2)激活函数 我们以下图的反向传播为例,假设每一层只有一个神经元且对于每一层都可以用公式1表示,其中σ为sigmoid函数,C表示的是代价函数,前一层的输出和后一层的输入关系如公式1所示。我们可以推导出公式2。 3)初始化权重的值过大 当,也就是w比较大的情况下,根据2式的链式相乘可得(反向传播),则前面的网络层比后面的网络层梯度变化更快,引起了梯度爆炸的问题。所以,在一般的神经网络中,权重的初始化一般都利用高斯分布(正态分布)随机产生权重值。 3.梯度消失与梯度爆炸的解决方案 梯度消失和梯度爆炸问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。对于更普遍的梯度消失问题,可以考虑一下三种方案解决: (1)用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函数。(几种激活函数的比较见我的博客) (2)用Batch Normalization。(对于Batch Normalization的理解可以见我的博客) (3)LSTM的结构设计也可以改善RNN中的梯度消失问题。

池化层的作用

池化层夹在连续的卷积层中间, 用于压缩数据和参数数量,减小过拟合。如果输入是图像的话,那么池化层的最主要作用就是压缩图像。特征不变性也就是在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的 resize,平时一张狗的图像被缩小了一倍还能识别出这是一张狗的图像,这说明这张图像中仍保留着狗最重要的特征,图像压缩时去掉的信息只是一些冗余信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。池化层去冗余信息的思路是将一块区域的特征值集合通过一个主要特征值替换,达到快速数据降维的效果,常见方法有取局部最大值(maxpooling)或取局部平均(averagepooling)。 池化层不但能够有效减小神经元的数量,还可以使得网络对一些小的局部形态改变保持不变形,并拥有更大的感受野

深度学习的基本概念

1绪论 ​ 基本的深度学习相当于函数逼近问题,即函数或曲面的拟合 ,所不同的是,这里用作基函数的是非线性的神经网络函数,而原来数学中的用的则是多项式、三角不等式等。 ​ 由于神经网络的非线性和复杂性,它有更强的表达能力,即能够从给定的神经网络函数族中可能找到对特定数据集拟合得更好的神经网络。这里既涉及设计合适的神经网络类型,也涉及从该类型中的神经网络中找出好的(即拟合误差小的)特定神经网络的方法。后者正是数学中最优化分支所研究的问题。从数学角度来说,目前深度学习中所用的优化算法还是属于比较简单的梯度下降法。 ​ 但是恰恰由于神经网络的非线性复杂性,使得能够通过大量的标注数据经过深度学习可以得到一个误差结果很小的神经网络,但是要用它来解释却十分的困难。近来也有学者发现,一个精度很高的神经网络,改变它的几个参数,就会使该网络的精度明显下降。换言之,深度学习方法的鲁棒性也有待研究。 2.机器学习、深度学习和人工神经网络的关系 ​ 深度学习以神经网络为主要模型。深度学习一开始用来解决机器学习中的表示学习问题。但是由于其强大的能力,深度学习越来越多的用来解决一些通用的人工智能问题,比如决策、推理等。 ​ 从根源上来说,**深度学习是机器学习的一个分支,**是指一类问题以及解决这类问题的方法。指从有限样例中通过算法总结出一般性的规律,并可应用到新的未知数据上。 ​ 其次,深度学习采用的模型一般比较复杂,指样本的原始输入到输出目标 之间的数据流经过多个线性或非线性的组件(component).因为每个组件都会对信息进行加工,并进而影响后续的组件,所以当我们最后得到输出结果时,我们并不清楚其中每个组件的贡献是多少.这个问题叫作贡献度分配问题(Credit Assignment Problem,CAP)[Minsky, 1961]. 贡献度分配问题也经 常翻译为信用分配问题或功劳分配问题.在深度学习中,贡献度分配问题是 一个很关键的问题,这关系到如何学习每个组件中的参数。 ​ 目前,一种可以比较好解决贡献度分配问题的模型是人工神经网络。神经网络和深度学习并不等价,深度学习可以采用神经网络模型,也可以采用其他模型(比如深度信念网络是一种概率图模型).但是由于神经网络模型可以比较容易地解决贡献度分配问题,因此神经网络模型成为深度学习中主要采用的模型。 2.1人工智能 ​ 人工智能是计算机科学的一个分支,主要研究、开发用于模拟、延伸和扩展人类智能的理论、方法、技术及应用系统等.和很多其他学科不同,人工智能这个学科的诞生有着明确的标志性事件,就是1956 年的达特茅斯(Dartmouth)会议.在这次会议上,“人工智能”被提出并作为本研究领域的名称.同时,人工智能研究的使命也得以确定.John McCarthy 提出了人工智能的定义:人工智能就是要让机器的行为看起来就像是人所表现出的智能行为一样. ​ 目前,人工智能的主要领域大体上可以分为以下几个方面: (1)感知::模拟人的感知能力,对外部刺激信息(视觉和语音等)进行感 知和加工.主要研究领域包括语音信息处理和计算机视觉等. (2)学习:模拟人的学习能力,主要研究如何从样例或从与环境的交互中 进行学习.主要研究领域包括监督学习、无监督学习和强化学习等. (3)认知:模拟人的认知能力,主要研究领域包括知识表示、自然语言理 解、推理、规划、决策等. 2.2深度学习 ​ 深度学习是将原始的数据特征通过多步的特征转换得到一种特征表示,并进一步输入到预测函数得到最终结果.和“浅层学习”不同,深度学习需要解决的关键问题是贡献度分配问题(Credit Assignment Problem,CAP)[Minsky, 1961],即一个系统中不同的组件(component)或其参数对最终系统输出结果的贡献或影响.以下围棋为例,每当下完一盘棋,最后的结果要么赢要么输.我们会思考哪几步棋导致了最后的胜利,或者又是哪几步棋导致了最后的败局.如何判断每一步棋的贡献就是贡献度分配问题,这是一个非常困难的问题.从某种意义上讲,深度学习可以看作一种强化学习(Reinforcement Learning,RL),每个内部组件并不能直接得到监督信息,需要通过整个模型的最终监督信息(奖励)得到,并且有一定的延时性。 ​ 目前,深度学习采用的模型主要是神经网络模型,其主要原因是神经网络模型可以使用误差反向传播算法,从而可以比较好地解决贡献度分配问题.只要是超过一层的神经网络都会存在贡献度分配问题,因此可以将超过一层的神经网络都看作深度学习模型.随着深度学习的快速发展,模型深度也从早期的5 ∼ 10层增加到目前的数百层.随着模型深度的不断增加,其特征表示的能力也越来越强,从而使后续的预测更加容易。 ​

深度生成模型

参考:https://nndl.github.io/ https://www.spaces.ac.cn/archives/5253 https://www.spaces.ac.cn/archives/5343 为什么要研究生成模型? 概率生成模型(Probabilistic Generative Model),简称生成模型,是概率统计和机器学习领域的一类重要模型,指一系列用于随机生成可观测数据的模型。假设在一个连续或离散的高位空间$\cal{X}$中,存在一个随机向量X\pmb{X}服从一个未知的数据分布pr(x)p_r(\pmb{x}),$\pmb{x}\in\cal{X}$。生成模型是根据一些可观测样本x1,x2,,xN{\pmb{x}^1,\pmb{x}^2,…,\pmb{x}^N }来学习一个参数化的模型pθ(x)p_\theta(\pmb{x})来近似位置分布pr(x)p_r(\pmb{x}),并可以用这个模型来生成一些样本,使得生成样本和真实样本尽可能地相似。生成模型通常包含两个基本功能:**概率密度估计**和**生成样本(即采样)**。下图以手写体数字图像为例给出了生成模型的两个功能示例,其中左图表示手写体数字图像的真实分布pr(x)p_r(\pmb{x})以及从中采样的一些“真实”样本,右图表示估计出了分布pθ(x)p_\theta(\pmb{x})以及从中采样的“生成”样本。 深度生成模型的目标是从训练数据中学习到复杂的概率分布 1 概率生成模型 给定一组数据$\cal{D}=\lbrace\pmb{x}^{(n)}\rbrace_{n=1}^N$,假设它们都是独立地从相同的概率密度函数为pr(x)p_r(\pmb{x}) 的未知分布中产生的.**密度估计(Density Estimation)是根据数据集$\cal{D}$来估计其概率密度函数pθ(x)p_\theta(\pmb{x})**。 在机器学习中,密度估计是一类无监督学习问题.比如在手写体数字图像的密度估计问题中,我们将图像表示为一个随机向量𝑿,其中每一维都表示一个像素值.假设手写体数字图像都服从一个未知的分布pr(x)p_r(\pmb{x}),希望通过一些观测样本来估计其分布.但是,手写体数字图像中不同像素之间存在复杂的依赖关系(比如相邻像素的颜色一般是相似的),很难用一个明确的图模型来描述其依赖关系,所以直接建模pr(x)p_r(\pmb{x}) 比较困难.因此,我们通常通过引入隐变量𝒛来简化模型,这样密度估计问题可以转换为估计变量(𝒙, 𝒛) 的两个局部条件概率pθ(z)p_\theta(\pmb{z})pθ(xz)p_\theta(\pmb{x|z}).一般为了简化模型,假设隐变量𝒛 的先验分布为标准高斯分布𝒩(0, 𝑰).隐变量𝒛 的每一维之间都是独立的.在这个假设下,先验分布𝑝(𝒛; 𝜃) 中没有参数.因此,**密度估计的重点是估计条件分布p(xz,θ)p{(\pmb{x|z},\theta)}.** 如果要建模含隐变量的分布,就需要利用EM算法来进行密度估计,而在EM算法中,需要估计条件分布 p(xz;θ)p(\pmb{x}|\pmb{z};\theta)以及后验分布 p(zx;θ)p(\pmb{z}|\pmb{x};\theta),当这两个分布比较复杂时就可以利用神经网络来建模,这就是变分自编码器的思想。 由条件概率公式可得: pθ(xz)=pθ(z)pθ(xz) p_\theta(x,z)=p_\theta(\pmb{z})p_\theta(\pmb{x|z}) 在得到两个变量的局部条件概率pθ(z)p_\theta(\pmb{z})pθ(xz)p_\theta(\pmb{x|z})之后,我们就可以**生成数据**𝒙,具体过程可以分为两步进行: (1)根据隐变量的先验分布pθ(z)p_\theta(\pmb{z}) 进行采样,得到样本zz。 (2)根据条件分布pθ(xz)p_\theta(\pmb{x|z})进行采样,得到样本xx. 为了便于采样,通常pθ(xz)p_\theta(\pmb{x|z})不能过于复杂。因此,另一种生成样本的思想是从一个简单分布𝑝(𝒛), 𝒛 ∈ 𝒵(比如标准正态分布)中采集一个样本𝒛,并利用一个深度神经网络𝑔 ∶ 𝒵 → 𝒳 使得𝑔(𝒛) 服从pr(x)p_r(\pmb{x}).这样,我们就可以避免密度估计问题,并有效降低生成样本的难度,这正是**生成对抗网络**的思想。 1.2 变分自编码器 1.2.1 含隐变量的生成模型 假设一个生成模型(如图13.3所示)中包含隐变量,即有部分变量是不可观测的,其中观测变量𝑿 是一个高维空间𝒳 中的随机向量,隐变量𝒁 是一个相对低维的空间𝒵 中的随机向量。 这个生成模型的联合概率密度函数为: p(x,z;θ)=p(xz;θ)p(z;θ) p(\pmb{x,z};\theta)=p(\pmb{x|z};\theta)p(\pmb{z};\theta) 其中p(z;θ)p(\pmb{z};\theta)为隐变量zz的先验分布的概率密度函数,p(xz;θ)p(\pmb{x|z};\theta)为已知zz时观测变量x\pmb{x}的条件概率密度函数,θ\theta表示两个密度函数的参数。一般情况下我们可以假设p(z;θ)p(\pmb{z};\theta)p(xz;θ)p(\pmb{x|z};\theta)为某种参数化的分布族,比如正态分布,这种分布的形式已知,只是参数θ\theta未知,可以通过极大似然进行估计。 给定样本x\pmb{x},其对数边际似然函数logp(x;θ)\log p(\pmb{x};\theta)可以分解为 logp(x;θ)=ELBO(q,x;θ,ϕ)+KL[q(z;ϕ),p(zx;θ)] \log p(\pmb{x};\theta)=ELBO(q,\pmb{x};\theta,\phi)+KL[q(\pmb{z};\phi),p(\pmb{z|x};\theta)] 其中q(z;ϕ)q(\pmb{z};\phi)是额外引入的变分密度函数,其参数为ϕ\phiELBO(q,x;θ,ϕ)ELBO(q,\pmb{x};\theta,\phi)为证据下界, ELBO(q,x;θ,ϕ)=Ezq(z;ϕ)[logp(x,z,θ)q(z;ϕ)] ELBO(q,\pmb{x};\theta,\phi)=\mathbb{E}_{\mathcal{z}\sim {q(\pmb{z};\phi)}}[\log \frac{p(\pmb{x,z},\theta)}{q(\pmb{z};\phi)}] 最大化对数边际似然logp(x;θ)\log p(\pmb{x};\theta)可以用EM算法来求解。在EM算法的每次迭代中,具体可以分为两步:

线性模型

线性模型是机器学习中应用最广泛的模型,指通过样本特征的线性组合来进行预测的模型。给定一个D维样本x=[x1,,xD]T\pmb{x}=[x_1,…,x_D]^T ,其线下你给组合函数为: f(x;w)=w1x1+w2x2++wDxD+b=wTx+b f(x;w)=w_1x_1+w_2x_2+…+w_Dx_D+b=\pmb{w^Tx}+b ​ 其中w=[w1,wD]T\pmb{w}=[w_1,…w_D]^T为为D维的权重向量。直接用f(x;w)f(x;w)来预测输出目标y=f(x;w)y=f(x;w)。在分类问题中,由于输出目标yy是一些离散的标签,而f(x;w)f(x;w)的置于为实数,因此无法直接用f(x;w)f(x;w)来进行预测,需要引入一个非线性的决策函数g(.)g(.)来预测输出目标 y=g(f(x;w)) y=g(f(x;w)) 其中f(x;w)f(x;w)也称为判别函数。典型的二分类问题的结构图如下: 3.1线性判别函数和决策边界 ​ 一个线性分类模型是由一个(或多个)线性的判别函数f(x;w)=wTx+bf(\pmb{x;w})=\pmb{w^Tx}+b和非线性的决策函数g(.)g(.)构成。 3.1.1二分类 ​ 二分类问题的类别标签yy只有两种取值,通常可以设为{+1,-1}。在二分类问题中,我们只需要一个线性判别函数f(x;w)=wTx+bf(\pmb{x;w})=\pmb{w^Tx}+b。特征空间$\cal{R}$中满足f(x;w)=0f(\pmb{x;w})=0的点组成一个分割超平面,称为决策边界。决策边界将特征空间一分为二,划成两个区域,每一个区域对应一个类别。 ​ 给定N个样本的训练集$\cal{D}={(x^{(n)},y^{(n)}})^N_{n=1}$.其中yn(+1,1)y^{n}\in(+1,-1).线性模型视图学习到参数w\pmb{w^*},使得对于每个样本(xn,yn)(x^{n},y^n)尽量满足 $$ f(\pmb{x}^(n);\pmb{w}^*)>0\qquad if \quad y^{(n)}=1\ f(\pmb{x}^(n);\pmb{w}^*)>0 \qquad if \quad y^{(n)}=1 $$ 3.1.2多分类 ​ 多分类问题是指分类的类别数C大于2.多分类一般需要多个线性判别函数,但是设计这些判别函数有很多种形式。 假设一个多分类的问题的类别是{1,2,C}\lbrace1,2,…C\rbrace。常用的方式有以下三种: (1)“一对其余”方式:把多分类问题转换为𝐶 个“一对其余”的二分类问 题.这种方式共需要𝐶 个判别函数,其中第𝑐 个判别函数fcf_c 是将类别𝑐 的样本和 不属于类别𝑐 的样本分开. (2)“一对一方式”::把多分类问题转换为𝐶(𝐶 − 1)/2 个“一对一”的二分 类问题.这种方式共需要𝐶(𝐶 − 1)/2 个判别函数,其中第(𝑖, 𝑗) 个判别函数是把类 别𝑖 和类别𝑗 的样本分开. (3)“argmax”方式:这是一种改进的“一对其余"方式,共需要C个判别函数 fc(x,wc)=wcTx+bcc{1,C} f_c(\pmb{x,w_c})=\pmb{w_c^Tx}+b_c \qquad c\in\lbrace1,…C\rbrace 对于样本𝒙,如果存在一个类别𝑐,相对于所有的其他类别𝑐(̃ 𝑐 ̃ ≠ 𝑐)有𝑓𝑐(𝒙;𝒘𝑐) > 𝑓𝑐̃(𝒙,𝒘𝑐̃),那么𝒙属于类别𝑐.“argmax”方式的预测函数定义为 y=argmaxc=1Cfc(x;wc) y={argmax}_{c=1}^Cf_c(\pmb{x;w}_c)

计算机视觉中的cost volume

参考 参考文献 在文献中是这样描述cost volume: 明确:在文献中是计算图像1(目标图像)和经过warp操作后的图像2(原图像)的cost volume。cost volume也称为correlation 计算cost volume的目的是什么? 文章中是这样描述的:A cost volume stores the data matching costs for associating a pixel with its corresponding pixels at the next frame 即用于存储两张图像中各自像素之间的相似程度的。 如何计算cost volume 假设图像特征的大小为xRC×H×Wx \in \mathbb{R}^{C \times H \times W},则像素共有H×WH\times W个像素,每个像素的维度为CC,即一个像素为CC维的向量。 注意在机器学习领域中,通常将特征表示为向量的形式,所以在分析两个特征向量之间的相似性时,常用余弦相似度表示。 cos(A,B)=ABA2B2 cos(A,B)=\frac{A \cdot B}{||A||_2\cdot||B||_2} 当将向量进行归一化之后,即A2=1||A||_2=1B2=1||B||_2=1 。 此时cos(A,B)=ABcos(A,B)=A \cdot B。也就是说我们可以通过向量的点积来表示两个向量之间的相似程度。 余弦相似度的取值范围是[-1,1],相同两个向量的之间的相似度为1。 假设目标图像的维度为x1RC×H×Wx_1 \in \mathbb{R}^{C \times H \times W},原图像的维度为x2RC×H×Wx_2 \in \mathbb{R}^{C \times H \times W},那么如何计算cost volume?