强化学习的入门方法

强化学习是人工智能领域一个非常重要的分支,在游戏 AI 领域的应用是无处不在的,包括大家耳熟能详的 AlphaGo 和王者荣耀,其背后都使用了大量的强化学习方法。随着人工智能技术在互联网公司的日渐普及,人们对人工智能的期待也越来越高,也期待着人工智能未来能够做更多的事情。除了各种门禁系统,人脸识别系统在各个公司的应用之外,在游戏领域,强化学习也扮演着举足轻重的作用。

当前的强化学习技术除了使用在游戏 AI 领域之外,也在机器人控制,推荐系统等领域有着很多应用,也取得了不少商业价值。但强化学习的学习还是存在一定的门槛,除了一些在线的 tutorial 和零零散散的资料之外,其实还是需要一本相对完整和优秀的教材来辅助高校的老师和学生,只有这样,强化学习才能够成为一门课进入高校课堂。

上海交大的强化学习团队教师张伟楠,沈键,俞勇合力撰写了一本关于强化学习的,理论与实践相结合的书籍《动手学强化学习》。本书的每个章节除了必要的理论介绍,公式推导之外,还包含了相关的 Python Notebook。Notebook 中包含了算法过程和可运行代码,方便读者阅读相关内容并立刻进行实践。

《动手学强化学习》

《动手学强化学习》是一本相对完整的书籍,读者并不需要知道太多的预备知识就可以直接上手这门课。本书包括三个部分:

  • 第一部分:强化学习基础;
  • 第二部分:强化学习进阶;
  • 第三部分:强化学习前沿。

在第一部分,作者们介绍了强化学习的基本原理,多臂老虎机,马尔可夫决策过程,动态规划算法等内容;在第二部分,作者介绍了 DQN 算法及其改进算法,策略梯度算法,Actor-Critic 算法等诸多算法,让作者能够在第一部分的基础上更进一步的理解强化学习;在第三部分,作者们撰写了前沿的强化学习算法,包括离线强化学习,多智能体强化学习等内容,让读者在之前的基础上迅速进入到强化学习的前沿领域。

本书的另外一个亮点就是 Python Notebook 的代码丰富完善,读者可以一边阅读强化学习的基础知识,一边进行代码的开发工作。基于理论和实战相结合的办法,读者可以尽快掌握强化学习的实战方法。学习这本书需要读者有一定的 Python 开发基础,并且这本书有相应的强化学习视频,方便读者尽快掌握这本书。

随笔(十五)— 谈一谈校招简历的那些事

校园招聘是应届生从学校走向职场的重要一环,对于大多数应届生而言,能够找到一份理想的岗位,对未来的职业发展和个人成长都有很大的帮助。最近无意之中翻到了当年自己校招的简历,从现在的角度来看,基本上属于一轮游的简历,可能连初筛都不一定能够通过。如果想要在校园招聘中找到一份不错的工作,一定要在本科和硕士期间进行必要的积累,毕竟只有日积月累的获取经验,才有可能在校招的竞争中脱颖而出。

由于自己是从数学系转行到机器学习领域,所以下面谈的简历基本上还是以互联网的机器学习和人工智能的方向为主,至于产品,市场等其他岗位,可以关注其他博主的资料。不同方向的岗位,在撰写简历方面其实相差还是比较大的。

如果要写简历的话,通常会选择使用一些招聘网站的在线撰写简历的功能,或者直接使用 word 的模板来进行编写,甚至使用 LaTex 中的 ModernCV 模板。下面就是 LaTex 中的 ModernCV 模板所生成的简历。

ModernCV

一般情况下,对于应届生的校园招聘而言,简历会包括以下几个常见的内容:

  1. 个人简介:姓名,性别,年龄,联系方式等;
  2. 教育经历:本科/硕士/博士学位,博士后(工作经历);
  3. 实习经历:大中小公司的实习经历;
  4. 科研经历:本科/硕士/博士所在实验室的项目;
  5. 比赛成绩:ACM,Kaggle,数学建模,大学生数学竞赛等比赛成绩;
  6. 其他条件:编程技能,Office,英语成绩(四六级,托福,雅思等);

基本上所有的招聘都是候选人之间的横向比较,因此想要拿到不错的 offer 就一定要在候选人之间脱颖而出才行。下面基于以上六点分别来分别介绍一下。

个人简介

个人简介这一块对绝大多数而言都没有问题,只要是想找工作的人都会认真写这一块,只看这一块其实大家都不会有太大的差异性。

教育经历

从教育经历这一块来看,就开始有区分度了。不同的学历的面试标准和要求是存在一定差异性的,不同的学校也是存在一定的区分度的。当然学校的区分度并不是指 Top 2,C9,985,211 的学生就一定会通过面试,在面试的过程中,任何学校的候选人都存在机会。不同公司的不同部门会根据自身的实际情况招聘最合适的候选人,并且最合适的候选人并不是最强的人。

在招聘的时候,不同的部门有着完全不同的招聘需求,有的部门需要 CV 方向的人才,有的需要 NLP 方向的候选人,有的则需要机器学习和强化学习方面的博士大咖。如果将 CV 的候选人推送到一个机器学习岗位,那明显是不合适的,该岗位的面试官很有可能会直接放弃这份简历,理由就是岗位不匹配。甚至,在同一个岗位上,也会略有差异,毕竟每个候选人的经历和条件还是不太一样的。

在留学申请学校的时候,也会存在某些极其优秀的候选人拿不到一些学校 offer 的情况,此刻就有一种说法叫做“overqualified”。意思就是候选人的能力明显高出许多,就算该学校发出了 offer,这位候选人也存在极大的可能不来,所以宁可直接发出拒绝信。在招聘的时候其实也是这样的,不同的岗位有着完全不同的定位,如果面试官判断这位候选人即使拿到了 offer 也存在不会接 offer 的可能性,那么即使候选人能力再强,也有可能直接发出拒绝信。

实习经历

从实习经历来看,这一块在所有候选人中的区分度是最大的。有的候选人在大学期间就早早出来实习,个人简历上至少有三到五个实习经历,每个实习期间从 2 个月到 1 年不等,并且都是国内或者国外的大型互联网公司实习经历。实习的项目经历非常丰富,在面试期间就可以基于自己的项目侃侃而谈,相比之下,没有实习经历的候选人在这一块就会占据劣势。

从个人的发展而言,如果有条件实习,那还是请尽快实习,毕竟时间不等人,而且实习的机会也是非常有限的。在实习期间,能进大公司实习就果断去大公司实习,实在不行的话从小公司开始实习也是可以的,有一个甚至多个实习经历对未来的求职会好很多。

如果想实习的话,那么实习的工作时间最好长一点,一般建议三个月至半年甚至一年以上。毕竟两个月的实习真的学不到什么东西,还容易给正式员工挖坑。实习的第一个月,能够掌握公司的常用开发工具和平台就已经算不错了。实习的第二个月能够做简单的数据分析和算法开发工作。如果实习两个月就走了,那么对现有团队的帮助其实非常有限。从正式员工的角度来看,两个月的实习生基本上做不了任何工作,虽然为社会培养人才很重要,但是也要避免由于实习生的跑路导致项目受到重大影响。从项目开发和迭代的角度来讲,新手写的代码会很坑,迟早也要推翻重写,甚至还不如从一开始就不要写。

科研经历

科研经历这一块也有区分度,不同的导师能够给学生带来的资源完全是不一样的。有的导师跟业界联系紧密,培养出来的学生基本上可以拿到各大公司的大咖岗位。相反地,有的导师连机器学习都没搞清楚是啥就让学生搞科研了。学生在选择自己导师的时候,对于导师的背景可以先调研清楚,避免入坑了之后耽误自身前途。

如果导师所做的项目是公司实际业务与科研相结合的,那这就是最合适的导师。首先,基于导师接到的公司业务,可以拿到公司的部分数据;其次,基于这些数据,学生可以做相应的科研,甚至发表论文。不仅有实战的经验,也会有相关的论文产出。对学生未来求职相关岗位有很大的帮助,如果导师更加靠谱一点,能够在工业界大力推荐学生,那么学生求职就会顺风顺水了。

比赛成绩

不同的比赛区分度其实很大,有的比赛具有很高的含金量,但是有的比赛就非常水。对于不方便参加实习的学生,日常参加比赛也是非常有必要的,否则简历就会更加空洞了。但是,如果个人简历中只有一些 kaggle 比赛,或许这份简历在 2015 年是够用的,但是在 2022 年就大概率不够用了。因为很多的候选人都会有相关的比赛经历,很难从中脱颖而出。

其他条件

其他条件包括编程技能,Office 办公室技能,英语成绩等。这些技能对于大部分学生而言都是具备的,区分度也相对有限。

以上的这些只是个人在近些年工作的部分经验总结,不一定正确,也不一定适合所有的人。大家在撰写简历的时候还是要多加总结,然后扬长避短,欢迎大家一起讨论。最后,祝大家都能够找到满意的工作。

如何入门 PyTorch?

PyTorch 是学术界和工业界用来研究和开发深度学习模型的常用工具之一,自 2016 年 9 月 PyTorch 在 GitHub 上开放了 pytorch alpha-1 版本以来,至今已有整整 6 年时间。从一开始只有 PyTorch 的 Tutorial 至今,很多网站和博客都介绍过 PyTorch 的安装和使用方法。

最近,国内的人民邮电出版社推出了一本关于 PyTorch 的教材《PyTorch 深度学习实战》,作者是:Eli Stevens,Luca Antiga,Thomas Viehmann,译者是:牟大恩。本书适用于学校的学生和想了解 PyTorch 的公司开发人员,通过学习这本书,大家都能够掌握使用 PyTorch 开发深度学习模型。

PyTorch 深度学习实战

本书的章节分成三个部分:

  • 第一部分:PyTorch 核心,介绍了深度学习的基础概念和一些简单的神经网络,张量等知识;
  • 第二部分:使用现实数据来学习,包括肺癌的早期检测,训练分类器,增强学习,语义分割等知识;
  • 第三部分:模型的部署,使用 Flask 服务来部署模型,导出模型等知识。

通常情况下,很多 Tutorial 和网络上的博客只会介绍前两部分,毕竟学会了前两部分就可以正常的开发模型,清洗数据。在学术界的绝大部分工作一般也只需要掌握前两部分,在工业界的一些 AI Labs 前两部分也能够满足绝大部分的需求。但是对于业务部门而言,只有前两部分的知识可能就不太够了,还需要有在线上部署模型,提供模型使用的能力。

在移动设备被大家大量使用的今天,很多情况下需要将模型部署在移动设备上,那么仅仅学会离线训练模型,进行数据的预测是远远不够的。有的情况下需要进行必要的模型压缩。除了 Python 之外,可能还需要掌握一些 C++ 的使用方法,同时掌握多个技能,才能够在工业界的业务部门完成各种各样的工作。

除了 Linux 和 macOS 之外,PyTorch 在 2018 年开始逐渐支持 Windows 系统。对于学生党而言,如果只有 Windows 系统,也能够基于现有的电脑进行深度学习的模型开发。

本书会教会读者如何使用 PyTorch 创建神经网络和深度学习系统,它帮助读者快速从零开始构建一个真实示例:肿瘤图像分类器。在构建模型过程中,它涵盖了整个深度学习管道的关键实践,包括 PyTorch 张量 API,用 Python 加载数据,监控训练以及将结果进行可视化展示。

本书主要内容会包括以下几个部分:

  • 训练深层神经网络;
  • 实现模块和损失函数;
  • 使用 PyTorch Hub 预先训练的模型;
  • 探索在 Jupyter Notebooks 中编写示例代码。

本书适用于对深度学习感兴趣的 Python 程序员,了解深度学习的基础知识对阅读本书有一定的帮助,但读者无须具有使用 PyTorch 或其他深度学习框架的经验。本书也有配套的 Python 源代码,方便读者进行下载和学习。

随笔(十四)— 程序员的软技能

程序员是当今社会中诸多职业的一种,也是优秀的计算机等理工专业毕业生所追求的职业之一。在社会大众的认知里面,程序员就是像电影里面的黑客一样,在一个暗无天日的小空间里,面对 Linux 系统编写各种酷炫的程序,最终解决了某个技术问题或者搭建了某个网站。

Technische Hochschule Aachen Rechenzentrum

从程序员的发展历程来看,各大互联网公司都会根据自身的情况,制定各种各样的级别体系,然后再进行职级的横向对比。每一个职级的程序员都有着自己的发展目标和成长路径,其奋斗目标显得相对清晰明确。按照别人制定好的计划或者路径来走或许能够走到某个位置,但总感觉缺少了一点个性化。程序员在大公司绝不仅仅是写代码而已,日常与产品经理的沟通,与其他公司的程序员沟通都是日常工作的一部分。写代码所占据的工作量其实只是一部分而已,绝对不会是全部的工作。

晋升通道

刚工作的时候接触到一本书《软技能:代码之外的生存指南》,作者自己就是一个优秀的程序员。然后结合自身的发展情况,个人的成长履历以及行业的发展,撰写了一本关于程序员软技能的书籍。近两年,这本书有了第二版,也是对第一版有了很大的改进和补充。

软技能第二版

在书中,作者从一开始就提出了一个观点,“经营自己的职业生涯就是经营一家企业”。每一个程序员在刚开始工作的时候,就要树立一种为自己工作的理念。从一个打工者的心态转化成经营一个企业,所提供的服务就是“软件开发”,“数据分析”等工作内容。既然是经营一个企业,那么就必须要有营销的意识。进行必要的自我营销也是提升个人竞争力,个人魅力,甚至提升薪水的一种方法。

从作者的讲解中可以看出,自我营销的方式有很多种,常见的包括但不限于:

  • 博客:搭建属于自己的博客;
  • 视频:无论是 YouTube 长视频还是抖音快手的短视频均可;
  • GitHub:程序员进行自我宣传的最佳平台;
  • 书籍:撰写书籍有助于在大众面前提升曝光;
  • 技术会议:能够参加各种各样的技术会议有助于提升个人影响力。

而在做自我营销的过程中,除了自身要有一定的知识储备对外宣传之外,更重要的则是坚持不懈地做某件事情。坚持做一件事情的难度是远高于心血来潮做事情的。在不同的自我营销平台上,由于观众是略有差异的,因此在内容侧需要进行必要的调整和重组,以迎合更多观众的喜好。坚持不懈地做某件事情也有利于在社交平台保证稳定的活跃度,可以长期的获得必要的流量。在现有的互联网环境下,有流量就可以带货,做培训,开直播,甚至提供必要的收入来源。

在做程序员的时候,最重要的就是生产力,拥有优秀的生产力可以大量提升效率,也可以提升收入。为了获得更高的生产力,每日/每周/每月的计划就需要提前安排。通过各种 Calendar 日历工具提前安排自己的工作,基于 Rescue Time 等时间管理工具来安排有效的工作时间。培养一个好习惯有助于经营自己。

作者在有段时间内进行了“艰苦工作”的模式,不仅完成自己的日常工作,还在工作日晚上和周末制作在线课程,且每周更新自己的博客内容。在持续工作的过程中,作者开始拥有了源源不断的被动收入,不仅包括博客的收入,还包括一些 APP 的收入,甚至投入的房地产也获得了不错的收益。

在获得成功的路上,作者也推荐了一些书籍,例如《影响力》,《意志力陷阱》等。同时也强调了走出舒适区这一个重要的概念,每个人其实都愿意在自己的舒适区呆着,很难主动地走出自己的舒适区,毕竟万事开头难。一旦走出了舒适区,如何坚持做某件事情又是一件有难度的事情。这些问题作者都基于亲身经历进行了详细解答。

作为一个职场中的程序员,除了日常的努力工作之外,到底还有多少东西需要了解和学习呢?相信这本书会给读者提供一个全新思路和参考答案。