4

一篇不是很枯燥的ChatGPT闲谈

 1 year ago
source link: https://www.woshipm.com/ai/5808135.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

ChatGPT中的GPT是什么?GPT3到ChatGPT又经历了哪些过程呢?本文作者对ChatGPT的发展过程进行了总结分析,并分享了他关于ChatGPT的看法,看完这篇文章,相信你会对ChatGPT有更深度的了解。

fb6b0b46-d9dd-11ed-8d63-00163e0b5ff3.jpg

这是一篇ChatGPT有关的文章,总共有三部分:先科普一下ChatGPT中的GPT是什么,然后介绍从GPT3到ChatGPT的过程,最后进行一些个ChatGPT闲谈。如果不想看技术,可以直接跳到闲谈。鉴于已经有非常多的优秀创作者进行总结和分析,本文将会包含非常多的论文原文以及资源链接,都是值得一阅的好文,再次感谢这些优秀的创作者们。

一、ChatGPT中的GPT是什么?

在很久很久以前(1982年那么久),深度学习模型中有一个非常经典的模型叫做RNN,即Recurrent Neural Networks(循环神经网络)[1]。RNN的出现是为了更好地处理序列信息,RNN隐藏层的值不仅受到当前输入的影响,还取决于上一次隐藏层的值。

比如:“我 爱 你”三个字,“爱”不仅仅是“爱”,还包含了“我”的语义信息。但是对于较长的序列或者句子,RNN的机制会出现梯度消失的问题,简单说就是当句子是:“我爱你中国,我爱你春天蓬勃的秧苗,我爱你秋日金黄的硕果,我爱你青松气质,我爱你红梅品格,我爱你家乡的甜蔗,好像乳汁滋润着我的心窝。”最后一个“心窝”已经没有办法包含太多的第一个“我”的语义信息了。

而后,最早在计算机视觉里应用的Attention机制被拿来用在了自然语言处理。该机制的思想就是把注意力集中在重要的信息上,而忽视不重要的信息(可见Attention图解[2])。2017年,Google的研究人员发表了《Attention Is All You Need》[3],这篇文章中的Transformer模型是GPT的基石,整个网络结构是由Attention机制组成[4],并且将序列中的任意两个位置之间的距离缩小为一个常量,其次Transformer具有好的并行性,符合现有的GPU框架。

这里必须要提一下:Transformer设置了一种“位置编码”(position encoding)机制,用来向序列数据添加位置信息,进而让模型学到“顺序”。做法简单巧妙:用正弦、余弦函数生成沿时间轴变化的波形,然后把这种波形叠加到Transformer的输入中。

那什么是GPT模型呢?是生成式预训练模型(GPT,Generative Pre-Training),是OpenAI研究人员在2018年提出的模型[5]。GPT其实可以看作是Transformer模型中decoder部分修改后的模型(红色框如图1所示)[6]。

一篇不是很枯燥的ChatGPT闲谈

图1:Transformer模型

GPT去掉了Transformer的多头注意力(Multi-head Attention),然后在进行模型输出时,利用特定的下游任务进行微调(分类任务、自然语言推理、语义相似度、问答和常识推理)。具体而言,GPT采用了Hinton等人2006年提出的一种经典的神经网络训练策略:“预训练+微调”的二段式训练策略[7]。在预训练阶段,首先基于庞大的生语料训练一个生成式语言模型;在微调阶段,使用标注数据继续训练模型。

一篇不是很枯燥的ChatGPT闲谈

图2:GPT模型

这样的生成式模型可以给他输入N个单词(也称为Token)的序列,输出是最有可能在输入序列末尾放置的单词的预测。举个例子:

过了一会儿,大灰狼来了,他想闯进小兔子的→家

当我们想得到一个以上的多个单词时,就将得到的下一个单词添加到输入序列中,就可以得到下一个单词。

一篇不是很枯燥的ChatGPT闲谈

图3:序列输入输出示例

以此发散,GPT可以进行的任务其实有非常多,比如:文本生成、代码生成、问答等等,如果要扯上其他类型的数据,也不是不行,比如图像生成、视频生成等等,谁还不是些个高维向量嘛。

二、从GPT3到ChatGPT

1. 费钱的GPT3

从GPT模型提出以来,OpenAI就在不断进行模型优化。GPT系列的模型结构秉承了不断堆叠Transformer的思想,通过不断的提升训练语料的规模和质量,提升网络的参数数量来完成GPT系列的迭代更新[8]。其中,GPT3模型是ChatGPT的基石,该模型拥有1750亿的参数,利用45TB的数据进行训练,其训练费用高达1200多万美元,知乎上有个帖子在讨论GPT3花了多少钱[9]。不得不说,OpenAI的这些个模型一直搞是真的有钱。在GPT3的文章[10]中,作者自己坦白实验中的实验数据是有些问题的,但是由于训练的花费太高了,再训练一次也不太合适。

一篇不是很枯燥的ChatGPT闲谈

图4:GPT3论文原话

但是不得不说,GPT3的效果在大语料大参数量的加持下有了一些成绩,并展示了三个重要的能力[11]:

  1. 语言生成:遵循提示词(prompt),然后生成补全提示词的句子(completion)。这也是今天人类与语言模型最普遍的交互方式。
  2. 上下文学习 (in-context learning):遵循给定任务的几个示例,然后为新的测试用例生成解决方案。很重要的一点是,GPT3虽然是个语言模型,但它的论文几乎没有谈到“语言建模”(language modeling),作者将他们全部的写作精力都投入到了对上下文学习的愿景上,这才是 GPT3的真正重点。
  3. 世界知识 (world knowledge):包括事实性知识 (factual knowledge)和常识(commonsense)。

但是,仍然需要铭记于心的是,GPT3的本质还是通过海量的参数学习海量的数据,然后依赖transformer强大的拟合能力使得模型收敛。基于这个原因,GPT3学到的模型分布也很难摆脱数据集的分布情况。对于一些明显不在这个分布或者和这个分布有冲突的任务来说,GPT3还是无能为力的。GPT3的缺点有[12]:

  1. 对于一些命题没有意义的问题,GPT3不会判断命题有效与否,而是拟合一个没有意义的答案出来;
  2. 由于40TB海量数据的存在,很难保证GPT3生成的文章不包含一些非常敏感的内容,例如种族歧视,性别歧视,宗教偏见等;
  3. 受限于transformer的建模能力,GPT3并不能保证生成的一篇长文章或者一本书籍的连贯性,存在下文不停重复上文的问题。

就连OpenAI的首席执行官都说,GPT3会犯愚蠢的错,GPT3只是人工智能领域非常早期的一瞥。

一篇不是很枯燥的ChatGPT闲谈

图5:Sam Altman的Twitter原话

但是这起码是一瞥,GPT3对AI领域的影响是深远的,给AI领域注入了一剂强心剂,告诉各大硬件厂商工作要加油,只要算力足够强,AI性能还有提升的上界。不过,由于其高昂的计算代价也引发了一些垄断的讨论:中小企业没钱搞,而形成AI巨头对算力要求高的算法的技术垄断。当时知乎上有一个问题“如何评价1700亿参数的GPT-3?”[13],复旦大学邱锡鹏老师回答说:英伟达或成最大赢家!邱总给了2019 年 3 月机器学习先驱阿尔伯塔大学教授 Richard S. Sutton 著名的文章《苦涩的教训》的开篇的一段话,其中一句是“70 年的人工智能研究史告诉我们,利用计算能力的一般方法最终是最有效的方法。”

一篇不是很枯燥的ChatGPT闲谈

图6:The Bitter Lesson [27]

2. GPT-3 到 ChatGPT的心路历程

再次,感谢热心NLP同胞在网上的各种讲解,有网友梳理了2020 版 GPT-3 到 2022 版 ChatGPT的心路历程[11],如图6所示,并且非常仔细地给出了不同版本模型的演变和差异。

一篇不是很枯燥的ChatGPT闲谈

图7:2020 版 GPT-3 到 2022 版 ChatGPT的心路历程

可以看到,当GPT3模型出世以后,OpenAI团队就将其用在了代码生成[14]和基于指示学习的初代ChatGPT之InstructGPT。其中,微软的应用市场已经提供了相关的代码生成服务[15]。其实,代码生成是一个非常有利可图的市场。考虑到程序员的高时薪,即使每月节省几个小时的编码时间,也足以支付Codex的订阅费。不过Codex依然还是会犯错的!OpenAI的研究人员在论文中警告:“安全使用Codex这样的代码生成系统需要人类的监督和警惕。”再说InstructGPT,其实这个就是ChatGPT最初始的模型了,而后,模型又加入了RLHF策略,这是啥呢,全称是Reinforcement Learning from Human Feedback,翻译过来就是基于人工反馈的强化学习。接下来我们再回顾一下ChatGPT背后的技术路线:

一篇不是很枯燥的ChatGPT闲谈

图8:InstructGPT模型框架

Step1:工程师团队设计了一个基于 Prompt 训练方式的数据集,里面有大量的提示文本,并且详细说明了下游任务是什么。将这个训练集交给人类标注记录人类的回答,并拿这个数据集去通过 Prompt的方式微调 GPT3。

当下,人们玩ChatGPT玩的非常666,不过ChatGPT 效果好不好一部分原因取决于你的 Prompt(提示词),那什么是Prompt呢?其实就是你问ChatGPT的那句话,可以问他今天星期几,也可以问他牛顿是谁,还可以问很多问题。但是怎么问,问什么是会得到不同效果的答案的。目前已经有很多网友总结出如何撰写Prompt的指导手册[16],亚马逊的网站上都有书卖了,甚至都有网站专门交易Prompt[17]。大家为了赚钱真是努力啊。

一篇不是很枯燥的ChatGPT闲谈

图9:Prompt交易网站

一篇不是很枯燥的ChatGPT闲谈

图10:2022年年底关于Prompt撰写的指南

写好Prompt,走遍天下都不怕。根据热心网友总结出的Prompt撰写原则,需要尽量follow这么几点[16]:

  1. 清晰,切忌复杂或歧义,如果有术语,应定义清楚。
  2. 具体,描述语言应尽量具体,不要抽象活模棱两可。
  3. 聚焦,问题避免太泛或开放。
  4. 简洁,避免不必要的描述。
  5. 相关,主要指主题相关,而且是整个对话期间,不要东一瓢西一瓤。

Step2:微调后的模型姑且称为 GPT3-1 吧,用 GPT3-1 去预测第一步的数据集的任务得到 N 个结果,并且让标注人员标注每个选项的好坏并把这个标注后的数据集用来训练奖励模型(RM)。

其实,这一步就是基于人类反馈的强化学习,即通过人类的反馈,有针对性地进行优化。如果说深度学习是在学习表征的话,强化学习就是在学习规则。简单来说,以前,我们针对输入就只输出一个结果A,完了不断优化结果A;现在,我们针对输入,输出了结果A、B、C、D,然后我还告诉模型这个A、B、C、D哪个好,哪个不好,模型你要好好学,尽量学出好的那些选项,而不是不好的(reward model的目标是拿高分)。

Step3:使用 PPO 的策略来更新参数,拿 GPT3-1 再预测一次数据集的结果通过第二步的奖励模型进行打分,计算奖励(reward)。最后将这个奖励分数通过 PPO 给到 GPT3-1 进行训练。

第三步简而言之就是把奖励的结果投入到模型的参数更新环节,不断拟合,得到最后的模型。

这里提到的PPO[18]的全称是Proximal Policy Optimization,近端策略优化算法,网上现在的解析也很多啦[19],就是用来做策略梯度下降。机器学习中常常举的一个栗子是,人要下山,那往哪里走,下山稳又速度快。

梯度下降算法有三种类型:批量梯度下降、随机梯度下降和小批量梯度下降。PPO算法提出了目标函数可以在多个训练步骤实现小批量的更新,解决了策略梯度算法中步长难以确定的问题。如果步长太小,训练时间就会过长。如果步长过大,有用信息会被噪音掩盖(因为每个数据影响都很大),或者令性能灾难性的下降,难以收敛[20]。

说到这第三步,现在有很多吃瓜群众都会问:火出圈的为什么是 OpenAI,而不是国内的一线大厂?我的回答是:就拿这ChatGPT里的PPO策略(用来更新参数的算法)来说, 这个PPO是2017年,OpenAI团队提出的,对2015年提出的TRPO算法[21]的改进版本,提出TRPO这个算法的人是伯克利的博士生John Schulman等人,包括其导师,他导师是强化学习领域的大神Pieter Abbeel, Abbeel是伯克利的副教授,同时也是OpenAI的研究科学家,是机器人强化学习领域最有影响力的人之一。不得不说,人家现在走的每一步,都是因为之前走的每一步。

三、ChatGPT闲谈

1. 为什么ChatGPT出名,而GPT3没有?

首先回到2019年,Google团队提出了Bert模型[22],训练一个 Bert模型租用云算力要花大概 6912 美元,GPT3 需要的算力是 Bert的 1900 多倍, 另外,同等参数规模下,Bert的效果要好于GPT。笔者当时的毕业论文就是用的Bert模型,Bert当时真的成为了各种实验的基线,维基百科中提到:2020年的一项文献调查得出结论:“在一年多一点的时间里,BERT已经成为NLP实验中无处不在的基线”,算上分析和改进模型的研究出版物超过150篇[23]。

Bert胜在易得,我自己感觉GPT的风头并没有Bert大,大厂内各种在做的也多是Bert的身影。那为啥ChatGPT出圈了?我觉得很大的一个原因是他的出圈方式,之前很多时候,搞人工智能研究的,但凡有突破性进展都是通过发论文的方式来说明自己的模型有多厉害。就算放开API,也有一定的使用门槛,最多在Twitter上吹一把模型多厉害。

SHbAxKQCGnOlb9GJS1UP.png

图11:当年Google研究员的Bert宣传

但是这次的ChatGPT完全不一样,直接放开了一个对话框给大家玩,男女老少都能参与,而且效果不差,那可不得一下子就火起来。对于这样大胆的放开,又不得不提到“那些年被毙掉的Tay”,2016年,Twitter 上发布了一个人工智能聊天机器人 Tay,但在和用户开放对话后不到一天的时间里,它就“变成”了一个热爱希特勒、讥讽女权主义的机器人,最终由于不恰当的种族主义言论引发了激烈争议。所以,接下来想要介绍的是ChatGPT在数据标注上的一些个建树。他们是有严格且规范的标注指南的[24],并且在不能回答的一些个问题上,是绝对就不回答的。

所以目前来看,如果只是简单的一些Prompt来问,ChatGPT还是可以规避一些不好的问题的。相比于直接拿开放的语料训练,这种花多点钱,但是数据有一定质量保证的模型还是更加能够拿出来给公众耍。据说,OpenAI雇佣了80 位人工标注者生成了6.48万条数据对模型进行调校,耗资约百万。

2. 胡说八道的ChatGPT出世后

首先,ChatGPT 并不是一个算法,更像是一套方案,也就是综合了多种方法的一个有机系统,模型追溯其根本都是在之前的研究上搭建起来的。另外,其在数据质量和多样性上非常讲究。虽然ChatGPT强化学习的数据量并不大,但对数据多样性、标注体系都有精巧的设计,让数据发挥出了强大的作用。所以当然目前ChatGPT还有很多问题在争议中,这里截取了一些声音(没能标注来源抱歉!):

1)数据问题

「ChatGPT 接受公共数据的训练,这些数据通常是在未经同意的情况下收集的,这会带来一系列的责任归属问题。」

「我们不允许 AI 被列为我们发表的论文的作者,并且在没有适当引用的情况下使用 AI 生成的文本可能被视为剽窃。」《Science》系列期刊的主编

「模型的内部知识总是在某个时间被切断。模型始终需要最新的知识来回答最新的问题。ChatGPT当下一个很大的弊端是无法实时获取互联网信息。」

2)成本问题

「客户有私有化部署要求,但这些模型非常大,对资源要求高,当前不太可能实现私有化部署。」

「没有一个老板能接受,NPC回复一句话要花掉几毛钱,即使它说得再好。」

但是我看到的最让我有感触的其实是这句话:“短期内可能大家会高估这个东西,但长期可能有很多人会低估这个东西。”首先,ChatGPT走到今天的这一步,是在非常多重要的基石上累积起来的。我相信ChatGPT应该也会成为一块基石,将有更多的能力在此的基础上进行搭建,这不是一次性的成功,这还是人工智能的一瞥。而背后需要的算力(硬件)、数据(钱、能拥有数据的能力)、算法(一些个真正的科研人员),缺一不可。

2月20日的时候,复旦大学自然语言处理实验室发布国内第一个“对话式大型语言模型MOSS”的消息,轰动科技圈,大量访问一度造成服务器过载。21日上午,MOSS研发团队通过公开信为“体验不好”致歉,表示愿意在MOSS完成初步验证之后,将相关经验、代码、模型参数开源共享,MOSS是邱锡鹏教授的团队开发的。感觉是一个“有真正的科研人员+没有硬件支撑和工程化能力”的例子。

再看最近,有人问:ChatGPT 对多模态领域技术发展方向的影响?那必然是:卷起来了!3月6日,谷歌发布“通才”模型PaLM-E,作为一种多模态具身 VLM,它不仅可以理解图像,还能理解、生成语言,执行各种复杂的机器人指令而无需重新训练。它还展示出了强大的涌现能力(模型有不可预测的表现)。然后也没隔多久,微软开始拉着OpenAI,N鸣惊人。

3月14日,OpenAI携手微软于发布了GPT4[25],也是关注多模态的,实验效果要比PaLM好,并且可以执行非常多的任务,比如,GPT4 在各种职业和学术考试上表现和人类水平相当。模拟律师考试,GPT4 取得了前 10% 的好成绩,做美国高考 SAT 试题,GPT-4 也在阅读写作中拿下 710 分高分、数学 700 分(满分 800)。

一篇不是很枯燥的ChatGPT闲谈

图12:GPT4考试成绩一览

整个GPT4模型的工程由预训练、视觉、长文本、强化学习与对齐、评估与分析、部署等团队参与,同时OpenAI也致谢了微软的合作,特别是微软Azure在基础架构设计和管理方面支持模型训练,以及微软Bing团队和微软安全团队在安全部署方面的合作(详见公众号文章解说[26])。结果再一转头,Bing浏览器立马就把模型用了起来。

不得不说,或许这将是谷歌遭到的致命一击,回想起2023年初谷歌裁员了1.2万余人,并且有非常多资深的开源大佬。要知道最流行的人工智能机器学习框架如 PyTorch、TensorFlow 和 Rasa 都是开源项目,而当时却让优秀和最聪明的开源专家离场,此刻不免有些戏剧。但是说实话人家GPT4论文也说了:咱这模型还是不完全可靠的(它会自己幻想一些事实,并且推理错误),用语言模型输出时应该格外小心,尤其在高风险上下文中,并且需要确切的协议(比如人工审查、附加上下文等等)。

一篇不是很枯燥的ChatGPT闲谈

图13:GPT4论文中的警告,hallucinate这个词妙

所以大家,还是先适度地醒一醒。结果,微软拎着GPT4开过光的全家桶走来了,导致大家、我觉得至少大部分人一时半会儿时醒不过来了,GPT4可太上头了。微软CEO纳德拉表示,今天是一个里程碑,意味着我们与电脑的交互方式迈入了新的阶段,从此我们的工作方式将永远改变,开启新一轮的生产力大爆发。

说实话,模型还是那个模型,就是应用的场景和方式变了,并且在办公软件这样的落地环境里,至少人们的要求是明确的,相比开放式的ChatGPT,或许全家桶的效果更好。最近吃瓜群众着急的是自己是不是要被人工智能替代了,人家深度学习巨头之一LeCun都急了:Calm down,还早呢。

一篇不是很枯燥的ChatGPT闲谈

图14:Yann LeCun在3月20日发的Twitter评论Human-level AI

接下来,看看微软花的钱能不能通过商业化回来吧,不过,今天ChatGPT出bug[28]了。微软的股价也跌了一下下。

一篇不是很枯燥的ChatGPT闲谈

图15:微软近一个月的股价

再次回顾一下,简直是大模型越烧越旺的一周:

3月13日,斯坦福发布LLaMA模型:https://github.com/tatsu-lab/stanford_alpaca

3月14日,清华发布ChatGLM-6B模型:https://github.com/THUDM/ChatGLM-6B

3月14日,OpenAI发布GPT4模型:https://openai.com/product/gpt-4

3月14日,谷歌给出PaLM API:https://blog.google/technology/ai/ai-developers-google-cloud-workspace/

3月15日,PyTorch2.0发布:https://pytorch.org/blog/pytorch-2.0-release/

3月16日,微软发布Microsoft 365 Copilot:https://blogs.microsoft.com/blog/2023/03/16/introducing-microsoft-365-copilot-your-copilot-for-work/

3月16日,百度发布文心一言:https://yiyan.baidu.com/welcome

让子弹再飞一会儿吧。英伟达此刻真的哈哈哈。

[1] 论文:https://www.pnas.org/doi/pdf/10.1073/pnas.79.8.2554;

[2] 中文:https://zhuanlan.zhihu.com/p/342235515 ;英文:https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3#0458 ;

[3] 论文:https://arxiv.org/abs/1706.03762 ;

[4] 自注意力机制和transformer详解:https://luweikxy.gitbook.io/machine-learning-notes/self-attention-and-transformer ;

[5] 论文:https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf;

[6] https://zhuanlan.zhihu.com/p/125139937 ;

[7] 论文:https://www.cs.toronto.edu/~hinton/absps/fastnc.pdf;

[8] https://zhuanlan.zhihu.com/p/350017443 ;

[9] https://www.zhihu.com/question/412295638/answer/1387457462 ;

[10] 论文:https://arxiv.org/pdf/2005.14165.pdf ;

[11] 强推阅读材料:https://yaofu.notion.site/GPT-3-5-360081d91ec245f29029d37b54573756 ;

[12] https://zhuanlan.zhihu.com/p/350017443;

[13] https://www.zhihu.com/question/398114261

[14] https://openai.com/blog/openai-codex/ ;

[15] https://learn.microsoft.com/en-us/azure/cognitive-services/openai/how-to/work-with-code ;

[16] https://mp.weixin.qq.com/s?__biz=MzIxMzkwNjM2NQ==&mid=2247521130&idx=1&sn=f710af36749e8be0caa7249d913e28d0&chksm=97ad75b8a0dafcaed61ce821c6689ecc478bac836680f59b26473b14a75b00f18bd74aae0c63&mpshare=1&scene=1&srcid=02076gsCDwzP4ENko7r0U66d&sharer_sharetime=1675823385633&sharer_shareid=0a9c66924ea99ca17a8569783429bda1&version=4.1.0.6015&platform=win;

[17] https://promptbase.com/ ;

[18] 论文:https://arxiv.org/abs/1707.06347 ;

[19] https://zhuanlan.zhihu.com/p/479912119 ;

[20] https://blog.csdn.net/weixin_44436360/article/details/107979004 ;

[21] 论文:https://arxiv.org/abs/1502.05477;

[22] 论文:https://arxiv.org/abs/1810.04805 ;

[23] https://zh.wikipedia.org/wiki/BERT ;

[24] 官方标注手册:https://docs.google.com/document/d/1MJCqDNjzD04UbcnVZ-LmeXJ04-TKEICDAepXyMCBUb8/edit ;

[25] 论文:https://cdn.openai.com/papers/gpt-4.pdf;官网:https://openai.com/research/gpt-4;

[26] https://mp.weixin.qq.com/s?__biz=MjM5ODkzMzMwMQ==&mid=2650436117&idx=2&sn=1ec9ed4876a31de508a0469e15ca804d&chksm=becdf44f89ba7d59beeb526254e68cefd168852c2a3ca6b21540690f9f0007e6d6bd48e474fb&mpshare=1&scene=1&srcid=0315GhUWwI9wEzpYLxj4bZgg&sharer_sharetime=1679312424675&sharer_shareid=0a9c66924ea99ca17a8569783429bda1&version=4.1.0.6015&platform=win#rd

[27] https://www.cs.utexas.edu/~eunsol/courses/data/bitter_lesson.pdf

[28] https://finance.yahoo.com/news/openai-shut-down-chatgpt-fix-060030490.html

作者: shutianma

来源公众号:腾讯CDC体验设计(ID:tx_cdc),构建数字时代互联网生态的用户价值与体验创新

本文由人人都是产品经理合作媒体 @CDC 授权发布,未经许可,禁止转载。

题图来自Unsplash,基于CC0协议。

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK