【cs230】吴恩达Deep Learning-3/3
【cs230】吴恩达Deep Learning-3/3
- 0. 课程计划
- 8. 高效读paper&职业规划
- 8.1 T型人才-->获得工作机会
- 8.2 选择offer
- 8.3 长期规划
- 9. 深度强化学习
- 9.1 为什么需要强化学习
- 9.2 RL简介
- 9.3 深度Q-Learning
- 9.4 一个应用:Breakout
- 9.5 训练技巧
- 9.5.1 Experience replay
- 9.5.2 激发新的探索
- 9.6 高级话题
- 10. 对话助手&结课
- 10.1 chatbot
- 10.1.1 术语
0. 课程计划
课程地址
2018video地址
2020slide地址
吴恩达书籍Machine Learning Yearning地址
本系列相关链接:
【cs229】吴恩达Machine Learning-1/2
【cs230】吴恩达Deep Learning-1/3
8. 高效读paper&职业规划
讲实话,从课件准备到现场演讲,吴恩达在cs230课程中的精力投入明显不如cs229,以至于我看到助教的画面有更高的专注和期待。
然而,这一节中吴恩达对于职业规划的建议高屋建瓴,相逢恨晚,窃以为是cs230整个课程中最大亮点。
8.1 T型人才–>获得工作机会
招聘者在寻找什么?
- 技能(ML 技巧, coding能力…)
- 有意义的工作经验(深入做过好项目,实践能力)
所有最强的求职者都是T型人才。具体来说:在ML、DL、PGM、NLP、CV等多个领域有基础能力,并在至少一个领域深耕。这种T型是嵌套的,例如你在下图基础上,在DL领域内的NN、BN、RNN等小领域中,也有深耕,也是T型。
基础是指:学习过课程、高质量完成了课后作业(别笑)、看过开源工程、自己做过demo;
深耕是指:深入做过好项目、开源贡献、发表论文、相关工作/实习经验;
相关是指必须是用到你所希望展现给面试官的知识,比如你找一份软件开发的工作,那么你曾经做过的硬件项目就没有意义,虽然可惜。但是避免这种可惜的方式是,谨慎换行。
血泪教训:
- 你是一个AI算法工程师,然而接受了一个交换机开发的offer.
- 你做着软件开发的工作,现在跳槽去一家做硬件指令集的公司.
- 你曾经有1/10的工作经历是做硬件算子性能优化,现在求职一份专门做硬件算子性能优化的offer.
- 你曾经有9/10的工作经验是修改pytorch内核,在求职时完全没有面试官关心这个技能点.
没错,上面这个人就是我。
其他糟糕的模式如下,有你吗?
- 只有涉猎
例如,选了几门课,按部就班上课下课,拿到不错的学分绩点,仅此而已; - 专攻
例如,一开始一头扎入某具体问题,其他领域闻所未闻; - 浅尝辄止
例如,在均有涉猎的基础上,浮光掠影、蜻蜓点水地在很多领域做了一点点没有输出成果的尝试;
8.2 选择offer
首先声明,这个理论上是对的,但是如果你和我一样是普通人(而不是小“吴恩达”),那么自身能力有限的前提下,在理论和实际之间就要另外权衡。
工作中的长期成功取决于,work with great people/projects。
具体来说:
- 关注team(10-50人)
吴恩达:最能影响你产出的是你即将参加的那个小组,而不是整个公司。
我:emm, 菊厂的经验告诉我的事,大部门优势大于个人努力。 - Manager
吴恩达:你最多接触的是你的项目经理,所以他是否称职非常重要。
我:emm,直接领导确实非常重要,这个人也许不是你的顶头上司,也许是你的顶头上司的顶头上司,总之是那个真正掌握生杀大权的人。另外,跟他是否“合拍”也很重要。 - Not ”brand”
吴恩达:强烈反对看重公司名气。举了一个反例,例如一个知名大厂,你是个AI算法工程师,招你去随机分配做java后端。举了一个正例,例如一个初创公司,在本领域名不见经传,但是有一小波非常优秀的人,吴恩达建议你加入。
我:emm,是的,我也有反例这样的经历。不过,如果你自己真得是南郭先生呢?至于这个正例,也会担心真实性、可靠性,和对风雨飘零的公司前景的担忧。
8.3 长期规划
- Learn the most
- Do important work
很多大厂在拼命做同样的一件事,试图把这件事做到极致占据技术制高点,这很好,能推导技术进步,能加入很好。
还有很多领域,称之为“传统行业”,例如制造业、医疗健康领域,现有的AI技术已经能为整个行业带来革命性进步,且当前处于变革的初步阶段。这也非常好,在有生之年,以有限的生命和智力,创造了即时回报的高价值。
9. 深度强化学习
9.1 为什么需要强化学习
Q1. 深度学习可以取代强化学习吗?为什么不能使用深度学习解决所有问题?
A1.在非常多游戏中,用相同的算法,都能训练出超出人类玩家的水平。
游戏中,你必须做长期规划,而且走法有无数种不可穷尽。
Q1.1 用深度学习如何解决?在普通深度学习方法中,首先要收集数据集,怎么设计数据集?
A1.1 例如,x是当前的棋局,y是落在每个点获胜的概率。
这样,y是很难估计的,太复杂说不清。
再例如,x是当前的棋局,y是专业选手的落子,希望机器最终能学习专业选手的测量。
Q1.2 19*19的一盘棋,有多少种状态?
A1.2 319∗19≈101703^{19*19}\approx10^{170}319∗19≈10170,这个空间超大,很难通过观察学习。而且,专业选手下的也可能是错的,或者是基于长期策略的考虑,而不是当前的最优。以及,这样学习完了,机器还是赢不了人类。
总之,这不再是模式识别的问题,而是长期策略。
9.2 RL简介
以下图的游戏为例,
Q1. 如何定义长期受益?
考虑耗时越长越差,因此使用系数γ≤1\gamma\leq 1γ≤1。
γ=1\gamma=1γ=1,则上图中向右走得最高分,+0+1+10=11+0+1+10=11+0+1+10=11
γ=0.1\gamma=0.1γ=0.1,则上图中向左走得最高分,+2>+0+0.1∗1+0.01∗10=0.2+2 > +0+0.1*1+0.01*10=0.2+2>+0+0.1∗1+0.01∗10=0.2
Q2. 我们想学什么?什么对长期受益是有利的?
每个状态下的最佳动作–Q-table,维度是#actions ×\times× #states;
如果学习算出了Q表,那么就知道每步确切的怎么走了。
Q3. 试着算一下Q表。
走一步的得分如上,但是每个动作的得分应该是通过该动作后游戏结束时可获得的最大得分。
例如,S3->S4的得分=1+0.910=10分,那么S2->S3的得分=0+0.910=9分,然后反复往前推。
如你所见,这种计算是迭代的:
Q4. 既然能算出来,为什么需要深度学习呢?
- 最佳Q值符合贝尔曼方程式
Bellman equation: Q∗(s,a)=r+γmaxa′(Q∗(s′,a′))Q^*(s,a)=r+\gamma\max\limits_{a'}(Q^*(s',a'))Q∗(s,a)=r+γa′max(Q∗(s′,a′))
其中∗*∗表示最佳值,rrr是sss状态采取a动作的即时奖励,γ\gammaγ是时间系数,后面是转到下一个状态s′s's′后直到游戏结束能获得的最大得分。 - 策略
policy:π(s)=arg maxa(Q∗(s,a))\pi(s)=\argmax\limits_a(Q^*(s,a))π(s)=aargmax(Q∗(s,a))
function telling us what’s the best strategy to adopt.
处于状态sss时,应该采取什么动作aaa。 - 状态数太多(1017010^{170}10170),无法存储这样的Q表
9.3 深度Q-Learning
核心思想:找到一个Q-function代替Q-table.
深度学习网路是非常优秀的函数近似器,可以作为plug-in插入到很多现有算法中。
以当前状态为输入,DL算出所有动作的得分;
Q1. 如何训练这个网络?
没有标签。
计算向左走的得分时:L=(y−Q(s,←))2L=(y-Q(s,\larr))^2L=(y−Q(s,←))2,但是y是多少。
我们不知道y,但是我们知道最佳的y应该符合贝尔曼方程:
Q∗(s,a)=r+γmaxa′(Q∗(s′,a′))Q^*(s,a)=r+\gamma\max\limits_{a'}(Q^*(s',a'))Q∗(s,a)=r+γa′max(Q∗(s′,a′))
所以当前我们可以猜测一个相近的y(假设当前这一步向左走更好):
y=r←+γmaxa′(Q(s←next,a′))y=r_{\larr}+\gamma\max\limits_{a'}(Q(s_{\larr}^{next},a'))y=r←+γa′max(Q(s←next,a′))
我们同样不知道Q∗(s′,a′)Q^*(s',a')Q∗(s′,a′),但是我们有网络初始化值,可以立即计算出所有Q(s←next,a′)Q(s_{\larr}^{next},a')Q(s←next,a′)并找到当前看来的最佳动作;
不是最佳值Q∗Q^*Q∗,所以我们先这么用着,并期待会逐渐收敛到最佳值。
Q2. 能收敛吗?
可以,证明见论文:
[Convergence of Q-learning: a simple proof]
Q3. 网络稳定吗?
将上式代入L的计算,从而更新w时:
w=w−α∂L∂ww=w-\alpha\frac{\partial L}{\partial w}w=w−α∂w∂L
y的第二项对w的偏导非零,因为Q(s←next,a′)Q(s_{\larr}^{next},a')Q(s←next,a′)依赖网络权重www计算;
所以,y对w的偏导非零。
这样,反向传播的计算内部存在反馈回路,这导致网络不稳定。
所以,实际上训练时,Q值在很多迭代(例如10000次,直到梯度很小)中固定,然后再更新一次,再固定很多个迭代。Q值固定时,y就是一个数字,那么就可以计算损失L的偏微分了。
9.4 一个应用:Breakout
弹球游戏,目标是最快的使球穿过砖墙。
通过一段时间的强化学习后,机器自己学习到了高级技巧“打拐角”,没人告诉它!
Q1. DL网络的输入是什么?
有人说,是砖的位置、浆的位置、球的位置。这样的话,岂不是还需要将画面提取成这种特征?
no,实际上这些信息都在游戏画面中,所以输入是游戏画面。
Q2. DL网络的输出是什么?
在当前状态可以采取的所有动作的Q值。
Q3. 怎么确定小球是在上升还是下降?角度?
多用几帧,就能算出速度。
还有其他的预处理可以加快训练,例如,灰度化、裁剪图像中不影响结果的一些边缘,将预处理后的ϕ(s)\phi(s)ϕ(s)作为DL网络的输入。
9.5 训练技巧
9.5.1 Experience replay
数据集上看,强化学习跟经典DL学习的另一个区别是,在经典DL学习中同一个样本可能被使用很多次,但是在强化学习中当前状态也许再也碰不到了。
在强化学习中,称如下为一个体验:
E1ϕ(s)→a→r→ϕ(s′)E1~\phi(s)\rarr a\rarr r\rarr \phi(s')E1 ϕ(s)→a→r→ϕ(s′)
E2ϕ(s′)→a′→r′→ϕ(s′′)E2~\phi(s')\rarr a'\rarr r'\rarr \phi(s'')E2 ϕ(s′)→a′→r′→ϕ(s′′)
训练时,从所有见过的体验中抽样,因为权重变化,所以相同的状态可能会采取不同的动作,因此体验在丰富。
记忆重放的优点:
- 数据利用率高
- 否则相邻训练数据间相关太强
好比,训练猫狗分类器时不希望连续给10张猫的图像,游戏中的连续状态非常相似,应该避免连续使用 - 相当于用富足的存储和计算量,替代无穷无尽的state的搜索
9.5.2 激发新的探索
随机选一些训练不做最佳动作;
Q. 在训练中有没有人类知识对结果有区别吗?
在这个游戏中,人类看到钥匙知道有惊喜,看到梯子知道可以上下爬,看到绳子知道可以荡秋千,但是DL网络只看到无意义的像素。
论文中作者说,他们在49个类似breakout的游戏中战胜人类,但是上图这个游戏是最复杂、时间也最长的。
9.6 高级话题
树搜索
策略梯度vsQ值学习
竞争性自我学习
元学习
[Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks]
模仿学习
10. 对话助手&结课
10.1 chatbot
目标:帮助学生找到合适的课程并完成注册;
chatbot已经成为工业主题,学术界为此提供了一些帮助。
工业上,chatbot需要回答很复杂、事务性的问题,这里我们做了简化。
10.1.1 术语
- Utterance: 用户输入,直译“表述”
- Intent:用户的意图,直译“意图”
例如,enroll()注册、inform()告知 - Slot:用于从用户那汇集有关意图的信息,直译“插槽”、“萝卜坑”
例如,意图是注册,slot是“课程代码”、“学期”、“学年”、“学号”在会话系统中用户目前只提供了少量信息,
【cs230】吴恩达Deep Learning-3/3相关推荐
- Andrew Ng(吴恩达) deep learning 课程 (coursera)
引言 前段时间 Andrew Ng(吴恩达)在 Coursera 开设了深度学习的课程,正如 Andrew 在 Coursera 上的机器学习课程一样,Andrew 总是面向零基础的工程师来授课,而不 ...
- python下的橡皮线_python下载吴恩达deep learning编程习题
在cousera上注册deep learning后,可下载课后习题. 1.进入编程环境后,单击左上角的file-open,进入文件管理模式 2. 点击红圈文件夹进入根目录 3. 在根目录处右上角new ...
- 吴恩达Deep learning笔记(一)
Welcome to Deep learning Specialization 介绍了深度学习目前的发展状况以及未来的前景 Introdcution to Deep Learning what'is ...
- 【cs230】吴恩达Deep Learning-2/3
[cs230]吴恩达Deep Learning-2/3 0. 课程计划 5. AI + Healthcare 5.1 AI可以解决哪些高影响力问题 5.1.1 Levels 5.1.2 学习范式的变化 ...
- Stanford CS230吴恩达Reading Research Papers学习笔记
目录 Stanford CS230吴恩达Reading Research Papers学习笔记 如何通过更有效地阅读研究论文,来接触新领域知识 如何有效地针对一篇论文进行阅读 论文的多次阅读法 阅读论 ...
- coursera—吴恩达Machine Learning笔记(1-3周)
Machine Learning 笔记 笔记主要按照进度记录上课主要内容和部分代码实现,因为我会看一阶段再进行整理,内容会有一定交叉.关于代码部分,一开始我是只为了做作业而写代码的,现在觉得不妨仔细看 ...
- 吴恩达ex3_吴恩达Machine Learning Ex3 python实现
1.Multi-class classification 使用Logistic regression和neural networks来识别手写数字识别(从0到9).在第一部分练习中使用Logistic ...
- 学习笔记—1:多元线性回归模型,吴恩达2022Machine Learning
CSDN话题挑战赛第2期 参赛话题:学习笔记 一.公式部分 线性模型:即两个变量之间是一次函数关系的模型预测,为一元线性回归模型:而当所选取的x为多元时(例如x为多元的情况:房屋价格要考虑,位置.面积 ...
- 吴恩达第三周逻辑回归
分类问题 我们尝试预测的是结果是否属于某一个类(例如正确或错误) 分类举例 判断一封电子邮件是否是垃圾邮件 判断一次金融交易是否是欺诈 判断一个肿瘤是恶性的还是良性的 考查二元分类问题 我们将因变量( ...
- 从六大概念总结吴恩达机器学习书籍:如何做好工程项目实践?
选自towardsdatascience 作者:Niklas Donges 机器之心编译 在 ML 工程实践中,很多时候都会走一些弯路,可能是模型选错了,也可能是某个超参数一直不正确.那么我们该如何根 ...
最新文章
- API 面试四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?...
- my02_Atlas mysql5.7安装配置
- 关于高并发,我想告诉你这些!
- SQL_server 的基本操作
- 韩顺平 java笔记 第16讲 第19讲 数组 二维数组
- PHP 过滤器(Filter)
- 第九弹 - 脚本模式与参数视图
- 【面试题3】二维数组中的查找
- cstring::replace不区分大小写_Excel VBA之函数篇-3.11订单号千奇百怪,如何按照结构区分来源...
- 03-20 专项测试-APP 启动性能分析
- ‘MIX_INIT_MP3’ was not declared in this scope,这是什么情况?
- java截取视频第一帧图片
- Git 笔记:廖雪峰Git 教程总结
- MATLAB常用正则表达式记录
- 暗黑版微信,官方发布! (附下载链接)
- US Domain Center 建站神器
- 天翼网关 ddns设置_UCloud物理云网关百G级集群设计实践
- 目标检测 | 盘点提升小目标检测的思路
- 开源免费的C/C++网络库(c/c++ sockets library) 七剑下天山
- H5canvas(保存图片,globalCompositeOperation)