机器学习、深上入坑底路?

zhile yu 2018-08-28 174 python机器学习 机器学习
马上要进入研究生阶段,自己有两个月的自由学习时间,想入坑深度学习,特来求下入门经验。 我先汇报下我的基本情况吧: 1. 深度学习基础知识。前段时间撸了一遍李航的《统计学习方法》、斯坦福CS229、CS231n的课程。当然,觉得自己只是走马观花,里面的习题也没有做,只是大致啃了里面的公式和讲义; 2. 编程方面。敲了《廖雪峰python教程》的前几章内容(列表、集合、函数、装饰器等)。过了下python一些库的基本操作,像numpy、ma…
其他回答

既然说到学习,我就从一个知识体系的积累角度来谈谈我的计算机视觉和机器学习(包括深度学习)的学习过程。我先澄清一下我理解的几个概念,计算机视觉是一个领域问题,像一些低层的边edge detection,高层的object detection, classification, semantic segmentation,这里更加关注的是对问题的理解,可以有不同的方法,从不同的角度来解决视觉问题;然后机器学习是一个方法,可以解决很多问题如视觉问题,自然语言处理。这里我关注的是从机器学习的角度来视觉问题(后面简称计算机视觉问题),那么应该积累哪些知识,怎样积累。这里主要包括三方面的知识(或者技能):

  1. 编程:这里包括编程语言和编程思想(软件工程知识),以及对计算机系统的理解,对于语言一般python,matlab,cpp用的比较多,这里重点积累的是编程思想和对系统的理解,保持对计算机技术的好奇心就可以了,然后在平时的练习中自然会熟练。
  2. 数学:经常用到的有线性代数(尤其矩阵),微积分,概率。从我学习的过程来看,计算机视觉问题对数学要求不是特别高深,大学的数学知识基本够来,然后用到的时候,复习下相关知识就行来。这里我要强调的是数学表达问题的思想,尤其是在具体的学习问题中如何用数学语言表达问题的,这是要重点去体会的。另外就是向量化思想,机器学习里绝大部分问题会用向量去表达输入,或者特征,然后用矩阵去描述问题,这里向量化思想是你要去积累的。关于这个我推荐一本书linear algebra and its applications,然后就是极力推荐[EE103/CME103: Introduction to Matrix Methods](EE103/CME103: Introduction to Matrix Methods),这个课就是在介绍向量化思想。最后就是优化方面的知识了。
  3. 专业知识:包括计算机视觉方面的知识和机器学习的知识,这里因为从机器学习的角度看计算机视觉问题,所以重点介绍机器学习方面的知识积累。
  • 计算机视觉方面的知识:重点是理解计算机视觉的基本问题,计算机视觉的基本概念,可以学习课程 [CSCI 1430: Introduction to Computer Vision](CSCI 1430: Introduction to Computer Vision),对问题的理解是非常重要的,方法只有抓住了问题的本质才能取得好的效果。
  • 机器学习的知识:深度学习也是机器学习,不过像针对视觉问题有一些特定的模型,如卷积,长短期记忆网络。机器学习有很多参考书,公开课,比如pattern recognition and machine learning。这里我觉得你要建立的是用机器学习分析问题的模式是什么,我的理解是,首先针对一个问题,比如分类问题,回归问题,聚类问题,然后你分析问题设计一个带参数的模型,这个模型去做这个任务,接着会有一个评估机制去评价做任务的好坏就是损失函数,最后通过评价函数去优化模型使任务做的最好。那么你需要把很多机器学习的模型(或者问题)这么去整理,你就会发现所有的问题都是这样一个模式。我的学习过程发现机器学习最本质的特点是设计带参数的模型去表达问题,然后用数据去学习一个最优的参数。
  • 深度学习:cs231的课程够用了,把其中的每一个知识点摸透,然后project好好做。从这个课中可以理解卷积神经网络,正则化,损失函数,反向传播算法等概念。然后你就可以接触一些实际的深度学习在视觉中的任务,如object detectioin, semantic segmentation,进一步深化这些概念,去理解深度学习这样一个端到端的学习机制。在你会run一些基本的实验之后,你开始改进别人的算法,以及自己尝试新的idea的时候,你会进入一个新的阶段,How To Improve Deep Learning Performance,这里我推荐两个博客:[How To Improve Deep Learning Performance](How To Improve Deep Learning Performance - Machine Learning Mastery),[Must Know Tips/Tricks in Deep Neural Networks](Must Know Tips/Tricks in Deep Neural Networks (by)

有一定的知识储备后,就可以选一个问题比如object detection,然后选定一个经典方法比如rcnn,读它的paper,跑它的实验,然后更深的理解paper的方法和实现。实践过程中去完善机器学习,深度学习的模式。需要的数学知识,机器学习理论知识,编程知识,你可以去补这些。不要保证一次把所以的知识学完,而是知识系统的学习和问题的研究同时进行,针对一个具体的问题去应用这些思想,然后涉及的知识可以补上,连成线面。这个计算机知识体系的建立就是这样不断的迭代建立起的。这样你能很快的看到问题解决的效果,同时也能看到相关知识在具体的问题中的应用,有助你保持学习的兴趣。

最后我总结一些,深度学习/计算机视觉的成长阶段大致是这样的,首先是基本知识的积累(如编程,数学,机器学习/深度学习,计算机视觉),然后开始接触实际的问题,这时你会先后处于三个阶段,1)run别人的project,还能针对性做些修改,或者从一个框架下移植代码到另一个框架下;2)看paper,在作者没有公布代码的情况下复现作者的工作,这个时候能力有大幅提升,这个时候你会验证哪些trick是有效的,慢慢的形成自己的经验和自信;3)有自己创新性的idea,实现自己的idea,你会对问题理解越来越深,对技术的把握也越来越准确。

zhile yu 2018-08-28 14:58:15 0条评论

谢邀。


下学期升大四。从去年到现在差不多入坑一年了,但还是什么都不会,来姑且抛砖引玉一下,期待大神们有更好的见解。我自己的情况如下:

  1. 在计算机科学导论课上学了K-近邻算法、Q-learning、感知机,并用Python尝试了一些初等的实现和例子。
  2. 跟了Coursera上吴恩达的课,写完了所有作业,用MATLAB写完了所有的作业。
  3. 跟了去年的CS231n,用Python完成了所有的作业。在这个过程中接触了numpy、matplotlib、scipy。
  4. 稍微尝试过Kaggle,做了Titanic。初步理解了传统机器学习方法里数据污染、手工设计特征存在的困难,了解了XGBoost、stacking。
  5. 跟了一节学校数据科学中心面向数据科学专业硕士生的机器学习课,初步了解了统计学习,对ridge regression, lasso regression, svm, multiclass classification, trees, bagging, boosting, random forest, bayesian methods等等的理论和应用有了更多的认识。有写过这些模型的代码也有用过对应的sklearn。
  6. 学了部分David Silver强化学习的课程以及CS294。最近在做CS294的作业。
  7. 有做过一个小项目并在这个过程中学习了一部分TensorFlow特别是TensorBoard的源码。
  8. 稍微尝试过MXNet。
  9. 有因为各种原因参考过PRML、ESL、周志华《机器学习》、《统计学习方法》、Foundations of Machine Learning、Deep Learning、Reinforcement Learning: An Introduction的一小部分。
  10. 这个暑假主要在看Deep Reinforcement Learning相关的一些内容和论文。最近主要在用PyTorch。

我的学习路线可能不是最好。另外根据不同人的不同背景(CS/EE,数学,统计,其它)可能学习的路线也不一样。我觉得你要想一想自己的情况是什么,你的长远目标是什么,你的短期目标是什么。你的研究生是二年制硕士生还是直博?你想要做学术研究还是想要当工程师?

可能是我悟性问题,周志华老师的《机器学习》在我看来不是很适合深入学习一个个模型。不同人对这个问题有不同的见解,我看到百晓知道、豆瓣上有很多不同的意见,楼主可以去参考一下。周老师自己也说这更加像是一本教科书,所以并不一定适合自学。在很多地方这本书给人的感觉是有一个大概的框架或者picture,但细节上还是有点云里雾里。它很好地带读者领略了机器学习各个领域的风景,但这么多内容装在一本小书里可能也确实没办法面面俱到。如果有人指导、补全这部分内容这本书当然还是相当不错的。

看楼主的情况似乎对机器学习有了一个理论上大致的了解,但没有多少实际实现和应用的经验。我建议楼主比起读书还是应该去跟一门课。理想中这门课应该同时包含很重的编程并且会告诉你每一部分内容可以去参考哪本书的哪个章节或者哪个人写的某篇论文/讲义。

有几个可能可以参考的课包括:

  1. Andrew Ng在Coursera上的Machine Learning。这门课对题主现在来说可能有点太简单了,好处是手把手带你走了一遍这些模型的简单实现和应用。另外如果题主数学基础比较差的话这门课应该是最友善的。
  2. 华盛顿大学在Coursera上的机器学习系列课程。这门课本来是Pedro Domingos教授上的,现在好像不是他了。他之前的课在Youtube上还有视频。不确定现在的两位新教授讲的怎么样。
  3. 加州理工学院Yaser Abu-Mostafa在edX上的课。
  4. 国立台湾大学林轩田的《机器学习技法》和《机器学习基石》。前者讲实践后者教理论(一开始写反了,谢谢 @吃西瓜不吐籽 的提醒)。事实上林轩田是Yaser的学生,两人合著了一本Learning from data。

上面这四条除了第一条外我都没上过,但是口碑似乎都不错,题主可以去试试看。

有可能的话最好找一些对ML有热情、志同道合、目标相似的人一起学习,共同讨论、提高。

在这之后如果题主读的硕士研究导向不是很强而且题主又想直接去业界的话可以找几个队友一起刷Kaggle。另外对分布式系统、并行计算有所了解也会很有帮助。刷完一些比赛如果名次不错的话可以考虑早点去实习。Get hands dirty!

如果是要做科研的,上完上面的一节课并且实现了一些模型以后就可以根据自己的兴趣继续去学相应的课程并且开始读论文了。非凸优化、概率图模型、贝叶斯方法、核方法、深度学习、强化学习、迁移学习、集成学习、计算机视觉、机器人学习、自然语言处理、语音识别、大规模机器学习等等。甚至哪怕是GAN/对抗学习这样一个小的子方向也有很多的坑。

不管做工程还是做学术两个月都很快就过去了。虽然我自己花了很多时间啃PRML和Sutton的RL,但我也有很大一块时间是在做其他事情。不建议题主把所有时间都去死啃书,啃完当然会有收获,但ML的坑太大了,更建议在遇到有需要的时候再回去看相应的章节。

希望以上内容对你有帮助。

Frankenstein 2018-08-28 14:58:15 0条评论
相关问答