机器学习学习笔记(2)

学习始终是一件让人疲惫的事情,而我个人又特别钟爱发散性学习,所以虽然这几天如饥似渴的学习了很多新内容,但学习笔记却一拖再拖,始终没有落笔。

简单的来说,这几天除了观看了吴恩达的视频之外,还开始根据其中提到的术语,通过搜索引擎以及维基百科,不断拓展学习的外延,先后了解了DNN/CNN/RNN等术语,然后又查看了TensorFlow/Caffee等框架,由于个人目前比较钟爱Swift语言,所以又通过Apple Developer网站阅读了部分Core ML以及Vision的文档。但这些知识直到目前为止,尚未真正落实到纸面上。所以随着看到的资料越多,疑惑也越来越大。最终决定,还是需要收收心,先从基础入手。

什么是机器学习

维基百科上关于机器学习是这样介绍的:

机器学习有下面几种定义:

  • 机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特 别是如何在经验学习中改善具体算法的性能。
  • 机器学习是对能通过经验自动改进的计算机算法的研究。
  • 机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。

一种经常引用的英文定义是:A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.

这个定义似乎把“机器学习”说明白了,但似乎又云里雾里,并不是特别让人能够记忆深刻。作为一个曾经的开发者,我准备把这个定义简单化,机器学习就是让电脑从一堆杂乱无章的数据中,自行找到规律,并且形成算法的科学。

在以前写代码的过程中,算法总是由程序员根据需求固化好的,然后将用户的输入,比如鼠标、触控、键盘输入等,根据一定的规律,转化为屏幕上的文字、动画或者语音给输出。但在面临一些特别复杂问题时,比如语音、图像识别、无人驾驶等,可能无能为力。而这些领域,恰恰是机器学习可以发挥特长的领域。

机器学习的分类

机器学习主要划分为监督式学习以及非监督式学习。其主要区别在于训练集是否有人对元素进行标注。

监督式学习

维基百科上的定义如下:

监督学习从给定的训练数据集中学习出一个函数,当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求是包括输入和输出,也可以说是特征和目标。训练集中的目标是由人标注的。常见的监督学习算法包括回归分析和统计分类。

在监督式学习中,我们有一些现有的数据,并且这些数据是现实中客观存在的”right answer”。而且这些数据有着各种各样的标签。

回归分析

吴恩达的视频当中,给出了两个示例,第一个是关于房价的,我们搜集了一些房价数据,这个房价数据主要与房屋面积相关。将房屋面积作为横坐标,房价作为纵坐标,我们可以这些训练集标注在二维坐标系中,如果仔细观察,这其中会有一定的规律,基本上可以达到当有人告诉你一个房屋面积时,你可以告诉他房价大体的价格。而这个规律,其实就是一个线性函数。类似于下图。

回归分析

统计分类

关于统计分类,吴恩达给出了一个关于癌细胞的示例,比如根据过往的记录,我们有了一系列的实测到的细胞标本,这些标本中有些是癌细胞,有些是良性肿廇,每个细胞的大小都不一样。所以当我们拿到一个新检测到的细胞时,根据其大小,可以基本推测其是恶性或者是良性的。

非监督式学习

维基百科上的定义如下:

无监督学习与监督学习相比,训练集没有人为标注的结果。常见的无监督学习算法有聚类。

我们得到了一系数据,这些数据并没有准确的标签,不存在任何给定的标签。但这些数据总是会扎堆出现,所以当出现一个新数据时,如何给它找到一个合适的“堆”,是我们需要解决的问题。

举例来说,现在的搜索引擎都有类似于“相关新闻”的内容,同样一件新闻,在不同的媒体平台(CNN/凤凰卫视/BBC/CCTV)都有报道,如何将所有不同媒体平台对于同一个新闻的报道给“堆”在一起,这就是无监督式学习所要解决的。

总结

纸上得来终觉浅,作为刚刚了解了机器学习定义以及分类的入门者来说,还有很多知识要学。不过能够学习新知识总是很兴奋的。我已经在我的Mac电脑上使用Docker安装了TensorFlow,准备再利用一周的时间了解一下基础知识,届时再来给大家汇报。

假如真有时间机器…

不知不觉之间,博客堂已经整整十六年了。有时候在上下班路上,翻看着过去写的旧文章,竟然一时恍惚,甚至根本不记得自己曾经写过这篇文章。比如下面这篇:移动互联网要来了,Are you ready?

会场内外的所有气氛都让我回想起了1999年,在那时候,无论是餐厅,咖啡馆,甚至是坐着公车拿着刚上市的手机,大声喧哗的都是互联网相关的话题。大家脸上的那个兴奋劲呀,似乎金山就摆在面前,如果你不伸手,简直比傻子的IQ低。

而此时此刻,似乎时代又在循环,在炒作了互联网以及移动互联网之后,当前最热的热点似乎就是比特币了。微博、朋友圈、知乎,都在充斥着与比特币相关的文字:区块链、去中心化、匿名货币等。而在这背后都是一夜暴富的心态。

有时候我在想,假设真有时间机器,如果能够助我回到十年之前,我应该可以如何暴富呢?是去找张小龙聊天,卖给他一个微信的创意?还是在各大城市疯狂购房?或者不声不响,偷偷用私房钱买几个比特币呢?

假设真有时间机器,我更愿意用它飞到十年之后,看看未来的一切。毕竟只有未来才有无限可能。在十年之前,我从来没有想像到今天的移动互联网时代,会带来如此多的生活便利:移动支付、电子商务、共享单车等等。原来以为只是别人用来忽悠热钱的投资梦想,而今一一成为现实。

或者十年之后,比特币也会成为一种真正的货币?

移动互联网要来了,Are you ready?

两天前,去听了CSDN组织的2010中国移动开发者大会。会场内外的所有气氛都让我回想起了1999年,在那时候,无论是餐厅,咖啡馆,甚至是坐着公车拿着刚上市的手机,大声喧哗的都是互联网相关的话题。大家脸上的那个兴奋劲呀,似乎金山就摆在面前,如果你不伸手,简直比傻子的IQ低。

而今,这种气氛越来越浓烈,我这段时间也经常钻咖啡馆,无论是热闹的还是幽静的。只要旁边桌子上有年轻人在,基本上都在讨论App Store、Mobile Device相关的话题,似乎那个“金山”时代真的回归了。在2010年中国移动开发者大会上,李开复也像列宁同志一样,向年轻人宣告移动互联网浪潮将在三年内爆发(难道现在还不叫爆发吗?)。我想起了那句话:此地人傻钱多,速来。

10年前那次风暴真的是中国互联网浪潮的起始点,现如今的腾讯、百度、新浪都是在那一波风暴中开始创业的。而如今,这些企业都是如日中天,甚至有些有了中小型企业的拦路虎,挡路石。可是在初创阶段,他们也曾经多次羡慕嫉妒恨过其它大企业,拷贝雅虎,拷贝ICQ,拷贝谷歌等等,把所有的一切都拷贝回中国。只不过时代不同了,现在“爷是上等人了,你们得换个称呼了”,所以才有了“狗日的”XX,那些来自于挣扎在创业边缘的人员的呼喊。

所以10年前的那次风暴就是一个风暴,虽数活下来的活得非常不错,锦衣玉食,但仔细想想,在风暴过后的寒冬中死去的何止千万?那些无数曾经在咖啡馆坐在我邻桌的,充满伟大志向的年轻人们,你们现在还好吗?那些在媒体上创造了无数关于“领先国际平均水平五十年的创新”、“中国的微软”、“中国的比尔盖茨” 话题的人们,你们在新的风暴前,还有雄心壮志吗?

新的风暴又要来了,我们需要做些什么?另外,我们需要做好防冬的准备吗?

移动互联网要来了, Am I ready???

怀念Ray Ozzie君

我在大学里面学的是物理教育专业,但竟然也会有计算机课专门教授Lotus 1-2-3。那时候的课程很闷,教授们只是按照教材中的相关章节,一个功能一个功能的介绍,所以学了一个学期,我都没有搞明白Lotus 1-2-3是干什么的,操作系统?编程语言?后来用到Excel才知道,噢,原来如此。

如今,大学毕业很多年了,这段历史突然重新映上我的心头,只是因为Ray Ozzie已经下台鞠躬,挥挥衣袖,不带走一片云彩。

我加入微软比Ray Ozzie君稍早那么一点点。终于实现了小时候的梦想,在这家伟大的公司里面工作,虽然离比尔盖茨很多层次,但一想到这是我偶像的公司,就激动不已,甚至每天上班都感觉很有朝气,真正的“您的潜力,我们的动力”。再后来,盖茨在公司内部完成了禅让。虽然公司内部没有任何言论,但能够感觉到,每个同事都在心里面咯噔了一下。虽然过后微笑还是继续,激情还在燃烧,但明显的感觉,有些失落。

盖茨选择了Ray Ozzie,成为了首席架构师,在新闻媒体中,一直被渲染为“盖茨接班人”。关于Ray Ozzie君的资料,我还是从新闻报道中看到。Ray Ozzie,满头白发,风度翩翩,从外表上非常让人敬重的一位绅士,甚至感觉从盖茨还魅力十足。第一次在公司总部听他演讲,总感觉他提不起精神来,也没有任何技巧,非常紧张,那时候恨不得跳上台去,帮他讲。于是乎,对此君充满了失望。好象在第二年,又在一个场合,听到Ray Ozzie君的演讲,突然发现他有如神助,非常自信,非常有魅力的完成了演讲。后来在网上看了一些他的访谈,他的邮件。突然我发现,在我心目中,他开始慢慢走上盖茨走后空缺的偶像宝座。

今天早上,不知道为什么提前醒了过来,看到了邮件,知道了他要走的消息。他的走,让我想起了Windows Vista的负责人,Jim Allchin,他也是微软高层中充满人格魅力的一位。但因为Windows Vista的失利,他已经走人,去办乐队去了。也不知道他的乐队办得如何了。从照片上来看,他很满意现在的生活。有兴趣的可以去看看他的个人网站:http://www.jimallchin.com/ (如果你是开发人员,肯定非常好奇他网站的架构)。

Ray Ozzie的走我并不是特别吃惊,因为从三月份开始,他就非常少出席公司重要会议了。很多Business的整合也缺少了他的声音,所以那时候我就在新浪微博上提出自己的质疑。而如今,当预言成真,我只有感觉更加失落。

Ozzie,走好。

博客堂要移民了

为了给大家提供更好的服务,也为了域名安全以及其它事项,博客堂准备移民到美国Godaddy服务商,包括域名以及空间。

在未来一周的域名注册商更新期间,访问博客堂将会出现一些不正常现象,这可能是在迁移期间的正常现象,请大家谅解。

另外,提请所有的博主注意,我们将会以WXR(WordPress eXtend RSS)文件格式为大家提供数据备份服务,包括大家所有的历史数据:随笔、标签、文章中图片等。如果大家愿意跟随我们一起移民,不需要任何动作。如果不希望移民,而想转去其它博客提供商,并且希望索取备份文件,烦请与我邮件联系,非常感谢。

谢谢大家的关爱。

SharePoint Server 2007 的一个问题

在用 Deep Zoom Composer 生成内容后,传到 SharePoint Server 2007 中后,发现不能浏览,仔细检查发现 Deep Zoom Composer 生成的很多以 _files 的目录,传到 SharePoint Server 2007 中后,目录被改了名字,自动在最后加了下划线 “_”,导致不能正常访问。

此处详细介绍了此问题。

 

在微软创新日北京站ASP.NET MVC部分的Video

这段时间正在全国各地跑,在微软创新日上讲ASP.NET MVC相关的内容,以下Video是在北京场录制的视频内容。如果大家感兴趣,可以直接观看.课程内容非常简单,适合于ASP.NET MVC初学者或者ASP/JSP/PHP开发人员。

Special thanks to Sandro Nigris. 🙂

ASP.NET MVC课程第一部分

ASP.NET MVC课程第二部分

本视频上所使用的Demo非常简单,就不再放Demo Code了,Slides可以从下面下载:

观止之读后感

新闻报导总是喜欢一些比较吸引眼球的话题,所以最近N年以来,我看到了太多的报道来渲染事实。报道IT人物时会将其打造成“中国的比尔 盖茨”,而介绍IT公司时则会同等思路的介绍“中国的微软或者IBM”。很好很强大!可惜就像我在八几年看到的一篇关于前苏联要建造人造月亮的文章一样,从小学开始让我激动了二十余年。但我现在大学毕业了,天上还是只有一轮明月。

我们从来不否认梦想的魅力。正如央视的某广告语:心有多大,舞台就有多大。但如果光做梦,不干活,那就成了白日梦了。即使你每天可以睡十二个小时,估计这个梦想也永远无法实现。那么“起来挑战微软”的那个人也就只是梦想家,而非实干家了(看到现在方兴东已经开始使用IT评论家的Title了,不再做其博客网的实际工作了)。

很多人可能看过了N多关于微软/比尔盖茨的传记,从企业文化等角度对于微软进行了方方面面的介绍,包括狗食文化(Dog food)、三权分立等等。不可否认的是,这些文章或多或少的对于一些历史事实有一些主观美化的臆测,毕竟里面的大部分人物是现实中的人物。某些决策失误该忽略就忽略,所以从这些书籍里面,我们看到的微软的成功是必然的。

而《观止-微软创建NT和未来的夺命狂奔》则尽可能得再现了微软的一段真实历史。这本书没有从微软的企业文化角度着手,也没有从行业历史着眼。只是介绍NT产品组以及卡特勒个人在创建Windows NT的历史,某种程度上,甚至有些平铺直叙。但在这些平铺直叙当中,你仍然会感觉到很多“刀光剑影”。如果当年没有卡特勒,如果当年卡特勒拒绝加入微软,如果微软与IBM继续OS/2,如果NT开发到一半被取消,如果NT开发再延期三年,那么,一切都不可想像。

在看此书的过程当中,我使用公司内部的Exchange Server查找了这些历史人物,发现大部分人现在还在微软,比如主人公卡特勒现在是微软资深技术院士(SR. Technical Fellow),而Jim Allchin在完成了Windows Vista之后离开了微软等等。我很敬佩作者这种不为尊者讳的写作态度,让我们可以更加真切的去读这段历史。从中感觉到微软的成功是建立在无数的偶然过程,而这些偶然的背后也有着一些必然,比如盖茨的宽松以及宽容等。

读此书我仅用了一周时间,在临睡着阅读一小时。阅读时我也遇到了一些困难,从小到大,我无数次拿起了《红楼梦》想看一遍,但都是受束于其错综复杂的人物关系而从来没有完成过。同样,《观止》这本书的人物也受多,每当引入一个新人物的时候,都会把其祖宗三代介绍一遍,也让我烦恼不已。

不过,我仍然强烈推荐大家去读一下这本书,如果你还有“起来,挑战微软”的梦想的话…

Joycode.MVC 0.5已经发布了

博客堂源代码自从去年开始就一直紧跟ASP.NET MVC的进度,开发了很长时间,一直都不好意思拿出来给大家显白显白。主要原因是Bug太多,实在是拿不出手。但在开发过程当中,实在是需要听取大家的反馈意见,所以现在把相关的工作做了一下整理,先把0.5的第一个CTP发布出来,以听到相关的建议。目前博客堂还运行的是0.4版本,所以像BING的搜索在博客堂上还没有出现,取而代之的是Google的BlogBar功能(不过Google的BlogBar对页面加载还会有一定的阻碍的)。

如果您希望下载源代码,请确保您的开发环境与我一样(其它环境主要是我个人没有进行过测试,希望各位有测试结果可以通知一下)。

1. IDE: Visual Studio 2008 SP1;

2. .NET Framework Version: 3.5 SP1;

3. ASP.NET MVC: 1.0;

4. OS: Windows 7 RC/Windows Vista/Windows Server; (ASP.NET MVC在IIS6下运行还需要特殊配置);

5. SQL Server 2008: 2005应该也可以,但我没有做过测试。

点击此处查看或者下载源代码;点击此处下载安装文件(不含源文件)

目前版本尚有很多Bug,不推荐普通用户下载。非常感谢。

如何判断当前浏览器是否是IE8?

IE8发布之后,市场份额在节节上升当中。由于目前Windows 7在市场当中的反响相当不错,相信随着Windows 7的上市,IE8的市场份额更会打着滚儿的上升。

对于网站主来说,除了做好IE8的兼容之外(其实就是W3C的标准兼容),还有一个细节需要注意,那就是如何来判断当前用户使用的是不是IE8。有很多哥们儿就说了,这还不容易吗?使用UserAgent不就可以了,根据当前的UserAgent字符串,查看一下是不是IE8?类似于展波兄给出的如何判断.NET版本一样。

如果你真的认为使用这个字符串就可以正确判断目标浏览器的版本号,那就有些很傻很天真了。作为一个完全兼容W3C标准的微软浏览器,在IE8当中为了照顾目前世面上大部分网站的需要,其总共提供了三个渲染引擎,即IE8标准模式,IE7的兼容模式,以及IE6的Quirks模式。而IE8的UserAgent字符串也会动态的根据渲染引擎不同而采用不同的字符串。比如以下三种情况:

1. 在最终用户访问你的网站时,点击了地址栏右侧兼容模式按钮;

2. 你的网站中的相应页面使用了IE7兼容字符串,即<meta content="IE=EmulateIE7" http-equiv="X-UA-Compatible"/>,或者在Web服务器 (IIS/Apache)的HTTP Header信息当中作了相应的设置;

3. 微软为了协助贵公司的网站页面在IE8下显示更加兼容,在IE8兼容列表当中将贵公司的网站地址加入了一个Windows Update维护列表中(如果您的网站在此列表当中,并且您相信您的网站其实已经完全兼容W3C标准,所以想从此列表移除,可以发送邮件至[email protected]申请移除)。

那么在以上三种情况下,你得到的UseAgent字符串将会是IE7,而不是IE8。

那么如何正确判断当前浏览器是不是IE8呢? 使用以下代码即可:

   1:  function getInternetExplorerVersion()
   2:  // Returns the version of Windows Internet Explorer or a -1
   3:  // (indicating the use of another browser).
   4:  {
   5:     var rv = -1; // Return value assumes failure.
   6:     if (navigator.appName == 'Microsoft Internet Explorer')
   7:     {
   8:        var ua = navigator.userAgent;
   9:        var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
  10:        if (re.exec(ua) != null)
  11:           rv = parseFloat( RegExp.$1 );
  12:     }
  13:     return rv;
  14:  }
  15:  function checkVersion()
  16:  {
  17:     var msg = "You're not using Windows Internet Explorer.";
  18:     var ver = getInternetExplorerVersion();
  19:     if ( ver> -1 )
  20:     {
  21:        if ( ver>= 8.0 )
  22:           msg = "You're using a recent copy of Windows Internet Explorer."
  23:        else
  24:           msg = "You should upgrade your copy of Windows Internet Explorer.";
  25:      }
  26:     alert( msg );
  27:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

其实此问题,是我负责的一个客户前端时间询问我的。美国一个好哥们Giorgio Sardo帮我解决了此问题。在他的贴子当中,还有其它一些您可能感兴趣的内容,比如如何判断当前浏览器是否支持网页快讯(WebSlice),加速器(Accelerator)以及可视化搜索(Visual Search)等。您也可以一并阅读。