zoukankan      html  css  js  c++  java
  • PRML读书后记(一): 拟合学习

    高斯分布·拟合

    1.1 优美的高斯分布

    中心极限定理[P79]证明均匀分布和二项分布在数据量 $N ightarrow infty$ 时,都会演化近似为高斯分布。

    作为最晚发现的概率分布,可以假设任何不确定的实数服从高斯分布。

    对于回归问题,显然目标值 $t$ ,有 $tsim N(mu ,sigma ^{2})$ 。

    $t$ 服从的高斯分布表达形式很特殊,很有趣,也很奇妙:

    $p(t|x,w,eta)=N(t|y(x,w),eta ^{-1})$      [P140]

    即分布的均值(期望)为参数拟合值,方差为 $eta ^{-1}$。

    撇开概率不谈,拟合值 $y(x,w)$ 和 目标值 $t$ 之间通常是有误差的,来源应该有二:

    I、拟合精度问题,给定一个指定函数,若通过迭代法近似,显然梯度下降为指定函数的参数几乎是不可能的。

    这里不考虑线性回归参数可以用极大似然算出来,扩展到一个非常复杂的神经网络目标函数。

    II、数据质量不佳,比如目标值 $t^{'}$ 被人为标记错了,和正确的值 $t$ 有偏差。

    这时候,就算是100%完美拟合,最多有$ y(x,w)=t' $,显然 $t' eq t$

    那么就假设误差为 $epsilon$ , 统一定义 $t$ 的形式:

    $t=y(x,w)+epsilon  quad where quad epsilon sim N(0,eta ^{-1})$

    假设误差$epsilon$服从一个零均值的高斯分布,并且结合 $t$ 的统一形式,将这个高斯分布嵌入 $t$ 的高斯分布。

    [P29]图1.16很好的描绘了这样表达的优美之处:

    即按照高斯分布的$3sigma$规则,真实的目标值由 $t$ 在最佳拟合值 $y(x,w)$ 附近偏移得到。

    1.2 极大似然估计的病态拟合

    扩展到有N条的数据集 $(X,T)$ 中,通常假设各条数据之间是独立的,根据[P17]的独立性Product Rule:

    $P(X,Y)=P(X)P(Y)$

    则多数据点 $T$ 的高斯分布:  $P(T|X,w,eta )=prod _{i=1}^{N}N(t_{n}|w^{T}phi (x_{n}),eta ^{-1})$

    取对数之后,有:

    $ln \, p(T|X,w,eta )=frac{N}{2}lneta -frac{N}{2}ln(2pi)-eta E_{D}(w) quad where quad E_{D}(w)=frac{1}{2}sum_{i=1}^{N}{\,t_{n}-w^{T}phi (x_{n})\,}^{2}$

    $eta E_{D}(w)$ 中的$eta$没有任何意义的,可以被约去,形成LMS的目标函数$E_{D}(w)$,数学解释是假设目标值t服从高斯分布。

    在对数似然函数上做极大似然估计,若模型是简单的线性回归,则 $W_{ML}$ 可以无须通过迭代法而较为精确的算出:

    $W_{ML}=(Phi^{T} Phi )^{-1}Phi^{T}T$

    这是一个代价昂贵且不是万能的计算:

    I、$(Phi^{T} Phi )$的逆矩阵不一定存在

    II、求逆矩阵的时间复杂度达$O(n^3)$

    而且很容易被误导,只要$Phi$在宣传报道上出现了偏差,那么$W_{ML}$是要负责的,变成对 $Phi$ 的膜拜性过拟合。

    而对于复杂的神经网络而言,无法推导也无必要推导$W_{ML}$的准确形式,只需使用普适的迭代近似方法求解。

    参数·Regularizer

    极大似然估计是个好方法,但直接对$P(t|w)$做极大似然估计却是糟糕透顶。

    $P(t|w)$做极大似然估计无外乎两个步骤:先算$P(t|w,eta)$,再近似$P(w)$。

    这不是一个好主意,因为$P(w)$看起来是$P(t|w,eta)$算出的附带品,没有主动权。

    若要取得主动权,就必须对$P(w|t)$做极大似然估计,根据贝叶斯条件概率分析相关变量:

    $P(w|t)=frac{ P(t|w)P(w)}{P(t)}$

    在优化过程中,分子这样的归一化因子可以忽视,它的作用只是为了将概率归一化到[0,1]范围。

    按照[P30]的写法最能表现出贝叶斯方法的意境,似然分布与参数先验分布构成共轭双生子形式:

    $P(w|t)_{[Posterior]}propto P(t|w)\,_{[Likelihood]} cdot P(w)\,_{[Prior]}$

    按照此方法,经过后验强化的参数W受到两部分影响:

    I、观测数据本身,由似然函数$P(t|w)\,_{[Likelihood]}$

    II、先验知识约束,由注入的$P(w)\,_{[Prior]}$

    由于引入先验知识来干涉W的优化方向,此时做的极大似然估计蜕变为最大后验估计(MAP)。

    2.1 先验知识:高斯分布

    高斯分布应该算是我们认知中,描绘一切连续型数值不确定性的最基本、最硬派的先验知识了。

    甭管你是什么妖魔鬼怪,只要你是连续的,不是离散的,先给你套个高斯分布的罪状。

    当然,钦定高斯分布从数学角度是由原因的,和其优美的数学共轭形式有关。

    [P98]的练习证明了,高斯似然分布 x 高斯先验分布,结果仍然是一个高斯分布。

    (此证明需要熟读第二章关于高斯分布的 150 个公式,需要很好的概率论、线代基础。)

    高斯分布在数学形式上有许多便利,比如下面提到的零均值简化版高斯分布,这为贝叶斯方法招来很多

    恶评,[P23] 是这样解释的:贝叶斯方法广受批判的原因之一,是因为其在选取先验概率分布上,根据的是

    数学形式的便利为基础而不是 先验分布的信度

    贝叶斯方法讲究推导严谨,公式齐全,对于那些奇怪的、无法用数学语言表达原理的、广布自然界的先验知识,

    如Deep Learning思想,自然不会考虑,这也是为什么有人会认为Deep Learning与Bayesian是对着干的。[Quora]

    2.1.1 波动性惩罚:简化高斯分布

    描述服从多元高斯分布的W的基本式如下:

    $P(w)=N(w|m_{0},S_{0})$       [P152]

    $m_{0}$ 为均值向量,$S_{0}$ 为协方差矩阵,下标为0表明这是注入的先验信息,无法修改。

    在获得N个观测数据后,多元后验高斯分布的基本式如下:

    $P(w|T)=N(w|m_{N},S_{N})$    [P153]

    若W的先验分布设置为一般的多元高斯分布,那么$m_{N}$、$S_{N}$的形式会很复杂。

    考虑设置一个特殊的先验高斯分布,它很Simple:

    $N(w|0,alpha^{-1}I)$

    这个高斯分布有两个特殊之处:

    I、均值向量为0,这样就把W分布的中心定位在原点。

    II、协方差矩阵,除了对角线外,全部为0。对角线上,统一由单值$alpha^{-1}$掌管。

    尽管I、II的做法都是从数学形式角度考虑的简化,但是II中对协方差矩阵的处理带来了一个意外收获。

    首先复习一下关于协方差矩阵的特性,它有两个关键点:

    I、非对角线元素$A_{i,j}$,表明不确定元$i$、$j$之间的协方差,即$cov(i,j)$

    与协方差联系最多的就是相关系数,$ ho_{i,j}$

    $ ho_{i,j}=0$表明不确定元$i$$j$不存在线性相关,但仍然保留着线性不相关,这种简化无伤大雅。

    II、对角线元素$A_{i,i}$,正是不确定元$i$自己本身的方差。

    如果$alpha$很大,即$alpha^{-1}$很小,那么不确定元$i$无形之中受到了一种 惩罚

    这种惩罚是从方差上的压制,方差被压制为小值,意味着不确定元$i$的波动性锐减。

    波动性意味着什么?参数W的对数据的拟合的敏感性(Sensitive)。这种简化无形之中形成了这种惩罚。

    简化高斯分布在取负似然对数之后,呈现更加优美的数学形式:

    $-ln\,p(w|T)= frac{eta}{2}sum _{n=1}^{N}{t_{n}-w^{T}phi (x_{n})}^{2}+frac{alpha}{2}W^{T}W+const$    [P153式+取负对数似然]

    在优化最小值时,第一部分在尽力使误差最小化,第二部分则在尽力惩罚参数——使$W^{T}W$最小化,无限朝0逼近。

    第二部分在Regularizer机制中称为:L2 Regularizer,它的作用是减轻由于参数空间过大造成的过拟合(维数灾难型过拟合)

    既可以从高斯分布理解:对拟合不敏感了,不行了,衰了。

    也可以从$W^{T}W$最小化、维数灾难理解:尽管维数保留着,但是各维度的总轴长被控制的很小。

    考虑一个幂函数$x^{D}$,尽管$D$很大, 但是基$x$并不大,最后的函数值也就不会膨胀得很大。

    2.1.2 稀疏性惩罚:L1 Regularizer

    简化高斯共轭分布,意外地为参数W带来一种惩罚活跃度的方法,在负对数似然函数上,即附加部分的$frac{eta }{2}W^{T}W$。

    以参数W的指数形式作为Regularizer的,指数型Regularizer函数可以归纳为:

    $Regularizer(W,Q,eta )=frac{eta }{2}sum _{i=1}^{M}left | w_{i} ight |^{Q}$

    其中,$eta$为系数,决定着Regularizer的强度。$Q$为指数,决定着Regularizer的表达形式。

    当$Q=1$,变成了另一个重要的Regularizer——L1 Regularizer,它使$|W|$最小化,让W呈现稀疏0值。

    稀疏性在Deep Learning中是很重要的思想,[Glorot11]中对于稀疏性,有几个比较有趣的观点:

    I、大脑中有1000亿以上的神经元,但是同时只有1%~4%激活,而且每次激活的区域都不一样。

    这是生物神经中的稀疏性。

    II、稀疏性将原本信息缠绕密集数据给稀疏化,得到稀疏特征表达。比如将实数5,稀疏为一个[1,0,1]向量,

    很容易线性可分了。又比如识别一直鸟,只要把噪声给稀疏掉,保留关键部位,最后就有更好的特征表达。

    这是特征表达上的稀疏性,实际应用有[稀疏编码][深度神经网络],当然还有我们的生物神经网络。

    当然,以上和L1 Regularizer毫无关系,因为它稀疏的姿势错了,要不然还要Deep Learning作甚。

    首先,这个稀疏策略没有Adaptive性,它并不会智能地的发现哪里需要稀疏,哪里不需要稀疏。

    从数学规划问题角度理解,它就是一个多元的约束条件,至于哪个元倒霉到被约束至0,这个没人能确定。

    其次,参数W直接影响着模型拟合能力,对它错误地稀疏0化,会造成严重的欠拟合。

    基于以上两点,不能认为L1与L2类似,就认为L1也能缓解过拟合,实际上它更有可能造成欠拟合。

    2.1.3 L1&L2 Regularizer 图形化理解

    来自[P146]、[P107].CHS.HIT.马春鹏的有趣配图,似乎能解释为什么L1会直接得到0,而L2却是无限接近0。

    2.1.4 更好地发现特征:Adaptive Represention Regularizer

    Hinton组的[Erhan10] 认为Deep Learning的Pre-Training也是一个Regularizer,原因有二:

    其一,预训练后参数W的搜索方向,有更大可能从局部最小值中逃逸。

    其二,预训练后参数W的搜索方向,让似然函数值变大,但是得到了更好的归纳能力(测试错误率变低)。

    第一点是比较神奇的Regularizer效果,即使是身披图灵奖的Bayesian方法,也是无法解释的。

    第二点有点像是L2 Regularizer的效果,但是更大可能是与模型内部存有的Attention机制有关。

    若是固定Pre-Training之后的参数W,那么Pre-Training等效于一个非线性的PCA,预先注入了

    对无标签观测数据的先验知识,即得到了更合理的$P(W)$,这又是Bayesian方法所无法解释的。

    2.1.5 可靠的稀疏性:Adaptive Sparsity Regularizer

    Deep Learning中有两个能够自适应引入稀疏性的方法,[ReLU]&[Dropout]。

    I、[ReLU]对神经元的输出稀疏,而神经元的输出显然是可变的。

    II、[Dropout]是对神经元的输出稀疏,不过方式有点特别,采用随机概率来决定,而不是自适应方法。

    但这并不能表明[Dropout]得不到自适应稀疏,它的自适应恰恰来自于随机本身。

    由于随机性,每次网络结构都不同,这压迫了参数W朝一个稳定方向调整。

    如2.1.2分析,[I]可以认为是发现了稀疏特征,替代L1。[II]可以认为是类似生物神经网络的稀疏激活机制,替代L2。

    这两者并不冲突,所以常规Deep Learning模型中,[I]+[II]是标配手段。

  • 相关阅读:
    Web API中的消息处理程序(Message Handler)
    Web API中的模型验证
    autoconf配置的项目,编译debug版本
    gcc编译工具生成动态库和静态库之一----介绍
    VMware中四种网络连接模式的区别
    vmware虚拟机三种网络模式的区别
    code block自动生成makefile
    centos7 安装 codeblock(rpm)
    利用cbmakegen导出Code::blocks的Makefile
    C/C++程序CPU问题分析
  • 原文地址:https://www.cnblogs.com/neopenx/p/4820567.html
Copyright © 2011-2022 走看看