机器学习学习笔记(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,准备再利用一周的时间了解一下基础知识,届时再来给大家汇报。

机器学习笔记(1)

学习笔记序言

年过四十,却仍然对业界热点非常感兴趣,但更多的时间只是人云亦云,属于眼高手低的类型。和同事朋友们聚会时,大家都会提到比特币、人工智能或者大数据、机器学习等等。虽然勉强可以跟着讨论几句,可是一旦深入,却发现自己其实对这些概念仅仅了解皮毛。

遂想到自己年轻时,为了真正掌握.NET技术,发愿写了一本书,并且最终将其完成并且出版于世。并且建立了博客堂技术讨论社区。雄关漫道真如铁,而今迈步从头越。开心老矣,但仍然想通过撰写学习笔记的方式,让自己深入学习这些技术。不光知其然,还要知其所以然。

正好看到吴恩达(Andrew Ng)的机器学习课程,决定从头开始。以下是本人的学习笔记。

初始问题集

在学习一个全新领域时,尤其处于完全盲人摸象的阶段,很难给自己定下切实可行的学习目标,因为连完整的术语集都未掌握,所以开心个人的习惯 ,在初时阶段先给自己定下问题集,这个问题集会随着学习的深入而不断修正,有些问题会有答案,有些问题会分解成更多的小问题,而有些问题甚至最后根本烟消云散。

以下是开心为自己罗列的初始问题集。

  • 什么是机器学习?机器学习与人工智能的关系是什么?

  • 机器学习需要掌握什么样的开发语言?

  • 机器学习除了需要开发技能外,还需要哪些技能?

  • 应该如何从入门到精通?七天之内可以吗?

  • 目前业界有哪些公司在从事机器学习?

好了,以上就是初始问题集,都是非常肤浅的问题,因为开心现在的确是一个机器学习的门外汉。

学习方法

还好,现在资讯如此发达,在网上可以很容易找到吴恩达(Andrew Ng)的教学视频。开心使用的是Youtube上的版本,有英文字幕,正好可以锻炼英文。

除了看视频,维基百科以及搜索引擎也将会是开心学习的朋友,不排除后期真正入门后,将会购买相应的书籍进行深入学习。

欢迎大家对我进行监督,争取每周至少有一篇学习笔记发布,谢谢。