首页
学习
活动
专区
工具
TVP
发布

机器学习+深度学习 巡洋舰特训课铁哥总结长文

要说这AI算法最近很热, 算法工程师也很热, 不过我敢说, 巡洋舰的特训课其实是没有蹭热点之嫌, 而更像一个大家精雕细刻的小小艺术品。就在去年寒冷的一月, 二十来个学员凑在五道口附近小小的教室里开启了此次特训课之旅。

课程开始时的合照

这门特训课分为三个重要的部分, python, 机器学习和深度学习。

其实对于我们课程的设计者, 这课程早在去年9月就开始了, 因为那时候我们开始做课件。而很多酸甜苦辣也在这个做课件的过程里。

我来谈谈设计这门课程的心得, 首先, 对于深度学习到底难不难, 真是众说纷纭。 而这门课到底难不难,其实真的很难说清, 因为深度学习背后的知识真的太交叉了。 能够同时体现理论的深度和实战性, 兼顾不同背景的人 ,算是这个课程设计的第一个挑战。

首先说说来上课的同学的背景, 这些同学各自来自不同的环境, 一个很显著的特色是, 大家一半来自中科院的科学院所, 一半来自偏向工程的学科, 如计算机编程, 航空航天。 也有基础差别较远的同学。 对于那些理工科的博士,大家的欠缺其实主要在编程, 而一些偏向实践派的同学, 则多为数学困难。

这样的多元性, 就决定了课程需要让不同的人, 可以从不同的角度重构整个深度学习体系, 最终都要通过非常合理精巧的设计课件解决。 我们在这门课的很多功夫, 也体现在这个课件上,而我们对每一个课件的认真程度, 也达到一种死磕的极别,团队相信, 每个课件不仅要是一个好的程序, 一个好的练习题,而且是一个好的故事。我们当时可以说找遍了所有网上能够找的材料, 再结合自己的研究背景做成。

真正要学好深度学习, 一定的机器学习基础也是必须的,所以我们制定一个最简的机器学习路径,直接从什么是线性回归入手让大家了解什么是机器学习, 然后直入机器学习需要下最大功夫的点 – 特征。 因为在机器学习问题里, 寻找到好的特征, 做好特征工程, 比好的模型还要重要。

事实上很多机器学习模型的扩展也可以理解为如何更好的认识和挖掘特征。 在机器学习的课件上, 我们就体现了先让大家在例如kaggle房价预测这样的数据集上建立一些简单的机器学习模型取得一点小成就, 接下来, 就围绕特征工程这个主线, 让大家通过不停的改进模型,增加特征,来体会各类特征工程技法的重要性。

围绕模型,特征这个主线,我们才真正开始建立机器学习背后的数学体系,如果你开始给学生建立这个数学体系, 无疑会带来的问题是学生根本无法理解, 而这样经历了简单模型的洗礼, 再去如何用条件熵拣选特征,交叉熵来检验模型, 就变得没有那么脱离实际。 沿着什么是好特征,什么是好模型的主线,我们从线性模型达到非线性模型, 并且沿着模型复杂度进化的主线来延展我们的故事。

首先, 一切机器学习模型的根基基本可以规划到线性模型(严格说还有树模型和简单贝叶斯), 然而线性模型良好的解释性和解析性背后, 也带来由于本身过于简单假设带来的无能, 然后我们通过大量的加入特征和相匹配的正则化算法Lasso来挽救这个局面, 并且用交叉熵这类比较高级的损失函数来解决分类问题得到逻辑斯蒂回归, 但还不行, 于是各类非线性分类器上马。

要通过一个课件打通学生的任督二脉,最重要的是让学生在做的时候体会整个知识形成的过程, 为什么要在线性分类器里引入概率,为什么要在线性回归里引入lasso,我们先引导学生发现一个问题,然后在寻找解决方法的时候,自然的引入这个知识,这样学生不仅可以学习知识还可以体会科学家思考的功力。 还拿逻辑斯蒂回归来说, 我们把最早iris花分类数据100%准确率的感知机放到泰坦尼克的数据集上, 模型一下子崩了 ,然后我们开始引导大家发现隐藏在目标函数里的问题, 加入概率, 得到交叉熵, 模型准确率就上去了。

关于深度学习部分课程的设计,事实上很多人会发掘这个课程的难度更大很多, 理论更抽象, 而程序更复杂, 需要的算法动辄需要几块GPU一起转动。

我一开始觉得可能深度学习最大的困难来自大家手里没有算力, 还特别配置了几台多个牛逼显卡并行的机器, 然而后来发现这个担心其实大可不必。

因为事实上在初手刚开始学习这些概念的时候, 最缺少的不是这些东西, 而是如何从最简单的一些例子明白CNN, RNN这些黑箱为什么work, 和之前的模型有什么区别。 如果你一开始就上比较大的数据如imagenet, 然后掉个包弄上去。 看上去高大上准确率也不低, 但学生看到了无非是你打开一个开关, 然后微波炉把东西煮熟的效果。 这样的东西其实教了意义也不大。

这和一个算法工程师要达到的真正能力要求还是相差比较远的。 围绕这一点, 我们的模型一开始就把所有不必要的细节踢掉,而从最简单的数据入手,然后让大家用最简单的工具得到新的模型。

比如RNN的教学, 我就让大家一开始去用正弦函数预测一个余弦函数, 这个问题看似简单, 你用多少层的前向网络都解决不了, 然后我让大家用最简单的方法加入一个循环连接, 问题就解决了。用的数据很简单,但是却击中了RNN的死穴。 你通过它就理解为什么更复杂的情况下RNN可以做人机对话甚至谱曲, 股价预测, 自然语言预测。 不经过这个过程, 其实学生很容易被一些表面的东西弄迷糊。

由于这些我们自己精心设计的例子恰恰不太需要算力,算是我们用我们的脑子给大家节省了算力, 让大家无需去配置深度学习机也可以掌握深度学习算法的核心 ,发明了一种穷人的深度学习教学法。 当然, 真实的数据也还是要上的, 在进阶的学习里是免不了的啊。

在这里不能不提出的就是,我们使用了pytorch框架作为教学的基础而没有直接采用tensorflow, 是因为pytorch的内在逻辑和深度学习的理论本身有一种惊人的一致性, 你的网络构建就如同是在思考的过程(前向传播反向传播), 而且无需编译直接运行。用pytorch我们可以让学生非常轻松的改变网络的结构, 从而让学生很容易实践他们对深度学习的一个想法。 有了pytorch, 我们的深度学习从零开始“穷人教学法” 就更得心应手了。

这里面一个很好的例子就是我们写了一个7日神经网络pytorch教程, 几乎把pytorch的学习和神经网络的所有重要技巧给窜起来了。 如初始化,dropout,不同的优化技术, 神经网络结构进化都融合进去了。

顺便提出一个趣事, 在开始的课程框架选定上, 到底是tensorflow还是pytorch,我和本次课程主讲的龚老师还差点吵起来, (当然这不只是唯一一个我们差点吵起来的地方, 我却敢保证每次都为了课件)。而这件事的结果却是, 龚老师不仅接受了pytorch,而且成为了pytorch的强力拥泵,还设计了最棒的课件。

当然, 在深度学习实战的尺度我们也是不遑多让, 比如迁移学习对抗学习我们都试图引入和实践十分相关的例子, 虽然有限于时间这一块依然需要进一步展开。

当然,课件设计只是众多故事里的一部分, 另一个重要的故事是有关人的, 应该说课程学习难度和学习者的背景极为相关。 所来的学生虽然大多素质极高,但是差距也是蛮大的, 有几个本身基础较好的学生到几乎惊艳到了我们, 可以启发我们老师的学习。 而我感受最深的,却是其中有一个女生, 她开始几乎对编程一窍不通,数学也没有其他人学的多,我最初想劝她先补好基础,以后再来学习,但是她的主动最终为她赢来了机会 。 但是在整个学习过程里, 她确是最积极活跃积极的学员,最终她居然整个课程都跟下来。假以时日, 她一定会成为一个优秀的算法工程师。

课程结束时的合照

相对于做好深度学习真正需要的学习经历, 这个过程仅仅是个开始, 如果要真的从零到一进入这个学科, 其实需要的绝不仅是这个课程, 我作为过来人给大家几点建议:

1, 坚持编程训练。

2, 广度各类前沿论文。

3, 做项目, 抓住一个和自己背景相近的领域把知识用起来。

在之后的推文中,我们将看看各位参加的学员对这门课的评价,敬请期待!

对于错过了特训班的伙伴,铁哥也为你们准备了线上版的课程精华。总长度16个小时的机器学习入门已经整理完上线,更加精彩的深度学习课程也会在一周内上线。而在今年8月,铁哥还会推出一个在线直播的深度学习代码实战课程,具体内容还在准备中。

更多阅读 (关于巡洋舰的另一门相关课程的总结)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180504A0GCWR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券