我构建的预测模型

在过去的一段时间里我抓去了小宇宙内上万条播客节目的首日播放量的数据,并利用这些数据构建了一个用于预测播客节目播放量的模型。包含以下六个输入参数:

  • 节目发布于一周中的哪一天
  • 节目发布于一天中的哪个时段
  • 节目所属播客的订阅数
  • 节目所属播客的听众女性占比
  • 节目所属播客的听众占比最高的城市

下图左侧是利用 Tensorflow Visor 渲染的参数与播放量的散点关系图,右侧是将训练过程可视化之后的效果。

你可以在这里找到原始数据与模型有关代码。当然因为只是作为学习和娱乐之用,我不保证数据的绝对有效和采集方式的绝对科学。

在继续阅读下面的文字之前,你需要阅读上述链接中的源代码,代码非常简单不过百行左右。

困境

在 100 行的代码中只有不到一半代码切实与编译、训练模型有关,剩下的则是关于数据转换、可视化等等。

如果你之前没有 Tensorflow 的有关经验,会发现代码可以被看懂却无法理解:我知道它在创建对象,我知道它在执行异步操作,但什么是 meanSquaredError?什么是 tensor?什么是 dense?

这是 Tensorflow 带来的最直接的反直觉体验:在传统的编程领域,编程语言或者框架带来差异微乎其微,但是在这里却让人步履维艰——原因在于:1)过往的的编程经验无法迁移至此,因为它无关响应,无关跨功能需求;2)在传统的开发工作中代码是贯穿所有的主心骨,而在 Tensorflow 前代码已然沦落为配角,前期知识的积累才弥足珍贵。理解二者尤为重要,因为它意味着过往你学习一门技术的方法在此不再有效。

例如本文所抓取的数据都由一个部署在 K8S 上的 NodeJS 应用程序完成。在此之前我从未使用过 K8S。但这并未给我带来太大困恼,使用 Google 搜索 “k8s tutorial” 或者 “k8s nodejs” 就可以找到足够多的入门教程让我跌跌撞撞的将一个 NodeJS 在 K8S 上运行起来(但我依然推荐系统性的学习,这里推荐异步社区引进的图书《Kubernetes修炼手册》。英文原版在亚马逊上名列 Cloud Computing 类目排名第一, 我是在阅读完毕一半的英文版之后才发现的有中文版。)。

但这一套方法在 Tensorflow 面前失灵了,你所能检索到的大部分教程都存在小节开头所提及的同样问题。我甚至得出了一类规律:如果教程里不包含丁点图片,那它根本就不适用于非机器学习专业的编程人员入门。

解药

读到这里你大概明白了,机器学习本质上是一门垂直的科学,但和编程存在交集这件事让我们有了“相声不就是说话嘛,所以我有嘴我也行”的错觉

所以在了解机器学习领域基本知识,而不是单刀直入编程才是学习 Tensorflow 的首要任务。

学习什么(What)

如果我们都同意上述结论的话,那我的下一个问题是:了解到多少程度才算够?因为此时我想提醒你小心落入第二个圈套,掉进“兔子洞”中。

你可以在 YouTube 上搜索到各式各样的机器学习入门:YouTube 上最广为人知的机器学习课程非斯坦福 Stanford CS229: Machine Learning Cours 系列莫属,这个由前百度公司首席科学家吴恩达亲自授课的系列课程单集播放量均在百万级别以上;如果你只是想从最基本最经典的 Linear Regression 问题开始,可以选择观看 StateQuest 的系列视频

但我都不推荐它们,因为它们偏侧理论,与代码无关,要知道在这条学习路径上遇到的每个知识点都可以向专业方向延申的很远,例如在 Tensorflow 的 API 文档中不少的方法说明都保留了对有关论文的引用,但我相信在座各位学习 Tensorflow 的初衷并非是想成为职业的数据科学家,所以恰当的把握理论与实践的边界感颇为重要。

如何学习(How)

最近在折腾 Tensorflow 的同时我还在折腾 NextJS 和 K8S,对比之下我发现视频教程,或者说至少可视化这件事对学习 Tensorflow 尤为重要。

这个道理再简单不过了:只有通过图我才能告诉你什么是 hidden layer、只有通过图我才能帮你回顾起矩阵之间的计算是如何运作的。

一个实际例子是早在一年之前我就购买了图书《JavaScript深度学习》,当它谈到其中的 back propagation 时把我劝退了。直到一年之后当我再通过 The Coding Train 的 Neural Networks 教程学习到 back propagation 时才发现它如此的简单。

下图是我的学习笔记,不难看出其中的图解占据了大多数内容:

向谁学习(Who)

毋庸置疑专业的科班学习一定是最好的方式。这不是什么臆想,而是缺少系统性的规划下我走了很多的弯路,要不然我怎么知道对理论的学习要适可而止,以及建议优先选择视频教程。

如果你和我一样有前端开发背景,那我推荐 The Code Train 的三个系列教程,刚好可以覆盖不同阶段的学习需求。

同时我还推荐 DigitalSreeni 的视频,它不适用于入门,但是可用作参考。他会对一些训练模型中的常见问题和概念做出讲解和进行解答

如果你想寻找一些有关机器学习相似主题的视频教程,比如专门针对 Python 语言,又或者针对 PyTorch 的,我有以下建议:

  • 不用考虑累计总时长1小时(其实我想说五小时)以下的视频教程。也许十分钟学会 React 可以,但这次不行。
  • 不考虑官方教程——大部分的官方教程像是为了存在而存在,官方不会过多的投入就好像他们知道第三方能做的更好似的,但什么都不做似乎又说不过去。虽然 Tensorflow 官方制作了一系列教程,比如 Building recommendation systems with TensorFlow,我也相信视频中的讲师是高手中的高手,但他的念稿般的表达能力让我感觉到索然无味,和上面 The Code Train 相比立见高下
  • 不考虑中文教程:无论从实效性还是从表达能力上看英文教程都更胜一筹,本质上是因为英文用户的基数足够多,概率上来说贡献者和出现精品的概率也更大。放心,技术文字比四六级阅读理解简单得多

未曾改变与已经改变的

正式的文章直至上一小节就已经结束了,最后有感而发聊聊“技术学习”这件事。

我不敢说“终身学习”是这个时代强加给每个人的必修课,但至少是对我们这个职业的“诅咒”。从 Vanilla JavaScript 到 BackboneJS,再到 React 和 TypeScript,没有人会好心好意的告诉你一个时代已经结束,请准备好迎接下一个时代的来临;也没有公司会无偿提供培训来帮助你适应新技术的更迭。“开着飞机换引擎”对于处于这个行业的人来说可能会是持续相当长时间生存状态。这与技术无关,当有一天你转型成为技术管理者或者决策者,关于团队,策略以及交付等等又会成为你清单上的新主题,我想起了贝爷的梗图:Improvise,adapt,overcome

Copilot 的出现并没有解除我们的诅咒,如果你读过我的前一篇文章《Copilot 编程指南》就会知道, AI 可以很好的将我们从琐碎的工作中解脱出来,但是无法代替我们绘制蓝图

幸运的是深度学习依然有效,幸运的是互联网社区中依然有无数人在进行无私的分享。十多年前我通过博客园的专题页面0开始学习 jQuery,只不过如今对象换成了 Tensorflow 渠道变成了 YouTube。

亲自试错(trail and error)永远是解决此类问题的最好方式,我一向反对干瘪的技术培训,因为你无法通过读书去学会游泳。想学?build something, build something real.

posted @ 2024-04-01 09:11 hh54188 阅读(378) 评论(1) 推荐(3) 编辑
摘要: Tech Lead 要学会戴着镣铐跳舞 程序员一定会有类似的体验:学习技术的过程中首先会经历蜜月期,例如总有新的知识点有待你挖掘,你会觉得它无所不能;也逃不过挫折期,即你会发现技术的边界在哪里,有些业务场景终究是它不擅长的,此时你需要寻找新的解决方案。这未必是坏事,技术边界是一个客观事实,你能够找到它侧面印证了你对旧技术趋于精通,对新技术的征途即将开始。 这几年做 Tech Leader 同样经历了这几个阶段:你会有一个快速的上升期,就像我在上一篇文章《去年我是怎么解决团队问题》里说的那样,不停的遇到问题然后乐此不疲的解决问题——整个过程你会收获颇多,同样是因为对个人来说是这是全新的领域;可后一阶段不尽相同,无力感带来的更多是思考而非答案 阅读全文
posted @ 2023-11-27 20:38 hh54188 阅读(202) 评论(1) 推荐(0) 编辑
摘要: 巩固系统韧性三个基础策略 众所周知我所在的团队常年解决线上问题,我也以为我们会在解决一个个具体问题的道路上无聊走到黑。但是最近出现的各种疑难杂症似乎让我们的工作有了一点乐趣,甚至有了更高级的意义。 阅读全文
posted @ 2023-09-28 20:49 hh54188 阅读(280) 评论(0) 推荐(2) 编辑
摘要: 浅谈如何向上管理 最近听说了很多事,加之目前自己也处在被汇报以及需要向上汇报的状态中间,迫使我开始思考向上管理(managing up)这个话题。这是一个有争议的话题,很多人(包括曾经的自己)下意识的会将向上管理与徒有其表的讨好或者迎合这类负面词划上等号。借此契机在查阅了很多资料之后,才意识到它不过是一项职场软技能而已。 阅读全文
posted @ 2023-07-11 18:37 hh54188 阅读(2876) 评论(2) 推荐(10) 编辑
摘要: 为什么不应该给用户提示错误码 最近给用户提示错误码的提议反复出现在我们的解决方案里,在深思熟虑之后我觉得这并非是一个好的解决方案。 阅读全文
posted @ 2023-06-29 00:09 hh54188 阅读(84) 评论(1) 推荐(1) 编辑
摘要: 程序员如何成长 做技术是打怪兽不是养宠物,为什么要打怪兽?因为难;为什么难很重要?因为难的事情才能带来成长;为什么要成长?承认吧,因为「如何成长」是当代人,包括你我他在内焦虑的源泉。 阅读全文
posted @ 2023-06-07 22:57 hh54188 阅读(413) 评论(1) 推荐(5) 编辑
摘要: 如何保证用户重试操作的幂等性 服务不稳定是一类常态,面对此类场景恰当的应对策略应该是什么?退一步说,即使我们能够确保第一方服务的稳定性,我们又应该如何面对网络延迟以及掌控以外的不确定性?这都是本篇文章会谈到的内容 阅读全文
posted @ 2023-05-24 22:42 hh54188 阅读(410) 评论(1) 推荐(4) 编辑
摘要: 关于时间管理的一点建议 在成为 Tech Lead 之后我发现时间变得极度不够用,甚至会成为了我焦虑和殚精竭虑的源泉。因为我无法主动的去做我应该(定方向、做定期回顾)做和想做的事情,而总是被动的被他人牵着鼻子走:无穷无尽的决策请求、寻求帮助、会议邀约。 阅读全文
posted @ 2023-04-25 20:43 hh54188 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 去年我是怎么解决团队问题的 在寻找解决团队问题的过程中,我发现互联网可以提供的参考非常有限,在各大技术写作平台上大家更多的关心是技术,软技能很少被谈论。希望我的经验可以提供一些参考,有一些解决问题的思路和渠道可供参考。 阅读全文
posted @ 2023-04-20 00:00 hh54188 阅读(64) 评论(0) 推荐(0) 编辑
摘要: NodeJS 实战系列:个人开发者应该如何选购云服务 这文章至少值一千元,因为这是我保守估计花出去的冤枉钱(请自行脑补一个苦笑的 emoji) 文章中会穿插选择云服务的一些建议,当然也会提供一些“薅羊毛”的技巧。不过在此之前我们要想清楚一件更重要的事情:我为了什么购买云服务 做产品还是做技术 这个问题不仅决定了你接下来的购买策略,还是你编码开始的前提。 阅读全文
posted @ 2023-04-02 23:18 hh54188 阅读(257) 评论(0) 推荐(3) 编辑
点击右上角即可分享
微信分享提示