机器学习有很多关于核函数的说法,核函数的定义和作用是什么?

作者:蓦风 链接:https://www.zhihu.com/question/30371867/answer/73508853

机器学习,具体以RBF网络里面的核函数为例,有童鞋说是通过径向基核函数可以把原始数据投影到更高维的空间里去(从而增加数据可分的概率),对于这种说法,实在不是很理解(怎么就投影到高维空间里面去了呢)?

先给个定义:核函数K(kernel function)就是指K(x, y) = <f(x), f(y)>,其中x和y是n维的输入值,f(·) 是从n维到m维的映射(通常而言,m>>n)。<x, y>是x和y的内积(inner product),严格来说应该叫欧式空间的标准内积,也就是很多人常说的点积(dot product)。

光看这一段还是不明白kernel是什么,用来干什么的...对吧?不要急。一个好的知识分享者是不会把一篇空洞的定义扔下就不管的,TA会告诉你这个概念的intuition,然后给你举个小小的栗子,最后告诉你几个应用场景。Andrew Ng的Machine Learning为什么会成为一门现象级的MOOC?原因之一就是因为他除了是个学术上的大神,也同样是个极有质素的知识分享者。所以我要学习他。

好了,intuitively(这也模仿得太生硬了吧...),要计算<f(x), f(y)>,我们要先分别计算f(x)和f(y),然后再求它们的内积。上面的定义里也说了,经过映射后的x和y,维数大大增加,计算内积的成本可能会非常之大,而且在高位空间费力牛劲儿地计算内积,内积又是一个scalar,相当于说又把我们的计算从高维空间拉回到一维空间!所以我们特别想要一个“简便运算法”,帮助我们不需要奔向高维空间就能在家门口计算得到想要的内积。这时候该轮到我们的猪脚——kernel登场了,它能帮我们做到这一点。

举个小小栗子。

令 x = (x1, x2, x3, x4); y = (y1, y2, y3, y4);

令 f(x) = (x1x1, x1x2, x1x3, x1x4, x2x1, x2x2, x2x3, x2x4, x3x1, x3x2, x3x3, x3x4, x4x1, x4x2, x4x3, x4x4); f(y)亦然;

令核函数 K(x, y) = (<x, y>)^2.

接下来,让我们带几个简单的数字进去看看是个什么效果:x = (1, 2, 3, 4); y = (5, 6, 7, 8). 那么: f(x) = ( 1, 2, 3, 4, 2, 4, 6, 8, 3, 6, 9, 12, 4, 8, 12, 16) ;

f(y) = (25, 30, 35, 40, 30, 36, 42, 48, 35, 42, 49, 56, 40, 48, 56, 64) ;

<f(x), f(y)> = 25+60+105+160+60+144+252+384+105+252+441+672+160+384+672+1024 = 4900.

好累,对不对?可谁让f(·)把四维空间的数据映射到十六维空间里呢? 如果我们用核函数呢? K(x, y) = (5+12+21+32)^2 = 70^2 = 4900. 就是这样! 所以现在你看出来了吧,kernel其实就是帮我们省去在高维空间里进行繁琐计算的“简便运算法”。甚至,它能解决无限维空间无法计算的问题!因为有时f(·)会把n维空间映射到无限维空间去,对此我们常常束手无策,除非是用kernel,尤其是RBF kernel(K(x,y) = exp(-||x-y||^2) )。

在有kernel之前,做machine learning的典型的流程应该是:data --> features --> learning algorithm,但kernel给我们提供了一个alternative,那就是,我们不必定义从data到feature的映射函数,而是可以直接kernel(data) --> learning algorithm,也可以是data --> features --> kernel(features) --> learning algorithm。

所以虽然我们看到kernel常被应用在SVM(SVM中的kernel应该是后一种用法,后文再说),但其实要用到内积的learning algorithm都可以使用kernel。“用到内积的learning algorithm”其实并不少见,不信你可以想一想最普通不过的linear classifier/regressor有没有一个步骤是计算特征向量(feature vectors)的内积呢?

不过作为曾经也困惑的过的过来人,我试图直观的去解释一下问题。

1.Kernel是什么? Kernel是一个函数,一个二元函数,一个从的二元函数。至于什么是二元函数,这个就不用解释了吧,你懂的。。。

2.关于Kernel的一些

首先如kernel直接翻译过来一样就是核心,而kernel就是machine learning中最核心的部分的东西。它有效的描述了点和点之间的关系,或者说是距离,当然这里的距离严格的说应该是广义的距离。所以按照其作用kernel原本的名字应该叫“covariance function”. 有人会问,明明字母都不像么,为什么是一样的呢?其实这就好像,一个人叫张三,然后做了公司老板,你可以叫他老板,而且你叫习惯了,因为在公司中就是无可替代的老板,但是他的真名就是张三。可能有人还是不明白,为什么这是一致的。那么下一个直观的问题是,什么是machine learning中最要的部分呢,也就是核心呢?Of course, training & learning! 那什么是training&learning中最重要的呢?对,那就是点与点之间的关系,无论是training点之间的关系还是training与learning点之间的关系都是这整个过程的必不可少的信息。好的,那我们再来看看covariance function 的意义吧。wiki上说,在概率论与统计学中,covariance是一种两个变量如何相关变化的度量,而covariance function 是自然就是描述对应协方差的函数喽!OK,现在看着应该很像了吧,不是像,应该说是一样的嘛。 3. Kernel心中的kernel 之前说了,Kernel是描述点和点之间关系的,或者说是距离。距离是一个非常的有趣的词语。北京到上海的距离是1463 公里, 而你到我距离却只有那心动的一瞬间。好了,不文艺了,事实上距离是一个有歧义的词语,因为在不同的情况下距离有着不同的描述方法,比如常用的欧氏距离(Euclidean Distance) 和曼哈顿距离(Manhattan Distance),当然还有更复杂的,比如切比雪夫距离 ( Chebyshev Distance ),闵可夫斯基距离(Minkowski Distance),马氏距离(Mahalanobis Distance),汉明距离(Hamming distance),这里就不多说了,其实我也不知道具体这些东东具体是做什么的,不过有人知道,比如“机器学习中的各种距离

http://blog.csdn.net/lifeitengup/article/details/8450545

好了,问题又来了,距离有那么多定义,可是万一弱水三千就没有我需要的一瓢怎么办呢?没关系,数学如此博大精深,自然有办法的,那就是去定义嘛。深奥的functional data analysis (泛函分析)告诉我们,从距离空间出发,我们可以一步步往前走可以得到赋范向量空间,内积空间,然后是优美的希尔伯特空间。对就是你了,希尔伯特空间,这里面有好多概念,这里就不多说了,主要就是一个范数,一个内积。那什么是范数呢,范数就是我们之前强调的距离,或者说广义的距离。而什么又是内积呢?没错,内积就是这个距离的定义的方式。这就是为什么说由内积可以诱导出范数的原因了。因此,如果我们用到相关希尔伯特空间的知识的话,这个“自定义”距离的问题就不在话下喽。OK,现在我们回到这个kernel的问题,既然kernel是用来描述点与点之间的关系或者说距离的话,那么一种可行的有效的方法就是用内积去刻画,也就是说,根本不同的内积定义,我们就可以构造出不同的核函数。当然由于这是内积定义的,那么自然学过一点泛函的小朋友都知道,这里的kernel也就会有正定和对称的性质啦,回头想想我们的发出点,这两个性质是不是也理所应当的是kernel所应该具备的呢?Definitely! 然而,现实的问题是,内积虽然可以有各种定义方式,但是局限性还是蛮大的,玩来玩去一共就那么几种,如果我们可以得到更加一般化的结论怎么办呢?没错,只能动一动内积里面的东西啦,也就是。这样一来的好处就是,无论x,y 本身是如何的,维数也好,形式也罢,我们都可以调整这个来保证一般的常见的内积定义,而其中这里的呢,自然可以看做了一个映射,从一个从映射到一个一般的希尔伯特空间的映射,而此时内积仍旧是定义在希尔伯特空间的内积。这也就是好多小伙伴正在说到的所谓高维到低维还是不知是从低维到高维的feature mapping。(事实上,就我所知比较多用的应该是从低维到高维的投射吧,因为这会让一些低维空间上不明显的feature在高维空间容易显示出来)。当然这一切都可以有个大神叫Mercer 给出的定理去解释,Mercer定理说,任何满足对称性和正定性的二元函数都能找到Hilbert space 和函数 使得 . 不过实际问题中,feature space 下计算feature 的复杂度极高,所以说定义一个合格kernel可以大大降低这个计算feature 的复杂度。从而这边又可以引出kernel第二个别名,kernel trick。

另外也有小伙伴提到Reproducing Kernel Hilbert Space (RKHS),这个嘛,事实上也就是一种在希尔伯特这个大的游泳池里面一种复杂而漂亮的游泳方式啦,如果你各方面条件合适,事实上你也可以直接创造一种优美的游泳方式,是不是很炫酷,想试试?呵呵,真的似乎好难。。。一旦涉及泛函,事实上没有一定的功底,基本就是举步维艰。 4. Kernel有什么用?

这个就海了去了。。。这就是machine learning中的一大块,kernel learning嘛,其中最为典型的要数Support Vector Machine (SVM), Gaussian Process (GP),还有Principal Component Analysis (PCA)。看到这里有木有觉得非常熟悉,叱咤风云的SVM和PCA,不过这里怎么还有个似乎显得那么冷门的Gaussian process呢,这是什么东东呢,详见Carl Edward Rasmussen

https://mitpress.mit.edu/authors/carl-edward-rasmussen

and Christopher K. I. Williams

https://mitpress.mit.edu/authors/christopher-k-i-williams

大神写的书Gaussian Processes for Machine Learning。简单的说呢,这也是一种非常有效的supervised leaning的方法,至于什么是supervised leaning呢,简单理解就是有一个学习明确的学习方向的learning。这边还需要强调一下的是,这些learning的方法都是有classification和regression的,大多数小伙伴都知道SVM吧,不过大多数中的大多数或许只知道SVM可以做classification,所以也多在说kernel对SVM的作用。我弱弱的想说一句是regression和classification大家都有,只是在大多数情况下,SVM在classification方面比较有优势而GP会在regression上有较好的结果,仅此而已。不过总的来说还是一句话,kernel不论对regression还是classification都是意义重大的,谁叫人家叫kernel呢!至于具体的作用么,本人做的是GP的regression,我可以确认是在GP的regression中,kernel主要是对应数据的pattern的,直接想想就是如果数据是一维,那么这个所谓的pattern就是这个图形走势啦,图形长的想什么函数,就对应着是什么具体的经典kernel,有光滑的无限可微的Squared Exponential (SE),有具有完全周期性的(Periodic),还有一些奇奇怪怪的kernel,比如Rational Quadratic (RQ), Matern(MA) 等等。这里有更详细的解释:http://crsouza.com/2010/03/kernel-functions-for-machine-learning-applications/

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2016-05-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据文摘

剑桥大学研究院总结:26条深度学习经验

2406
来自专栏腾讯高校合作

【犀牛鸟论道】深度哈希方法及其在移动视觉搜索中的应用

1. 简介 移动视觉搜索技术是多媒体搜索领域中一个前沿的研究课题。近年来,移动设备的飞速发展,改变了互联网上图像和视频等视觉内容的产生,以及人们检索和观看的方式...

35710
来自专栏大数据挖掘DT机器学习

用keras对国产剧评论文本的情感进行预测

RNN即循环神经网络,其主要用途是处理和预测序列数据。在CNN中,神经网络层间采用全连接的方式连接,但层内节点之间却无连接。RNN为了处理序列数据,层内节点的输...

3475
来自专栏量子位

GANs很难?这篇文章教你50行代码搞定(PyTorch)

作者:Dev Nag,Wavefront创始人、CTO,曾是Google、PayPal工程师。量子位编译。 2014年,Ian Goodfellow和他在蒙特利...

3155
来自专栏CSDN技术头条

Yoshua Bengio等大神传授:26条深度学习经验

【编者按】8月初的蒙特利尔深度学习暑期班,由Yoshua Bengio、 Leon Bottou等大神组成的讲师团奉献了10天精彩的讲座,剑桥大学自然语言处理与...

1896
来自专栏小樱的经验随笔

机器理解大数据秘密:聚类算法深度剖析

在理解大数据方面,聚类是一种很常用的基本方法。近日,数据科学家兼程序员 Peter Gleeson 在 freeCodeCamp 发布了一篇深度讲解文章,对一...

4204
来自专栏数据派THU

机器理解大数据的秘密:聚类算法深度详解

来源:机器之心 作者:Peter Gleeson 校对:吼海雕 编辑:冯夕琴 本文共6800字,建议阅读17分钟 本文对一些聚类算法进行了基础介绍,并通过简单而...

24710
来自专栏机器之心

教程 | Keras+OpenAI强化学习实践:行为-评判模型

选自Medium 作者:Yash Patel 机器之心编译 参与:乾树、黄小天 本文先给出行为-评判模型(actor-critic model)的基本原理,包括...

3559
来自专栏人工智能LeadAI

《机器学习基石》课程学习总结(一)

《机器学习基石》课程非常棒,作为总结,本文重点是梳理课程中的知识脉络,同时尽可能说白话,让没有机器学习背景的朋友也能看懂。 这个课程好在哪里? 1、最大的好 课...

4175
来自专栏计算机视觉战队

人脸检测与识别总结

上半年跨度到下半年之后,深度学习又进一步推送到了AI的顶端,很多领域都开始涉及到Deep Learning,而在人脸领域,已经被广泛应用,今天本平台再一次详细说...

4254

扫码关注云+社区