机器学习实习总结.docx

上传人:b****0 文档编号:9314270 上传时间:2023-05-18 格式:DOCX 页数:73 大小:1.23MB
下载 相关 举报
机器学习实习总结.docx_第1页
第1页 / 共73页
机器学习实习总结.docx_第2页
第2页 / 共73页
机器学习实习总结.docx_第3页
第3页 / 共73页
机器学习实习总结.docx_第4页
第4页 / 共73页
机器学习实习总结.docx_第5页
第5页 / 共73页
机器学习实习总结.docx_第6页
第6页 / 共73页
机器学习实习总结.docx_第7页
第7页 / 共73页
机器学习实习总结.docx_第8页
第8页 / 共73页
机器学习实习总结.docx_第9页
第9页 / 共73页
机器学习实习总结.docx_第10页
第10页 / 共73页
机器学习实习总结.docx_第11页
第11页 / 共73页
机器学习实习总结.docx_第12页
第12页 / 共73页
机器学习实习总结.docx_第13页
第13页 / 共73页
机器学习实习总结.docx_第14页
第14页 / 共73页
机器学习实习总结.docx_第15页
第15页 / 共73页
机器学习实习总结.docx_第16页
第16页 / 共73页
机器学习实习总结.docx_第17页
第17页 / 共73页
机器学习实习总结.docx_第18页
第18页 / 共73页
机器学习实习总结.docx_第19页
第19页 / 共73页
机器学习实习总结.docx_第20页
第20页 / 共73页
亲,该文档总共73页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

机器学习实习总结.docx

《机器学习实习总结.docx》由会员分享,可在线阅读,更多相关《机器学习实习总结.docx(73页珍藏版)》请在冰点文库上搜索。

机器学习实习总结.docx

机器学习实习总结

2016年暑期实习总结

一、个人总结

自7月18日到达北京起至今已经有50天左右了。

记得第一天到达的时候联系了紫薇学姐,当时问了她我能干些什么,想让她给我布置一点任务,她回答我说:

“你明天先来我办公室吧,我们先聊聊你感兴趣的课题”。

这回答让我出乎意料,因为我原本以为她会像其他的导师一样直接给我几篇文章阅读或者先给我一个任务。

第二天我见到了学霸学姐,她当时问起我对什么课题感兴趣时,我竟然回答不上来(说实话,我其实是对我的专业不是很感兴趣的,当时觉得不知道学什么好就报了这个专业)于是我就转问她都有些什么课题。

她说了几个我觉得高大上的课题,当时我听到无人机这个课题的时候,顿时就觉得终于可以做点感兴趣的东西了(因为我是学校航模队的成员,接触过无人机)。

所以学姐就给我介绍了一个学长,我当晚就去了李学长那边取经。

看到李学长的第一眼我就知道了学长是大神级别的人物,记得当时看见了很多无人机和一架很大的直升机模型,我的心情还有点小激动,都想去飞一下。

但事实是这是全自动的无人机,和我们以前人为控制的模型可不一样,这忽然就让我感觉到了其中差距的明显。

接着,学长向我介绍了无人机的一些研究方向以及他们所做的课题,还给我看了他们当时通过无人机参加竞赛的一些视频。

看完后我激动地请教了他很多问题(也许在他看来我的问题有可能有点不着调)。

接着他又给我介绍了一下他目前正在做的课题——物体的三维重建。

介绍完之后,我顿时就膜拜起了这位大神学长。

学长所说的这些都是世界前沿的研究课题,我心想一定要好好把握好这次机会(特别感谢学姐给我介绍了这位学长)。

我当时也对学长说了对无人机的课题很感兴趣,下定决心第二天拿上电脑过来就跟着他学习了。

第二天整天都下着大暴雨(似乎在预示着什么)。

我趁着下午的雨比较小,带上电脑撑着伞去了中央主楼找学长。

到了办公室我们聊了一会儿,然后学长告诉我无人机被带走了,因为学校的其他学长正在做无人机的课题,需要用无人机。

所以我就只好放弃这个课题了。

于是我问了学长我还能做什么,然后学长该我介绍了一些他正在做的东西,给了我一些关键词,让我先做几个简单的调研。

我照着做了,我当晚看了几篇文章,在网上搜索着这些关键词,然后自己总结着写了一篇报告。

第二天我就回到了蒙民伟大楼,我又花了一早上的时间把李学长让我做的调研报告完成后发给了他。

我对自己还是有点小失望(一方面是想着自己毕竟在学校就自己学了很久的光学基础,做光学应该好一点。

另外因为不做无人机的课题的话对三维重建的兴趣也和光学差不多),所以就想着还是专心跟着学姐好好学一学光学好了,想着暑期结束后要能给自己一个交代(还买了一个笔记本重头开始把一些光学基础的关键点回顾了一下)。

又过了一天,学姐叫我和她一起去采集数据,这时学姐又和我聊了聊,她说就是这样采集数据是很无聊的,她做的课题很偏学术性,如果我不是特别感兴趣的话最好换一个课题,还说我们现在才大二,可以多尝试一下新的东西,她也是在不断地尝试过来的,对我们而言找到自己感兴趣的东西特别重要,因为我们只有做自己喜欢的事才会有激情。

我心想糟了,学姐怎么又说到我的心里去了(因为我一直都找不到自己特别感兴趣的课题,而且一直想找到这个属于自己的人生课题),我又有点动摇了,于是和学姐说了自己的想法。

后来我第二天就自己开始了“Gesturemovementandreconstruction”的学习(因为我来得比较晚,跟不上这个课题组的同学,就只能先自己向请教他们然后再自己摸索着入门,想着等差不多入门了再联系一下课题组的老师)。

(前面的几天我就当是适应和熟悉环境的小插曲)23号那天我请教了手势运动与重建课题组的同学,问了他们当时课题组的老师是怎样给他们布置任务的。

然后我向他们要了一些资料就自己开始了手势运动与重建的学习。

当学了一周之后我觉的应该有点基础的知识了,于是就打电话给了该课题组的王老师想说:

如果以后遇到大家都不懂的问题的时候我能麻烦他,请教他。

后来他说考虑一下,说没事我可以先跟着课题组的同学学习的。

心里想着如果王老师回复我能不能跟着做他的课题后再打电话给颜老师说一声,结果没多久颜老师就到电话来了,说我为什么不给他说一声就给王老师说。

后来我说明了缘由,颜老师说那我就先跟着课题组的同学先做着看。

事后,我想了想这件事的确是我考虑欠周了,我应该先咨询颜老师的意见再问王老师的。

所以以后遇到这种情况我会注意。

其实我一直觉得紫薇学姐一开始没有直接带我做课题,而是让我去发现自己感兴趣的东西的做法是对的。

如果她一开始就给我几篇文章阅读或者让我自己网上学习查资料做小项目的话反而会让我认为导师都是这样安排的。

不过说到底,无论做什么事情,我们都要好好努力,不管什么事始终都要靠自己。

在此我想感谢一下紫薇学姐和李修学长(毕竟在他们这里我学到了很多东西)以及实验室友好的学长们。

接下来当然就是开始用心学习“手势运动与重建”有关的知识了。

下面,我把我这一个多月以来关于手势运动与重建的学习做一个总结。

这个总结是我学习的一个历程。

说到底,“手势运动与重建”还是与“机器学习”密不可分。

可以说AI产品都是基于机器学习的产物(我也是解除了之后才了解到机器学习这门学科的,希望不晚)。

下面我将把自己的学习过程总结如下。

但在这之前,我先简述一下机器学习的概念然后再对自己学习的内容做一个简单的介绍。

并列出一些在刚开始学习的过程中所遇到的很多一开始不理解的名词概念的释义表。

二、学习内容简介及名词释义

机器学习:

机器学习(MachineLearning,ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。

专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

它是人工智能的核心,是使计算机具有智能的根本途径。

它的应用已遍及人工智能的各个分支,如专家系统、自动推理、自然语言理解、模式识别、计算机视觉、智能机器人等领域。

其中尤其典型的是专家系统中的知识获取瓶颈问题,人们一直在努力试图采用机器学习的方法加以克服。

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

“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”。

“机器学习是对能通过经验自动改进的计算机算法的研究”。

“机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。

”一种经常引用的英文定义是:

AcomputerprogramissaidtolearnfromexperienceEwithrespecttosomeclassoftasksTandperformancemeasureP,ifitsperformanceattasksinT,asmeasuredbyP,improveswithexperienceE.

机器学习的过程大体如下:

1、学习任务(例如一个二分类问题):

区分一个普通的互联网检索Query是否具有某个垂直领域的意图。

假设现在有一个O2O领域的垂直搜索引擎,专门为用户提供团购、优惠券的检索;同时存在一个通用的搜索引擎,比如XX,通用搜索引擎希望能够识别出一个Query是否具有O2O检索意图,如果有则调用O2O垂直搜索引擎,获取结果作为通用搜索引擎的结果补充。

我们的目的是学习出一个分类器(classifier),分类器可以理解为一个函数,其输入为一个Query,输出为0(表示该Query不具有o2o意图)或1(表示该Query具有o2o意图)。

2、特征提取:

要完成这样一个学习任务,首先我们必须找出决定一个Query是否具有O2O意图的影响因素,这些影响因素称之为特征(feature)。

特征的好坏很大程度上决定了分类器的效果。

在机器学习领域我们都知道特征比模型(学习算法)更重要。

举个例子,如果我们的特征选得很好,可能我们用简单的规则就能判断出最终的结果,甚至不需要模型。

比如,要判断一个人是男还是女(人类当然很好判断,一看就知道,这里我们假设由计算机来完成这个任务,计算机有很多传感器(摄像头、体重器等等)可以采集到各种数据),我们可以找到很多特征:

身高、体重、皮肤颜色、头发长度等等。

因为根据统计我们知道男人一般比女人重,比女人高,皮肤比女人黑,头发比女人短;所以这些特征都有一定的区分度,但是总有反例存在。

我们用最好的算法可能准确率也达不到100%。

假设计算机还能够读取人的身份证号码,那么我们可能获得一个更强的特征:

身份证号码的倒数第二位是否是偶数。

根据身份证编码规则,我们知道男性的身份证号码的倒数第二位是奇数,女生是偶数。

因此,有了这个特征其他的特征都不需要了,而且我们的分类器也很简单,不需要复杂的算法。

言归正传,对于O2OQuery意图识别这一学习任务,我们可以用的特征可能有:

Query在垂直引擎里能够检索到的结果数量、Query在垂直引擎里能够检索到的结果的类目困惑度(perplexity)(检索结果的类目越集中说明其意图越强)、Query能否预测到特征的O2O商品类目、Query是否包含O2O产品词或品牌词、Query在垂直引擎的历史展现次数(PV)和点击率(ctr)、Query在垂直引擎的检索结果相关性等等。

3、特征表示:

特征表示是对特征提取结果的再加工,目的是增强特征的表示能力,防止模型(分类器)过于复杂和学习困难。

4、训练数据:

进过特征提取后对所得到的数据库进行train。

5、选择模型:

经过不断地训练得到相应的模型后筛选出最合适(准确率最高)的模型。

6、(例如通过交叉验证)拟合模型:

机器学习会学习数据集的某些属性,并运用于新数据。

这就是为什么习惯上会把数据分为两个集合,由此来评价算法的优劣。

这两个集合,一个叫做训练集(traindata),我们从中获得数据的性质;一个叫做测试集(testdata),我们在此测试这些性质,即模型的准确率。

将一个算法作用于一个原始数据,我们不可能只做出随机的划分一次train和testdata,然后得到一个准确率,就作为衡量这个算法好坏的标准。

因为这样存在偶然性。

我们必须好多次的随机的划分traindata和testdata,分别在其上面算出各自的准确率。

这样就有一组准确率数据,根据这一组数据,就可以较好的准确的衡量算法的好坏。

交叉验证就是一种在数据量有限的情况下的非常好evaluateperformance的方法。

部分名词概念释义表:

人工智能(ArtificialIntelligence),英文缩写为 AI

GMM是高斯混合模型

CVPR:

CVPR是IEEEConferenceonComputerVisionandPatternRecognition的缩写,即IEEE国际计算机视觉与模式识别会议。

该会议是由IEEE举办的计算机视觉和模式识别领域的顶级会议。

CNN:

卷积神经网络。

single-view:

单视图(单视角)

machine learning(机器学习):

通过机器学习去解决图像识别等等问题,模拟人脑的视觉机理。

CUDA(ComputeUnifiedDeviceArchitecture)是显卡厂商NVIDIA推出的运算平台。

CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。

它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。

开发人员现在可以使用C语言来为CUDA™架构编写程序,C语言是应用最广泛的一种高级编程语言。

所编写出的程序于是就可以在支持CUDA™的处理器上以超高性能运行。

CUDA3.0已经开始支持C++和FORTRAN。

Caffe(全称:

ConvolutionalArchitectureforFastFeatureEmbedding),是一个计算CNN相关算法的框架。

caffe是一个清晰,可读性高,快速的深度学习框架。

作者是贾扬清,加州大学伯克利的ph.D,现就职于FaceBook。

Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。

OpenCV的全称是:

OpenSourceComputerVisionLibrary。

OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上。

它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

opencv是一个图像处理库,只是其中封装了传统的机器学习方法和特征提取方式。

深度学习是新兴起的机器学习算法,是神经网络算法的扩展,不再需要人工去提取特征,效果也非常好。

cnn,dnn这些才是算法,caffe,theano这些只是深度学习框架,封装了底层实现,使用者只需要调节参数,降低了深度学习的门槛。

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。

他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。

只是CMake的组态档取名为CmakeLists.txt。

Cmake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或WindowsVisualC++的projects/workspaces),然后再依一般的建构方式使用。

这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是CMake和SCons等其他类似系统的区别之处。

QT是一个1991年由奇趣科技开发的跨平台图形用户界面应用程序开发框架。

广泛用于开发GUI程序,这种情况下又被称为部件工具箱。

也可用于开发非GUI程序,比如控制台工具和服务器。

它是Digia公司的产品。

QT使用标准的C++和特殊的代码生成扩展(称为元对象编译器(MetaObjectCompiler,moc))以及一些宏。

通过语言绑定,其他的编程语言也可以使用QT。

QT是自由且开放源代码的软件,在GNU较宽松公共许可证条款下发布。

所有版本都支持广泛的编译器,包括GCC的C++编译器和VisualStudio。

GCC(GNUCompilerCollection,GNU编译器套装),是一套由GNU开发的编程语言编译器。

它是一套以GPL及LGPL许可证所发布的自由软件,也是GNU计划的关键部分,亦是自由的类Unix及苹果电脑MacOSX 操作系统的标准编译器。

GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。

原名为GNUC语言编译器(GNUCCompiler),因为它原本只能处理C语言。

GCC很快地扩展,变得可处理C++。

之后也变得可处理Fortran、Pascal、Objective-C、Java、Ada,以及Go与其他语言。

BLAS,全称BasicLinearAlgebraSubprograms,即基础线性代数子程序库,里面拥有大量已经编写好的关于线性代数运算的程序。

OpenBlas是一个优化的Blas库

gflags是google的一个开源的处理命令行参数的库,使用c++开发,具备python接口,可以替代getopt。

Gflags使用起来比getopt方便,但是不支持参数的简写(例如getopt支持--list缩写成-l,gflags不支持)。

glog库介绍。

概述:

Googleglog是一个基于程序级记录日志信息的c++库,编程使用方式与c++的stream操作类似,例:

LOG(INFO)<<"Found"<

主要支持功能:

1,参数设置,以命令行参数的方式设置标志参数来控制日志记录行为;2,严重性分级,根据日志严重性分级记录日志;3,可有条件地记录日志信息;4,条件中止程序。

丰富的条件判定宏,可预设程序终止条件;5,异常信号处理。

程序异常情况,可自定义异常处理过程;6,支持debug功能。

可只用于debug模式;7,自定义日志信息;8,线程安全日志记录方式;9,系统级日志记录;10,googleperror风格日志信息;11,精简日志字符串信息。

Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了。

在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。

特别是LMS算法。

lmdb简介:

lmdb是openLDAP项目开发的嵌入式(作为一个库嵌入到宿主程序)存储引擎。

其主要特性有:

基于文件映射IO(mmap);基于B+树的key-value接口;基于MVCC(MultiVersionConcurrentControl)的事务处理类bdb(berkeleydb)的api闪电般的内存映射型数据库管理(LMDB)。

LMDB是基于二叉树的数据库管理库,建模基于伯克利数据库的应用程序接口,但做了大幅精简。

整个数据库都是内存映射型的,所有数据获取返回数据都是直接从映射的内存中返回,所以获取数据时没有malloc或memcpy发生。

因此该数据库仍是非常简单的,因为它不需要自己的页面缓存层,并且非常高效、省内存。

它在语义上完全符合ACID(原子性、一致性、隔离性、持久性)。

当内存映射为只读时,数据库完整性不会被应用程序的迷失指针写破坏。

GoogleProtocolBuffer(简称Protobuf)是Google公司内部的混合语言数据标准,目前已经正在使用的有超过48,162种报文格式定义和超过12,183个.proto文件。

他们用于RPC系统和持续数据存储系统。

ProtocolBuffers是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。

它很适合做数据存储或RPC数据交换格式。

可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。

目前提供了C++、Java、Python三种语言的API。

而存储和交换正是Protobuf最有效的应用领域。

HDF5 isadatamodel,library,andfileformatforstoringandmanagingdata.Itsupportsanunlimitedvarietyofdatatypes,andisdesignedforflexibleandefficientI/Oandforhighvolumeandcomplexdata. HDF5 isportableandisextensible,allowingapplicationstoevolveintheiruseof HDF5.

(Glog+Gflag+Protobuf+LevelDB+HDF5+LMDB+Openblas,这一部分的很多都是谷歌的开源库)

Git是一个免费的、开源的版本控制软件,从功能上讲,跟我们比较熟悉的Subversion(SVN)这类版本控制软件没什么两样。

TBB(ThreadBuildingBlocks)线程构建模块,是Intel公司开发的并行编程开发的工具。

Sln文件是一个文本文件,虽然它没有用最流行的XML文件表示,但 数据结构却类似于XML文件,基本上也是由节组成,一个节由标记和End加标记来限定,比如说工程信息的标记为Project,那么他们由Project和EndProject来限定。

每个节可以有自己的属性,并且节内部可以再嵌套子节。

子节的名称由标记加section表示,然后在名称的后面加上一个小括号,其中记录这个子节的意义,比如表示工程依赖关系的子节就是ProjectSection(ProjectDependencies)。

子节也可以有属性,但是子节的属性都是由一个等式表示。

一个sln文件通常由三部分组成:

1. 文件版本。

2.工程信息

3.全局设置

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。

Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

DLL文件即动态链接库文件,是一种可执行文件,允许程序共享执行特殊任务所必需的代码和其他资源。

Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境下操作的许多函数和资源。

DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名。

向运行于Windows操作系统下的程序提供代码、数据或函数。

程序可根据DLL文件中的指令打开、启用、查询、禁用和关闭驱动程序。

DLL文件一般用OD打开。

其他的部分名词在文中会有相应解释。

三、学习过程

第一步:

我第一次接触到机器学习,无从着手,所以就请教了学长,并请教他们当初是如何开始机器学习的。

然后要了一点资料之后就开始了自己的机器学习之旅。

一开始我看了一个关于机器学习的介绍视频(网址:

第二步:

对机器学习虽然有了大致的了解,但是机器学习涉及到的领域和知识面太广了。

所以在正式开始学习之前,还得先学习很多机器学习的入门基础知识。

我复习并学习了一些基础知识,并简要地摘录了其中一些部分。

欧几里得度量(euclideanmetric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。

在二维和三维空间中的欧氏距离就是两点之间的实际距离。

拉格朗日乘子法 拉格朗日乘子(Lagrangemultiplier)基本的拉格朗日乘子法(又称为拉格朗日乘数法),就是求函数f(x1,x2,...)在g(x1,x2,...)=0的约束条件下的极值的方法。

其主要思想是引入一个新的参数λ(即拉格朗日乘子),将约束条件函数与原函数联系到一起,使能配成与变量数量相等的等式方程,从而求出得到原函数极值的各个变量的解。

具体方法:

假设需要求极值的目标函数 (objectivefunction)为f(x,y),限制条件为φ(x,y)=M

  设g(x,y)=M-φ(x,y)

  定义一个新函数

  F(x,y,λ)=f(x,y)+λg(x,y)

  则用偏导数方法列出方程:

  ∂F/∂x=0

  ∂F/∂y=0

  ∂F/∂λ=0

  求出x,y,λ的值,代入即可得到目标函数的极值

组合计算公式:

卡方值反映了实际频数和理论频数温和的程度。

卡方值的计算公式如下:

卡方=[(A-T)^2/T]之和。

A代表实际频数,T代表理论频数。

【链式法则(ChainRule)】

这里是指条件概率乘法的链式法则,求多个关联事件并存时的概率,不要和微积分的链式法则混为一谈。

公式:

读作:

既A1又A2并且...并且An的概率。

举例个词性标注的简单例

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2