高薪面试题系列:
https://blog.csdn.net/zhangchen124/article/category/6934921
https://edu.51cto.com/sd/f6f9f
1.简述机器学习常用的分类算法,Logistic回归,SVM,Decision Tree,随机森林等相关分类算法的原理,公式推导,模型评价,模型调参。模型使用场景。
你应该使用哪种机器学习算法?这在很大程度上依赖于可用数据的性质和数量以及每一个特定用例中你的训练目标。不要使用最复杂的算法,除非其结果值得付出昂贵的开销和资源。这里给出了一些最常见的算法,按使用简单程度排序。
决策树一、 决策树优点1、决策树易于理解和解释,可以可视化分析,容易提取出规则。
2、可以同时处理标称型和数值型数据。
3、测试数据集时,运行速度比较快。
4、决策树可以很好的扩展到大型数据库中,同时它的大小独立于数据库大小。
5、无参数方法,无模型、数据、特征假设
6、存储方式简单
7、对新样本分类更有效,对各类问题具有普适性。
8、可以提取一系列规则
二、决策树缺点1、对缺失数据处理比较困难。
2、容易出现过拟合问题。(对噪声敏感)
3、忽略数据集中属性的相互关联。
4、ID3算法计算信息增益时结果偏向数值比较多的特征。
5、非自适应,不支持增量训练。
三、改进措施1、对决策树进行剪枝。可以采用交叉验证法和加入正则化的方法。
2、使用基于决策树的combination算法,如bagging算法,randomforest算法,可以解决过拟合的问题
三、应用领域企业管理实践,企业投资决策,由于决策树很好的分析能力,在决策过程应用较多。
KNN算法一、KNN算法的优点1、KNN是一种在线技术,新数据可以直接加入数据集而不必进行重新训练
2、KNN理论简单,容易实现
3、无输入数据假定,对异常值不敏感
二、KNN算法的缺点1、对于样本容量大的数据集计算量比较大。
2、样本不平衡时,预测偏差比较大。如:某一类的样本比较少,而其它类样本比较多。
3、KNN每一次分类都会重新进行一次全局运算。
4、k值大小的选择。
5、KNN实际上相遇于用一种简单的非参数密度估计方法把贝叶斯规则应用于类条件密度估计
6、没有解释性,无法体现数据内在含义
7、数据范围存在重叠时,分类精度不高
三、KNN算法应用领域文本分类、模式识别、聚类分析,多分类领域
支持向量机(SVM)一、 SVM优点1、解决小样本下机器学习问题。
2、解决非线性问题。
3、无局部极小值问题。(相对于神经网络等算法)
4、可以很好的处理高维数据集。
5、泛化能力比较强。
二、SVM缺点1、对于核函数的高维映射解释力不强,尤其是径向基函数。
2、对缺失数据敏感。
3、调参麻烦,核函数难选难调
三、SVM应用领域文本分类、图像识别、主要二分类领域
AdaBoost算法一、AdaBoost算法优点1、很好的利用了弱分类器进行级联。
2、可以将不同的分类算法作为弱分类器。
3、AdaBoost具有很高的精度。
4、相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重。
二、Adaboost算法缺点1、AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定。
2、数据不平衡导致分类精度下降。
3、训练比较耗时,每次重新选择当前分类器最好切分点。
三、AdaBoost应用领域模式识别、计算机视觉领域,用于二分类和多分类场景
朴素贝叶斯算法一、朴素贝叶斯算法优点1、对大数量训练和查询时具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已。
2、支持增量式运算。即可以实时的对新增的样本进行训练。
3、朴素贝叶斯对结果解释容易理解。
二、朴素贝叶斯缺点1、由于使用了样本属性独立性的假设,所以如果样本属性有关联时其效果不好。
2、类条件概率密度函数,是从训练样本估计到的,问题是,实际测试的时候,训练样本很难完全代替实际数据,因此,泛化能力会受影响(生成模型的通病吧,数据漂移问题影响大)。
三、朴素贝叶斯应用领域文本分类、欺诈检测中使用较多
Logistic回归算法一、logistic回归优点1、计算代价不高,易于理解和实现
二、logistic回归缺点1、容易产生欠拟合。
2、分类精度不高。
3、这种单决策面的线性拟合分类器,很脆弱(现实大多数非线性)
三、logistic回归应用领域用于二分类领域,可以得出概率值,适用于根据分类概率排名的领域,如搜索排名等。
Logistic回归的扩展softmax可以应用于多分类领域,如手写字识别等。
2.机器学习常用的聚类算法,Kmeans,BDSCAN,SOM(个人论文中使用的算法),LDA等算法的原理,算法(模型)中参数的确定,具体到确定的方法;模型的评价,例如LDA应该确定几个主题,Kmeans的k如何确定,DBSCAN密度可达与密度直达。
聚类是机器学习中一种重要的无监督算法,它可以将数据点归结为一系列特定的组合。理论上归为一类的数据点具有相同的特性,而不同类别的数据点则具有各不相同的属性。在数据科学中聚类会从数据中发掘出很多分析和理解的视角,让我们更深入的把握数据资源的价值、并据此指导生产生活。以下是五种常用的聚类算法。
K均值聚类
这一最著名的聚类算法主要基于数据点之间的均值和与聚类中心的聚类迭代而成。它主要的优点是十分的高效,由于只需要计算数据点与剧类中心的距离,其计算复杂度只有O(n)。其工作原理主要分为以下四步:
1.首先我们需要预先给定聚类的数目同时随机初始化聚类中心。我们可以初略的观察数据并给出较为准确的聚类数目;
2.每一个数据点通过计算与聚类中心的距离了来分类到最邻近的一类中;
3.根据分类结果,利用分类后的数据点重新计算聚类中心;
4.重复步骤二三直到聚类中心不再变化。(可以随机初始化不同的聚类中心以选取最好的结果)
这种方法在理解和实现上都十分简单,但缺点却也十分明显,十分依赖于初始给定的聚类数目;同时随机初始化可能会生成不同的聚类效果,所以它缺乏重复性和连续性。
和K均值类似的K中值算法,在计算过程中利用中值来计算聚类中心,使得局外点对它的影响大大减弱;但每一次循环计算中值矢量带来了计算速度的大大下降。
均值漂移算法
这是一种基于滑动窗口的均值算法,用于寻找数据点中密度最大的区域。其目标是找出每一个类的中心点,并通过计算滑窗内点的均值更新滑窗的中心点。最终消除临近重复值的影响并形成中心点,找到其对应的类别。
1.首先以随机选取的点为圆心r为半径做一个圆形的滑窗。其目标是找出数据点中密度最高点并作为中心;
2.在每个迭代后滑动窗口的中心将为想着较高密度的方向移动;
3.连续移动,直到任何方向的移动都不能增加滑窗中点的数量,此时滑窗收敛;
4.将上述步骤在多个滑窗上进行以覆盖所有的点。当过个滑窗收敛重叠时,其经过的点将会通过其滑窗聚类为一个类;
下图中每一个黑点都代表一个滑窗的中心,他们最终重叠在每一类的中心;
与K均值相比最大的优点是我们无需指定指定聚类数目,聚类中心处于最高密度处也是符合直觉认知的结果。但其最大的缺点在于滑窗大小r的选取,对于结果有着很大的影响。
基于密度的聚类算法(DBSCAN)
DBSCAN同样是基于密度的聚类算法,但其原理却与均值漂移大不相同:
1.首先从没有被遍历的任一点开始,利用邻域距离epsilon来获取周围点;
2.如果邻域内点的数量满足阈值则此点成为核心点并以此开始新一类的聚类。(如果不是则标记为噪声);
3.其邻域内的所有点也属于同一类,将所有的邻域内点以epsilon为半径进行步骤二的计算;
4.重复步骤二、三直到变量完所有核心点的邻域点;
5.此类聚类完成,同时又以任意未遍历点开始步骤一到四直到所有数据点都被处理;最终每个数据点都有自己的归属类别或者属于噪声。
这种方法最大的优点在于无需定义类的数量,其次可以识别出局外点和噪声点、并且可以对任意形状的数据进行聚类。
但也存在不可回避的缺点,当数据密度变化剧烈时,不同类别的密度阈值点和领域半径会产生很大的变化。同时在高维空间中准确估计领域半径也是不小的挑战。
利用高斯混合模型进行最大期望估计
对于较为复杂的分布K均值将会产生如下图般较为离谱的聚类结果。
而高斯混合模型却具有更高的灵活性。通过假设数据点符合均值和标准差描述的高斯混合模型来实现的。下图以二维情况下为例描述了如何利用最大期望优化算法来获取分布参数的过程:
1.首先确定聚类的数量,并随机初始化每一个聚类的高斯分布参数;
2.通过计算每一个点属于高斯分布的概率来进行聚类。与高斯中心越近的点越有可能属于这个类;
3.基于上一步数据点的概率权重,通过最大似然估计的方法计算出每一类数据点最有可能属于这一聚类的高斯参数;
4.基于新的高斯参数,重新估计每一点归属各类的概率,重复并充分2,3步骤直到参数不再变化收敛为止。
在使用高斯混合模型时有两个关键的地方,首先高斯混合模型十分灵活,可以拟合任意形状的椭圆;其次这是一种基于概率的算法,每个点可以拥有属于多类的概率,支持混合属性。
凝聚层次聚类
层次聚类法主要有自顶向下和自底向上两种方式。其中自底向上的方式,最初将每个点看做是独立的类别,随后通过一步步的凝聚最后形成独立的一大类,并包含所有的数据点。这会形成一个树形结构,并在这一过程中形成聚类。
1.首先将每一个数据点看成一个类别,通过计算点与点之间的距离将距离近的点归为一个子类,作为下一次聚类的基础;
2.每一次迭代将两个元素聚类成一个,上述的子类中距离最近的两两又合并为新的子类。最相近的都被合并在一起;
3.重复步骤二直到所有的类别都合并为一个根节点。基于此我们可以选择我们需要聚类的数目,并根据树来进行选择。
层次聚类无需事先指定类的数目,并且对于距离的度量不敏感。这种方法最好的应用在于恢复出数据的层次化结构。但其计算复杂度较高达到了O(n^3).
每个聚类算法都有各自的优缺点,我们需要根据计算需求和应用需求选择合适的算法来进行处理。随着深度学习的出现,更多的神经网络、自编码器被用来提取数据中的高维特征用于分类,是值得注意的研究热点。
决策树的用途
决策树的适用范围
数据类型
特征可以连续和离散
因变量分类时是离散,回归时是连续
决策树的优点
1)简单直观,生成的决策树很直观。
2)基本不需要预处理,不需要提前归一化,处理缺失值。
3)使用决策树预测的代价是O(log2m)。 m为样本数。
4)既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值。
5)可以处理多维度输出的分类问题。
6)相比于神经网络之类的黑盒分类模型,决策树在逻辑上可以得到很好的解释
7)可以交叉验证的剪枝来选择模型,从而提高泛化能力。
8) 对于异常点的容错能力好,健壮性高。
决策树的局限性
1)决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进。
2)决策树会因为样本发生一点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习之类的方法解决。
3)寻找最优的决策树是一个NP难的问题,我们一般是通过启发式方法,容易陷入局部最优。可以通过集成学习之类的方法来改善。
4)有些比较复杂的关系,决策树很难学习,比如异或。这个就没有办法了,一般这种关系可以换神经网络分类方法来解决。
5)如果某些特征的样本比例过大,生成决策树容易偏向于这些特征。这个可以通过调节样本权重来改善。
4.谈谈你对神经网络的了解,为开放性的问题,重点考察学员的知识面。
人工智能的底层模型是"神经网络"(neural network)。许多复杂的应用(比如模式识别、自动控制)和高级模型(比如深度学习)都基于它。学习人工智能,一定是从它开始。
什么是神经网络呢?网上似乎缺乏通俗的解释。
一、感知器历史上,科学家一直希望模拟人的大脑,造出可以思考的机器。人为什么能够思考?科学家发现,原因在于人体的神经网络。
既然思考的基础是神经元,如果能够"人造神经元"(artificial neuron),就能组成人工神经网络,模拟思考。上个世纪六十年代,提出了最早的"人造神经元"模型,叫做"感知器"(perceptron),直到今天还在用。
上图的圆圈就代表一个感知器。它接受多个输入(x1,x2,x3...),产生一个输出(output),好比神经末梢感受各种外部环境的变化,最后产生电信号。
为了简化模型,我们约定每种输入只有两种可能:1 或 0。如果所有输入都是1,表示各种条件都成立,输出就是1;如果所有输入都是0,表示条件都不成立,输出就是0。
二、感知器的例子下面来看一个例子。城里正在举办一年一度的游戏动漫展览,小明拿不定主意,周末要不要去参观。
他决定考虑三个因素。
这就构成一个感知器。上面三个因素就是外部输入,最后的决定就是感知器的输出。如果三个因素都是 Yes(使用1表示),输出就是1(去参观);如果都是 No(使用0表示),输出就是0(不去参观)。
三、权重和阈值看到这里,你肯定会问:如果某些因素成立,另一些因素不成立,输出是什么?比如,周末是好天气,门票也不贵,但是小明找不到同伴,他还要不要去参观呢?
现实中,各种因素很少具有同等重要性:某些因素是决定性因素,另一些因素是次要因素。因此,可以给这些因素指定权重(weight),代表它们不同的重要性。
上面的权重表示,天气是决定性因素,同伴和价格都是次要因素。
如果三个因素都为1,它们乘以权重的总和就是 8 4 4 = 16。如果天气和价格因素为1,同伴因素为0,总和就变为 8 0 4 = 12。
这时,还需要指定一个阈值(threshold)。如果总和大于阈值,感知器输出1,否则输出0。假定阈值为8,那么 12 > 8,小明决定去参观。阈值的高低代表了意愿的强烈,阈值越低就表示越想去,越高就越不想去。
上面的决策过程,使用数学表达如下。
上面公式中,x表示各种外部因素,w表示对应的权重。
四、决策模型单个的感知器构成了一个简单的决策模型,已经可以拿来用了。真实世界中,实际的决策模型则要复杂得多,是由多个感知器组成的多层网络。
上图中,底层感知器接收外部输入,做出判断以后,再发出信号,作为上层感知器的输入,直至得到最后的结果。(注意:感知器的输出依然只有一个,但是可以发送给多个目标。)
这张图里,信号都是单向的,即下层感知器的输出总是上层感知器的输入。现实中,有可能发生循环传递,即 A 传给 B,B 传给 C,C 又传给 A,这称为"递归神经网络"(recurrent neural network),本文不涉及。
五、矢量化为了方便后面的讨论,需要对上面的模型进行一些数学处理。
感知器模型就变成了下面这样。
六、神经网络的运作过程一个神经网络的搭建,需要满足三个条件。
也就是说,需要事先画出上面出现的那张图。
其中,最困难的部分就是确定权重(w)和阈值(b)。目前为止,这两个值都是主观给出的,但现实中很难估计它们的值,必需有一种方法,可以找出答案。
这种方法就是试错法。其他参数都不变,w(或b)的微小变动,记作Δw(或Δb),然后观察输出有什么变化。不断重复这个过程,直至得到对应最精确输出的那组w和b,就是我们要的值。这个过程称为模型的训练。
因此,神经网络的运作过程如下。
可以看到,整个过程需要海量计算。所以,神经网络直到最近这几年才有实用价值,而且一般的 CPU 还不行,要使用专门为机器学习定制的 GPU 来计算。
七、神经网络的例子下面通过车牌自动识别的例子,来解释神经网络。
所谓"车牌自动识别",就是高速公路的探头拍下车牌照片,计算机识别出照片里的数字。
这个例子里面,车牌照片就是输入,车牌号码就是输出,照片的清晰度可以设置权重(w)。然后,找到一种或多种图像比对算法,作为感知器。算法的得到结果是一个概率,比如75%的概率可以确定是数字1。这就需要设置一个阈值(b)(比如85%的可信度),低于这个门槛结果就无效。
一组已经识别好的车牌照片,作为训练集数据,输入模型。不断调整各种参数,直至找到正确率最高的参数组合。以后拿到新照片,就可以直接给出结果了。
八、输出的连续性上面的模型有一个问题没有解决,按照假设,输出只有两种结果:0和1。但是,模型要求w或b的微小变化,会引发输出的变化。如果只输出0和1,未免也太不敏感了,无法保证训练的正确性,因此必须将"输出"改造成一个连续性函数。
这就需要进行一点简单的数学改造。
首先,将感知器的计算结果wx b记为z。
z = wx b
然后,计算下面的式子,将结果记为σ(z)。
σ(z) = 1 / (1 e^(-z))
这是因为如果z趋向正无穷z → ∞(表示感知器强烈匹配),那么σ(z) → 1;如果z趋向负无穷z → -∞(表示感知器强烈不匹配),那么σ(z) → 0。也就是说,只要使用σ(z)当作输出结果,那么输出就会变成一个连续性函数。
原来的输出曲线是下面这样。
现在变成了这样。
实际上,还可以证明Δσ满足下面的公式。
即Δσ和Δw和Δb之间是线性关系,变化率是偏导数。这就有利于精确推算出w和b的值了。
5.如何构建一个模型来预测信用卡诈骗
首先,确定我们认为存在诈骗行为的特征是一个数据科学问题。在我们的例子中,我们已经确认支付的金额、这张卡片是在哪个国家发行的,以及过去一天里我们收到的卡片交易次数等作为特征,我们认为这些特征可能可以有效预测诈骗。一般来说,你将需要花费许多时间查看这些数据,以决定什么是有用的,什么是没有用的。
其次,计算特征值的时候存在数据基准问题:我们需要所有历史样本值用于训练模型,但是我们也需要把他们的实时付款值加进来,用以正确地对新的交易加入训练。当你开始担忧诈骗之前,你已经维持和记录了过去24小时滚动记录的信用卡使用次数,这样如果你发现特征是有利于诈骗检测的,你将会需要在生产环境和批量环境中分别在计算中使用它们。依赖于定义的不同特征,结果很有可能是不一样的。这些问题合在一起通常被认为是特征工程,并且通常是工业级机器学习领域最常涉及(有影响)的部分。
逻辑回归
让我们以一个最基本的模型开始,一个线性模型。我们将会发现系数a、b、...、z,如下
对于每一笔支付,我们会将amount、card_country和card_use_24h的值代入到上面的公式中,如果概率大于0.5,我们会“预测”这笔支付是欺诈的,反之我们将会预测它是合法的。
在我们讨论如何计算a、b、...、z之前,我们需要解决两个当前问题:
1.概率(欺诈)需要在0和1之间的一个数字,但是右侧的数量可以任意大(绝对值),取决于amount和 card_use_24h的值(如果那些特征的值足够大,并且a或者b至少有一个非零)。
2.card_country不是一个数字,它从许多值中取其一(例如US、AU、GB,以及等等)。这些特征被称为分类的,并且需要在我们可以训练模型之前进行适当地“编码”。
3.Logit函数
为了解决问题(1),我们会建立一个称为诈骗者的log-odds模型,而不是直接通过p = Probability(fraud)构建模型,所以我们的模型就变成
如果一个事件发生的概率为p,它的可能性是p / (1 - p),这就是为什么我们称公式左边为“对数几率(log odds)”或者“logit”。
考虑到a、b、...、z这些值和特征,我们可以通过反转上面给出的公式计算预测诈骗概率,得到以下公式
诈骗p的概率是线性函数的转换函数L=a x amount b x card_use_24h …,看起来如下所示:
不考虑线性函数的值,sigmoid映射为一个在0和1之间的数字,这是一个合法的概率。
分类变量
为了解决问题(2),我们会使用分类变量 card_country(拿N个不同值中的1个)并且扩展到N-1“虚拟”变量。这些新的特征是布尔型格式,card_country = AU、card_country = GB等等。我们只是需要N-1“虚拟”,因为当N-1虚拟值都是false的时候N值是必然包含的。为了简单起见,让我们假设card_country可以仅仅使用AU、GB和US三个值中的一个。然后我们需要两个虚拟变量去对这个值进行编码,并且我们想要去适配的模型(例如,发现系数值)是:
模型类型被称为一个逻辑回归。
拟合模型
我们如何确定a、b、c、d和Z的值?让我们以随机选择a、b、c、d和Z的方式开始。我们可以定义这套猜测的可能性如:
也就是说,从我们的数据集里取出每一个样本,并且计算诈骗p的预测概率,提供给猜测a、b、c、d和Z(每个样本的特征值)的值使用:
对于每个实际上是欺诈的样本,我们希望p比较接近1,而对于每一个不是诈骗的样本,我们希望p接近0(所以1-p应该接近1)。因此,我们对于所有欺诈样本采用p产品,对于所有非欺诈样本采用1-p产品,用以得到评估,猜测a、b、c、d和Z有多好。我们想让似然函数尽可能大(例如,尽可能地接近1)。开始我们的猜测,我们迭代地调整a、b、c、d和Z,提高可能性,直到我们发现不可以再通过扰动系数提升它的值。一种常用的优化方式是随机梯度下降。
6.请简要说要你了解的推荐算法
目前主流的推荐算法主要包含内容关联算法, 协同过滤算法。
内容关联算法(Content-Based)CB算法的原理是将一个item的基本属性, 内容等信息提取出来, 抽成一个taglist, 为每个tag赋一个权重。
剩下的事情就跟一个搜索引擎非常类似了, 将所有item对应的taglist做一下倒排转换, 放到倒排索引服务器中存储起来。
当要对某一个item做相关推荐的时候, 将这个item对应的taglist拿出来拼成一个类似搜索系统中的query表达式, 再将召回的结果做一下排序作为推荐结果输出。
当要对某个用户做个性化推荐的时候, 将这个用户最近喜欢/操作过的item列表拿出来, 将这些item的taglist拿出来并merge一下作为用户模型, 并将这个模型的taglist请求倒排索引服务, 将召回的结果作为候选推荐给该用户。
该算法的好处是:
该算法的坏处是:
CF算法的原理是汇总所有<user,item>的行为对, 利用集体智慧做推荐。其原理很像朋友推荐, 比如通过对用户喜欢的item进行分析, 发现用户A和用户B很像(他们都喜欢差不多的东西), 用户B喜欢了某个item, 而用户A没有喜欢, 那么就把这个item推荐给用户A。(User-Based CF)
当然, 还有另外一个维度的协同推荐。即对比所有数据, 发现itemA和itemB很像(他们被差不多的人喜欢), 那么就把用户A喜欢的所有item, 将这些item类似的item列表拉出来, 作为被推荐候选推荐给用户A。(Item-Based CF)
如上说的都是个性化推荐, 如果是相关推荐, 就直接拿Item-Based CF的中间结果就好啦。
该算法的好处是:
该算法的坏处是:
简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度。熵越大,系统越无序,意味着系统结构和运动的不确定和无规则;反之,,熵越小,系统越有序,意味着具有确定和有规则的运动状态。熵的中文意思是热量被温度除的商。负熵是物质系统有序化,组织化,复杂化状态的一种度量。
熵最早来原于物理学. 德国物理学家鲁道夫·克劳修斯首次提出熵的概念,用来表示任何一种能量在空间中分布的均匀程度,能量分布得越均匀,熵就越大。
更多的一些生活中的例子:
于是从微观看,熵就表现了这个系统所处状态的不确定性程度。香农,描述一个信息系统的时候就借用了熵的概念,这里熵表示的是这个信息系统的平均信息量(平均不确定程度)。
最大熵模型我们在投资时常常讲不要把所有的鸡蛋放在一个篮子里,这样可以降低风险。在信息处理中,这个原理同样适用。在数学上,这个原理称为最大熵原理(the maximum entropy principle)。
让我们看一个拼音转汉字的简单的例子。假如输入的拼音是"wang-xiao-bo",利用语言模型,根据有限的上下文(比如前两个词),我们能给出两个最常见的名字“王小波”和“王晓波 ”。至于要唯一确定是哪个名字就难了,即使利用较长的上下文也做不到。当然,我们知道如果通篇文章是介绍文学的,作家王小波的可能性就较大;而在讨论两岸关系时,台湾学者王晓波的可能性会较大。在上面的例子中,我们只需要综合两类不同的信息,即主题信息和上下文信息。虽然有不少凑合的办法,比如:分成成千上万种的不同的主题单独处理,或者对每种信息的作用加权平均等等,但都不能准确而圆满地解决问题,这样好比以前我们谈到的行星运动模型中的小圆套大圆打补丁的方法。在很多应用中,我们需要综合几十甚至上百种不同的信息,这种小圆套大圆的方法显然行不通。
数学上最漂亮的办法是最大熵(maximum entropy)模型,它相当于行星运动的椭圆模型。“最大熵”这个名词听起来很深奥,但是它的原理很简单,我们每天都在用。说白了,就是要保留全部的不确定性,将风险降到最小。
回到我们刚才谈到的拼音转汉字的例子,我们已知两种信息,第一,根据语言模型,wangxiao-bo可以被转换成王晓波和王小波;第二,根据主题,王小波是作家,《黄金时代》的作者等等,而王晓波是台湾研究两岸关系的学者。因此,我们就可以建立一个最大熵模型,同时满足这两种信息。现在的问题是,这样一个模型是否存在。匈牙利著名数学家、信息论最高奖香农奖得主希萨(Csiszar)证明,对任何一组不自相矛盾的信息,这个最大熵模型不仅存在,而且是唯一的。而且它们都有同一个非常简单的形式 -- 指数函数。下面公式是根据上下文(前两个词)和主题预测下一个词的最大熵模型,其中 w3 是要预测的词(王晓波或者王小波)w1 和 w2 是它的前两个字(比如说它们分别是“出版”,和“”),也就是其上下文的一个大致估计,subject 表示主题。
我们看到,在上面的公式中,有几个参数 lambda 和 Z ,他们需要通过观测数据训练出来。最大熵模型在形式上是最漂亮的统计模型,而在实现上是最复杂的模型之一。
我们上次谈到用最大熵模型可以将各种信息综合在一起。我们留下一个问题没有回答,就是如何构造最大熵模型。我们已经所有的最大熵模型都是指数函数的形式,现在只需要确定指数函数的参数就可以了,这个过程称为模型的训练。
最原始的最大熵模型的训练方法是一种称为通用迭代算法 GIS(generalized iterative scaling) 的迭代 算法。GIS 的原理并不复杂,大致可以概括为以下几个步骤:
1. 假定第零次迭代的初始模型为等概率的均匀分布。
2. 用第 N 次迭代的模型来估算每种信息特征在训练数据中的分布,如果超过了实际的,就把相应的模型参数变小;否则,将它们便大。
3. 重复步骤 2 直到收敛。
GIS 最早是由 Darroch 和 Ratcliff 在七十年代提出的。但是,这两人没有能对这种算法的物理含义进行很好地解释。后来是由数学家希萨(Csiszar)解释清楚的,因此,人们在谈到这个算法时,总是同时引用 Darroch 和Ratcliff 以及希萨的两篇论文。GIS 算法每次迭代的时间都很长,需要迭代很多次才能收敛,而且不太稳定,即使在 64 位计算机上都会出现溢出。因此,在实际应用中很少有人真正使用 GIS。大家只是通过它来了解最大熵模型的算法。
八十年代,很有天才的孪生兄弟的达拉皮垂(Della Pietra)在 IBM 对 GIS 算法进行了两方面的改进,提出了改进迭代算法 IIS(improved iterative scaling)。这使得最大熵模型的训练时间缩短了一到两个数量级。这样最大熵模型才有可能变得实用。即使如此,在当时也只有 IBM 有条件是用最大熵模型。
由于最大熵模型在数学上十分完美,对科学家们有很大的诱惑力,因此不少研究者试图把自己的问题用一个类似最大熵的近似模型去套。谁知这一近似,最大熵模型就变得不完美了,结果可想而知,比打补丁的凑合的方法也好不了多少。于是,不少热心人又放弃了这种方法。第一个在实际信息处理应用中验证了最大熵模型的优势的,是宾夕法尼亚大学马库斯的另一个高徒原 IBM 现微软的研究员拉纳帕提(Adwait Ratnaparkhi)。拉纳帕提的聪明之处在于他没有对最大熵模型进行近似,而是找到了几个最适合用最大熵模型、而计算量相对不太大的自然语言处理问题,比如词性标注和句法分析。拉纳帕提成功地将上下文信息、词性(名词、动词和形容词等)、句子成分(主谓宾)通过最大熵模型结合起来,做出了当时世界上最好的词性标识系统和句法分析器。拉纳帕提的论文发表后让人们耳目一新。拉纳帕提的词性标注系统,至今仍然是使用单一方法最好的系统。科学家们从拉纳帕提的成就中,又看到了用最大熵模型解决复杂的文字信息处理的希望。
但是,最大熵模型的计算量仍然是个拦路虎。我在学校时花了很长时间考虑如何简化最大熵模型的计算量。终于有一天,我对我的导师说,我发现一种数学变换,可以将大部分最大熵模型的训练时间在 IIS 的基础上减少两个数量级。我在黑板上推导了一个多小时,他没有找出我的推导中的任何破绽,接着他又回去想了两天,然后告诉我我的算法是对的。从此,我们就建造了一些很大的最大熵模型。这些模型比修修补补的凑合的方法好不少。即使在我找到了快速训练算法以后,为了训练一个包含上下文信息,主题信息和语法信息的文法模型(language model),我并行使用了20 台当时最快的 SUN 工作站,仍然计算了三个月。由此可见最大熵模型的复杂的一面。
最大熵模型,可以说是集简与繁于一体,形式简单,实现复杂。值得一提的是,在Google的很多产品中,比如机器翻译,都直接或间接地用到了最大熵模型。
讲到这里,读者也许会问,当年最早改进最大熵模型算法的达拉皮垂兄弟这些年难道没有做任何事吗?他们在九十年代初贾里尼克离开 IBM 后,也退出了学术界,而到在金融界大显身手。他们两人和很多 IBM 语音识别的同事一同到了一家当时还不大,但现在是世界上最成功对冲基金(hedge fund)公司----文艺复兴技术公司 (Renaissance Technologies)。我们知道,决定股票涨落的因素可能有几十甚至上百种,而最大熵方法恰恰能找到一个同时满足成千上万种不同条件的模型。达拉皮垂兄弟等科学家在那里,用于最大熵模型和其他一些先进的数学工具对股票预测,获得了巨大的成功。从该基金 1988 年创立至今,它的净回报率高达平均每年 34%。也就是说,如果 1988 年你在该基金投入一块钱,今天你能得到 200 块钱。这个业绩,远远超过股神巴菲特的旗舰公司伯克夏哈撒韦(Berkshire Hathaway)。同期,伯克夏哈撒韦的总回报是 16 倍。
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain)是比特币的一个重要概念,它本质上是一个去中介化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
一般说来,区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成。 其中,数据层封装了底层数据区块以及相关的数据加密和时间戳等基础数据和基本算法;网络层则包括分布式组网机制、数据传播机制和数据验证机制等;共识层主要封装网络节点的各类共识算法;激励层将经济因素集成到区块链技术体系中来,主要包括经济激励的发行机制和分配机制等;合约层主要封装各类脚本、算法和智能合约,是区块链可编程特性的基础;应用层则封装了区块链的各种应用场景和案例。该模型中,基于时间戳的链式区块结构、分布式节点的共识机制、基于共识算力的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点。
基础架构
区块链的应用场景区块链技术应用十分广泛,可以分别应用于以下领域。
1、区块链资产相关领域
相关领域包括区块链资产发行以及它后面的支付、跨境汇兑、交易、买卖等。
2、记账方式相关领域
区块链本身就是一个分布式的记账系统,目前银行业、证券业、保险业等等与记账紧密相关,都可以利用区块链的记账方式来弥补或提高现有的记账和清算效率。
3、公开可信相关领域
此类在公有链上进行才有意义。因为它是“公开可信”的应用场景里的,例如众筹、公益、互助保险、数据保全等,比如蚂蚁金服的公益项目。
4、可控匿名相关领域
区块链上的交易,是从一个地址到另一个地址。但这个地址背后的身份持有人是谁,我们并不知道。很多人利用这个特性做身份认证。比如我们去银行、医院可能会暴露自己隐私信息,但事实上银行或医院只要知道你这个人是你就可以了,就可以利用区块链的“可控匿名”性来做身份证,把这些信息都加密保存到区块链上,然后在银行或者医院这样的地方认证就可以了,而不需要身份证等一系列的手续。
5、公证领域相关领域
区块链在公证这个领域也比较有应用前景,它是基于区块链的公开透明不可篡改的特点。网上有个段子,讲的是办事难,盖一个章需要盖N个章,甚至还引出了“如何证明*是*”的笑话。而区块链可以保证文件的不可更改和完整性,并且其互联网属性可以不受地域和时间的拘束,为公众提供公证服务,比传统的方式效率高很多。
6、物联网相关领域
在物联网中,因为物体的使用和状态都在变化,甚至网络中的每一个节点,每一个产品,需要同时承担交易对象和交易发起者的角色,将会产生非常庞大的基础数据和交易数据。还有数据的隐私也是一个要解决的问题。而区块链恰好能够解决物联网这些核心困难,它能成为构建新一代的万物互联的关键技术。
比特币区块链的局限很多人说比特币是目前区块链最成功的的应用,这么说有一定的道理,但更贴合实际的说法是:由于在创造比特币时,并没有现成的、可以支持比特币系统运行的的底层技术架构,所以中本聪创造了区块链。也就是说,中本聪创造区块链的初衷是为了实现一个点对点的电子现金系统。因此,当我们对于区块链的用途有更高的期待时,它的一些局限就体现出来了。
首先,比特币区块链的设计只考虑了比特币的交易,本身并不支持定义其他资产,或是定义复杂的交易逻辑。如果要添加新功能,就要对系统进行升级,然而困难在于,对于比特币这样的完全去中心化系统,任何改变都需要获得社区的一致同意,以至于快速改变是异常困难的。
其次,大多数改变本身是不必要的甚至是无法达成的,因为更多的灵活性往往意味着复杂度的上升及随之导致的稳定性的下降。考虑到现实需求的多样性多样性,甚至有些需求是相互冲突的,一条区块链注定无法同时满足所有的需求。
比特币的上述局限直接导致了部分竞争币的诞生,这些竞争币采用了不同的区块链,有着各自的特点和创新。但是,由于缺乏广泛的共识与信任,绝大部分基于新区块链的竞争币并不拥有类似比特币区块链这样在强大的算力保护下的稳定与安全,同时币值的稳定性也普遍较差。更重要的是,数字资产不能在不同的区块链间直接转移,这导致了价值的孤岛,正如同一个个不能互联互通的“局域网”一样。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved