□文/Andrey Nikishaev □编译/陈晓、李冉冉
从线性回归到神经网络,机器学习工程师的进阶之路
□文/Andrey Nikishaev □编译/陈晓、李冉冉
在开始之前,我想告诉大家,我们将从最简单的线性回归开始,一直到最新的神经网络,从而让你能够了解机器学习的所有方面,相信你学习之后,不仅懂得该如何使用它们,还知道该如何从头开始构建它们。
其实,这条学习之路中大部分知识是基于计算机视觉(CV)的,因为它是一条获得一般知识的最佳捷径,而从CV中获得的经验知识可以简单地转移到任何机器学习(ML)领域。
我们将使用TensorFlow作为ML框架,因为它是最有前途且早已准备充足的学习材料。
还有一点需要声明的是,如果你现在正在学习相关理论和材料,且同时不断地从已学材料中获得经验的话,学习效果将会更好。
此外,如果你想与那些能够解决现实生活问题的人竞争,我建议你在Kaggle上注册成为会员,以学习更多知识,因为它可能会成为你的简历中一个很好的加分项。
你需要会Python,当然,你不必成为一位导师,只要将基础的知识掌握牢靠就很好了。关于其他任何相关知识,这里有补充手册。
1.约翰霍普金斯大学的实用机器学习
(https://www.coursera.org/learn/practical-machine-learning)
2.斯坦福大学的机器学习
(https://www.coursera.org/learn/machine-learning)
前两个课程主要讲的是数据科学和机器学习的基本知识,从而使你为开始一个真正的机器学习的艰难旅程准备充分。
3.CS231n:用于视觉识别的卷积神经网络 2017(http://cs231n.stanford.edu/)
(2016的版本在此处
http://academictorrents.com/details/46c5af 9e2075d9af06f280b55b65cf9b44eb9fe7)
这就是你开始要好好学习的东西,这是你能够在互联网上找到关于ML和CV的最好的课程。它不仅会告诉你这个领域的知识有多么深,而且还会为你提供进一步调查的良好基础。
4.Google深度学习(https://www.udacity.com/course/deep-learning--ud730)
这是可选课程,你可以只选择其中的实用部分。
5.CS224d:用于自然语言处理的深度学习(http://cs224d.stanford.edu/)
对于那些想要掌握自然语言处理的人来说这是一个可选课程。不过,它确实很棒。
6.深度学习教材(https://leonardoaraujosantos.gitbooks.io/artificial-inteligence/content/)
这是涵盖了ML许多方面的实用手册。
下面包括许多教程和项目,你可以试着去运行相关程序,了解它们的工作原理,并考虑该如何改进它们。创建这个列表的目的就是增加你在ML领域的专业知识和兴趣,所以即使有些任务对你来说很难,也不要害怕,你可以在准备就绪时再回头开始尝试。
1.来自Kadenze的Tensorflow的简单实践 课 程(https://www.kadenze.com/courses/creative-applications-of-deep-learning-withtensorflow-iv/info)
2.Tensorflow教学集(https://github.com/nfmcclure/tensorflow_cookbook)
3.Tensorflow-101教程集
(https://github.com/sjchoi86/Tensorflow-101)
4.快速风格迁移网络
(https://github.com/lengstrom/faststyle-transfer)
这将显示如何使用神经网络将名画中的风格迁移到任何照片中。
5.图像分割
(https://github.com/MarvinTeichmann/tensorflow-fcn)
6.使用SSD进行目标检测
(https://github.com/balancap/SSDTensorflow)
用于目标检测的最快(也更为简单)的模型之一。
7.用于目标检测和分割的快速掩码RCNN(https://github.com/CharlesShang/FastMaskRCNN)
8.强化学习
(https://github.com/dennybritz/reinforcement-learning)
非常有用的知识,特别是如果你想“制造”一个机器人或下一个Dota AI。
9.来自Google Brain团队的Magenta项目
(https://github.com/tensorflow/magenta/tree/master/magenta/models)
旨在通过神经网络创造令人信服的艺术和音乐项目,结果非常显著。
10.用于实时图像增强的深度双边学习(https://groups.csail.mit.edu/graphics/hdrnet/)
来自Google最新的用于照片增强的神奇算法。
11.自动驾驶项目
(https://github.com/udacity/selfdriving-car)
想让你的汽车实现全自动?——这是一个很好的起点。
首先,你必须明白,机器学习不是100%精确的——大多数情况只是一个很好的猜测和大量的优化迭代。所以在大多数情况下想出一些独特的想法是非常困难的,因为你将花大量的时间和资源来训练模型。所以不要试图自己找出解决方案——你应该搜索论文、项目以及寻找可以帮助你的人。这样,你会更快更好地获得经验。
一些可以帮助你的网站:http://www.gitxiv.com/,http://www.arxiv-sanity.com/,https://arxiv.org/,https://stackoverflow.com。
为什么论文不能完全解决问题,甚至有些地方是错的?
很可惜,但并不是所有的科技人员都想公开他们的研究成果,但他们都需要通过发表出版物才能获得资助和成功。所以其中有些只是发布资料的一部分,或者故意在公式中出错。这就是为什么总是能更好地搜索到代码而不是论文。你应该把这些论文当成一个论据或者某个问题解决的事实。
你使用这几个网站http://www.gitxiv.com/,http://www.arxiv-sanity.com/,https://arxiv.org/。第一个网站不仅仅是一篇论文,还包含代码资源,所以更实用。
云是最适合计算生产模型的。对于学习和测试,使用CUDA显卡的PC /笔记本电脑要经济得多。例如,我用GTX GeForce 960M和690 CUDA内核在笔记本上训练所有模型。
当然,如果你有云或免费资助的设备,可以使用它。
在训练中遇到的主要问题是时间,你不能只是坐着观看训练统计数据,因此,我建议你使用GridSearch。基本上,只需创建一组超参数和模型体系结构,然后一个接一个地运行它们,保存结果就可以了。因此,你可以在晚上进行训练,在第二天比较结果,找到最为合适的那一个。
你可以在sklearn库中查看这个过程是如何完成的:http://scikit-learn.org/stable/modules/grid_search.html。
陈晓本刊特约撰稿人
李冉冉本刊特约撰稿人