11个重要的机器学习模型评估指标

原文地址:https://m.toutiao.com/is/8538JJY/ 构建机器学习模型的想法应基于建设性的反馈原则。你可以构建模型,从指标得到反馈,不断改进,直到达到理想的准确度。评估指标能体现模型的运转情况。评估指标的一个重要作用在于能够区分众多模型的结果。 很多分析师和数据科学家甚至都不愿意去检查其模型的鲁棒性。一旦完成了模型的构建,他们就会急忙将预测值应用到不可见的数据上。这种方法不正确。 我们的目的不能是简单地构建一个预测模型。目的是关于创建和选择一个对样本以外数据也能做到高精度的模型。因此,在计算预测值之前,检查模型的准确性至关重要。 在这个行业中,大家会考虑用不同类型的指标来评估模型。指标的选择完全取决于模型的类型和执行模型的计划。 模型构建完成后,这11个指标将帮助评估模型的准确性。考虑到交叉验证的日益普及和重要性,本文中也提到了它的一些原理。 预测模型的类型 说到预测模型,大家谈论的要么是回归模型(连续输出),要么是分类模型(离散输出或二进制输出)。每种模型中使用的评估指标都不同。 在分类问题中,一般使用两种类型的算法(取决于其创建的输出类型): 1.类输出:SVM和KNN等算法创建类输出。例如,在二进制分类问题中,输出值将为0或1。但如今,有算法可以将这些类输出转换为概率输出。但是,统计圈并不是很乐意接受这些算法。 2.概率输出:逻辑回归( Logistic Regression ),随机森林( Random Forest ),梯度递增( Gradient Boosting ),Adaboost等算法会产生概率输出。将概率输出转换为类输出只是创建一个阈值概率的问题。 在回归问题中,输出时不会出现这种不一致性。输出本来就是一直连续的,不需要进一步处理。 例证 关于分类模型评估指标的讨论,笔者已在Kaggle平台上对BCI挑战做了预测。问题的解决方案超出了此处讨论的范围。但是,本文引用了训练集的最终预测。通过概率输出预测该问题,假设阈值为0.5的情况下,将概率输出转换为类输出。 1. 混淆矩阵 混淆矩阵是一个N×N矩阵,N是预测的类的数量。针对目前的问题,有N = 2,因此得到一个2×2的矩阵。你需要记住以下这些关于混淆矩阵的定义: · 准确性:正确预测的结果占总预测值的比重 · 阳性预测值或查准率:预测结果是正例的所有结果中,正确模型预测的比例 · 阴性预测值:预测结果是负例的所有结果中,错误模型预测的比例。 · 敏感度或查全率 :在真实值是正例的结果中,正确模型预测的比重。 · 特异度:在真实值是负例的所有结果中,正确模型预测的比重。 目前案例的准确率达到88%。从以上两个表中可以看出,阳性预测值很高,但阴性预测值很低,而敏感度和特异度一样。这主要由选择的阈值所造成,如果降低阈值,两对截然不同的数字将更接近。 通常,大家关注上面定义的指标中的一项。例如,一家制药公司,更关心的是最小错误阳性诊断。因此,他们会更关注高特异度。另一方面,消耗模型会更注重敏感度。混淆矩阵通常仅用于类输出模型。 2. F1分数 在上一节中,讨论了分类问题的查准率和查全率,也强调了在用例中选择查准率和查全率的重要性。如果对于一个用例,想要试图同时获得最佳查准率和查全率呢?F1-Score是分类问题查准率和查全率的调和平均值。其公式如下: 现在,一个显而易见的问题是,为什么采用调和平均值而不是算术平均值呢?这是因为调和平均值可以解决更多极值。通过一个例子来理解这一点。有一个二进制分类模型的结果如下: 查准率:0,查全率:1 这里,如果采用算术平均值,得到的结果是0.5。很明显,上面的结果是一个“傻子”分类器处理的,忽略了输入,仅将其预测的其中一个类作为输出。现在,如果要取调和平均值,得到的结果就会是0,这是准确的,因为这个模型对于所有的目的来说都是无用的。 这看似很简单。然而在有些情况下,数据科学家更关心查准率和查全率的问题。稍稍改变上面的表达式,包含一个可调参数β来实现该目的,得出: Fbeta衡量模型对用户的有效性,用户对查全率的重视程度是查准率的β倍。 3. 增益图和提升图 增益图和提升图主要用于检查概率的顺序。以下是构建提升图/增益图的步骤: 步骤1:计算每个样本的概率。 步骤2:按降序排列这些概率。 步骤3:每组构建十分位数时都有近10%的样本。 步骤4:计算每个十分位数的响应率,分为Good( Responders )、Bad( Non-responders )和总数。 你会获得下表,需要据此绘制增增益图或提升图: 表格提供了大量信息。累积增益图介于累计 %Right和累计 %Population图之间。下面是对应的案例图: 该图会告诉你的模型responders与non-responders的分离程度。例如,第一个十分位数有10%的数量,和14%的responders。这意味着在第一个十分位数时有140%的升力。 在第一个十分位数可以达到的最大升力是多少?从第一个表中可以知道responders的总数是3,850人,第一个十分位数也包含543个样本。因此,第一个十分位数的最大升力值可能是543/3850约为14.1%。所以该模型近乎完美。 现在绘制升力曲线。升力曲线是总升力和 %population之间的关系曲线。注意:对于随机模型,此值始终稳定在100%处。这是目前案例对应的提升图: 也可以使用十分位数绘制十分位升力: 这个图说明什么?这表示模型运行到第7个十分位数都挺好。每个十分位数都会倾向non-responders。在3分位数和7分位数之间,任何升力在100%以上的模型(@十分位数)都是好模型。否则可能要先考虑采样。 提升图或增益图表广泛应用于目标定位问题。这告诉我们,在特定的活动中,可以锁定客户在哪个十分位数上。此外,它会告诉你对新目标数据期望的响应量。 4. K-S图 K-S或Kolmogorov-Smirnov图表衡量分类模型的性能。更准确地说,K-S是衡量正负例分布分离程度的指标。如果分数将人数划分为单独两组,其中一组含所有正例,另一组含所有负例,则K-S值为100。 另一方面,如果模型不能区分正例和负例,那么就如同模型从总体中随机选择案例一样,K-S为0。在大多数分类模型中,K-S值将从0和100之间产生,并且值越高,模型对正例和负例的区分越好。 对于以上案例,请看表格: 还可以绘制 %Cumulative Good和Bad来查看最大分离。下面是示例图: 到目前为止,所涵盖的指标主要用于分类问题。直到这里,已经了解了混淆矩阵、增益图和提升图以及kolmogorov-smirnov图。接下来继续学习一些更重要的指标。 5. AUC曲线( AUC-ROC ) 这又是业内常用的指标之一。使用ROC曲线的最大优点是不受responders比例变化的影响。下文会讲得更清楚。 首先试着去理解什么是ROC(接收器操作特性)曲线。如果看下面的混淆矩阵,就会观察到对于概率模型,每个指标的值不同。 因此,对于每种敏感度,都会有不同的特异度。两者差异如下: ROC曲线是敏感度和(1-特异度)之间的曲线。(1-特异性)也称为假正率,敏感度也称为真正率。下图本案例的ROC曲线。 以阈值为0.5为例(参考混淆矩阵)。这是混淆矩阵: 如你所见,此时敏感度为99.6%,(1-特异性)大约为60%。该坐标在ROC曲线中成为点。为了将该曲线表达成数值,就要计算该曲线下的面积( AUC )。 注意,整个正方形的面积是1 * 1 = 1。因此,AUC本身就是曲线下的比值和总面积。对于那个案例,得到AUC ROC的值为96.4%。以下是一些拇指规则( thumb rules ): · 0.90-1=优秀(A) · 0.80-0.90 =良好(B) · 0.70-0.80 =一般(C) · 0.60-0.70 =差(D) · 0.50-0.60 =失败(F) 可以看出,目前的模型属于优秀范围。但也可能只是过度拟合。这种情况下,验证显得迫在眉睫了。 以下几点需注意: 1.对于作为类输出的模型,将在ROC图中用单个点表示。 2.这些模型无法相互比较,因为需要在单个指标基础上进行判断而不是多个指标。例如,具有参数(0.2,0.8)的模型和具有参数(0.8,0.2)的模型可以来自相同的模型,因此不应直接比较这些指标。 3.在概率模型的情况下,有幸能得到一个AUC-ROC的单个数字。但是,仍然需要查看整个曲线去做最终决定。又可能是一个模型在某些范围中性能更好,其他的在别的范围中更好。 使用ROC的优点 为什么要使用ROC而不是升力曲线等指标? 升力取决于人口的总响应率。因此,如果人口的响应率发生变化,同一模型将带来不同的升力图。解决这种问题的方案可以是真正的升力图(在每个十分位数处找到升力值和完美模型升力值的比率)。但这种比例很少对企业有价值。 另一方面,ROC曲线几乎与响应率无关。这是因为它有两个来自混淆矩阵柱状计算中的轴。在响应率变化的情况下,x轴和y轴的分子和分母也会有相应的改变。 6. 对数损失 确定模型性能时AUC-ROC会考虑预测概率。然而,AUC ROC存在一个问题,就是只考虑概率的顺序,因此忽略了模型对更可能是正样本预测更高概率的能力。这种情况下,可以采取对数损失,它只是每个案例修正预测概率的对数的负平均值。 · p( yi )是正类预测概率 · 1-p( yi )是负类预测概率 · yi = 1表示正类,0表示负类(实际值) 随机计算几个值的对数损失,得出上述数学函数的要点: Logloss(1,0.1)= 2.303 Logloss(1,0.5)= 0.693 Logloss(1,0.9)= 0.105 如果绘制这种关系,曲线图如下: 从斜率向右下方逐渐平缓可以明显看出,随着预测概率的提高,对数损失值逐渐下降。不过反方向移动时,对数损失快速增加而预测概率趋近于0。 因此,降低对数损失,对模型更好。但是,对于好的对数损失没有绝对的衡量标准,它取决于用例或者应用程序。 虽然AUC是根据具有不同决策阈值的二进制分类计算的,但对数损失实际上考虑了分类的“确定性”。 7. 基尼系数 基尼系数有时用于分类问题。基尼系数可由AUC ROC数直接导出。基尼只是ROC曲线和diagnol线之间的面积与上述三角形的面积之比。下面是使用公式: Gini = 2*AUC – 1 基尼系数高于60%,模型就很好。对于目前的情况而言,基尼系数的值为92.7%。 8. Concordant – Discordant ratio 对于任何分类预测问题,这也是最重要的指标之一。想要理解这个,先假设有3名学生今年有可能通过。以下是预测: A – 0.9 B – 0.5 C – 0.3 现在想象一下。如果从这三个学生中挑两对,会有多少对?将有3种组合:AB、BC和CA。现在,年底结束后,A和C通过了,而B没有。不行,选择所有配对,找到一个responder和其他non-responder。这样的配对有多少? 有两对:AB和BC。现在对于2对中的每一对,一致对( concordant pair )是responder的概率高于non-responder的。而不一致的对( discordant pair )虽情况相反但也是如此。如果两个概率相等,就称之为相当的。现在来看看案例中发生了什么: AB – Concordant BC – Discordant 因此,在这个例子中50%的一致案例。一致率超过60%会被视为好模型。在决定锁定客户数量时,通常不使用此指标标准。它主要用于测试模型的预测能力。像锁定客户数量的话,就再次采用KS图或者提升图。 9. 均方根误差 RMSE是回归问题中最常用的评估指标。它遵循一个假设,即误差无偏,遵循正态分布。以下是RMSE需要注意的要点: 1.“平方根”使该指标能够显示很多偏差。 2.此指标的“平方”特性有助于提供更强大的结果,从而防止取消正负误差值。换句话说,该指标恰当地显示了错误术语的合理幅度。 3.它避免使用绝对误差值,这在数学计算中是极不希望看到的。 4.有更多样本时,使用RMSE重建误差分布被认为更可靠。 5.RMSE受异常值的影响很大。因此,请确保在使用此指标之前已从数据集中删除了异常值。 6.与平均绝对误差相比,RMSE提供更高的权重并惩罚大错误。 RMSE指标由以下公式给出: 其中,N是样本总数。 10. 均方根对数误差 在均方根对数误差的情况下,采用预测和实际值的对数。基本上,正在测量的方差就是变化。预测值和真值都很庞大时不希望处理预测值和实际值存在的巨大差异话通常采用RMSLE。 1.如果预测值和实际值都很小:RMSE和RMSLE相同。 2.如果预测值或实际值很大:RMSE> RMSLE 3.如果预测值和实际值都很大:RMSE> RMSLE(RMSLE几乎可以忽略不计) 11. R-Squared/Adjusted R-Squared 已经知道RMSE降低时,模型的性能将会提高。但仅凭这些值并不直观。 在分类问题的情况下,如果模型的准确度为0.8,可以衡量模型对随机模型的有效性,哪个准确度为0.5。因此,随机模型可以作为基准。但是在谈论RMSE指标时,却没有比较基准。 这里可以使用R-Squared指标。R-Squared的公式如下: MSE(模型):预测值与实际值的平均误差 MSE(基线):平均预测值与实际值的平均误差 换言之,与一个非常简单的模型相比,回归模型可以说很不错了,一个简单的模型只能预测训练集中目标的平均值作为预测。 Adjusted R-Squared调整后的可决系数(参考) 模型表现与baseline相同时,R-Squared为0。模型越好,R2值越高。最佳模型含所有正确预测值时,R-Squared为1。但是,向模型添加新功能时,R-Squared值会增加或保持不变。R-Squared不会因添加了对模型无任何价值的功能而被判“处罚”。因此,R-Squared的改进版本是经过调整的R-Squared。调整后的R-Squared的公式如下: k:特征数量 n:样本数量 如你所见,此指标会考虑特征的数量。添加更多特征时,分母项n-(k +1)减小,因此整个表达式在增大。 如果R-Squared没有增大,那意味着添加的功能对模型没有价值。因此总的来说,在1上减去一个更大的值,调整的r2,反而会减少。 除了这11个指标之外,还有另一种检验模型性能。这7种方法在数据科学中具有统计学意义。但是,随着机器学习的到来,我们现在拥有更强大的模型选择方法。没错!现在来谈论一下交叉验证。 虽然交叉验证不是真正的评估指标,会公开用于传达模型的准确性。但交叉验证提供了足够直观的数据来概括模型的性能。 现在来详细了解交叉验证。 12.交叉验证(虽然不是指标!) 首先来了解交叉验证的重要性。由于日程紧张,这些天笔者没有太多时间去参加数据科学竞赛。很久以前,笔者参加了Kaggle的TFI比赛。这里就不相信介绍笔者竞赛情况了,我想向大家展示个人的公共和私人排行榜得分之间的差异。 以下是Kaggle得分的一个例子! 对于TFI比赛,以下是个人的三个解决方案和分数(越小越好): 可以注意到,公共分数最差的第三个条目成为了私人排行榜上的最佳模型。“submission_all.csv”之前有20多个模型,但笔者仍然选择“submission_all.csv”作为最终条目(实践证明确实很有效)。是什么导致了这种现象?笔者的公共和私人排行榜的差异是过度拟合造成的。 模型变得高度复杂时,过度拟合也会开始捕捉噪音。这种“噪音”对模型没有任何价值,只会让其准确度降低。 下一节中,笔者将讨论在真正了解测试结果之前,如何判断解决方案是否过度拟合。 概念:交叉验证 交叉验证是任何类型数据建模中最重要的概念之一。就是说,试着留下一个样本集,但并不在这个样本集上训练模型,在最终确定模型之前测试依据该样本集建立的模型。 上图显示了如何使用及时样本集验证模型。简单地将人口分成2个样本,在一个样本上建立模型。其余人口用于及时验证。 上述方法会有不好的一面吗? 这种方法一个消极面就是在训练模型时丢失了大量数据。因此,模型的偏差会很大。这不会给系数做出最佳估测。那么下一个最佳选择是什么? 如果,将训练人口按50:50的比例分开,前50用于训练,后50用于验证。然后两组颠倒过来进行实验。通过这种方式,在整个人口基础上训练模型,但一次只借用50%。这样可以减少偏差,因为样品选择在一定程度上可以提供较小的样本来训练模型。这种方法称为2折交叉验证。 k折交叉验证 最后一个例子是从2折交叉验证推断到k折交叉验证。现在,尝试将k折交叉验证的过程可视化。 这是一个7折交叉验证。 真实情况是这样:将整个人口划分为7个相同的样本集。现在在6个样本集(绿色框)上训练模型,在1个样本集(灰色框)上进行验证。然后,在第二次迭代中,使用不同的样本集训练模型作为验证。在7次迭代中,基本上在每个样本集上都构建了模型,同时作为验证。这是一种降低选择偏差、减少预测方差的方法。一旦拥有所有这7个模型,就可以利用平均误差项找到最好的模型。 这是如何帮助找到最佳(非过度拟合)模型的? k折交叉验证广泛用于检查模型是否是过度拟合。如果k次建模中的每一次的性能指标彼此接近,那么指标的均值最高。在Kaggle比赛中,你可能更多地依赖交叉验证分数而不是Kaggle公共分数。这样就能确保公共分数不单单是偶然出现。 如何使用任何型号实现k折? R和Python中的k折编码非常相似。以下是在Python中编码k-fold的方法: from sklearn import cross_validation model = RandomForestClassifier(n_estimators=100) #Simple K-Fold cross validation. 5 folds. #(Note: in older scikit-learn versions the "n_folds" argument is named "k".) cv = cross_validation.KFold(len(train), n_folds=5, indices=False) results = [] # "model" can be replaced by your model object # "Error_function" can be replaced by the error function of your analysis for traincv, testcv in cv: probas =...
Read More

如何写论文

最近大家开始写论文,现在这里写一个大概的写作步骤,随后每个人都可以随时补充。 写论文大体可以分为如下步骤,作为本文的目录吧: 1 方向 2 文献阅读 3 想法 4 想法验证 5 逻辑梳理 6 文档梳理 7 投稿 以下一步一步来讲: 1 方向 大家的方向大多是我给出来的,这个一般不需要过多考虑。需要明确的是这个方向是要做什么。比如做帕金森这个方向,其目的就是可靠的帕金森诊断。那么细分起来,就分为了如何提高精度和如何提高可靠性两个方面。目前我们组内提高精度采用的是以Hog为基本方法的一系列算法,可靠则是在看Max的论文,以及考虑后期采用属性拓扑的概念方法进行结构构造。 2 文献阅读 这个工作是大家最容易忽略的,很多同学都想跳过这一步直接就去做后面的内容。但事实是:出来混早晚要还。大家一定记住:一见钟情且能幸福一生这种事情是童话的桥段,在现实生活中出现的概率很低。所以,踏踏实实的读文献,是必须的。 说一下读文献的目的: 第一,要了解国内外研究现状。一定注意,这里说的是“现状”。有些同学在本科阶段形成了很不好的习惯,就是随便抄一抄文献综述。这在研究生阶段是不可以的。还以帕金森为例,了解现状的标准是自己能闭着眼睛说出这个领域目前谁是最牛的(看谁的文献被提到最多),他们最近的研究成果是什么(可关注作者的google scholar),这个领域当前最热门的研究方法是什么,这个领域的论文在什么期刊发表最多? 第二,要了解这个领域内的通用内容。比如这个领域内都用什么数据集,是否有基准对比方法,用什么评价指标,领域内大体是什么水平,怎么做实验,怎么讨论?这些内容对大家非常有用。当自己有了想法后要进行验证,有了这些内容会帮助大家快速评估自己的想法是否有用。同时,任何论文或成果都是需要比较的,这些通用内容就是标尺。 第三,要了解当前各种方法的优缺点。注意,这里一定是新方法。如果找的方法是很多年前的,那么一定要看看这个文章被谁引用过,他们在这个基础上是否有改进。所以,最好的方法是找新论文。关于各方法的优缺点,所有的论文都会说自己的有点(摘要、引言最后、讨论、结论),也有一部分会说自己的缺点(讨论、结论)。这个时候一定要做到兼听则明,要多看文献相互之间的评价。虽然不一定真实,但一定可以参考。 第四,这个领域内的专业名词应该都会了才对。不能再挨个查字典了。 只有以上几点都烂熟于心,才说明完成了基本的阅读量。注意,此处的阅读量不是指数量,是指质量。 说一下阅读容易犯的几个错误: 第一,只看百度、知乎和csdn这类科普文章。科普文章可以在一开始帮助理解,但如果一直看科普,说明一直也没有进入到研究环节。建议大家看几个这个科普之后,无论是否理解了,一定要找文献来读,通过文献与科普的交叉来提升交替上升理解水平。 第二,只看中文文章。很多同学惧怕英文不敢去碰英文,所以只看中文。绝大部分的中文论文是没有营养的,这个和爱国无关。写论文的目的是传播自己的成果(也就是吹牛),中文的受众和英文的受众哪个大?同样是做一次广告,当然要让全世界都能看懂才好啊。这里别和我抬杠说中国人不看英文,真正做研究的中国人都是看英文的。只有lazybones和loser才不去读。如果你非要读中文,就看看学校期刊目录中的1A期刊,其他的没啥参考价值。 第三,英文文章至上。并非所有的英文都是好文章。除了那几个业界大牛,大家还是读高档次期刊的论文吧。什么是高档次?中科院期刊分类一区和二区的才算,其他都不算。至于英文会议,除了国际公认的顶级会议,其他根本不用看。顶级会议目录可以查询CCF。大多数的会议是滥竽充数的。 第四,乱用翻译软件。觉得翻译软件把英文翻译为中文看会舒服些,却不知道那样做的结果是失去太多信息。即便是高级翻译,对语言每翻译一次也会损失很多信息,何况是机器翻译。所以,宁可头疼一个月,把英文文献读下来,今后就好了。 下面说一下方法: 首先,文献要粗读与精读结合。不可能每一篇文献都去精读,谁也没有那个精力。第一遍读论文,仔细读一读摘要,大概看一看引言,了解这篇论文要说什么,为什么这么说之后直接去读实验。实验也不需要太细的读。当你掌握了领域内的基本实验方法之后,直接看实验结果和讨论。如果觉得结果不错且讨论有点意思,再回去精读方法部分。否则可以先存放起来,今后再说。 其次,要建立知识网络。很多时候读论文是由一篇论文而起,然后顺着参考文献去读其他论文。这个时候就可以给自己用脑图软件画一个阅读的路径了,同时标注好每篇论文的优缺点与你自己的思考。这就是你今后论文引言的基本来源。 最后,综合读过的内容,总结一下现在存在的问题,就可以提出自己的想法了。 3 想法 根据文献阅读结果可以找我讨论,一起来分析用什么方法比较合适。一开始想想法的时候可以天马行空,但最后一定要言而有据。此处最忌讳的就是横着脖子说别的方法就是不好,那时街头老太太打架,不是我们做学术。 比如有人说:“A方法性能太差,所以我提出B方法来提升性能”。这是不可以的。A性能差不能成为你踩他的理由。正规的方法是:“文献A采用MFCC方法对帕金森语音信号进行特征提取取得一定效果。但MFCC为根据听觉特性突出频谱低频段【此处配个参考文献说MFCC突出低频频段的】,而文献【】认为帕金森病语音障碍主要表现在频谱高频段。因此,采用MFCC方法进行分析,可能造成高频信息损失,从而导致性能下降。基于此,本文提付出****方法,对频段做统一处理(或突出高频处理),从而*****,达到******。” 这样一写,是不是就有理有据了?注意,我句子中所有的原因部分都是从参考文献中来的,这样别人就不会挑我的毛病了。唯一需要注意的就是那个参考文献真的说了那句话,不要给别人编造。 大多数的时候,我会给大家一个建议想法。注意,这个想法不一定就是对的。如果我已经知道了它是对的,也就不用你研究了。所以,大家拿到想法后,第一任务就是理解我的意思。 很多同学在这个阶段其实没听懂我说的话,但不好意思提出来。怎么办?回去自己闷被窝苦思冥想。还想不明白就去打把游戏放松一下。这样一放松几个月过去了,时间都荒废了。最好的办法是:没听懂当时就提出来,我给你再讲一遍。讲的时候你要录音,以防丢失关键信息(因为刚刚入门,还不掌握重点,理解会有偏差)。如果还没听懂,说明你文献阅读还不够。 这个时候,要找师兄师姐请教。毕竟他们和我在一起时间长,理解更透彻一些。或者顺着我说的关键词再看几篇文献,看看能不能理解。 如果三天以上还不理解,一定要再找我。直到自己理解了为止。 有时候大家会提出一些想法,这是相当好的。但需要注意的是表述清楚。建议大家把自己的想法用图的方式画出来,把想法的来龙去脉用文字或图写清楚,这样我们好讨论。最怕的就是有些同学拿来一张白纸,随便画了几条线,嘴里全是:“这样之后就那样”这样的指代词语句,把我绕的绕梁三日下不来,还不好意思打消你积极性。所以,建议大家养成把想法用语言或图形表达出来的好习惯,这对于你今后工作汇报也很有用,是职场的基本技能。 4 想法验证 刚刚说了,我的想法不一定就是对的。这就需要大家去证明或证伪了。 验证从两个角度去做: 第一,从可行性角度。有时候我的想法不一定可行。比如,这个想法别人提出来过了,但我没看到。所以大家第一件事就是去查这个想法别人有没有。如果有类似的,他们是怎么做的,和我们的差别在哪里。如果没有,我的想法的基础是否有论文支撑。比如摇荡预测,我提出来用小波,后来一查小波有了。但我的小波是要对不同频段加权的,这个没有。只有对时间关注的模型。看,这就找到了和现有文献的交叉点。时域的关注度Lstm可以作为我们的基础文献,在这个之上,我们可以说我们发现了lstm对频率的动态范围不足问题,所以我们采用小波的频率分解,然后再加权频率。这样就顺理成章的把我们的想法写出来来了。如果别人有,也不怕,因为总会有差别,而且他的实验部分会给我们新的启发。 第二,正确性角度。有了理论可行,实验结果不一定真的好。这就需要证明了。证明方法一般就是实验。根绝我的想法编程,然后用从文献中学到的实验方法去做实验,和对比方法或基准方法作对比,来看看这个想法是否真的可行。如果可行,那么就要分析为什么就好了呢?原因在哪里?如果发现不行,那么我们就要考虑是哪里出了问题,需要从哪个点进行改进。绝大多数的时候,都可以改的比对比文献好。不用问为什么,因为他是死的,而且他是解剖好给我们看的。我们的方法不好,我们把他好的部分拿来与我们的结合,大概率会超过他。所以,不用怕结果有问题,那说明分析的不够。 这里特别指出的是属性拓扑中证明性问题,有时候发现真的错了。那样错了就是错了,没办法。查漏补缺,继续改。 想法验证的每一次实验都要做好实验记录,都要做好实验记录,都要做好实验记录!!!因为你也不知道下一次什么时候这个记录就会有用了。这是科研工作的基本要求,也是基本素养。这个问题我一直在强调,大家也都敷衍说在记录。打算开学后检查一次,没有的按欺君之罪处理———罚请全课题组聚餐一次。 5 逻辑梳理 其实,以上工作如果每一步都做好记录,这个时候一篇论文就基本成型了。 比如: 引言部分就是想法的可行性验证,结合你文献阅读形成的国内外现状,梳理一下就可以。 方法部分就是你的程序啊。所不同的是:程序用代码写,方法用公式写。其实还是一套东西。这里需要注意的是大家都用Python,并不是把Python的模块一摆就可以了,而是需要把里面的内容变为理论描述出来。同时要把各部分有机的融为一体。往往在这个时候,会有一些新想法。如果改动不大,可以尝试;如果改动大,记下来以后再说。饭要一口一口吃,不能一口吃个胖子。 实验结果就是你的实验记录,讨论其实就是实验分析。想想引言中踩了谁,怎么踩的,这里需要用实验数据分析一下你踩的有道理了。 结论就不说了,大多数是客气一下。 看看,如果每一步都按照要求做,是不是挺容易的?这唯一需要强调的就是:逻辑! 在这一步梳理的时候大家有时候容易着急,所以把很多事情当成了想当然。但你要知道,你不交代的事情读者是不知道的(基本常识除外)。所以,一定要把来龙去脉说清楚。最简单的评价标准是:你的每一个观点都有论据支撑,而最终所有的原始论据都出自明确标注的参考文献或来自公理。这样通过逐步推导形成你的结论,这才是论文中应该有的逻辑链条。万不可对读者撒娇,用"我觉得“这样的态度却写作,那样必死无疑。 另外一个逻辑问题是详略要得当。大家有时候会觉得我好不容易学会了傅里叶变换,我在论文中一定要使劲写。这样就大错特错了。实际上,你从别的地方学到了这个内容,恰恰说明你的论文中不应该有这个东西才对啊。为了完整性,你可以简单介绍几句,然后给个参考文献标注就好了。你的重点应该在于你自己的创新部分啊。比如,多尺度关注度模型,应该描述是如何实现的这种多尺度关注,这是一个整体,而不能简单拆解为多尺度+关注度。你需要阐述对于多尺度的关注度我该怎么设计(从多尺度的与普通信号的区别谈起),设计过程中由于多尺度的什么特性,使得我关注度设计中要采用什么方法与之匹配。这样匹配的依据是什么,应该有一些公式推导或定理证明,最终形成了一套多尺度的关注度机制。看到了吧,这就要求不能对现在方法直接照搬,需要从底层理解现有方法的原理(我说的不是科普文档中那几个可怜的公式,而是整套的推导),然后进行针对性的调整。定制的才是最值钱的。都用tensorflow,那是玩积木,没啥技术含量。 6 文档梳理 上面只是做了一个逻辑上的梳理,其实这个时候还不是论文,充其量是论文的骨架。 在这个节点上,务必和我讨论一次,以防论文跑偏。我会帮大家捋顺论文中的重点内容和亮点信息,提炼论文中的科学问题。也就是对大家的提纲进行调整。所以,大家给我看的提纲应该是你们心里有数的提纲,最好是带上了各种图表的。我可以作为审稿人的角度帮你把关。但如果你只拿了几个放之四海而皆准的标题过来,对不起,为师也猜不出来你在想什么。 大家在文档的梳理阶段容易犯的最大问题是:过渡。 并非把所有材料直接放上就好,在段与段之间、局与局之间是需要过渡的。好了,过渡的作用和方法不展开讲了,大家感兴趣请翻看小学语文课本。 另外,大家在整理文档时不用想着一次成功,那基本不可能。一般情况下,文档整理好之后要自我通读几次。比如,在写讨论时发现引言文献不合适,在写引言时发现讨论内容跑偏了,在写实验时发现方法中少写几个变量。这都是很常见的。3-5遍的反复修改是正常的。如果觉得能一次写好后一字不改,请移步其他团队,目前我的水平指导不了。 7 投稿 投稿的过程其实是在想法验证阶段就开始的。那时候就要考虑这篇论文写好后投到哪个期刊。 期刊的选择一般采用对比原则。比如:你踩的文献是1区的,你也可以投这个期刊或其他1区的期刊。不行的话再转投2区。如果你看的文献是4区的,对不起,你的论文能发表的3区以上的机会微乎其微,除非你做了重大的突破。另外,就是找相近的。比如IJAR里经常发表FCA的文章,那我们就往那里去投。这个时候我们引用的期刊是谁就没那么重要了。这也会是阅读论文的好处。 然后,就是常规性的体力劳动:根据期刊要求具体修改论文格式、内容等,不多说了。 最后,强调一点:大家不要用我的邮箱去任何网站注册。目前有两个期刊被注册过,导致我们无法再去投稿。是的,有些期刊就是这么不讲道理,不需要我同意的。所以,大家用自己的信息注册自己的账号。还有,就是不要总是尝试投稿系统。有些投稿系统点击下一步就自动提交了,没有确认提示的。所以,填写进去的每一个信息都应该是正确的。最后,如果有机会,在确认投出之前我再看一眼。以前发现了太多投稿过程中的低级错误。这些错误往往是致命的。 暂时先写这么多,没想到的地方任何人都可以补充。目的是大家一起完成一篇文章,帮助所有成员少走弯路,尽快进步。...
Read More

如何读一篇论文

本周对causal bootstrapping这篇论文再次梳理。客观的说,在此之前我对本文涉及到的知识点并不了解,有点类似于大家接触到新课题的状态。我能确定的是,这可能是一种新的知识发现或推理方法。 为此,我做了如下准备: 第一,复习bootstrapping. 虽然bootstrapping这个东西在以前看过,知道他是random forest的基础,而且其中融合了蒙特卡洛采样这样的思想,但没有深入思考过。这次,通过资料仔细思考了为什么bootstrapping会有用。 从本质上考虑,bootstrapping不就是缩小世界的模型吗?在原始抽样中,我们是从现实世界抽样得到数据样本,然后用数据样本去做训练,对不对?但原始世界到底是什么样?没人知道。抽样的结果是否满足采样定理?有些领域是知道的,但大多数领域还不知道。这也是为什么现在的机器学习总喜欢用大样本的原因。因为大样本意味着尽可能多的在原始世界中进行采样,这样有可能增大采集样本对原始世界的描述能力。但同时,有人对big data这个词给出了这样一个解释:在大量样本中抽取极少的信息。换句话说,big data意味着信息含量低。这说明什么?说明我们都到的样本很多都是重复的和没有用的。但究竟该怎么抽?目前还不知道。 不去考虑真实世界的问题,回到已经有的数据集上吧。假设这个就是一个完整的真实世界。如何去模拟这样一个认为的世界呢?还是抽样。在交叉验证中,我们是随机抽去了世界的80%(5倍交叉)、90%(10倍交叉)等等,形成模型,然后去测试。但bootstrapping认为,这么抽取是有问题的。万一你采样的样本都特别典型或不典型呢?当然,在交叉验证中可以用方差描述,但方差是评估的,不是避免的。bootstrapping实际上是给出了一种避免偏差的方法。 想想我们曾经在组会上讨论过的用蒙特卡洛方法计算一张A4纸上任意图形面积的方法就能明白bootstrapping的本质了。往纸上撒大米然后看看落到图形中的大米比例,从而推断图形面积大小,对不对?但问题是,万一你这次没撒均匀怎么办(前提是你也不知道自己是否撒均匀了,因为在数据模型中你不知道这个纸的分布和图形分布的关系)?那就多撒几次求平均呗。没错,这个就是bootstrapping的想法。在样本集中多采样几次(撒大米),然后用每次采样的结果都进行计算(看落入图形的比例),最后把每次的结果汇总起来分析(求平均)。当然,在bootstrapping中,最后一步不一定是求平均这种等权重处理,也可能是用不同的权重来操作。那么权重怎么来?这篇论文就是用causal方法来的。也是这篇论文的思想。 第二,学习因果推理 因果推理我们曾经做过一点,但那次实质是充要条件分析,还构不成因果。沿着这篇论文的思路,找到了图灵奖得主Pearl的一系列研究成果,其主要是基于贝叶斯网络的因果图推理。有幸,在放假前曹玉阳同学还找到了《the book of why》这本书的电子版,配合网上的一些资料,构成了我对因果推理的一点了解。 我是先粗读了一遍causal bootstrapping这篇论文之后才开始学习因果的,目的是找出我需要再因果推理中学习什么。经过分析,我发现do算子、混杂(confound)、介入(intervention)、前门准则、后门准则是这篇论文的高频词,和因果有关,同时我不懂。所以这些是我需要学习的。看看,我先对论文做了一次采样,然后需要的是根据这个采样去学习了。 好在大多数材料是英文的,这样在专业词汇上就做到了统一。而且能通过构词法去理解作者用这个词来定义这件事的原因,这就比读中文文章能够更为直接的和作者沟通。同时,也锻炼了自己的英文阅读。从一开始的每天3个小时读5页左右,到现在半个小时5-8页,进步的速度我还是满意的。而且随着词汇的熟悉,我查字典的次数越来越少了。 the book of why这本书的好处最大的好处是科普读物,对于任何一个问题作者会反复的举例子让你明白其到底是怎么回事,而且会从历史上讲这件事的来龙去脉。读了这样的书,对问题的理解要比读论文深刻多了,毕竟他比较生动。但同时,其知识含量有点低,当做课外书来读可能更合适。所以,我配合了一些网络教程来学习。包括20分钟左右将贝叶斯网络的(快速了解其原理)、分为14讲讲概率图模型的(了解推理的细节)、知乎或csdn上的文字介绍(梳理总结)。学习完了这些之后,我对因果推理有了大体的了解(通过各种绪论、引言),对我需要的具体内容有了细致了解(通过推导),我觉得我可以再看这篇论文了。 以上就是我为读这篇论文做的准备。其实并不难,就是看看自己现有的知识体系和论文的体系间交集是什么,差集是什么。然后去填补差集,争取做到交集最大且差集最小。形成这样的目标函数之后就去学习,当迭代几次之后觉得已经收敛(不一定到达全局最优),就可以开始再去论文了。 这一次是细读,大约用了三天时间。读的时候关注了以下几点: 第一,作者的写作方法。客观的讲,我觉这篇写作挺怪的,可能由于这不是一篇正式发表的论文的原因吧。但前面的引言和后面的相关方法上还是给了很多启示。同时,作者对其涉及到的公式要么给出了出处,要么在文中或附录给出了证明过程。这一点非常值得我们学习。也是我经常强调的:不要去说没有论据的论点。 第二,作者的主题思想,到底怎么理解作者所谓的因果。其实,我觉得作者只是deconfound,而不是真正的因果。比如,他的实验是这么做的,以文中的帕金森实验为例吧,这个是我和曹玉阳在讨论deconfound与non confound的一段批注: " 首先,找了三个数据集。这三个数据集是不同人采集的。采集条件不同,会造成对于同样一个特征,其计算结果会有偏差(比如采集时对噪声的控制,如果噪声大的话其信噪比就会低,那么和噪声相关的特征比如HNR等就会不同)。作者是把这种偏差作为了confound来使用的。 第二步,deconfound。目的就是排除由于采集不同带来的偏差。这个用字符识别的例子比较好。在字符识别中,如果给不同的字符不同的亮度,用这个网络训练出来的结果是不可信的。因为网络可能把亮度当做了特征,这样就造成了high risk. 第三,关于non-confound,我觉得相当于ground truth. 第一个实验中就是没有加入噪声的原始模型,第二是可以是没有亮度干扰(或随机亮度干扰)的图片,第三个则是对特定数据集而非混合数据集。 所以,deconfound是在confound基础上做去除的结果,而non是根本就没有。相当于去噪声信号和理想信号的差别。 为什么要deconfound? 就是为了消除关联关系对结果的影响。比如实验中的亮度与数字,书中提到的溺水人数与冰激凌销量,这些都是关联,而不是因果。采用关联分析在所有条件都不变的时候分类性能是好的。原因在于经典机器学习认为数据是独立同分布的,所以训练集和测试集分布一样。但真实情况下这种关系并不稳定。比如,把在秦皇岛统计的溺水人数与冰激凌销量放到新疆就会失效。原因就在于分布发生了变化。 而对于因果分析来说,理论上他会从“游泳方便程度->溺水人数->气温->冰激凌销量”这样的关系中得出冰淇淋销量与溺水人数不相关。至于和谁相关,就是前门法则、后门法则等讨论的内容了。 " 同时,曹玉阳问到了和batch norm的区别,我的答复: " 二者的目的都是为了更稳定,但出发点是不一样的,所以本质不同。 你的这个例子其实和文章中数字与亮度的问题是一样的。如果所有对猫的训练都是用黑猫,他可能识别一只彩色的猫吗?可能。但如果你的训练样本中是黑猫、黑狗和黄狗,这时你给它一只黄猫的图片,神经网络的内心是崩溃的。因为它会发现两个类都有可能,最终的输出就不一定是什么了。(此段为我自己理解,可能有误) " 但对于deconfound来说,他会发现你现在要识别的是猫和狗,这个和颜色无关,所以会把颜色这个特征先deconfound掉,然后再送给分类器去学习。那么此时分类器学到的结果就更可靠了。 所以,BN并没有达到因果的目的。 但这里要说明,从我读到的资料看deconfound要依赖casual diagram,而这个diagram往往是专家人工指定的。如何自动生成是个diagram?我还没看到。这也是我对这篇论文感兴趣的原因。 其实,对于稳定性我们也在做另一套思路,就是属性拓扑。 属性拓扑目前我们在用概念树来表示,概念树中的概念就会随着数据的变化而发生变化,从而趋近更为稳定的结构。这就是目前荣美和浩然在做的东西。概念虽然也是从相关性中提取,但其可能发现更为本质的东西。比如黑猫、黑狗和黄狗的例子,当它打算把黑色作为猫的特征时,会反思训练集中还有谁是黑色的。此时它发现还有黑狗,于是概念结构中会把黑色排除出猫的概念。 但概念结构的问题也很明显。还是上面这个例子,它会发现所有的黄颜色对象都是狗,且狗都是黄颜色。那么当来了一个黄猫时,它可能会误判为狗。此时它和神经网络的错误是一样的。 我在考虑,casual diagram和属性拓扑都是图结构,现在属性拓扑可以算概念,那么能不能把casual diagram的deconfound方法借鉴到属性拓扑,从而使得其获得因果概念结构呢? 我在读论文的过程中写了很多批注,这个批注版我会发到群共享中。总结起来,这个论文的收获:通过设计deconfounded方法改变数据分布,获得更为本质的数据相关性。但其问题在于对confounder的设定要满足提前已知的要求,所以其今后的可扩展性还有待分析。 ...
Read More

普鲁斯特问卷

1.你认为最完美的快乐是怎样的? 2.你最希望拥有哪种才华? 3.你最恐惧的是什么? 4.你目前的心境怎样? 5.还在世的人中你最钦佩的是谁? 6.你认为自己最伟大的成就是什么? 7.你自己的哪个特点让你最觉得痛恨? 8.你最喜欢的旅行是哪一次? 9.你最痛恨别人的什么特点? 10.你最珍惜的财产是什么? 11.你最奢侈的是什么? 12.你认为程度最浅的痛苦是什么? 13.你认为哪种美德是被过高的评估的? 14.你最喜欢的职业是什么? 15.你对自己的外表哪一点不满意? 16.你最后悔的事情是什么? 17.还在世的人中你最鄙视的是谁? 18.你最喜欢男性身上的什么品质? 19.你使用过的最多的单词或者是词语是什么? 20.你最喜欢女性身上的什么品质? 21.你最伤痛的事是什么? 22.你最看重朋友的什么特点? 23.你这一生中最爱的人或东西是什么? 24.你希望以什么样的方式死去? 25.何时何地让你感觉到最快乐? 26.如果你可以改变你的家庭一件事,那会是什么? 27.如果你能选择的话,你希望让什么重现? 28.你的座右铭是什么? ...
Read More

变分贝叶斯算法理解与推导 Variational Bayes

原文地址: http://blog.huajh7.com/2013/03/06/variational-bayes/ 前言 上世纪90年代,变分推断在概率模型上得到迅速发展,在贝叶斯框架下一般的变分法由Attias的两篇文章给出。Matthew J.Beal的博士论文《Variational Algorithms for Approximate Bayesian Inference》中有比较充分地论述,作者将其应用于隐马尔科夫模型,混合因子分析,线性动力学,图模型等。变分贝叶斯是一类用于贝叶斯估计和机器学习领域中近似计算复杂(intractable)积分的技术。它主要应用于复杂的统计模型中,这种模型一般包括三类变量:观测变量(observed variables, data),未知参数(parameters)和潜变量(latent variables)。在贝叶斯推断中,参数和潜变量统称为不可观测变量(unobserved variables)。变分贝叶斯方法主要是两个目的: 近似不可观测变量的后验概率,以便通过这些变量作出统计推断。 对一个特定的模型,给出观测变量的边缘似然函数(或称为证据,evidence)的下界。主要用于模型的选择,认为模型的边缘似然值越高,则模型对数据拟合程度越好,该模型产生Data的概率也越高。 对于第一个目的,蒙特卡洛模拟,特别是用Gibbs取样的MCMC方法,可以近似计算复杂的后验分布,能很好地应用到贝叶斯统计推断。此方法通过大量的样本估计真实的后验,因而近似结果带有一定的随机性。与此不同的是,变分贝叶斯方法提供一种局部最优,但具有确定解的近似后验方法。 从某种角度看,变分贝叶斯可以看做是EM算法的扩展,因为它也是采用极大后验估计(MAP),即用单个最有可能的参数值来代替完全贝叶斯估计。另外,变分贝叶斯也通过一组相互依然(mutually dependent)的等式进行不断的迭代来获得最优解。 问题描述 重新考虑一个问题:1)有一组观测数据DD,并且已知模型的形式,求参数与潜变量(或不可观测变量)Z={Z1,...,Zn}Z={Z1,...,Zn} 的后验分布: P(Z|D)P(Z|D)。 正如上文所描述的后验概率的形式通常是很复杂(Intractable)的,对于一种算法如果不能在多项式时间内求解,往往不是我们所考虑的。因而我们想能不能在误差允许的范围内,用更简单、容易理解(tractable)的数学形式Q(Z)来近似P(Z|D)P(Z|D),即 P(Z|D)≈Q(Z)P(Z|D)≈Q(Z)。 由此引出如下两个问题: 假设存在这样的Q(Z)Q(Z),那么如何度量Q(Z)Q(Z)与P(Z|D)P(Z|D)之间的差异性 (dissimilarity). 如何得到简单的Q(Z)Q(Z)? 对于问题一,幸运的是,我们不需要重新定义一个度量指标。在信息论中,已经存在描述两个随机分布之间距离的度量,即相对熵,或者称为Kullback-Leibler散度。 对于问题二,显然我们可以自主决定Q(Z)Q(Z)的分布,只要它足够简单,且与P(Z|D)P(Z|D)接近。然而不可能每次都手工给出一个与P(Z|D)P(Z|D)接近且简单的Q(Z)Q(Z),其方法本身已经不具备可操作性。所以需要一种通用的形式帮助简化问题。那么数学形式复杂的原因是什么?在“模型的选择”部分,曾提到Occam’s razor,认为一个模型的参数个数越多,那么模型复杂的概率越大;此外,如果参数之间具有相互依赖关系(mutually dependent),那么通常很难对参数的边缘概率精确求解。 幸运的是,统计物理学界很早就关注了高维概率函数与它的简单形式,并发展了平均场理论。简单讲就是:系统中个体的局部相互作用可以产生宏观层面较为稳定的行为。于是我们可以作出后验条件独立(posterior independence)的假设。即,∀i,p(Z|D)=p(Zi|D)p(Z−i|D)∀i,p(Z|D)=p(Zi|D)p(Z−i|D) Kullback-Leibler散度 在统计学中,相对熵对应的是似然比的对数期望,相对熵 D(p||q)D(p||q) 度量当真实分布为 P而假定分布为Q时的无效性。 定义 两个概率密度函数为p(x)p(x)和q(x)q(x)之间的相对熵定义为 DKL(p||q)=∑xp(x)logp(x)q(x)DKL(p||q)=∑xp(x)log⁡p(x)q(x). KL散度有如下性质: DKL(p||q)≠DKL(q||p)DKL(p||q)≠DKL(q||p); DKL(p||q)≥0DKL(p||q)≥0 ,当且仅当p=qp=q时为零; 不满足三角不等式。 Q分布与P分布的KL散度为: DKL(Q||P)=∑ZQ(Z)logQ(Z)P(Z|D)=∑ZQ(Z)logQ(Z)P(Z,D)+logP(D) DKL(Q||P)=∑ZQ(Z)log⁡Q(Z)P(Z|D)=∑ZQ(Z)log⁡Q(Z)P(Z,D)+log⁡P(D) 或者 logP(D)=DKL(Q||P)−∑ZQ(Z)logQ(Z)P(Z,D)=DKL(Q||P)+L(Q). log⁡P(D)=DKL(Q||P)−∑ZQ(Z)log⁡Q(Z)P(Z,D)=DKL(Q||P)+L(Q). 由于对数证据logP(D)logP(D)被相应的Q所固定,为了使KL散度最小,则只要极大化L(Q)L(Q)。通过选择合适的Q,使L(Q)L(Q)便于计算和求极值。这样就可以得到后验P(Z|D)P(Z|D)的近似解析表达式和证据(log evidence)的下界L(Q)L(Q),又称为变分自由能(variational free energy): L(Q)=∑ZQ(Z)logP(Z,D)−∑ZQ(Z)logQ(Z)=EQ[logP(Z,D)]+H(Q) L(Q)=∑ZQ(Z)log⁡P(Z,D)−∑ZQ(Z)log⁡Q(Z)=EQ[log⁡P(Z,D)]+H(Q) vb1 平均场理论(Mean Field Method) 数学上说,平均场的适用范围只能是完全图,或者说系统结构是well-mixed,在这种情况下,系统中的任何一个个体以等可能接触其他个体。反观物理,平均场与其说是一种方法,不如说是一种思想。其实统计物理的研究目的就是期望对宏观的热力学现象给予合理的微观理论。物理学家坚信,即便不满足完全图的假设,但既然这种“局部”到“整体”的作用得以实现,那么个体之间的局部作用相较于“全局”的作用是可以忽略不计的。 根据平均场理论,变分分布Q(Z)可以通过参数和潜在变量的划分(partition)因式分解,比如将ZZ划分为Z1…ZMZ1…ZM Q(Z)=∏i=1Mq(Zi|D) Q(Z)=∏i=1Mq(Zi|D) 注意这里并非一个不可观测变量一个划分,而应该根据实际情况做决定。当然你也可以这么做,但是有时候,将几个潜变量放在一起会更容易处理。 平均场方法的合理性 在量子多体问题中,用一个(单体)有效场来代替电子所受到的其他电子的库仑相互作用。这个有效场包含所有其他电受到的其他电子的库仑相互作用。这个有效场包含了所有其他电子对该电子的相互作用。利用有效场取代电子之间的库仑相互作用之后,每一个电子在一个有效场中运动,电子与电子之间的运动是独立的(除了需要考虑泡利不相容原理),原来的多体问题转化为单体问题。 同样在变分分布Q(Z)这个系统中,我们也可以将每一个潜变量划分看成是一个单体,其他划分对其的影响都可以用一个看做是其自身的作用。采用的办法是迭代(Iterative VB(IVB) algorithm)。这是由于当变分自由能取得最大值的时候,划分ZiZi与它的互斥集Z−iZ−i(或者更进一步,马尔科夫毯(Markov blanket), mb(Zi))mb(Zi))具有一个简单的关系: Q(Zi)∝1Cexp⟨lnP(Zi,Z−i,D)⟩Q(Z−i)orQ(mb(Zi)) Q(Zi)∝1Cexp⁡⟨ln⁡P(Zi,Z−i,D)⟩Q(Z−i)orQ(mb(Zi)) (为保持文章的连贯性,此处先不证明,下文将详细说明) 于是,对于某个划分ZiZi,我们可以先保持其他划分Z−iZ−i不变,然后用以上关系式更新ZiZi。相同步骤应用于其他划分的更新,使得每个划分之间充分相互作用,最终达到稳定值。 具体更新边缘概率(VB-marginal)步骤如下: 初始化Q(0)(Zi)Q(0)(Zi),可随机取; 在第k步,计算Z−iZ−i的边缘密度Qk∝exp∫Z∗iQk−1logP(Zi,Z−i,D)dZiQk∝exp⁡∫Zi∗Qk−1log⁡P(Zi,Z−i,D)dZi 计算ZiZi的边缘密度Qk∝exp∫Z∗−iQklogP(Zi,Z−i,D)dZ−iQk∝exp⁡∫Z−i∗Qklog⁡P(Zi,Z−i,D)dZ−i 理论上Q∞Q∞将会收敛,则反复执行(2), (3)直到Q(Zi)Q(Zi),Q(Z−i)Q(Z−i)稳定,或稳定在某个小范围内。 最后,得 Q(Z)=Q(Zi|D)Q(Z−i|D)Q(Z)=Q(Zi|D)Q(Z−i|D) 平均场估计下边缘概率的无意义性 (VB-marginals) 注意到Q(Z)估计的是联合概率密度,而对于每一个Qi(Zi)Qi(Zi),其与真实的边缘概率密度Pi(Zi)Pi(Zi)的差别可能是很大的。不应该用Qi(Zi)Qi(Zi)来估计真实的边缘密度,比如在一个贝叶斯网络中,你不应该用它来推测某个节点的状态。而这其实是很糟糕的,相比于其他能够使用节点状态信息来进行局部推测的算法,变分贝叶斯方法更不利于调试。 比如一个标准的高斯联合分布P(μ,x)P(μ,x)和最优的平均场高斯估计Q(μ,x)Q(μ,x)。Q选择了在它自己作用域中的高斯分布,因而变得很窄。此时边缘密度Qx(x)Qx(x)变得非常小,完全与Px(x)Px(x)不同。 vb2 泛函的概念 上文已经提到我们要找到一个更加简单的函数D(Z)D(Z)来近似P(Z|D)P(Z|D),同时问题转化为求解证据logP(Z)logP(Z)的下界L(Q)L(Q),或者L(Q(Z))L(Q(Z))。应该注意到L(Q)L(Q)并非普通的函数,而是以整个函数为自变量的函数,这便是泛函。我们先介绍一下什么是泛函,以及泛函取得极值的必要条件。 泛函 设对于(某一函数集合内的)任意一个函数y(x)y(x),有另一个数J[y]J[y]与之对应,则称J[y]J[y]为y(x)y(x)的泛函。泛函可以看成是函数概念的推广。 这里的函数集合,即泛函的定义域,通常要求y(x)y(x) 满足一定的边界条件,并且具有连续的二阶导数.这样的y(x)y(x)称为可取函数。 泛函不同于复合函数, 例如g=g(f(x))g=g(f(x)); 对于后者,给定一个xx值,仍然是有一个gg值与之对应; 对于前者,则必须给出某一区间上的函数y(x)y(x),才能得到一个泛函值J[y]J[y]。(定义在同一区间上的)函数不同,泛函值当然不同, 为了强调泛函值J[y]J[y]与函数y(x)y(x)之间的依赖关系,常常又把函数y(x)y(x)称为变量函数。 泛函的形式多种多样,通常可以积分形式:J[y]=∫x1x0F(x,y,y′)dxJ[y]=∫x0x1F(x,y,y′)dx 泛函取极值的必要条件 泛函的极值 “当变量函数为y(x)y(x)时,泛函J[y]J[y]取极大值”的含义就是:对于极值函数y(x)y(x)及其“附近”的变量函数y(x)+δy(x)y(x)+δy(x),恒有J[y+δy]≤J[y]J[y+δy]≤J[y]; 所谓函数y(x)+δy(x)y(x)+δy(x)在另一个函数y(x)y(x)的“附近”,指的是: |δy(x)|<ε|δy(x)|<ε; 有时还要求|(δy)′(x)|<ε|(δy)′(x)|<ε. 这里的δy(x)δy(x)称为函数y(x)y(x)的变分。 Euler–Lagrange方程 可以仿造函数极值必要条件的导出办法,导出泛函取极值的必要条件,这里不做严格的证明,直接给出。 泛函J[y]J[y]取到极大值的必要条件是一级变分δJ[y]δJ[y]为0,其微分形式一般为二阶常微分方程,即Euler-Largange方程: ∂F∂y−ddx∂F∂y′=0 ∂F∂y−ddx∂F∂y′=0 泛函的条件极值 在约束条件 下求函数J[y]J[y]的极值,可以引入Largange乘子λλ,从而定义一个新的泛函, J~[y]=J[y]−λJ0[y]J~[y]=J[y]−λJ0[y]。仍将δyδy看成是独立的,则泛函J~[y]J~[y]在边界条件下取极值的必要条件就是, (∂∂y−ddx∂∂y′)(F−λG)=0 (∂∂y−ddx∂∂y′)(F−λG)=0 问题求解 对于L(Q(Z))=EQ(Z)[lnP(Z,D)]+H(Q(Z))L(Q(Z))=EQ(Z)[ln⁡P(Z,D)]+H(Q(Z)),将右式第一项定义为能量(Energy),第二项看做是信息熵(Shannon entropy)。我们只考虑自然对数的形式,因为对于任何底数的对数总是可以通过换底公式将其写成自然对数与一个常量的乘积形式。另外根据平均场假设可以得到如下积分形式, L(Q(Z))=∫(∏iQi(Zi))lnP(Z,D)dZ−∫(∏kQk(Zk))∑ilnQi(Zi)dZ L(Q(Z))=∫(∏iQi(Zi))ln⁡P(Z,D)dZ−∫(∏kQk(Zk))∑iln⁡Qi(Zi)dZ 其中Q(Z)=∏iQi(Zi)Q(Z)=∏iQi(Zi),且满足 ∀i.∫Qi(Zi)dZi=1∀i.∫Qi(Zi)dZi=1 考虑划分Z={Zi,Z−i}Z={Zi,Z−i},其中Z−i=Z∖ZiZ−i=Z∖Zi,先考虑能量项(Energy)(第一项), EQ(Z)[lnP(Z,D)]=∫(∏iQi(Zi))lnP(Z,D)dZ=∫Qi(Zi)dZi∫Q−i(Z−i)lnP(Z,D)dZ−i=∫Qi(Zi)⟨lnP(Z,D)⟩Q−i(Z−i)dZi=∫Qi(Zi)lnexp⟨lnP(Z,D)⟩Q−i(Z−i)dZi=∫Qi(Zi)lnQ∗i(Zi)dZi+lnC EQ(Z)[ln⁡P(Z,D)]=∫(∏iQi(Zi))ln⁡P(Z,D)dZ=∫Qi(Zi)dZi∫Q−i(Z−i)ln⁡P(Z,D)dZ−i=∫Qi(Zi)⟨ln⁡P(Z,D)⟩Q−i(Z−i)dZi=∫Qi(Zi)ln⁡exp⁡⟨ln⁡P(Z,D)⟩Q−i(Z−i)dZi=∫Qi(Zi)ln⁡Qi∗(Zi)dZi+ln⁡C 其中定义Q∗i(Zi)=1Cexp⟨lnP(Z,D)⟩Q−i(Z−i)Qi∗(Zi)=1Cexp⁡⟨ln⁡P(Z,D)⟩Q−i(Z−i),CC为的归一化常数。再考虑熵量(entropy)(第二项), H(Q(Z))=−∑i∫(∏kQk(Zk))lnQi(Zi)dZ=−∑i∫∫Qi(Zi)Q−i(Z−i)lnQi(ZidZidZ−i=−∑i⟨∫Qi(Zi)lnQi(Zi)dZi⟩Q−i(Z−i)=−∑i∫Qi(Zi)lnQi(Zi)dZi H(Q(Z))=−∑i∫(∏kQk(Zk))ln⁡Qi(Zi)dZ=−∑i∫∫Qi(Zi)Q−i(Z−i)ln⁡Qi(ZidZidZ−i=−∑i⟨∫Qi(Zi)ln⁡Qi(Zi)dZi⟩Q−i(Z−i)=−∑i∫Qi(Zi)ln⁡Qi(Zi)dZi 此时得到泛函, L(Q(Z))=∫Qi(Zi)lnQ∗i(Zi)dZi−∑i∫Qi(Zi)lnQi(Zi)dZi+lnC=(∫Qi(Zi)lnQ∗i(Zi)dZi−∫Qi(Zi)lnQi(Zi)dZi)−∑k≠i∫Qk(Zk)lnQk(Zk)dZk+lnC=∫Qi(Zi)lnQ∗i(Zi)Qi(Zi)dZi−∑k≠i∫Qk(Zk)lnQk(Zk)dZk+lnC=−DKL(Qi(Zi)||Q∗i(Zi))+H[Q−i(Z−i)]+lnC L(Q(Z))=∫Qi(Zi)ln⁡Qi∗(Zi)dZi−∑i∫Qi(Zi)ln⁡Qi(Zi)dZi+lnC=(∫Qi(Zi)ln⁡Qi∗(Zi)dZi−∫Qi(Zi)ln⁡Qi(Zi)dZi)−∑k≠i∫Qk(Zk)ln⁡Qk(Zk)dZk+lnC=∫Qi(Zi)ln⁡Qi∗(Zi)Qi(Zi)dZi−∑k≠i∫Qk(Zk)ln⁡Qk(Zk)dZk+ln⁡C=−DKL(Qi(Zi)||Qi∗(Zi))+H[Q−i(Z−i)]+ln⁡C 注意到L(Q(Z))L(Q(Z)) 并非只有一个等式,如果不可观测变量有M个划分。 那么将有M个方程。 为了使得L(Q(Z))L(Q(Z))达到最大值, 同时注意到约束条件, 根据泛函求条件极值的必要条件, 得, ∀i.∂∂Qi(Zi){−DKL[Qi(Zi)||Q∗i(Zi)]−λi(∫Qi(Zi)dZi−1)}:=0 ∀i.∂∂Qi(Zi){−DKL[Qi(Zi)||Qi∗(Zi)]−λi(∫Qi(Zi)dZi−1)}:=0 直接求解将得到Gibbs分布,略显复杂;实际上,注意到KL散度,我们可以直接得到KL散度等于0的时候,L(D)L(D)达到最大值,最终得到 Qi(Zi)=Q∗i(Zi)=1Cexp⟨lnP(Zi,Z−i,D)⟩Q−i(Z−i) Qi(Zi)=Qi∗(Zi)=1Cexp⁡⟨ln⁡P(Zi,Z−i,D)⟩Q−i(Z−i) C为归一化常数C=∫exp⟨ln(Zi,Z−i,D)⟩Q−i(Z−i)dZ−iC=∫exp⁡⟨ln⁡(Zi,Z−i,D)⟩Q−i(Z−i)dZ−i , Q(Zi)Q(Zi)为联合概率函数在除ZiZi本身外的其他划分下的对数期望。又可以写为 lnQi(Zi)=⟨lnP(Zi,Z−i,D)⟩Q−i(Z−i)+constln⁡Qi(Zi)=⟨ln⁡P(Zi,Z−i,D)⟩Q−i(Z−i)+const. 参考文献 [1] Smídl, Václav, and Anthony Quinn. The variational Bayes method in signal processing. Springer, 2006. [2] Beal, Matthew James. Variational algorithms for approximate Bayesian inference. Diss. University of London, 2003. [3] Fox, Charles W., and Stephen J. Roberts. “A tutorial on variational Bayesian inference.” Artificial Intelligence Review 38.2 (2012): 85-95. [4] Attias, Hagai. “Inferring parameters and structure of latent variable models by variational Bayes.” Proceedings of the Fifteenth conference on Uncertainty in artificial intelligence. Morgan Kaufmann Publishers Inc., 1999. [5] Attias, Hagai. “A variational Bayesian framework for graphical models.”Advances in neural information processing systems 12.1-2 (2000): 209-215. ...
Read More

GAN到底是个什么玩意儿???

生成式对抗网络(GAN)是近年来大热的深度学习模型。 GAN原理介绍 说到GAN第一篇要看的paper当然是Ian Goodfellow大牛的Generative Adversarial Networks(arxiv:https://arxiv.org/abs/1406.2661),这篇paper算是这个领域的开山之作。 GAN的基本原理其实非常简单,这里以生成图片为例进行说明。假设我们有两个网络,G(Generator)和D(Discriminator)。正如它的名字所暗示的那样,它们的功能分别是: G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z)。 D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。 在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。 最后博弈的结果是什么?在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 0.5。 这样我们的目的就达成了:我们得到了一个生成式的模型G,它可以用来生成图片。 ...
Read More