PCA
基本原理
? PCA(Principal Component Analysis) 是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的主要特征分量。同时也可以理解为一个数据压缩的问题。从数学的角度看,求解主成分,其实就是根据数据源的协方差阵,求解特征根、特征向量的过程。参考网络
一个结论:主成分可以利用协方差阵的前几个最大的特征值对应的单位正交特征向量来表示。选取特征向量的数目也就是最终主成分的数目。
PCA的劣势
- PCA原理主要是为了消除变量之间的相关性,并且假设这种相关性是线性的,对于非线性的依赖关系则不能得到很好的结果。使用PCA进行线性降维后样本间的非线性相关性有可能会丢失;
- 选取主成分很少时,不足以原有的数据有很强的解释性;
- 对降维最终得到的数目,也就是潜在的隐变量的数目,不能很好的估计。
- PCA假设变量服从高斯分布,当变量不服从高斯分布(如均匀分布)时,会发生尺度缩放与旋转。
参考网络
SVM
? 支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的学习策略就是最小间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的学习算法就是求解凸二次规划的最优化算法。
问题一:SVM为什么要把原始函数转化为对偶函数?
- 原始最优化问题带有约束条件,在实际求解过程中为每一个不等式约束引入拉格朗日乘子将原始问题和不等式约束条件合并到一个式子中,更加便于SVM优化,简化计算。称合并后的式子为拉格朗日函数。
- 另一方面也可以在非线性问题中自然的引入核函数。
【核技巧应用到SVM,基本想法就是通过非线性变换将输入空间对应于一个特征空间,从而将非线性问题转换成线性问题进行求解。实际计算时,直接定义核函数而不显式定义映射函数】
问题二:SVM和逻辑回归有什么区别?
? 通常说的SVM与逻辑回归的联系一般指的是软间隔的SVM【线性支持向量机】与逻辑回归之间的关系,硬间隔的SVM【线性可分支持向量机】应该是与感知机模型的区别和联系。
- 损失函数的不同:它们的区别就在于逻辑回归采用的是 log loss(对数损失函数),svm采用的是hinge loss。
其实,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。SVM的处理方法是只考虑 support vectors,也就是和分类最相关的少数点去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重,两者的根本目的都是一样的。即SVM考虑局部(支持向量),而logistic回归考虑全局。参考网络 - 输出不同:逻辑回归通过输出预测概率后根据阈值进行判断类别,SVM则直接输出分割超平面,然后使用0/1函数对距离进行分类,不能直接输出概率值,如果需要SVM输出概率值则需要进行特殊处理,可以根据距离的大小进行归一化概率输出。
- 可完成的任务不同:逻辑回归可以使用多阈值然后进行多分类,SVM则需要进行推广。
Resnet 50——Residual net(残差网络)
? 将靠前若干层的某一层数据输出直接跳过多层引入到后面数据层的输入部分。意味着后面的特征层的内容会有一部分由其前面的某一层线性贡献。
现存问题
? ResNet已经被广泛运用于各种特征提取应用中。当深度学习网络层数越深时,理论上表达能力会更强,但是CNN网络达到一定的深度后再加深,分类性能不会提高,而是会导致网络收敛更缓慢,准确率也随着降低,即使把数据集增大,解决过拟合的问题,分类性能和准确度也不会提高。由于梯度消失,深层网络很难训练。因为梯度反向传播到前面的层,重复相乘可能使梯度无穷小。结果就是,随着网络的层数更深,其性能趋于饱和,甚至迅速下降。
核心思想
? 引入一个恒等快捷键(也称之为跳跃连接线),直接跳过一个或者多个层: ? 当有这条跳跃连接线时,网络层次很深导致梯度消失时,
f
(
x
)
=
0
,
y
=
g
(
x
)
=
r
e
l
u
(
x
)
=
x
f(x)=0,y=g(x)=relu(x)=x
f(x)=0,y=g(x)=relu(x)=x。
- 在网络上堆叠这样的结构,就算梯度消失,我什么也学不到,我至少把原来的样子恒等映射了过去,相当于在浅层网络上堆叠了“复制层”,这样至少不会比浅层网络差。
- 万一我不小心学到了什么,那就赚大了,由于我经常恒等映射,所以我学习到东西的概率很大。
注:相加是尺寸一样时才可以相加,尺寸一样时如上图;当尺寸不一样时,常通过1*1的卷积调整通道数或者是padding。
网络结构
? ResNet50有两个基本的块,分别名为Conv Block和Identity Block,其中Conv Block输入和输出的维度是不一样的,所以不能连续串联,它的作用是改变网络的维度;Identity Block输入维度和输出维度相同,可以串联,用于加深网络的。简化网络如下图所示:
神经网络
?神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向–深度学习的基础。神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。
问题一:为什么提取特征进行训练,不直接使用原始数据训练?
?以处理分类问题为例,要想完成分类问题,在原始域数据不容易分离时,就可以通过神经网络将原始域转换到特征域中便于处理。类比于引入傅里叶变换将信号从时域转换到频域后进行频谱分析,完成噪音去除等问题。
问题二:单层神经网络同样可以通过降低loss完成任务,为什么要使用深层神经网络?
? 我们常用的 Logistic regression 就可以认为是一个不含隐含层的输出层激活函数用 sigmoid(logistic) 的神经网络,显然 Logistic regression 就不是 deep 的。因此,理论上仅含一个隐含层的神经网络完全可以实现深度神经网络的效果,但是训练难度要大于深度神经网络。 ?神经网络使用隐藏层提取特征。在多层神经网络中,第一个隐含层学习到的特征是最简单的,之后每个隐含层使用前一层得到的特征进行学习,所学到的特征变得越来越复杂。low level 中每一个特征在 high level 或多或少被使用,这样对于每一个 high level 特征,只需要训练一套 low level 特征。是的,low level 特征被共用了,相当于将提取 low level 特征单独成立了一个模块,供高层调用。对于每一个 high level 特征,不需要每次都将 low level 特征训练一遍。这就是 deep 的好处。 ?深层的网络隐藏单元数量相对较少,隐藏层数目较多,如果浅层的网络想要达到同样的计算结果则需要指数级增长的单元数量才能达到。实际也证明了,在相同trainable参数条件下,deep的效果更好。换句话说,要达到相同的效果,deep所需的参数量更少。参考网络
问题三:batch_size的选取
?合适的batch size范围主要和收敛速度、随机梯度噪音有关。batch size太小,会来不及收敛。batch size太大,深度学习的优化(training loss降不下去)和泛化(generalization gap很大)都会出问题。实际使用中来看,batch_size常选取8的倍数,与配套的GPU设施也有一定的关系。
|