ML门外汉的哀嚎

每月总有那么几天,不吐不快。

最近机缘巧合,研究了一些人工智能相关的东西。发现了各种槽点。。。
研究的头昏脑胀,总算稍微有点眉目。记录下。

我的理解不一定是对的,只是吐槽而已。
但我必须给自己一个能自圆其说的解释,否则寝食难安啊。

啥是智能?

说到底,到底啥是智能?人工我能理解,但怎样才算是智能?通过图灵测试就是智能了?会解方程是不是也是一种智能?会矩阵分解就是更高层次的智能了?AI(Artificial Intelligence)这个词的边界,到底在哪里?也许根本就没有边界吧。。。这更像是个营销词汇,让围观群众们不明觉历罢了。就像所谓的bigdata,也是个没有边界的词,适合营销,但不适合作为严格的定义。
所以我很能理解为什么70年代AI那么火,这名字听着就NB啊。不过火了一段时间就沉寂下来了,因为大家发现似乎也没有那么NB。。。机器还是只能做一些简单的事。莫非bigdata也要重复这条老路。。。

如果认为只要能解决问题就算AI,那我们是不是发明AI好多年了。。。各种软件都算是一定程度上的AI了。不过大家感情上可能很难接受。就像我小时候觉得,机器人一定是有手有脚,长得像人一样的。结果某天电视上指着一个机械臂跟我说“机器人生产线替代人类”之类的,我幼小的心灵受到了冲击——只有手臂连手指都没有,也特么能算机器人?

当然也可能AI有自已的严格定义,但是我不知道。不过话说回来,AI说是Computer Science的终极目标也不为过吧。就像统一场论,就像理想国,就像那啥主义一样,都是我们的美好愿景。毕竟不能只有眼前的代码,也要有诗和远方嘛。

而且人工智能的研究还有个特点,有点像个黑盒,学术点说就是“可解释性”不强。比如最近很火的深度学习,可能稍微改改参数效果就会提升很多,但是原因大家都说不清楚。。。光是调参数就能搞出很多paper来。“我不知道我是怎么做到的,反正就是做到了”。。。

不过也许AI确实应该是个黑盒。对于人类而言,我们碰到问题,会经过自己的“思考”、各种“推理”,再形成自己的答案。但我们自己也说不清中间的过程是怎样的。如果机器直接知道所有问题的答案,类似一个Map,每个问题它都能直接给出答案,那它算是有“智能”么?虽然它可以对所有问题给出正确答案,但却没有经过“思考”的过程。如果把它看作一个黑盒,确实应该算是有智能了。有点像大刘的“诗云”的赶脚。。。如果机器能穷举出所有可能的诗,我们就能说它会做诗么?
不过图灵测试是不管这些的,它不限制你的方法,无论是基于规则的还是基于统计的,反正表现的像个人就行。有点像python的duck-typing机制,“叫起来像鸭子,游起来像鸭子,那它就是鸭子”。

名词控

对于人工智能我是没什么基础的,只知道一些简单的机器学习算法,分类、聚类啥的。但是总是会听说很多高大上的名词:人工智能/机器学习/深度学习/神经网络。。。看着就晕,他们之间是什么关系?

也许大概是下面这样:

卧槽这图怎么这么大,还不能缩小。

人工智能,如上所述,是非常非常宽泛的一个概念。为了实现人工智能,人们尝试了很多种方法,所以这里面有很多派别。比较出名的就是基于规则的专家系统,把人类世界的各种“知识”作为规则灌输给机器人,这也是比较容易想到的一条路。所以很多新闻为了吸引眼球就会鼓吹“机器人已经学会了整套大英百科全书”。但是事实证明这条路是走不通的,因为“规则”是无穷尽的。这派很出名的人物就是明斯克,高中时我就从一些科普读物中知道这个人,不过是作为学术霸权的反面典型出现的。。。

机器学习,是人工智能比较成功的一个分支,很多时候可以甚至可以说是代表了人工智能。如果说专家系统是基于理想主义的,让机器去“理解”这个世界,那机器学习就是基于实用主义的,我不管机器是不是真的“理解”,反正它给我的结果能用就行。机器学习本质上是基于统计的,去发现数据的内部规律,进而预测一些未来的情况。但机器学习能做的其实也很有限,大多数情况下只是用一个函数去拟合训练数据,也就是所谓的“模型(model)”,或者是“假设(hypothesis)”,然后拿着这个函数去预测未来的值,当然实际上肯定没我说的这么简单。但有些问题是不能用这个方法解决的啊,比如“如何找到女朋友”这种问题。。。

神经网络,简称ANN,是机器学习理论中提出的一个模型。也有叫做“感知机(perceptron)”、“多层感知机(MLP)”的,都一个意思,历史遗留问题。是对人类神经系统的一种简单抽象,看着好像很高大上的样子,说到底其实就是用来模拟一些函数的工具。之前说过,机器学习通常都要用一个函数去拟合训练数据,怎样找到这个函数?如果我们假设这个函数是线性的,比如一条直线,那就比较好找到。如果是更高阶、更复杂的函数咋办?数学上可以证明,有一个隐层的神经网络就可以逼近任意复杂的函数。别问我咋证明的,我一介学渣怎么会知道。。。题外话,复杂的函数真的可以很复杂,经常在zhihu上看到一些诡异的函数图形。。。

如上图,整个系统分多个层次,一个输入层,一个输出层,中间还有多个隐层。按传统的定义,这是一个2层的神经网络,不算输入层。每个神经元接受上一层的多个输入值,经过自己的一些运算,再给出输出值。有几点要注意的:

  1. 按传统的定义,每个节点的运算都只是简单的sum,然后经过一个“激活函数”,决定输出是0还是1,这个激活函数有很多种选择,比较常用的是sigmod函数。但我不是很清楚为何要这样设计,如果每个节点的计算过程更复杂会怎样?如果输出的不止是0和1又会怎样?也许数学上可以证明没必要的吧,我不清楚。每一层都可以指定激活函数,线性/非线性都可以,不知道同一层中是否可以选定不同的激活函数。
  2. 每个节点处理输入的时候是有权重的,或者说,上图中的“连接”是有权重的。确定权重的过程就是学习的过程。
  3. 每个节点不一定要接受上一层所有的输出,换句话说,上图不一定是“全连接”的。如何连接各个节点也是门学问。

没有隐层的神经网络,最初被称为“感知机”。明斯克为啥被称作学术霸权,就是因为他写了本书把感知机批判的一无是处,最著名的一个黑点就是感知机不能解决异或(XOR)问题,因为这是无法用简单的线性函数来拟合的。他还断言多层的神经网络也没啥前途,因为计算量太大,无法训练。他的权威导致ANN相关的研究停滞了很久,直到BP算法被提出来,ANN才又火起来。

ANN最常用的地方是分类。很多机器学习中的常见算法,比如逻辑回归、SVM之类的,本质上都可以看作ANN的特例。
这个时候的ANN一般都只有一个隐层,因为理论上一个隐层的ANN就能模拟任意函数,而且层数太多的话不好训练,计算量大。BP算法是从后向前训练的,如果层数太多残差传到前面的层就会很小,出现所谓的梯度扩散,训练出来的模型就会不准。

另外我还有点不太明白,既然只是用来模拟复杂函数的工具,为啥会套上神经网络这么一个高大上的名词。也许最开始的感知机确实是在模拟神经元的运作机制,但发展到ANN后,已经跟神经系统没啥关系了。有句话说的好:“不再盲目模拟人脑网络是神经网络研究走向成熟的标志”。

ANN最为人诟病的一点就是“不可解释”,没有一个可靠的理论依据。隐层要用多少个节点?各个节点之间如何连接?为何这样连接的效果更好?很多时候只能凭经验。而且训练起来也确实很复杂,所以在SVM等算法提出后,ANN的研究又一次沉寂下去。

深度学习,ANN借尸还魂,新瓶装旧酒。2006年,又是Geoffrey Hinton(BP算法也是他提出的)在Science上发表了一篇论文,证明了多层神经网络的优越性,可以大幅提高准确率,而且训练上的复杂性可以用一些工程上/数学上的技巧克服。他给这种技术起了一个新的名字:深度学习,由此掀起了深度学习的热潮,至今未衰。我觉得深度学习能火爆的几个原因:

  1. 从理论上证明了多层神经网络有更高的上限,换句话说可以更好的拟合,但也有可能过拟合。
  2. 可以用一些技巧克服训练上的难度。
  3. 大数据的发展,包括GPU运算的发展,数据量和计算能力都有了极大提升。原来一些不可能完成的计算量现在都是小儿科。

通过研究发现,在参数数量一样的情况下,更深的网络往往具有比浅层的网络更好的识别效率。别问我为啥。。。反正DL很好很强大就是了。。。这种程度的研究,一般的学霸都搞不定,更何况我这种学渣了。
深度学习作为ANN的继任者,做出了很多创新,但是也继承了一些缺点,比如之前说的“不可解释”。

整个AI领域的发展过程大概就是这样了。AI是一门很古老的学科,很多工作从上世纪四五十年代就开始了,尤其是ANN,经历了很多起起落落。但真的不要对AI报太大希望,机器能做的事真的是非常有限的,AI发展了这么久,能做的也就是预测/分类/聚类。当然很多现实问题都可以抽象为这几种。“怎么找女朋友”的问题,估计它永远都解决不了。。。
感觉AI的发展过程和NLP有点像啊,最初大家都是试图基于规则去做,让机器去“理解”。但都走不通,最后回归到基于统计的方法上。

既然说到NLP,就再罗嗦几句。我一直奇怪NLP算不算是AI领域的?也许不算吧,感觉NLP是一个交叉学科,会用到机器学习的一些东西,但不全是机器学习,会用到很多其他技术。也许分词/文本分类算是机器学习,但词性标注之类的应该不算。
推荐系统也是一个交叉学科,会用到机器学习一些技术,但又不完全是。
数据挖掘同理。
这些学科,更像是各种技术的集合,就像计算机科学是电气/数学/物理等的集合一样。

机器学习

扯了半天终于扯到正题了。。。下面只是我自己的理解,可能有些是错误的。

机器学习算法跟普通的算法设计不太一样。普通的算法,比如排序/DFS之类的,算法逻辑是“固定”的,可以应用到任意输入上,算法的行为不会因为输入的不同而改变。但机器学习的算法非常依赖数据,就像之前说的,它是用一个函数去刻画已有数据的内部规律(实际上不一定是函数),然后去预测未来的数据。如果输入的数据量不够大,或者质量不好,它生成的函数(或者说模型)效果就会很差。说到底,它还是脱胎于统计学的,如果样本数量不够,统计学是无能为力的。

其实“机器学习”这个词也很难定义,边界也很模糊。。。与其研究这些形而上的东西,不如直接看看机器学习中有哪些算法、能帮我们做到什么。

几个基本概念:

  • 特征(feature):这是最关键的东西,通俗点说,就是从哪些维度去描述一个事物。比如“早上好”这句话,如果以词为特征,可能是[“早上”, “好”];如果以字为特征,可能是[“早”,”上”,”好”];如果以字数为特征,就是[“3”]。而且这些特征可以任意组合。特征选的好不好会直接影响算法效果。而且特征的选取是很难的,很多时候只能凭经验。特征一般会用一个向量表示。
  • 目标(target):就是要预测的值。对于有些算法而言其实没有target,比如聚类。
  • 数据集:用于统计分析的样本数据。数据一般会分成训练集和测试集。所谓的数据,很多时候就是一个features->target的映射。
  • 假设(hypothesis):就是训练所得的函数,由于一些历史原因,被称作hypothesis。

按训练数据集的类型分类:

  • 监督学习。输入的数据是有标注的,或者说,是有target的。监督学习最常解决的问题就是回归和分类。回归一般用于预测一个连续的值,分类用于预测一个离散的值。分类算法又可以分为二分类、多分类等等。其实现实世界中的很多问题都可以抽象为分类问题,所以分类算法应用很广。
  • 无监督学习。输入的数据没有target,只有features。比如聚类。我只稍微知道一点k-means。

但无论如何,数据都是必须要有features的,无论这个features是人工选取的,还是计算出来的。如果要为一个人选取特征,我们可以手工选取性别/年龄/身高/肤色之类的,这是因为我们有着“经验”,或者叫做“先验知识”/Inductive_bias,我们知道这些属性“足够”描述一个人。但对于未知的数据,我们该如何选取特征?比如我们预测一个人该去男厕所还是女厕所,明显可以根据性别分类,但训练数据中的特征却不包含性别,只有身高/肤色之类的,于是呵呵了。。。训练出来的模型可能跟实际偏差非常大。有一种方法是“乱枪打鸟”,把所有可能的特征都选出来,总会有一些特征能生效的。似乎深度学习中就是应用了这种思想。但过多的特征也会造成计算量增加,要自己权衡的。

前面说过,机器学习大多是用一个函数刻画数据的内部规律(或者说去拟合数据),得出这个函数的过程就是训练过程。但这个描述也不是很准确:

  1. 数据的内部规律,未必能用一个函数来描述,还有各种树模型、XX模型之类的。其实数据到底有没有规律也不过好说。。。数据的内部规律是我们假设出来的,我们假设它是线性的,于是才会用一个线性函数去拟合。也可能数据根本是没有规律的,但我们也能强行搞出一个线性函数,只是效果很差罢了。
  2. 不是所有的机器学习算法都有训练过程。无监督的算法肯定都没有训练过程的,一些有监督的算法也没有训练过程,比如KNN。是否有训练过程,也是取决于我们对数据规律做了怎样的“假设”。

关于Inductive_bias,这个zhihu帖子讲的很好。

一般过程:

  1. 准备数据。特征选取、归一化。这是所有算法都要做的。特征的选取之前有说过,归一化是为了让特征更“规整”,不会让某些特征影响过大。
  2. 训练模型。如前所述,不是所有算法都有训练过程的。训练过程目的是为了让模型的误差最小,或者说是找到loss function(也有叫做cost function/error function的)的最小值,常用梯度下降法。这里有很复杂的理论,如何处理局部最优,如何处理过拟合等等。
  3. 使用模型。使用训练好的模型预测新的数据。

机器学习的理论也很古老了。。。但受限于计算能力,似乎一直没有什么很成功的应用。也可能是我孤陋寡闻。好像之前有什么无人驾驶汽车就是用机器学习算法驱动的。近些年随着bigdata的火热,计算能力/数据处理能力大幅增加,各种开源的算法库的出现(mahout、spark mllib),感觉机器学习的门槛下降很多,相关的应用也多起来了。

深度学习

这块我就更是不懂了。。。只是看了些资料。
上面已经说过,深度学习是在ANN基础上发展而来,摘录一段话:

深度学习的实质,是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。因此,“深度模型”是手段,“特征学习”是目的。区别于传统的浅层学习,深度学习的不同在于:1)强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;2)明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。与人工规则构造特征的方法相比,利用大数据来学习特征,更能够刻画数据的丰富内在信息。

是不是特抽象?每一个字我都认识,但这段话到底是在说啥。。。

之前说过,选择特征是非常麻烦的事情。特征选的不好,算法效果就会很差。而人工选择特征又很麻烦,只能凭经验。所以能不能让机器自己选择特征?
深度学习可以部分达到这个目标。它可以将原始的特征,经过若干次变化,生成更多的特征。比如输入的特征是[x, y],它可以将这个特征变成[x, y, sin(x), y^2, x*y]之类的,当然实际上没这么简单。这就是上文所说的“将样本在原空间的特征表示变换到一个新特征空间”,新生成的特征能更好的描述数据的本质,分类/回归的效果也就会更好。别问我为啥,我也不知道。。。
那原始特征如何产生呢?也许可以用一些简单的方法吧,比如字向量之类的,不清楚。
而且这种特征的变换不是一次性的,跟网络的深度有关。
深度学习又被叫做“无监督特征学习(Unsupervised Feature Learning)”,就是因为它实际上是一个学习特征的过程。

深度学习的训练过程,忘了摘录自哪里了:

  1. 使用自下上升非监督学习,这个过程可以看作是feature learning过程(或者说,它只是学习获得了一个可以良好代表输入的特征,这个特征可以最大程度上代表原输入信号)
  2. 自顶向下的监督学习(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调)

深度学习的网络是逐层训练的(layer-wised training),之前有个段子就是“专业卷积神经网络训练,每层5元”。。。在所有层都训练完之后,再进行一些微调(fine-tuning)。主要是通过这两种方式,克服传统ANN中训练的难度。

深度学习的训练过程可以是无监督/有监督的,而传统的ANN都是有监督的。但分类系统不可能是无监督的,即使是深度学习,输出的最后也要接一个分类器。

虽说非监督(如DBM方法)是深度学习的一个优势,深度学习当然也可用于带监督的情况(也即给予了用户手动标注的机会),实际上带监督的CNN方法目前就应用得越来越多,乃至正在超越DBM。

另外卷积神经网络(CNN)好像和深度学习其实没啥关系,93年就出现了,本质上还是传统的ANN。

深度学习还有个特点,训练时似乎没有分布式的版本,大家都是单机上搞一堆GPU去训练。似乎有人说分布式训练的效果还不如单机?已有的一些工具,比如TensorFlow/Caffe/Torch,也都是单机。spark作为大数据领域集大成者,没有包含深度学习相关的工具,也是有点奇怪。。。Spark Summit 2016中提到了一些,Caffe on Spark之类的,好像挺有意思。

聊天机器人

聊天机器人的概念也有些年头了。。。但是这个概念似乎最近又火了起来,可能是各大公司带了波节奏吧,见这里/还有这里,连盈利模式都想好了。甚至有人说,Facebook Messenger可以变成App Store,大家都在上面开发bot,重现当年开发app的狂热。

其实语音助手也出现好多年了吧,比如siri。当年某个小伙伴还很自豪的跟我炫耀:“phone my little brother”——于是自动给某人打电话。为啥现在突然火了?是因为app太重了?于是想用bot去轻量级的承载各种服务?其实有点类似微信公众号,很多尝试性的业务都适合用微信公众号来做,直接做app成本太高,而且app获取用户太难了。
微信公众号也算是个简易版机器人了,就是看起来没那么智能。
大家都把前景描述的很美好,自动分析你的需求/个性化推荐/帮你叫外卖之类的。我倒是谨慎乐观,想想人工智能的前几波浪潮吧。

YY了机器人的几种做法:

  1. 模式匹配。很简单,就是个问答系统,像是数据库的like语句。用户输入某个句子,系统尝试在已有的语料里寻找,命中则返回。这是最容易想到的方式。
  2. 机器学习。用一大堆已有的语料去训练,然后让机器人自己预测下一句。但是缺陷很大,语料都是死的,机器人只能严格匹配,换一种说法它就无法处理了。而且它也不能触发服务,比如语料中显示“明天下雨么”的下一句是“会下雨”,这只是个special case。正确的行为是根据天气预报给出答案,机器人却只会机械回复“会下雨”。
  3. 语义理解。让机器人去理解一句话的意思,再根据用户意图选择回答,这里还是要靠规则。我对NLP完全不了解,不知道能不能做到这种程度。有个很有趣的服务wit.ai似乎可以自动帮你分析语义,不知道实际效果如何。

感觉上,模式匹配还是主流。。。虽然low,需要很多人工的工作,但对用户体验比较好。其他的实现方式都可能出现前言不搭后语、逻辑混乱的情况。。。最著名的开源机器人应该是A.L.I.C.E.吧,大概看了下它的实现,本质上也是模式匹配。它最大的贡献是AIML标准。不过这个项目也很古老了。最近试用了老东家的客服机器人网易七鱼,也是模式匹配,需要自己录入各种关键词和对应的回答,不知宣传中的语义分析和深度学习用在哪里。。。

对机器人而言,录入语料是最大的麻烦事。如何结构化?结构化到什么程度?如何尽量减少人工的工作?如何平衡机器的“智能”和人工的规则?
我理想中的机器人,直接把一本书灌给它,它自己提取出其中的对话并学习,然后把这些对话应到到聊天中。或者直接灌一些聊天记录给它。当然这个有点太理想化了。。。

一些资料

Andrew Ng的机器学习公开课,经典中的经典,这门课在Coursera上还有另外一个版本
http://open.163.com/special/opencourse/machinelearning.html

给出了一些matlab中的使用实例,对于理解很有帮助:
http://www.cnblogs.com/heaad/archive/2011/03/07/1976443.html

讲了各种历史,非常赞:
http://www.36dsj.com/archives/39775

非常详细的资料集合:
http://blog.sina.com.cn/s/blog_6a1b8c6b0101h9ho.html

关于ANN的衰落讲的较好:
http://36kr.com/p/208510.html

PCA降维:
http://blog.csdn.net/watkinsong/article/details/8234766

Google随tensor flow开源而开放的一个小玩具,可以帮助理解一些概念,很有意思:
http://playground.tensorflow.org/

各位大佬,别再拿人工智能当春药了!
确实现在人工智能有过度炒作之嫌,就像当初的云计算,现在的大数据一样。

其他一些
http://hahack.com/reading/ann2/
http://deeplearning.stanford.edu/wiki/index.php/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C
http://nautidea.com/nautidea/articles/5694f6449eb5f06447e7a87b
http://blog.sciencenet.cn/blog-4099-785174.html

几篇访谈,了解大牛们的想法,很赞:
对话Facebook人工智能实验室主任、深度学习专家Yann LeCun

人工智能的每一个新浪潮,都会带来这么一段从盲目乐观到不理智最后到沮丧的阶段。感知机技术、基于规则的专家系统、神经网络、图模型、支持向量机甚至是深度学习,无一例外,直到我们找到新的技术。当然这些技术,从来就不是完全失败的,它们为我们带来了新的工具、概念和算法

原百度深度学习研究院创始人余凯谈人工智能大趋势

其他的机器学习的方法可能随着数据的增加,性能提高到某一个点就饱和了。但目前为止对于深度学习我们还没有观察到这点,这可能是它最值得关注的地方

百度最强大脑在想什么? —— 36氪硅谷专访百度首席科学家 Andrew Ng
Ng去了百度让人很意外。。。

无关的读后感

其实跟本文没啥关系,只是最近读的一些文章而已,单独开篇也不值得,塞到这里好了。

让我们来谈谈分工:有句话讲的很好:“作为工作的人,当你选择工作或任务的时候,你是选择做支持性的工作,还是做产出性的工作?你是选择做劳动密集型重复工作,还是做知识密集型的创新性的工作?”每个人都会有自己的答案,但很多时候这不是自己能决定的。创新性的工作失败风险会更大,如果失败,是否有退路?创新性的工作可能很久都没有产出,评KPI会很吃亏,自己是否能承受?

SQL注入之SQLmap入门:听了一个安全方面的分享才知道sqlmap,现在工具都这么智能了啊。。。我记得以前都要手动加单引号什么的,再一遍遍构造各种奇怪的url。

分布式MySQL集群方案的探索与思考:数据库中间件是每个公司都会碰到的问题,本文详述了各种实现方案,很赞。

HTTPS之难:运营商劫持太严重了,所以我们的一些系统也在做https改造。好在有统一的网关可以做掉。我觉得最难的地方是很可能考虑不周全。。。以为只要改掉系统A的接口就可以,结果又牵连到系统B,系统B又会牵涉到C。https改造是真正的牵一发而动全身。

碎碎念

  1. 怎么又写了这么多。大概是拖的太久了。。。
  2. 最近领悟了一个原则:基础比什么都重要。招人的时候,即使对方没有任何业务经验,只要基础好,都不是问题。基础好的人可以快速切到其他领域,无论是新的技术还是新的业务。我就只能算是一个标准的engineer,说不上好也说不上坏。。。
  3. 所谓的“全栈”,不是说你什么都要会。而是需要你会的时候,你能很快的学会。所以基础很重要。
  4. 不要总想着高大上的做法,duck-typing,只要能达到效果就好。但也不能搞一堆if-else。。。有人跟我说写业务代码就是一堆if-else。。。还是要适度。
  5. 线性代数非常神奇,可以简化很多写法/计算,虽然我忘得差不多了。我特么就记得矩阵乘法了。
  6. 能把一门技术以通俗易懂的形式讲出来,是非常了不起的。我见过很多人/很多presentation,搞各种高大上的名词把人弄晕。要么是那个人确实有货,但表达不好,要么就根本是徒有其表。
  7. 工作烦躁的时候就去刷刷leetcode,冷静下,效果挺好的。不过刷题很快,写题解很慢啊。。。不知猴年马月才能写完。
  8. ML真的不是make love的缩写么?无所谓了反正都是门外汉。。。