diff --git "a/OneDrive - \345\277\253\346\215\267\346\226\271\345\274\217 (2).lnk" "b/OneDrive - \345\277\253\346\215\267\346\226\271\345\274\217 (2).lnk" deleted file mode 100644 index 7f74c2d6cf5a960fc7faa6887d2e52b89fdd9fd0..0000000000000000000000000000000000000000 Binary files "a/OneDrive - \345\277\253\346\215\267\346\226\271\345\274\217 (2).lnk" and /dev/null differ diff --git "a/OneDrive - \345\277\253\346\215\267\346\226\271\345\274\217.lnk" "b/OneDrive - \345\277\253\346\215\267\346\226\271\345\274\217.lnk" deleted file mode 100644 index 7f74c2d6cf5a960fc7faa6887d2e52b89fdd9fd0..0000000000000000000000000000000000000000 Binary files "a/OneDrive - \345\277\253\346\215\267\346\226\271\345\274\217.lnk" and /dev/null differ diff --git a/SUMMARY.md b/SUMMARY.md index d38b0ec4b8d36195fe46e7ea530e80a6e8310da4..f8bf78996210e0abe2a8583262d4a209ead7807b 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -362,3 +362,16 @@ + [六、AIY 项目和 TensorFlow Lite](docs/whats-new-tf2/6.md) + [第 4 部分:TensorFlow 2.0 - 迁移,总结](docs/whats-new-tf2/pt4.md) + [七、从 TensorFlow 1.x 迁移到 2.0](docs/whats-new-tf2/7.md) ++ [UCB CS294-112 深度强化学习中文笔记](docs/ucb-cs294-112-notes-zh/README.md) + + [(1) 简介](docs/ucb-cs294-112-notes-zh/1.md) + + [(2) 模仿学习](docs/ucb-cs294-112-notes-zh/2.md) + + [(3) 增强学习简介](docs/ucb-cs294-112-notes-zh/3.md) + + [(4) 策略梯度法](docs/ucb-cs294-112-notes-zh/4.md) + + [(5) 演员-评论家算法](docs/ucb-cs294-112-notes-zh/5.md) + + [(6) 基于值函数的方法](docs/ucb-cs294-112-notes-zh/6.md) + + [(7) 深度增强学习中的 Q 学习方法](docs/ucb-cs294-112-notes-zh/7.md) + + [(8) 最优控制与规划](docs/ucb-cs294-112-notes-zh/8.md) + + [(9) 用数据拟合模型](docs/ucb-cs294-112-notes-zh/9.md) + + [(10) 基于模型的增强学习的策略训练](docs/ucb-cs294-112-notes-zh/10.md) + + [(11) 概率图模型与软化增强学习](docs/ucb-cs294-112-notes-zh/11.md) + + [(12) 逆增强学习](docs/ucb-cs294-112-notes-zh/12.md) diff --git a/docs/ucb-cs294-112-notes-zh/1.md b/docs/ucb-cs294-112-notes-zh/1.md new file mode 100644 index 0000000000000000000000000000000000000000..c1a173453ba3f160dde22fa63a136df44781922b --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/1.md @@ -0,0 +1,81 @@ +# (1) 简介 + +> 作者:[谢天](https://www.zhihu.com/people/xie-tian-55-77) +> +> 来源:[POST 馆](https://zhuanlan.zhihu.com/c_150977189) + +## 什么是增强学习? + +首先我们不要去想很酷炫的人工智能,而从我们会如何训练一只狗谈起:你很可能会想训练狗去做一些事情,比如让狗坐下。一种可行的办法是,如果狗做出了你喜欢的行为,那么你将对狗进行奖励;而如果狗做出了你不喜欢的行为,则对狗进行惩罚(或者不给予奖励)。具体来说,每次你一叫狗坐下狗就坐下,你就给他点儿好吃的;而如果它没有坐下,那么就不给吃的。通过类似这样的效应,狗就能通过这种获得奖励的机制来逐渐学习到你想让它干什么。 + +**增强学习** (Reinforcement Learning) 本身则基本是对这一个原则的数学化描述。增强学习有一个学习者,经常称为**智能体** (agent)。智能体需要和周围的环境和整个世界打交道,智能体所做的事情是做出**决策** (decision),来执行什么**行动** (action),在一些时候也成为**控制** (control);而世界环境则接受智能体所做出的决策,并给出相应的后果。我们主要关注的是两种后果:第一种是智能体所能看到或者感知到的它的行动所产生的结果,称为**观测** (observation):譬如一个机器人想要到某个地方去,它能“看”到它经过一整个过程的周围景观;另一种是智能体能直接通过做出某项行动所受到的**奖励** (reward),譬如狗能够得到食物来让它的胃得到满足。 + +用几个简单的例子来说明这一问题。 + +1. 第一个是狗,作为一个动物,它能影响世界的方式主要是通过肌肉活动,来发出声音或者移动四肢之类的作为行动。它的观测来自于它的感知器官,如视觉和嗅觉。它的奖励譬如给予的食物。狗通过这些东西来认知到它是不是在做一件正确的事情。 +2. 第二个是 Baymax 大白,它能影响世界的方式主要通过它的电动机,因此行动主要由控制电动机的电流、扭矩等的致动器来做出。它的观测主要来源于它的传感器、摄像头等,而它的奖励是由一些代码决定的,如任务执行成功度的评分:如果 Baymax 要学习如何跑得快,那么奖励就是它的跑步速度。 +3. 第三个是运筹学中的库存管理问题,这一问题中的行动如系统在什么时候买什么东西,观测为商品的库存水平,奖励是系统运行的利润:我们一般知道如果商品库存过多则需要很多的库存费用,而库存过少则不能满足销售需求而使整体利润降低。 +4. 此外,也可以运用到机器翻译中。如行动是法语句子,观测为英语句子,奖励是诸如 BLEU 评分 (Papineni et al., 2002)。 + +事实上,世界中有很多各种各样的问题可以被描述为增强学习问题。增强学习问题也是最广义的机器学习问题之一。值得一提的是,所有监督学习问题都可以被重新表述成一个增强学习问题,即便这不见得是一个好主意。如将输入定义为观测,输出定义为行动,损失函数定义为奖励。这样做有时候不好是因为增强学习问题往往假设更少,因此更难被解决,但也有例外情况:如使用 BLEU 评分来描述翻译质量,BLEU 是不可微的,因此常见的监督学习方法对这个问题并不好做,此时就适合用假设更少的相关增强学习算法。 + +## 为什么要做深度增强学习? + +这个就是由深度学习的特性决定的:我们采用深度学习的基本逻辑就是它能进行端到端 (end-to-end) 的训练,做出一个复杂的多层的具有很强表达能力的模型。以目前深度学习最成功的领域,机器视觉为例,深度学习可以训练出一个模型,从像素级别的图像经过卷积神经网络的若干线性和非线性变化最终产生出一个分类输出,来说明这个图片是一个什么。以下的图形就被分类成一只老虎: + +![](img/c59126c3f91d4e1a8d572f47341ec77d.jpg) + +我们关注深度模型,是因为目前我们认为深度模型能够让我们的增强学习算法来端到端地解决非常复杂的问题。将两者结合,我们期望深度模型能提供给增强学习算法解决非常复杂的决策问题的能力。 + +那么端到端的学习手段对这样的**序贯** (sequential) 决策问题有什么好处?绝大多数的机器学习系统都会通过看到的东西来以某种形式影响着世界。智能体通过机器学习的分类输出来决定其行动。上面的例子,照片的大部分面积是一只老虎。智能体在收到这是老虎的结论之后,通过一些决策过程得到逃跑这一行动,进而影响了整个环境。这样就构成了一个从感知到行动的交互过程。当然,前者的结论可能很难被“标签化”,譬如一只饱腹睡着的老虎和一只饥肠辘辘的老虎的意义就相差很大,很难说是一个分类标签那么简单,因此决策过程可能也会变得相当复杂。一个端到端的决策就刨除了这个标签,使得能从输入直接得到行动决策输出,如下图: + +![](img/c9ce0d61a85d13c4917d5adffee01423.jpg) + +这样做有利于我们把我们要做的整件事情通盘考虑,而**不需要人为去设定一些中间点**。如我们可以从整个库存系统的收益的角度来制定决策,可以从跑速度最快的角度来制定 Baymax 的运动,可以从最大化食物的角度来决定狗的肌肉应该做些什么事情。 + +我们来描述两个人工设计管道 (pipeline) 流程的例子。 + +1. 第一个是机器人控制系统。如果我们想弄一个机器人控制流程,首先第一步是从**观测**得到像素级别的图像;第二步是从这个图像得出现在的情况意味着什么,即**状态估计**;第三步是**模型预测**,可能会参考物理模拟器和相关仿真引擎来预测机器人下一步动作的效果;第四步是根据预测结果做行动的**计划**;第五步是将计划的结果变成**低级控制 (low-level control)** 来算出控制电机运转和扭矩的命令,最终实现控制。 +2. 第二个是视频游戏。我们从**游戏 API**得到游戏的相关数据,并**提取相关的特征**,如敌人在什么地方;接着建立**状态机**,在什么状态下你的机器人应该做些什么事情,如你的分数比对手高则你更愿意出去来打击你的对手,反之更愿意进入一个防守状态之类云云;然后有一个**计划器**,从状态机的每个状态将计划(如到哪里去设计)转达为**低级控制**,最后实现控制。 + +这样每一个阶段都被抽象化,立足于解决一个比较简单的问题,并将结果传递给下一个阶段。但是事实上这样做每一个阶段都会损失掉很多信息,必须保证每一次抽象都足够正确。这个通常很难做到,如机器人是否成功做出第一步状态估计,决定了之后的行动是否可靠。有点像很多综艺节目里面的“动作传话”这样的自编码器 (autoencoder),第一个人看了成语后表演,经过多个人传递后要从最后一个人的表演中还能保留有正确的信息。在多年前的机器视觉实践中,一个比较常见的流程就是先提取 HOG (Histogram of Oriented Gradient) 特征,再提取器 DPM (Deformable Part Model) 特征 (Felzenszwalb, 2008),最后送给一个支持向量机来做分类。深度学习的最大革命就是它可以自动定基,无需自行设计这些抽象层,无需做特定的接口,目标直达分类问题。这样端到端的训练机制避免了对特征提取和层次设计的长期探索,大大拓宽我们能做的事情范围。 + +![](img/8dd6a431a284795b9969551243d2a6b1.jpg) + +一个基于深度增强学习的机器人控制系统如上图。机器人摄像头为深度神经网络提供像素图像输入,深度神经网络提供马达扭矩级别的控制输出,形成一个序贯决策循环。一个形象但不确切的的理解方式是,这个神经网络的前几层卷积层可以认为是视觉皮层,而后几层全连接层认为是马达皮层,两者都是高度专业化的,我自己感觉类似于生物组织中大脑区域的分化。想要做这样的事情,有两个很大的挑战。第一点是它不像监督学习,通常没有人告诉它看到什么图像就应该做什么样的马达指令。第二点是它的行动会产生影响后果,不能只关注一个决策是不是做对了,而更应该关注整个序贯决策的正确性,直到产生我们想要的结果。因此深度增强学习的实践很多是一个试错的过程:系统尝试去做一件事情,观察结果后调整策略。 + +与 Levine 教授接近,我自己也觉得增强学习问题更接近 AI 的本质,可以用它来描述各种各样的学习任务。如果能让增强学习解决非常复杂的问题,那么它很可能在实践中有用,而深度模型能赋予增强学习这一能力。这也就是为什么我个人对深度增强学习非常感兴趣。 + +通常由几种情况我们不需要关注序贯决策,一种是系统做出的决策都是单独的,譬如监督学习中所常见的分类或者回归问题;另一种是当期决策不会影响后续决策的情形。而很多更广泛的情形,我们需要关注序贯决策:**有限监督**情形,我们知道我们想要什么,但不是怎么去具体做到它(我认为这种情形非常普遍,这一情形意义特别大),如狗知道它想要吃的但是不知道怎么用它的肌肉去赢得吃的;**有后果的行动**情形,一个单独的行动不会立即产生所有的损益效果,而只有整个序列完成之后才能确定是对了还是错了。这类问题在譬如机器人、自动驾驶汽车、语言和对话、商业运营和金融等领域都有很大意义。 + +当下也有三个实际原因来鼓励我们学习深度增强学习。第一点是在近几年深度学习的发展已经使我们看到了很多有表现力的高容量的模型,有了表现非常复杂决策任务的能力;第二点是增强学习的发展使得训练增强学习模型的算法有了很大的可扩展性;第三点是当前计算力的发展已经能使得我们在一定时限内训练足够复杂的模型来解决现实问题。这一切都使得深度增强学习的研究是非常务实的。 + +事实上,将高容量的非线性模型纳入决策之中的深度增强学习某种意义上是“新瓶装旧酒”,80 年代末就有用神经网络做控制的专著,90 年代出现的很多想法到近年才被很好实现;而且很多想法依然是最前沿的有先进性的,因为大家还不知道怎么去做这些事情。关于用神经网络结合增强学习下棋也不是 AlphaGo 的首创,Tesauro (1995) 编写了一个叫 TD-Gammon 的软件,利用 Temporal Difference (TD) Learning 训练神经网络在西洋双陆棋上击败了顶尖人类选手。 + +在当下,深度增强学习有很大影响力的工作已如雨后春笋。如在 Atari 游戏上(因为 ET 事件而倒塌的曾经的游戏界巨子,现已成为了 AI 的试验田)取得显著成果的:使用 Q-学习法 (Mnih et al., 2013/2015)、使用策略梯度法 (Schulman et al., 2015; Mnih et al., 2016);在实际的机器人控制上:使用引导策略搜索法 (Levine et al., 2015)、使用 Q-学习法 (Gu et al., 2016);当然还有著名的 AlphaGo (Silver et al., 2016),无需多谈。 + +## 实际序贯决策还涉及哪些其他问题? + +深度增强学习问题到真实世界问题之间还是有很多距离的。基本的深度增强学习的目标是最大化奖励,但这不是序贯决策问题所仅仅关心的。有些时候,指定奖励函数是什么都是非常困难的,需要很多复杂的工程,而**逆增强学习** (Inverse Reinforcement Learning) 则致力于从例子中学习奖励函数;有一个问题是将技能在不同的领域之间进行传递,有些时候可能没有足够的时间或者带宽来直接学习目标领域,这个时候**迁移学习** (Transfer Learning) 就可以使用过去的经验来加速;有的时候我们可以获得非常充足的经验,但是可能对奖励或者任务并不明确,这个时候就可以用之前的经验来预测从而完成任务。 + +奖赏从何而来?如果我们考虑玩一个 Atari 视频游戏,我们会考虑最大化右上角显示的得分,这个还挺明确的;但是如果我们要弄一个机器人让它倒满一杯水,这个奖赏函数该怎么设置?这个任务对于孩子来说并不难,但是对于机器人来说则异常艰难,也是一个开放问题。从生物学、大脑的角度看,有一块非常复杂的、叫基底核 (Basal ganglia) 的部分负责人类的这块“奖赏”,一般是对进化有利的人类行为进行奖励。很难说是一个来自奇妙的地方的一个奇妙的“得分”,必然是有一定来源的。一只猎豹在捕猎一只羚羊,猎豹不能只是随机地动它的四肢直到捕到羚羊这个事情发生,必然有很多诸如对方向感知等,这个奖励系统事实上必然是非常复杂的。事实上,奖赏系统的存在性和完善性已然是一个相当强的假设。 + +关于监督学习,抛开端到端的函数拟合这样的强形式,较弱的形式也会得出一些非常有趣的问题,需要用到更多的主观能动性。第一种是从其他智能体的成功示范中学习,如直接复制观察行为的**行为克隆** (Behavior Cloning),或者是试图从观察到的行为来“理解”实际意图构建奖赏评分的逆增强学习:看智能体做了什么,找出为什么它们能成功的原因,并找出自己的方式——我认为人类的学习很大程度上就是这么在做的,因此是一个非常有意思的研究方向。第二种是通过对世界的观察来学习,如猎豹理解周围的物理环境来预测怎么去抓住羚羊,而不仅仅依赖长期的试错过程,或者如找出结构规律,通过其他感官得到的某种程度的“通感”来加速对视觉的推断,有点类似于无监督学习。第三种是从其他任务中学习(这一点也是人类非常擅长的),如在过去做过类似结构的任务,就使用迁移学习来加速到现在要做的任务中来;最近也有一个最近广受关注的很火的**元学习** (Meta-learning) 的概念,比迁移学习来得更微妙,用过去的学习经验来弄清如何学习得更快:我不知道怎么解决这个问题,但是在过去我通过尝试一堆方法来解决过其他问题,因此我同样把这些方法在现在的问题中进行尝试看看效果。 + +**模仿学习** (Imitation Learning) 是解决序贯决策问题的一种很直接的方式。来自英伟达公司的一项自动驾驶的研究 (Bojarski et al., 2016) 就采用了这一技术,仅使用复制人类司机的行为,没有用到任何奖励函数或者传统意义上的增强学习。虽然有一些理想化,这说明了仅通过模仿人类专家的行为已经能做很复杂的事情了。在模仿学习之上,就有了对意图的推断,这一点即便是孩子也可以做得相当好。有一个视频是大人双手捧着一大堆书然后想把书塞进关着门的橱子里,但是没有手打开,然后孩子就跑过来帮忙把橱门打开,帮助他解决这一问题。Finn et al. (2016) 使用逆增强学习技术指导机器人完成一个拿着水杯倒水给另一个不同位置的水杯的任务,机器人就通过人类的教学,“理解”了这一意图。 + +增强学习强调学习“技能”,学习从观测状态映射到行动的这样一个行为。当然我们也可以尝试去预测,而预测则是将现在的观测状态和行动,映射到下一个状态。预测是人类大脑的一个重要组成部分,事实上人类经常在做这样的事情,也用到了运动控制上。Wolpert and Flanagan (2001) 表示我们对运动指令所产生结果的预测,形成了感觉运动领域全方位的重要理论概念。如果你能进行预测,就能在还没有执行这一行动之前想像可能会发生什么,就能通过合理的行动来完成目标。这是想象力告诉你这么做会成功,而不仅仅是依赖反复的试错。如果我们有一个完美的(预测)模型,能确切地告诉你未来会发生什么,我们可以期望做非常复杂的决策问题。这一类实验常常在模拟中,如 Mordatch et al. (2015) 在模拟器中使用深度学习和完美模型的轨迹优化来训练小机器人走向用户指定的点(这个点的方位在不停变化),这类方法也成为基于模型的增强学习 (Model-based RL)。如果我们没有这样完美的模型,也可以一定程度对现实世界的控制问题做出预测。如 Finn et al. (2017) 使用一大堆机器人与周围环境随机互动,记录并收集行动后的图像,来构建循环卷积神经网络模型,通过看视频的第一帧和提供之后机器人会做什么动作,预测会序贯产生的观测场景。 + +## 如何建造智能机器? + +人类的大脑是分成很多不同区域,每个区域做不同的工作。作为一个工程师,可能会想到做出一堆模块组件,如果能对每一个区域做出合适的组件然后弄在一起倒也是合理的。但是事实上这样做出的智能体很难适应不断变化的新情形,这样的智能系统可能是相当脆弱的。 + +考虑将“学习”本身作为智能的基础。有以下几个事实,有一些技能是人类的先天属性,譬如哭喊,这个除了身体缺陷外是人人都能做到的;有一些技能则是只有通过后天学习得到,如驾驶车辆,写论文之类;人类强大到可以学习非常非常多不同的东西,包括非常复杂的事情。这几个事实告诉我们,我们的学习机制看起来足够强大,能做到任何被冠以智能之名的事情。但是依然有必要去将一些没有时间去学的非常重要的内容进行“硬编码”(hard-code),这样可以把这些事情做得相当快。 + +人类的大脑分区,是不是每一个区域有一个特定的算法之类的东西来执行呢,如这块存储了视觉算法,另一块储存了运动算法,然后连起来?或是应该有一个灵活的算法来执行所有事情?如果你现在被要求做这个非常复杂的系统,对每一块设计学习算法可能是非常麻烦的,可能我们只需要一个通用的算法。从生物感知的角度,这样的猜想可能是真的。有研究证明人存在非常见的感知手段,如有用舌头通过摄像头的电极连线来“感受”到世界,盲人通过回声定位来确定位置。也有对雪貂做实验,将小时候的它们的视神经从视觉皮层切断连到听觉皮层,等到长大了发现视觉依然可用。这说明即便是非常规的感知手段,生物依然可以知道怎么去用这些感官来做事情,也说明了推广到通用算法是可能的。 + +那么这个通用算法的需求应该是什么?首先它必须能解读非常丰富的感官所带来的输入,包含看到的听到的图片文字之类的。同样它必须能给出非常复杂的行动,来影响周边的世界。很多时候想做的事情非常抽象,这时通用算法要将买卖股票编译为实际的物理运动,有点像计算机中的低级语言。这两点需求正好对应了深度增强学习的两大特征:深度模型能够帮助我们处理非常复杂的感知输入,同时也能计算出非常复杂的函数;而增强学习能够选择非常复杂的行动。有一些相关证据说明这一问题。早在 Saxe et al. (2011) 使用深度学习来学习人类的视觉、听觉和触觉,其统计特征与之前做过的实验相似。虽然这并不意味着深度学习做的和人类真正做的是一回事,但说明深度学习能够助力学习这样复杂的函数,使得统计特征与真实的实验相近。这提供了一种可能性。增强学习则把决策问题转化为了计算框架。一方面,预测奖励的感知与奖励本身的特征非常相关(我的理解是譬如狗怎么做去获得食物,和食物本身在那边非常相关),另一方面,动物的基底核与增强学习的奖励函数也可以有一个对应关系。此外,无模型 (Model-free) 的增强学习类似的适应过程常常与动物适应过程的实验数据相吻合(虽然并不总是这样)。这些都说明了增强学习可能是一个好主意,而深度学习能帮助它做更复杂的事情。 + +我们也关心现在深度学习和增强学习到底能做好一些什么样的事情。主要有三类问题。一类以 AlphaGo 在围棋领域的突出事迹为代表,在一个已知规则且规则简单的领域内,获得很高程度的精通水平;第二类是给予足够的经验尝试,使用直接的传感器数据作为输入来学习简单的技能,这个在机器人中比较常见;第三类则是从足够多的人类专家提供的行为中模仿学习,如自动驾驶。 + +同样这类问题也有一些缺陷。首先,人类的学习速度可能快得惊人,而深度增强学习算法通常学得很慢;其次,人类可以利用过去的知识,而在深度增强学习中的迁移学习依然是一个开放问题。此外,一个很经常的问题是并不知道奖励函数到底应该是什么东西,也不知道预测在整个问题中究竟应该处于怎么样的角色。 \ No newline at end of file diff --git a/docs/ucb-cs294-112-notes-zh/10.md b/docs/ucb-cs294-112-notes-zh/10.md new file mode 100644 index 0000000000000000000000000000000000000000..a7b0fba6e70765f42dac7876a5fa9846eca73ae1 --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/10.md @@ -0,0 +1,91 @@ +# (10) 基于模型的增强学习的策略训练 + +> 作者:[谢天](https://www.zhihu.com/people/xie-tian-55-77) +> +> 来源:[POST 馆](https://zhuanlan.zhihu.com/c_150977189) + +## 使用基于模型的增强学习训练策略 + +在上两篇中,我们对基于模型的深度学习进行了大致的探讨,包括如果我们已知模型信息如何进行利用来做出正确的决策(如 MCTS 和 iLQR),在不知道确切模型的情况下如何收集数据学习模型。其中在上一篇中,我们给出了收集数据学习模型的框架,并使用 iLQR(包括加入噪声成为 Linear-Gaussian)进行规划;我们分别探讨了如何训练全局模型(如高斯过程 GP,神经网络等)、如何通过控制旧轨迹和新轨迹的 KL 散度的方法在一个信赖域中训练局部模型(如线性模型),也可以用诸如贝叶斯回归的方法将全局模型作为先验更好地训练局部模型。在训练模型之外,我们讨论的控制基本上局限于 v1.5 版本以下的在线执行某些规划过程,主要是 v1.5 版本的闭环 MPC 方法,是具有相当的鲁棒性的。 + +在这一篇中,我们将探讨通过基于模型的增强学习算法来训练策略,如何像 v2.0 版本一样使用策略来做决策。获得一个策略有很多好处,首先使用策略来进行在线行动选择是一个轻量级的方法,远比 v1.5 的每步在线重新使用规划方法求解快;此外更重要的是,**训练策略可能有比训练模型有更好的泛化能力**(但不一定,取决于问题)。举个例子,考虑到(譬如在棒垒球中)我们去接一个球,基于模型的算法考虑物体的飞行轨迹,譬如如何受重力和风力影响,然后求解运动问题,确定落地点,然后过去接球;而事实上人类去解这个问题更简单,如我们只需要追赶这个球,保持一定的速度使得球在视野里面就行了,我们没必要关注具体的物理动态,也能接住这个球。这个例子说明了有可能使用策略的话,观测和行动之间会是一个比较简单的关系,从而训练一个不错的策略比搞清楚模型具体是什么更容易泛化,更容易提炼出某种意义上的“知识”作为策略以适应新情况:人类的接球策略可以在物体不是球的时候也通用,而根据物理模型规划计算则需要做很大变化了。 + +![](img/50bdb2fb29c1e6c7e821f1c61cfa810f.jpg) + +我们继续祭出之前多次使用过的计算图。这个计算图本质上体现了**策略函数**和**模型动态**影响**代价(收益)**的形式(包含了三个重要组成部分,注意这里换成最小化代价了,其实是一样的)。在 v2.0 版框架中,我们考虑使用反向传播的方法来优化策略函数**![](img/3fb4a0a3d10d54fda62b86560346c0ee.jpg)**:如果这三个东西都是可微的,那么我们就可以求出代价关于![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)的梯度(对于确定性策略更容易,对于有些随机策略也是可行的,如之前所讲的[PILCO 方法](https://link.zhihu.com/?target=http%3A//mlg.eng.cam.ac.uk/pub/pdf/DeiRas11.pdf)匹配前两阶矩),从而反向传播是可以做到的。但不幸的是,直接这样简单的做法通常并不可行。 + +![](img/493e5eae0dbf745d2b4cc2e892bdd5ad.jpg) + +考虑最早期的行动,最早期的行动通常对整个轨迹有非常大的影响(如上图,第一个动作变化可能会使得整条轨迹有很大的晃动),可能会影响所有后续的状态和动作,因此关于它的梯度应该是非常大的;而在后期的行动,在整个序贯决策问题中关于总代价起到的作用就比较小了,因此关于它的梯度就小:从而,这个梯度会相当病态。这个**参数敏感问题**在射击法 (shooting method) 中也同样存在,在射击法中我们同样也不使用一阶算法而使用类似 LQR 的二阶算法,但是在这里我们就不再有一个类似 LQR 的容易的二阶方法来求解这个问题了:因为引入了含参的复杂的策略函数,这些参数在整个问题中将非常纠结,因此不再能用简单的动态规划方法求解了;我们会发现,其实这样的求解序贯问题和训练 RNN 非常相似,而训练 RNN 的一个重要方法就是 BPTT:因此,训练这个问题所遇到的问题和 BPTT 中**梯度爆炸/消失的问题**本质上非常相似,但是 RNN 我们可以通过选择类似 LSTM 的表达结构来使得梯度变好,而对于我们的问题来说,系统动态![](img/dad139946fdd1363ecd86d20700a53a6.jpg)是外生的客观存在的,我们只能去学习而并不能自主选择。因此我们遇到的问题相对来说更棘手。 + +## 引导策略搜索 (GPS) + +相比射击法,搭配法 (collocation methods) 优化每个时刻的状态或者同时优化状态和行动,并使用约束来表示状态转移的关系。这样的方法相对射击法而言,就没有那么参数敏感了,但是困难在于它不是一个无约束优化问题了。有一个特点是,我们可以将策略**引入优化问题中,作为约束条件**,而不再成为射击法一样的计算图的一环,便有了![](img/561cb3c497afbaf951df20db4b3dd1c5.jpg)(这里先假设都是确定性的)。这个表达形式还是同时优化状态和行动的,也可以只去优化状态,![](img/194d7a8040c17d7b3a18235c6861b6a2.jpg),这样行动就是相邻两个状态的产物。 + +为了让这个问题容易求解,我们可以先把这个问题分离出来,一方面去优化![](img/2d53ff33551d1d7e3459cab90cc3dfdf.jpg),这是普通的轨迹优化问题,可以用之前讲过的 LQR 等方法进行优化;同时又施以![](img/f0d56428fe4ff195c37df6d4c21643a7.jpg)的约束。为了求解这样的问题,我们使用增广拉格朗日乘子法 (augmented Lagrangian method),非常类似于上一篇中的 DGD 算法,只是求解![](img/9c14e24f69944e3ac895ab410447c294.jpg)问题时,拉格朗日函数变成了增广拉格朗日函数![](img/f336c76edad1bb8515a70c67c5f28018.jpg),加了一个二次惩罚项,使得在严重违反约束条件时更倾向于控制约束条件以增加稳定性(这个函数最常见在 ADMM 算法中被涉及到,这个算法也算是 ADMM 的一个特例)。增广拉格朗日算法的总体框架还是和之前一样,迭代进行以下步骤: + +1. 在给定拉格朗日乘子![](img/5e8df2ba7e47a784c714d176ed8bbb7a.jpg)下,求解最优的![](img/367ecf53e018b445e6229254252d6943.jpg)。 +2. 求解![](img/809bdce7cceb4eb4c572b511fcd8cfab.jpg)。 +3. 拉格朗日乘子走一个梯度步![](img/192458096516bdf515c04f846b5ba4e9.jpg)。 + +我们记![](img/922a8c7e899a4fb2edfa61167015dcbc.jpg),则优化问题可以简写为![](img/944bed48d9482ee25a9138392b9fd5a7.jpg)。它的增广拉格朗日函数可以写成![](img/daad6317c28f34cf3f9e7f5080202376.jpg)。这个函数有两块未知参数和一块乘子,因此考虑形式上非常接近于 ADMM 的这样一个算法: + +1. 固定![](img/fd5707147c4b3a62034e9d59a763ed27.jpg),使用诸如 iLQR 的方法优化轨迹![](img/9ad0752dc21c13eb7e56ed911bf8450d.jpg)。 +2. 固定![](img/a7d7833e37d30607ecbb9662e59f96f4.jpg),使用诸如 SGD 的方法优化策略参数![](img/b546d9c0663bd8adf6d5cff3dba8370d.jpg)。 +3. 拉格朗因为日乘子走一个梯度步![](img/192458096516bdf515c04f846b5ba4e9.jpg)。 + +其中第一步相当于重新构建一个代价函数,把后面部分包进去,然后执行 iLQR。第二步注意到![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)只和后两项有关,而后两项的形式简单,且能完全按时间分解:这样的好处是不需要再做反向传播了,而稍作变形,本质上只是一个非常传统的最小二乘监督学习问题,可以用一些 SGD 方法进行求解。因此整个过程是交替使用轨迹优化和监督学习,不需要再做 BPTT。这样的方法理论上需要凸性,但是如果没有凸性的话有些时候实践中效果也还可以。当然,要让这样的算法在实际中可用,还需要做一些其他工作。 + +这样的算法属于**引导策略搜索** (Guided Policy Search, GPS),这样的叫法主要因为策略训练是跟着轨迹优化的结果而来的。有意思的是,该算法一方面可以被理解成在**约束下的轨迹优化算法**,同时因为第二步就是一个监督学习过程,另一方面可以被理解成**对最优控制的模仿学习**。这也建立起了基于模型的增强学习与模仿学习之间的关系。最优控制扮演了老师的角色,同时最优控制又需要去适应学习者(因为第一步轨迹优化是与给定策略有关的),避免一些学习者不能模仿的行动,属于一种自适应学习。广义的 GPS 算法的一般结构是这样的: + +1. 关于某些修改后的代价函数![](img/197f111118da7cac5aa7a366d59e47e2.jpg)进行轨迹分布![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg)的优化。 +2. 关于某些监督学习的目标函数优化策略参数![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)。 +3. 修改对偶变量![](img/5e8df2ba7e47a784c714d176ed8bbb7a.jpg)。 + +本质上只是之前算法的推广泛化,第一步修改代价函数以加入增广拉格朗日函数的两项,第二步不需要考虑原始代价函数因为原始代价函数只与轨迹有关,而与策略参数无关。我们需要选择的是**轨迹分布![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg)的形式**(或者干脆确定性的![](img/5111a38eb8cde8aa0e0ba490e4ad4d4b.jpg),确定性形式比较容易,而随机形式一般需要使用比较简单的分布类如高斯分布去近似)、**分布**![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg)**或者**![](img/5111a38eb8cde8aa0e0ba490e4ad4d4b.jpg)**的优化算法**(第一步的轨迹优化算法)、**修改后的代价函数**![](img/197f111118da7cac5aa7a366d59e47e2.jpg)、**用来训练**![](img/3fb4a0a3d10d54fda62b86560346c0ee.jpg)**监督学习的目标函数**。举例来说,确定性形式其他部分就跟我们刚才所说一致,问题为![](img/944bed48d9482ee25a9138392b9fd5a7.jpg),我们的第一步中修改的目标函数就是![](img/3dd2e44fa1672425fb5951385ac2a89f.jpg) 。 + +![](img/33a886d276c4d9ffed3f3b7d2fbfd53e.jpg) + +我们有时候也会遇到需要从多条轨迹中学习策略的问题。以上图为例,我们从小红点出发,想走到小绿叉位置。然而从一个点出发的路径容易规划,但是这样一条单一的路径可能对策略学习不太好,所以我们想从多个不同的出发点开始学习策略以提高策略的泛化能力。这样的问题又可以被表述为![](img/b3d8b4f2ad4d077d79aa47f014faa1f9.jpg),同时优化一组轨迹,减少它们的共同代价,并将它们限制在同一策略之下。这个时候 GPS 算法的第一步只需要改成对所有的![](img/31df9c730e19ca29b59dce64b99d98c1.jpg),关于![](img/61616de1801a9677c387f72db1d82758.jpg)进行轨迹优化:这一步其实可以并行完成,因为它们只与被固定下来的![](img/1bd05854f73537385ab1d87151f20ba1.jpg)有关,而互相之间其实没有联系。第二步需要把这些数据全部拿过来放在一起进行监督学习。Mordatch et al. (2015) 发表在 NIPS 上的文章"[Interactive Control of Diverse Complex Characters with Neural Networks](https://link.zhihu.com/?target=http%3A//papers.nips.cc/paper/5764-interactive-control-of-diverse-complex-characters-with-neural-networks)"就利用了这一并行(在多台机器上训练,然后合起来)的约束下的轨迹优化的方法来训练神经网络策略,在 MuJoCo 模拟器上完成了复杂生物(如类似蝙蝠翅膀,更复杂的如人形机器人的步态)的运动 (locomotion) 学习,可以做到向某一目标移动的实时控制。在训练策略之外,这样的介入策略的做法还提高了轨迹优化本身:策略的介入迫使行动成为状态的函数,使得轨迹优化会做出**周期性的稳定控制**,而不仅仅是一个不稳定的只为了到达目标的控制。在这里,不同的轨迹意味着不同的起点和终点。 + +对于随机 GPS 问题![](img/6b7d043a23d33b04179acbdedc804ba4.jpg),控制器从单一策略变成了一个策略分布。我们仅以最简单的(局部)线性均值加高斯噪音的控制器为例,![](img/b847640ee1f0f9e65cd3797b679c025d.jpg),这类形式比较容易求解。第一步优化![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg),目标函数我们上一篇中在一个信赖域中拟合局部模型相似,![](img/3494464458ae60cfb23ba33d9b58c5a5.jpg)。使用这样的方法训练策略,相当于在原来的结构上多出一块训练![](img/b78351a3a805b0eed3d271eb38fb40dc.jpg)的部分。 + +![](img/4146f60d00703b2aeddbfe64af69ad05.jpg) + +首先第一步使用我们现在的线性-高斯控制器来运行机器人,以收集一些轨迹样本;第二步去用这堆轨迹去拟合模型动态(一些回归的方法),然后在信赖域中更新线性-高斯控制器。在信赖域中找新控制器的时候,我们同时使用上了用这堆轨迹数据训练的神经网络策略。在机器人学的背景下,Levine et al. (2016) 等人投稿于 JMLR 的"[End-to-End Training of Deep Visuomotor Policies](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1504.00702)"一文提供了一种端到端的策略训练机器人做事情的方法。此时我们的神经网络不再训练![](img/3fb4a0a3d10d54fda62b86560346c0ee.jpg),而改为训练![](img/b78351a3a805b0eed3d271eb38fb40dc.jpg),也就是以机器人的视觉图像为一段,输出直接为策略函数,这样的端到端学习,下图即为端到端的 CNN 结构。 + +![](img/ed28ff1a15a549058b3d5c09829601db.jpg) + +因此我们的 GPS 问题变为了![](img/7f4cc8af7cdd2ce14e3367972fabf390.jpg)。我们使用局部模型进行(低维度的)轨迹优化作为老师来得到策略,但是我们在真正训练神经网络的时候则把输入替换为机器人看到的图像,然后进行监督学习,重复这个过程。在训练神经网络时候我们把输入从状态偷偷替换成了原始图像,这样的技巧叫做**输入重映射** (input remapping trick):在轨迹优化的时候我们采用状态,而在训练策略的时候我们使用图像,这种方法有助于我们训练从**传感器(如摄像机)直接得到的高维输入的策略**。比如说在移动方块的任务中,在训练的时候,机器人可能可以通过某种方法知道木块在哪里(也就是知道状态是什么),但是在测试的时候则只能通过图像来确定策略,这样的方法就可以用上了。 + +## PLATO 算法 + +在这一块,我们介绍另一种使用模仿学习的方法。这个想法是基于之前我们提到的约束下的轨迹优化问题又可以理解为一种对最优控制的模仿学习。那么说到[模仿学习](https://zhuanlan.zhihu.com/p/32575824),那么算法就不只有一种了,在之前的模仿学习中我们就介绍过 DAgger 算法,一个模仿最优控制的应用就是[之前](https://zhuanlan.zhihu.com/p/33093879)提到过的 Guo et al. (2014) 使用 MCTS 来提供 Atari 游戏样本,并使用 DAgger 算法来实现模仿学习 MCTS 策略。 + +最原始的 DAgger 存在一些问题。譬如该方法的第三步要求**人工标注新样本**,这非常不自然的,因此我们使用某些如最优控制的方法**让计算机自动标注这些新样本**,算是得到了解决。DAgger 的另一个很大的问题是我们在一开始需要通过人工数据来训练一个策略,然后**运行这个策略**来得到数据。但是这个策略在一开始可能是非常糟糕的,我们只有在反复增加数据之后才能缓解分布不匹配的问题,而分布不匹配问题在一开始非常严重,甚至是灾难性的(如驾车)。如果我们能用一些基于模型的增强学习算法来“更好地”运行这些策略,使得安全系数提高,那么不失为一件好事。 + +Kahn et al. (2016) 在"[PLATO: Policy Learning using Adaptive Trajectory Optimization](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1603.00622)"提出的 PLATO 算法正为解决这个问题而存在。该算法将 MPC 思想引入到 DAgger 算法中,而 MPC 的每步重新规划正是为了克服误差的。DAgger 算法的第二步尝试执行监督学习训练出来的![](img/b78351a3a805b0eed3d271eb38fb40dc.jpg)来获取数据集,就是我们学出来什么策略就运行什么策略,来克服分布不匹配问题;而事实上 PLATO 算法告诉我们,我们可以稍微做一点妥协,且同样也能得到收敛性保证:我们尝试使用一个近似的策略![](img/f8522d3da635383bc47465f500926bb3.jpg),而这个策略出自使用 LQR 来求出![](img/59e0bc14e4494fd218a9c42e6564e35a.jpg),和之前一样,结果是一个线性均值的高斯分布。譬如在驾车过程中,如果发生碰撞就会得到一个很高的代价,这样的策略就会以降低代价函数为目标,同时也保证新策略不与就策略差别过大。我们在每一步中执行这样的新策略作为校正,均衡长期代价和与当前策略的接近程度。注意到,我们的策略![](img/93650e97dd680d264a8d636dcb099907.jpg)在每一步最小化的是**长期的期望代价**和**当前阶段的 KL 散度**(两者的一种权衡),因此它实际想做到的是做出一个不背离当前阶段策略太远的长期期望代价最低的决策。因此,我们将该算法结合 MPC 进行使用,在每一步就需要重新规划。 + +![](img/3bb9bad2b3bc96239009f033c7d5b01c.jpg) + +在这里,我们和前面 GPS 中所提到的一样,使用了输入重映射的技巧,控制![](img/b03a2efdc6ceb6433989465aa3ed57fe.jpg)和 ![](img/c06e9d534cda839ae39c8ebcfe18e92f.jpg)之间的 KL 散度,这是因为我们学到的策略可能只是关于观测到的图像,而我们实际发生的控制策略则需要根据状态得到。PLATO 算法想做到的是,在训练阶段,我们可以有一些外部的观察者来给出车辆的状态信息,使![](img/b03a2efdc6ceb6433989465aa3ed57fe.jpg)相对来说比较聪明,以避免很多不必要的损失;但是![](img/c06e9d534cda839ae39c8ebcfe18e92f.jpg)还是要根据原始的传感器等信息来学的,这个可能比较难学,但是我们在真实测试环境中还是要靠![](img/1bd05854f73537385ab1d87151f20ba1.jpg)。我们知道观测是由状态决定的,但是我们的模型是用来预测未来的状态的,如果我们有模型的话我们可以知道![](img/39e0c1687c6b5063ee6c20328748f07a.jpg),但是观测的分布![](img/96c9d62d90ce1279ddf00c820d22735c.jpg)是不知道且极难的:相对预测下一帧图像而言,我们更容易弄清楚下一个状态是什么。因此我们也不是对未来的观测做规划,而是对未来的状态做规划。我们知道下一阶段的状态是什么,但是不知道下一帧观察是什么:因此我们执行一步操作后,我们就能得到下一阶段的观测,然后重新规划,进行这样的循环。 + +![](img/c7eb76d568f40a6973a8e85ed8ffc420.jpg) + +这样一个训练四旋翼躲避障碍物的任务中,在训练过程中,四旋翼被监视器等设备所控制(或者使用激光测距仪等),因此它能很好地得到自己的状态进行重新规划,同时也使用输入重映射技巧,端到端地训练直接的从观测到行动的策略;在实际测试中,则使用原始观测图像。总体来说,这种 DAgger 的变种算法中,我们代价函数中的![](img/3204ef1222946547d995c14aa3a98ff8.jpg)使得我们能去学习改进策略,直到最后变成一个完全在线的行为,这意味着分布不匹配问题得到了解决;![](img/2ffd09689b73ce51d5343429bde37b0e.jpg)使得我们能避免高代价(如碰撞损毁),即便我们的策略和原始策略有差异,哪怕产生分布不匹配的问题,我们也不想产生太高的代价。 + +## 一些总结 + +在本篇中,我们首先提到可以使用反向传播的方法训练策略,但是由于梯度爆炸/消失等问题效果不佳。接着我们通过将策略作为约束条件来进行搭配法的方式,使得基于模型的增强学习非常像对最优控制(轨迹优化等)的模仿学习,并具体讲了 DAgger 类算法和 GPS 算法。DAgger 算法不需要一个能自适应策略变化的专家,因此如果我们有一个很难去修改目标函数等以适应策略的规划算法的话,DAgger 是一个很好的选择。但是 DAgger 也有自己的假定,它**假设我们的学习者可以学到一个策略,使得和专家行为之间的差距是可以被控制在一个很小的范围之内的**,也就是说假设不存在学习者怎么都学不会的情形。事实上,这样差距不可控的情形是存在的,如在部分观测的问题中。一个极端的例子是在驾车时不给车任何观测信息,也有可能我们的策略簇根本无法学会专家行为。而 GPS 算法则需要专家去适应学习者,也需要修改轨迹优化算法来加入策略的损失信息,但是正因如此,专家时刻跟着学习者走,它不需要控制差距的范围。 + +我们之所以想去模仿最优控制,主要是因为这样做相对比较稳定且好用:我们现在已经能把监督学习算法做得很好了,最优控制算法通常来说也效果不错,因此两者结合通常也可以期望能有不错的结果。我们可以使用输入重映射的技巧,在做最优控制时候使用低维度的状态信息,而在训练策略时候可以引入高维观测信息。它也能克服直接做反向传播方法的诸多困难。此外,这样的做法通常样本利用率高,且对于实际物理系统可行。 + +我们对迄今为止讨论的两大类基于模型的增强学习算法进行总结。第一类是不引入策略,光学习模型并使用模型进行规划。这类方法迭代逐渐收集数据来克服分布不匹配的问题,同时我们也可以使用 MPC 的方法在每一步进行重新规划来克服模型误差带来的影响。第二类更先进点的算法是引入并学习策略。当然我们可以使用反向传播的方法来训练策略函数,这类算法的代表是使用高斯过程匹配两阶矩的 PILCO,相对简单但是不稳定。更通用的方法是模仿最优控制,可以像 GPS 一样做约束下的最优化,也可以使用 DAgger 类的算法诸如 PLATO。还有一类没有提及的方法是 Dyna 方法,是介于有模型方法和无模型方法之间的混合方法:大意如训练一个模型(神经网络)作为模拟器来生成样本,但是使用无模型的方法进行学习。如果我们已经有了一个无模型的算法,但是苦于数据不足的话,是个不错的选择。 + +当然,基于模型的增强学习算法也有局限性。首先顾名思义,**我们必须要有某种模型**,但不见得总能得到某种模型:有的时候模型简单,但有的时候就很复杂;而且有时候学好模型比学好策略更难(模型复杂但策略不复杂)。学习一个模型需要很多时间和数据,而且比无模型的方法求解计算代价更高。虽然基于模型的方法通常需要的数据量较少也能得到一个还可以的控制,但也取决于学习模型和策略哪个更容易。**速度和表达力通常需要有一个权衡**:有时候一个表达能力很强的模型(如神经网络)速度很慢(取决于具体问题),有时候一个速度较快的模型(如线性模型)去处理非常复杂动态系统的表达力不够。同时,基于模型的增强学习算法**需要引入很多额外的假设**,这在无模型算法中通常没有。如需要认为(局部某种意义上的)可线性化或者连续,这个在很多真实物理系统还是可以的,但是对一些离散系统(如 Atari 游戏)就不适用了;尤其是对于线性局部模型,需要能够重置系统以在同一状态下多次尝试,虽然有些无模型的方法也需要这个假设,但是通常在在线处理就够好了;在有些模型(如 GP 类全局模型)中,需要假设光滑性,不能不可微;等等。 + +我们也对基于模型的方法和无模型的方法进行综合比较。因为要进行增强学习,我们必须要收集数据,要么是在廉价的模拟器上,要么是在昂贵的真实物理系统,所以首先比较样本效率。通常样本效率最低的是**不基于梯度的算法**(如 NES (Natural Evolution Strategies)、CMA-ES 等),这类算法是无模型的算法,且不计算神经网络的梯度,但依赖于随机优化。**完全在线的算法**(如 A3C 算法)虽然比前者要好一些但是样本效率还是较低,这类算法在线学习,不使用基于策略的回放缓冲池,依赖大规模的并行。**策略梯度法**(如 TRPO 等)的样本效率较前者再进一步,虽然也是在线但是使用批量处理的方法提高效率。样本效率更好一些是**基于回放缓冲池的值函数方法**(如 Q 学习、DDPG、NAF 等),这类方法是离线的。**基于模型的深度增强学习算法**(如 GPS)和**基于模型的“浅度”增强学习算法**(如 PILCO,不使用深度神经网络)则递进提高了样本效率,但在这块也意味着引入了越来越严格的假设。这边差不多每一级基本上是样本效率差了 10 倍。Salimans et al. (2017) 的"[Evolution Strategies as a Scalable Alternative to Reinforcement Learning](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1703.03864)"一文说明 cheetah 任务中进化算法样本效率比完全在线的算法低十几倍。Wang et al. (2017) 的"[Sample Efficient Actor-Critic with Experience Replay](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1611.01224)"一文训练 A3C 算法约需一亿步(完全真实时间 15 天)。Schulman et al. (2016) 使用 TRPO+GAE 方法约需一千万步(完全真实时间 1.5 天),十倍的效率提升。Gu et al. (2016) 的"[Continuous Deep Q-Learning with Model-based Acceleration](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1603.00748)" 使用 DDPG 方法(完全真实时间 3 小时)达到十倍的效率提升,使用 NAF 完全真实时间 2.5 小时。到了基于模型的增强学习,计算的时间可能比数据收集时间更多,因此瓶颈重点转移到了计算。Chebotar et al. (2017) 的"[Combining Model-Based and Model-Free Updates for Trajectory-Centric Reinforcement Learning](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1703.03078)"一文体现了对于真实控制问题 GPS 比 DDPG 有 10 倍的样本效率提升。对于浅层方法,效率提升大约也是 10 倍,但是相对来说问题更简单了。注意到有很多时候我们不能只看真实时间,模拟器可能非常快,因此如果我们能并行得到很多计算资源,那么可能样本效率低的算法反而更快,都是一些权衡。 + +![](img/ff8206295fb2581f9083f2554118578b.jpg) + +最后我们来讨论如何根据问题选择合适的增强学习算法。最重要的问题可能是我们是否是从模拟器中学习,因为这决定了算法样本效率的重要性。如果是的话,我们要看模拟成本是不是相对训练成本是可以忽略不计的(决定样本效率有多不重要):如果是,我们会考虑样本效率较低的算法如策略梯度法 TRPO/PPO,和完全在线的算法如 A3C,这样实际运行时间可能较少,而且如策略梯度法可能更容易调参;如果模拟成本不低,那么我们可能希望使用如 Q 学习/DDPG/NAF 的基于值函数的方法来提高样本利用率。值得一提的是,如果使用模拟器,另一个问题是我们某种意义上可以用模拟器来算出梯度,哪怕不能直接得到也可以得到一个数值解(尤其是如果我们在求解连续问题)我们可能不是在需要无模型的算法,而是需要 MCTS 或者轨迹优化这样的方法;也并不总是这样,有时如策略梯度法的无模型方法可能比这些规划算法要效果好,但无论如何是值得讨论的。回到我们不使用模拟器的情形,此时样本效率可能很重要,取决于我们有多少时间(或者能否自动收集数据,是否需要在工作时有人监督)。如果我们没什么时间,那么可能会倾向于诸如 GPS 的基于模型的算法,此时对模型的选择和假设很重要;如果我们时间还是很充裕的,那么可以使用可能更有效的值函数法。 \ No newline at end of file diff --git a/docs/ucb-cs294-112-notes-zh/11.md b/docs/ucb-cs294-112-notes-zh/11.md new file mode 100644 index 0000000000000000000000000000000000000000..23e742b20fdd594a6d875bd711c0fcd729cd79b9 --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/11.md @@ -0,0 +1,63 @@ +# (11) 概率图模型与软化增强学习 + +> 作者:[谢天](https://www.zhihu.com/people/xie-tian-55-77) +> +> 来源:[POST 馆](https://zhuanlan.zhihu.com/c_150977189) + +## 概率图模型上的推断 + +在前面的笔记中,我们已经学习了如何使用一些常用算法来做出正确决策以优化收益函数。现在,我们转过头来关注如何对人类(专家)行为进行建模:这种模型之后的逆增强学习中可以用来使用观测推断收益函数是什么。在这里,我们关注一些概率模型来对观察到的行为进行建模,建立起概率推断和最优控制、强化学习之间的关系,并从中得出一些新的(稍微不同的)新的增强学习算法。 + +让我们考虑人类在各种层面上的行为,如运动、在房间里行动,或者更高层面上的如开车的路径规划。一个合理的假设是,人类想要实现某种目标,都是去定义一些收益函数,并基于人类所能做出的行动![](img/d700c80f3e82735a63b228ea4417a460.jpg)和人类对世界和物理的理解(也就是一个人类自以为的![](img/77cff52584c80e30470b34d9850cbee3.jpg)),做一些诸如最优控制的规划行动以实现目的。这个想法非常类似于我们之前的优化形式,![](img/0a98b6bf6f718b534b8d03cf9d11d8ff.jpg),根据不同对象建立起不同的模型(如人的跑步是基于对人身体构造和物理环境的理解,汽车路径规划是对交通情况的理解),根据不同目标制定出不同的收益函数。对于一些随机情况,可能我们需要得到一个最佳策略诸如![](img/56fbb8f11192d35fff59940ecf719d85.jpg)来最大化期望收益的期望,然后从中挑选出行动![](img/acf6a23665ebe82999f1f5bac4d05827.jpg)。这是基于人的理性决策的假设,因此要研究一个人如何做出决策,如果我们能得到对应的收益函数,那么从某种意义上说就可以用最优控制或者增强学习的框架来解释或预测在各种场合下这个人的决策。 + +比如说有一项实验,使用果子奖励刺激猴子把场景里一个物体移动到某个指定位置。我们知道最优的移动轨迹必然是两点连线的直线段,但是猴子可能不会走这样的直线,总会多多少少有一些弯曲,但同样能完成任务。这是因为,猴子的决策基本总不是完美的,反正目标能完成就能拿到奖励,所以**在某些领域有一些误差其实影响并不大**(走了一条较长的路线差了几秒钟猴子可能觉得无所谓,而如果没有把物体移动到指定位置那么就没果子吃了,差别很大)。对于猴子来说,行为是随机的,但是“好的行为”总是有一定相似度的。现在的问题是,如何使用数学的方法来表达,次优的路径也是可以的但是不达目标的路径是不行的这个界限,以及如何刻画这个随机行为。 + +![](img/994cc5fd2c0dbff5aca2c66d2a9192b3.jpg) + +我们考虑使用概率图模型来表达这个“近似最优的”行为:与之前我们只采取最优策略不同,我们也需要让一些次优行动有非零概率存在。在之前,我们知道了状态![](img/33c815432ff85d6f9342f1abc64af657.jpg)和行动![](img/d700c80f3e82735a63b228ea4417a460.jpg)通过系统动态![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg)共同决定了下一个状态![](img/d2683f5b20dac211246c30b1e0a7c2dd.jpg)。对于这样的一串![](img/4d1a76192fc6cb3386633223c7e74d95.jpg),我们应有出现概率![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg),但是只有真实物理场景对猴子进行限制(如猴子不能飞),但没有对猴子试图做的最优行为或者意图进行假设。为了对猴子的意图进行建模,我们加入了![](img/f947b05e8c3e9490dbcccfbd807f6c89.jpg)元素来代表最优性,也就是说,代表猴子尝试使用一些最优手段来完成(阶段性)目标。简单起见,我们假设![](img/f947b05e8c3e9490dbcccfbd807f6c89.jpg)元素是一个 0-1 变量,如果猴子没在完成意图就是 0,反之是 1,也可以理解成一个事件。接下来我们要做的事情就是来描述![](img/8c0dbed8e0fc267d90b7aad094a57ceb.jpg)。在这里一个重要假设是![](img/b01c8e38cb7bff34721444a3ee417b45.jpg),那么条件概率![](img/c39e2eb8bb6c7ab081391af21dedc447.jpg),也就是正比于该轨迹实际的发生的概率乘上轨迹总收益的自然指数。因此,收益最大的(可行)轨迹就变得可能性最大;如果有一条轨迹收益也一样大,物理可能性相同,那么它同样也很可能发生:如有多条它们将平分可能性。注意在这里,![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg)只是用于评判给定了所有状态和行动后,这样一个序列的可能性,并不去决策。 + +这个模型表达了有些轨迹虽然不是最好的,但是也还不错的这样一个特征:猴子的例子告诉我们,在终点有一个巨大的收益,但是在路途中间并没有什么收益,因此可能有非常非常多的较优路径存在,但它们最后都指向了同一个终点。在这个模型中,收益最高的行为是最有可能的,当收益下降的时候它的可能性指数下降。有些轨迹虽然可能发生,但是可能性非常低,因此智能体可能不愿意承担这个风险:因为想去最大化期望收益,智能体可能宁愿选择收益较低的但是可能性较高的轨迹。这个模型有一些好处。第一点,它可以**对次优行为进行建模**,这个在逆增强学习中非常有意义,用于观察他人的行为来揣测他的真实目标。第二点,可以**使用一些推断算法来求解控制规划问题**。此外,它可以**对为什么会偏好随机行为(相较于确定性行为)给出解释**。 + +我们的推断 (inference) 问题是,如果执行最优策略,那么在当前状态下做出某个行动的概率是多少。为了解决这样的问题,我们需要回答三类问题:第一类是如何计算**后向信息** (backward messages) ![](img/e5b4f8d292cf75a08c930a702575403a.jpg);第二类是如何计算**策略** (policy) ![](img/07c5d5d170123f2fe44b9eb3b39c2ee2.jpg);第三类是如何计算**前向信息** (forward messages) ![](img/1b9a195d55c95114edbf220e74bc6b96.jpg)。 + +首先我们来看**后向信息**![](img/e5b4f8d292cf75a08c930a702575403a.jpg),给定某个时间点的状态和行动,得出未来最优性变量的观测概率(它不关心过去)。之所以说是后向信息,是它的计算方式类似于 LQR 中的倒推。在递推边界![](img/a84856940a40224287e16ba72e5edd11.jpg)时,根据定义有![](img/84d303ef7e174b56ee63a4f08fbb3295.jpg),只需要做归一化;在中间,我们使用全概率公式进行积分,并使用 Markov 性进行概率拆分,得到 ![](img/ce946f1b90dee657f8f69215560d6fc3.jpg)。其中我们已知![](img/b01c8e38cb7bff34721444a3ee417b45.jpg)和![](img/51e4e556c8cc9e6e99844de4ce5017e1.jpg),而剩余一块根据全概率公式有![](img/b9951c8f0a6c559ef692c81d1de326df.jpg),其中![](img/925efdfea2a49656cd36ece0a9dec698.jpg);![](img/a879ee6818d95b22005c0aace68e623e.jpg)比较奇怪,它并不是一个策略函数,**而只是一个给定状态做出什么决策的先验概率,在这里我们可以先认为是均匀分布的**,概率密度是一个常数。我们进一步令![](img/3c19456a2b7ab4866a4b96732ebd83f6.jpg),则所有的概率可以由以下倒推过程完成: + +> for ![](img/9d60a7f5436455aeeeedf61e654aa12b.jpg) to 1: +> ![](img/471ba33d97ed31e0daf3aaa986a07521.jpg) ![](img/677ef7a70eba41b27fa9f275cec99b6f.jpg) + +回顾我们的[值函数迭代 (value iteration) 算法](https://zhuanlan.zhihu.com/p/32909860),和这个算法不谋而合。因为这里所有的操作都是乘法形式,我们将其取对数变成加法形式。令![](img/014733d0a225577a47245d2f742c3c4e.jpg),![](img/491644b6ee6fe072f31d130a5bd1a93e.jpg)。根据第二条关系有![](img/ac69ad70a2c80173f91515cc83684690.jpg)。从极限的角度看,随着 Q 的值变大,显然会有![](img/68c9b5c1eb917c5cc68ec319b423d1f4.jpg),因此前者的这种操作也被称为 softmax,是 max 函数的一个软化。根据第一条关系,有![](img/c986633ff82034a18f90022297c9c1f5.jpg)。这个形式看起来很奇怪:如果状态转移是确定的,那么期望就可以拿掉了,对数和指数就抵消了,有![](img/8c19961cff2f0a8202cbcabe3769a945.jpg),和值函数迭代形式一致;如果状态转移是随机的,那么![](img/c3d913dbb89f1b8e1a23a84dd7a905fd.jpg)就是一个 softmax,最乐观的转移。然而,乐观也不是个好事情,Ziebart et al. (2010) "[Modeling Interaction via the Principle of Maximum Causal Entropy](http://link.zhihu.com/?target=http%3A//www.ri.cmu.edu/pub_files/2010/6/maxCausalEnt.pdf)" 一文提供了一个基于最大因果熵 (maximal causal entropy) 原则的方法,此时![](img/fe6006a69b0121459537c15563079238.jpg)。 + +在之前,我们还剩余了一个对![](img/a879ee6818d95b22005c0aace68e623e.jpg)的均匀分布的假设。如果这个先验分布不是均匀分布,值函数将会变成![](img/34053b6adaad916f26b3b18cbe1297c3.jpg),并保持![](img/fe6006a69b0121459537c15563079238.jpg)不变。如果我们定义一个新的 Q 函数,![](img/d1863e77077e51a5cec4f43fa22a6a58.jpg),那么值函数又变成![](img/1ea1fa7f917ed1fc0b1dc52955416814.jpg)了:这说明我们的![](img/3e981f93d23fd41432443477c4342850.jpg)项总能和![](img/c1fced4c82901b14545188685ac0b947.jpg)项合并到一起去,因此我们在实际求解的时候可以不失一般性地假设这一项不对算法产生任何困难:如果有一个非均匀分布的先验,就把它放到收益函数里面去就行了。 + +第二个是**策略**![](img/07c5d5d170123f2fe44b9eb3b39c2ee2.jpg),也就是给定当前状态和所有最优性变量,得出行动的概率。首先根据 Markov 性,有![](img/77805fe3f77af93deca0f49bff62a31b.jpg)。将条件概率进行一步变形,前者就等于![](img/8450de36b5a9a0cca2401fca64de1a17.jpg)。根据贝叶斯公式,又可以变形为![](img/26d3564abd9bf4ef9d813aeffd64ca74.jpg)。两个分式相乘,前者为后向信息之比![](img/952ee40e9db5a378abbbd8c220fc0b18.jpg),后者为先验![](img/0e9f81bb72f84c3598e52b39500d871d.jpg),如果我们假设先验是均匀分布的话那么后者是常数,因此可以去掉。从而,我们有![](img/74d6a1f83a7e96c5049293e9cfaffe6b.jpg)。在我们之前的倒推过程中,如果换成 Q 函数和 V 函数的话,就是: + +> for ![](img/9d60a7f5436455aeeeedf61e654aa12b.jpg) to 1: +> ![](img/fe6006a69b0121459537c15563079238.jpg) ![](img/ac69ad70a2c80173f91515cc83684690.jpg) + +而![](img/0cd050164be1bb7d1b12dbb66798f4cb.jpg),正好是一个优势函数的指数的概念,也比较符合逻辑。这些函数还有一些变种,如对 Q 函数贴现![](img/75cb786c82979cbfdbb01f7f53aaf98d.jpg)就变成了贴现随机最优控制 (discounted SOC);显式加入一个温度(热力学概念)![](img/af20e3e63e888097030b140bd99bd3bb.jpg),我们的 Q 和 V 都对温度非常敏感,当![](img/8f711561f9855336dea7e66e814596ac.jpg)时 softmax 就退化成 max,且有温度时![](img/9f0d7815004a46cc9606c92fa75ab9f3.jpg)。 + +这样的策略的一个直接的解释是,使得“更好的”行动更可能发生。如果有多个性质一样好的行动,它们的可能性一致,只是一个概率分布的策略只需随机挑选一个。它和 Boltzmann 探索(见[第六篇](https://zhuanlan.zhihu.com/p/32909860))有很强的相似性。随着温度下降,它逐渐逼近与一个贪心的策略。 + +最后一个推断问题是**前向信息** (forward messages) ![](img/1b9a195d55c95114edbf220e74bc6b96.jpg),给定之前的所有最优性变量,得出在当前时点到达某状态的概率。这个对策略来说并不重要,但是在逆增强学习中非常重要。前向信息的边界![](img/20cf282dbeed065f247f1cb553ce09a3.jpg),通常认为初始分布是已知的。将该概率进行展开,变成一个二重积分![](img/1194a3644d49d0e255c252e515519caf.jpg)。其中第一项![](img/e4dbf712991f240f340bdaad4400b152.jpg)我们假设是已知的系统状态转移,第三项![](img/b76ac03c37765558105efda7de15064c.jpg)。第二项略微复杂,使用贝叶斯定理得到![](img/4733c70abec259d8e2bddea6152a2410.jpg),其中![](img/f9035569746fe6d571e3e926bb402013.jpg),我们假设![](img/ca25a0d5e57cd7d390a08f52ac909d10.jpg)是均匀分布,分母也是一个归一化常数,因此![](img/f2c02db563cef292837f97e55aff67ee.jpg)。于是就得到一个正向的递推关系了。 + +![](img/4ea95e76ac3dc2f7a91720740736f633.jpg) + +有了前向消息和后向信息之后,给定所有最优性变量,求某时刻的某状态的发生概率就比较容易了。![](img/1a7da2bb060b7fccc98e45f517c65ba5.jpg),其中![](img/ac539e694189a47efa5de3fe30f47772.jpg),![](img/90359accf3239cd186fe4395acf4e6b6.jpg),其他可以看作归一化常数,因此![](img/d2b635e0f9431ce4740bd90932781ab7.jpg),这整个理论和 HMM 很像。注意到这个概率是前向消息和后项消息的乘积,可以说是一个交汇。考虑上图左边圆点是起点,右边叉叉是终点的路径。黄色锥区域是能够有高概率到达终点的状态,蓝色锥区域是有高概率从初始状态以高收益到达的状态,然后基本上就是两者的交(概率上相乘)。Li and Todorov (2006) 做了人和猴子类似从一个点到另一个点的实验,记录空间位置变化,基本上也是中间部分方差最大。 + +总结来说,我们这边用概率图模型来描述最优控制,而且这个最优控制可以用概率推断来实现(类似于 HMM 和 EKF),而且与动态规划、值函数迭代关系非常强(它这里面 max 是软化的,可以通过降低温度来使得变成硬性 max)。 + +## 软化的增强学习算法 + +使用之前提到的软化 max 函数,可以得到很多增强学习算法,例如我们在这里对 Q 学习进行软化。对于[标准的 Q 学习](https://zhuanlan.zhihu.com/p/32994423),参数的迭代格式为![](img/f9c32547e0e61b7cbfd57652808335e2.jpg),目标值函数为![](img/cc29f2d255c4fd05a60a5fde2ef530c7.jpg)。而对于软化 Q 学习来说,梯度步还是一样的,但是目标值函数变成了软化 max 函数![](img/a89133fca071feffac3f313bd8d8b982.jpg)。同样,策略函数也变成了类似 Boltzmann 探索的![](img/5630fa150eed62e64d84f988f2439bb3.jpg)。因此,只需要将[DQN](https://zhuanlan.zhihu.com/p/32994423)的第三步中“使用目标网络![](img/a1eff788e54cd01841535aa3964a3c45.jpg)计算出目标值![](img/b3cc15dd3b3921272afd8cfcbf4d35a6.jpg)”改成 ![](img/ba3e14941c5a050785db0bc7dcdef81a.jpg) 就可以了。第一步的“在环境中执行某个操作![](img/78bc32b822dda546b64dc94fde1b960b.jpg),观察到![](img/343430c448f3d17f3a18443077585b6c.jpg)”的操作,如果想在线执行(如 SARSA),也需要用软化 max 来抽取。 + +策略梯度法也可以进行软化。Ziebart et al. (2010) "[Modeling Interaction via the Principle of Maximum Causal Entropy](http://link.zhihu.com/?target=http%3A//www.ri.cmu.edu/pub_files/2010/6/maxCausalEnt.pdf)" 一文的一个结论是![](img/cb033e9b655f6b18966920dcfc13ab2f.jpg)最大化![](img/3eac92afed17c3c8bc952b161b935fe1.jpg)。关于该结论的一个比较直观的理解是,当![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)最小化![](img/bd8881cf681f11028b726cef99036af0.jpg)时(![](img/4d02b500de715f0fb2af666b196c690d.jpg)为归一化因子),![](img/eaa43ea99dfb487d5ab90661b5d52623.jpg)。而如果我们展开 KL 距离表达式,![](img/32eab9ee110799467d204f26d11f3616.jpg),这是因为取完对数正好是这样。因此,如果要对策略梯度法进行软化,我们也**只需要在目标函数内,在期望收益之后加上策略函数的熵**就可以了:这个熵给策略一定压力,使得它不会退化成一个确定性策略。这种方法通常被称为**熵正则化** (entropy regularized) 策略梯度法,通常用于防止策略过早地熵崩塌 (premature entropy collapse)。这在行动空间是连续的时候尤为重要,如我们之前在[策略梯度法的第二个问题](https://zhuanlan.zhihu.com/p/32652178)中提到,高斯策略下,策略梯度法通常希望减少策略的方差,因为减少方差通常可以导致局部的收益增大,但这同时也会使得策略梯度卡住,改进停止,加入熵也是一个方法。 + +同时,这个方法和软化的 Q 学习也非常有关,详见 Haarnoja et al. (2017) 的"[Reinforcement Learning with Deep Energy-Based Policies](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1702.08165)" 和 Schulman et al. (2017) 的"[Equivalence Between Policy Gradients and Soft Q-Learning](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1704.06440)"。这里给出一个比较简单的介绍。由于![](img/053274c85b06311846bd8d945d08cde3.jpg),软化的策略梯度法的目标函数就等于![](img/ae10e4346cae83ff28e42da0edca67df.jpg)。将其关于策略参数取梯度, ![](img/841ad9e04cca5a0051f26a055c9ec2b1.jpg) ,最后的那个 1 可以通过基线 (baseline) 拿掉,而中间的![](img/ef0aa596eb411e2023236957bcc20720.jpg)。注意到,软化的 Q 学习中,![](img/70925d77b822dc854ed73f02fb3ff683.jpg),因此代入进去得到![](img/b90d7ea7aae5cfd3f53ecec0a40322b8.jpg),同样![](img/08a1b571bcf6dd341c5c5bac8a2e8066.jpg) 可以拿掉。对于软化的 Q 学习,它的梯度为![](img/994fd4ba3b537c9333ba995ba5f43432.jpg),看起来是非常相似的。符号不同是因为 Q 学习是梯度下降,而策略梯度法是梯度上升。 + +总体来说,软化方法的好处主要是有以下几点。首先毫无疑问地,它**增加了探索(类似 Boltzmann 探索)且防止了熵的坍塌**。软化方法**对状态的覆盖面更广**、**鲁棒性增强**,也**更容易对特定的任务进行调参(预训练)**。对于**并列最优**的情况,软化 max 得到的是一个分布,几个选项将等概率选择,**通过调整温度参数和收益尺度可以使得软化 max 变成硬 max**。在之后我们也将体现这个模型**更适合对人类行为建模**。 + +![](img/ecb23654c8a4959c2dfc6ce5b1b980b8.jpg) + +Haarnoja et al. (2017) 的"[Reinforcement Learning with Deep Energy-Based Policies](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1702.08165)" 使用软化的 Q 学习方法来进行成功的实践。用策略梯度法来学习 MuJoCo 小人跑步的任务,超参数稍微进行调整,可能虽然得分都很高但是跑步形态完全不同,这是因为增强学习算法一旦发现一块比较好的区域,就会去加强这块区域的利用率,很容易达到局部最优。如上图中,机器人想到达这个蓝块,代价函数为到这个蓝块的距离。机器人可以选择黄色或绿色路线,初始看起来可能效果差不多,但是黄色路线实际上是走不通的:软化的方法可以让两条线路有更均衡的被选择概率,防止某一块被过度增强,不错失可能性。这个方法被称为随机的基于能量的策略 (stochastic energy-based policy)。要保证所有假设都被验证,就是用之前介绍过的软化 Q 学习算法,问题是如何实现从分布中采样。为了实现这个目标,它们训练一个随机网络来根据状态和某高斯随机噪音来得到行动(类似[模仿学习](https://zhuanlan.zhihu.com/p/32575824)中提到过的隐性密度模型),使用[均摊的 SVGD (Stein Variational Gradient Descent)](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1611.01722) (Wang and Liu, 2017) 来训练以符合![](img/c10e10c1ee3bf28f39f615bf160cade1.jpg),和 GAN 的想法非常接近。 + +四足动物在一个槽里移动的训练,在预训练时,软化的 Q 学习相比 DDPG(加上![](img/aeb302325ebc29add21f094ad38ad261.jpg)-贪心)来说探索覆盖面更广(一开始就显示出了非常强的探索性)。事实上,有预训练比没有预训练效果好很多,而且软化 Q 学习的预训练效果比 DDPG 预训练要好。 \ No newline at end of file diff --git a/docs/ucb-cs294-112-notes-zh/12.md b/docs/ucb-cs294-112-notes-zh/12.md new file mode 100644 index 0000000000000000000000000000000000000000..0b3551a33eb9a477fe7dfeeda8caae594269812b --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/12.md @@ -0,0 +1,64 @@ +# (12) 逆增强学习 + +> 作者:[谢天](https://www.zhihu.com/people/xie-tian-55-77) +> +> 来源:[POST 馆](https://zhuanlan.zhihu.com/c_150977189) + +## 逆增强学习问题 + +迄今为止,我们做增强学习的时候都是对特定任务来手工定义收益函数的思路来完成任务。但是要真正实现稍微智能化的目标,我们更倾向于在不知道具体任务的时候,去观察专家的行为然后推测他想干什么,也就是学习他的收益函数,然后再使用增强学习算法,这也称为逆增强学习。在这里,我们将利用[上一篇](https://zhuanlan.zhihu.com/p/33534968)中讲到的近似最优模型来达成这一学习目的。 + +收益函数的来源有很多。对于很多(有得分的)游戏来说,我们只是需要让游戏的得分最大化就行了,收益函数是非常自然的。但是在很多现实世界中的问题中并不是那么简单,而且原因千奇百怪。比如说有个机器人任务,想让它拿起壶往杯子里倒水。要让机器人模仿这个动作倒是不困难,但是如何鉴别水是不是真的倒进去了可能会非常困难(因为机器人并不是拿来喝),手工设置一个这样的函数也是很烦的。比如说有个对话系统,跟人类交流来做技术支持解决问题,也需要关注用户是否满意这样的互动,体验好不好,这个其实也很难具体评价。对于自动驾驶,即便是有很多成文条例,但也有很多隐性的不成文的规则、公约和常识要去遵守,做一个文明司机,这个在人工设置的收益函数里面也很难刻画。这些的特点是,相对手工来做一个收益函数,由人来介绍怎么做会比较容易。 + +在之前,我们也介绍过[模仿学习](https://zhuanlan.zhihu.com/p/32575824)(行为克隆),也就是直接模仿专家的行为而不需要理解其中原因。这也是实践中的一个备选项,在有些时候也能满足要求,尤其是观测数据很多,且域漂移 (domain shift) 比较小的情况,但不见得能适应广泛的情况。同时,模仿学习只能捕捉到台面上的动作:盲目模仿所有的环节,不管重要不重要,如果在教学过程中出现一点错误,就会被学进系统中。此外,学习者和教学者可能能力不同,如人倒一杯水的过程可能和机器人的过程不同,如果机器人能学习到目标则它可以自适应做得更好。 + +从示范中推测收益函数的问题又被称为**逆最优控制问题** (Inverse Optimal Control, IOC) 或者**逆增强学习问题** (Inverse Reinforcement Learning, IRL) (Kalman, 1964; Ng and Russell, 2000)。在“正”增强学习问题中,我们得到的是状态空间![](img/eec54755672e1c8d054ec2a16e47de11.jpg),决策空间![](img/53bdb9568181c05b66e340643d81625f.jpg),部分基于模型的问题还会给定系统转移动态![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg),以及收益函数![](img/94c2edd239f2416ba7d7a367f9d01462.jpg):通过这些去求一个最优策略![](img/d4302e1e800efe79923f3fa9cc58672f.jpg)。在逆增强学习问题中,我们同样有状态空间![](img/eec54755672e1c8d054ec2a16e47de11.jpg),决策空间![](img/53bdb9568181c05b66e340643d81625f.jpg),(或有的)系统转移动态![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg),和很多从最优策略下的轨迹分布![](img/b3231b48ae5c4a7d4d638b72a0983eac.jpg)中抽取出来的轨迹样本![](img/f8ea1f6106e897927d76e12c43546ec4.jpg):从中学习出一个参数化的收益函数![](img/1be030530c428b580a48fffdff71dc90.jpg),其中![](img/492b92e8089c848702efed7c983570ce.jpg)是参数,再使用它来学习最优策略![](img/d4302e1e800efe79923f3fa9cc58672f.jpg)。参数化的收益函数简单形式可以是线性的,![](img/f09d59a3711ff7dc15a1c0419379be2b.jpg),参数是权重向量,对若干个特征函数做一个加权线性组合;也可以是一个复杂的神经网络。我们先讨论线性的,再讨论神经网络。 + +逆增强学习的主要挑战是,这个问题可能是定义不足的 (underdefined),因为我们可能已经对这个世界非常了解了,有很多先验知识,但是事实上机器学习算法啥都不知道:比如一个东西向右移动了,可能是因为它喜欢向右移动,也可能是因为它喜欢的东西在右边,或者其他什么原因,我们有很多很多选择去解释它,答案并不唯一而且是非常模糊的。同样,我们很难去评判已经学到的收益函数。因为在逆增强学习问题中,我们要尝试去改进收益函数,然而去评估收益函数的时候,我们要求解类似梯度的东西,这其实是正增强学习问题要做的事情,因此有点类似于正增强学习是逆增强学习内循环中的子问题,在样本使用和计算上都很困难。实践中,(人类)专家指导很可能不是精确最优的,这点在[上一篇](https://zhuanlan.zhihu.com/p/33534968)中已经有所讨论,这个也造成困难。 + +一个早期的逆增强学习算法叫做**特征匹配逆增强学习** (Feature matching IRL),可以给我们一些启发。这里先假定收益函数是若干特征函数的线性组合,![](img/f09d59a3711ff7dc15a1c0419379be2b.jpg)。如果这些特征选得比较好,我们只需要选权重的话,我们就会考虑去匹配最优策略下的期望。具体来说,如果对于一个收益函数![](img/11835dbe89196ca9f676882d65abdd90.jpg),最优策略为![](img/cb967a79f0aabf8e1c0ce206845436ff.jpg),那么我们就希望去找到一组参数,使得![](img/62f072df24ac664479628b68423070c6.jpg),后者是未知的最优专家策略。左边是边缘化的期望,或者我们就直接运行![](img/cb967a79f0aabf8e1c0ce206845436ff.jpg),然后抽样估计特征的期望。最优策略下特征的期望是要用专家给出的样本来算的。事实上,参数并不是唯一的,我们可以从支持向量机 (SVM) 中借鉴最大间隔 (maximum margin) 原理来得到一个比较靠谱的解,如![](img/bd1470d811451a8a38fa7ecb19491b2f.jpg),也就是找一个分割超平面把最优解下的期望收益和策略簇![](img/5bf4bb781dd2d49d92ccf59eed28ec0f.jpg)内其他所有策略的期望收益相区分开,并且使得间隔![](img/20ddd8181c2e0d0fb893637e8572d475.jpg)最大。这个问题与原问题不同,只是尝试去这么做。然而不难发现,如果![](img/93d5e62f3f8bb71a16e6164e362aa87b.jpg),那么最优解落在分割超平面上,这个![](img/20ddd8181c2e0d0fb893637e8572d475.jpg)总是 0,这个间隔就不起效果了。因此,可能这样一刀切的间隔是不好的,我们有必要去体现策略不同下期望收益和专家策略有差异(专家策略就应该间距为 0),使得和专家策略相差得越多,策略越糟糕。定义两个策略的距离为![](img/cbc9a7b7fa2984784634b8e9694021e0.jpg),那么使用一个与 SVM 类似的技巧,![](img/9bd4cf30921b1124cf60ebae2f96d5c6.jpg)。距离可以定义为两个策略的期望特征的差异。整体来说,这个方法还是问题多多。首先,为了解决不唯一性,做最大间隔的方法看上去不能说不奇怪,**很难说明为什么间距大就代表收益大**,有点随便。正如很多分类问题根本不是线性可分的一样,我个人看到这个模型时想到的第一个问题这边也提到了,**如果专家的策略不是最优的**,可能这个最优化问题根本就无解。如果要强行处理的话,可以通过增加一些带惩罚的松弛变量来某种程度上缓解这个问题(这也是 SVM 里面的思路了),但这样做还是很随意,对专家的非最优行为并没有清晰的建模,解释并不能令人满意。从计算上看,这个带约束的优化问题也是非常复杂的,即便右边这个 max 好求(_ 离散的话就是把约束拆开,如果右边这个 max 问题是强对偶的那么就使用对偶方法转成 min,就变成了存在性问题 _),**很难应用扩展性好的**如基于随机梯度等**方法推广到复杂的非线性神经网络**。关于这类比较古老的方法,可以参考 Abbeel and Ng (2004) 发表在 ICML 的"[Apprenticeship Learning via Inverse Reinforcement Learning](http://link.zhihu.com/?target=http%3A//robotics.stanford.edu/%7Eang/papers/icml04-apprentice.pdf)"和 Ratliff et al. (2006) 发表在 ICML 的"[Maximum Margin Planning](http://link.zhihu.com/?target=https%3A//www.ri.cmu.edu/pub_files/pub4/ratliff_nathan_2006_1/ratliff_nathan_2006_1.pdf)"。 + +![](img/994cc5fd2c0dbff5aca2c66d2a9192b3.jpg) + +另一种想法的出发点是我们上一篇中讲到的对人类次优行为使用概率图模型建模,使用人类行为数据进行拟合,并推测出收益函数。继续假设![](img/b01c8e38cb7bff34721444a3ee417b45.jpg),那么轨迹条件概率![](http://latex.codecogs.com/gif.latex?p%28%5Ctau%7C%5Cmathcal%7BO%7D_%7B1%3AT%7D%29%5Cpropto+p%28%5Ctau%29%5Cexp%5Cleft%28%5Csum_tr%28%5Cmathbf%7Bs%7D_t%2C%5Cmathbf%7Ba%7D_t%29%5Cright%29),正比于该轨迹实际的发生的概率乘上轨迹总收益的自然指数。根据我们的假设也不难看出,使用这个模型去做逆增强学习,本质上是去学习最优性变量![](img/c6ffa945f08cc4c82a72f59be87d2af0.jpg)的分布。我们把参数化的收益函数的参数![](img/492b92e8089c848702efed7c983570ce.jpg)放进来, ![](img/2fe1796212fa4ffcc7f2892ba1b1779d.jpg),我们要学习的就是这个收益参数,且最优变量取决于![](img/492b92e8089c848702efed7c983570ce.jpg);类似地,轨迹条件概率![](img/b092165953df179ee6cc8c0a24ed5082.jpg)。我们现有的数据是从最优策略下的轨迹分布![](img/b3231b48ae5c4a7d4d638b72a0983eac.jpg)中抽样得到的轨迹样本![](img/f8ea1f6106e897927d76e12c43546ec4.jpg)。我们的学习可以做最大似然学习,也就是最大化对数似然函数:![](img/60a1ee34bed9a7b2a701445d9554ce57.jpg)。代入上面的条件概率,在这个最大化问题中![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg)是常数可以忽略;如果我们令轨迹收益![](img/9dd1aff83b1e81060a1929c72632443d.jpg),那么![](img/4576230229ae64d2ca4ce89d938a1abb.jpg),后面多了一项归一化项![](img/d0caa47722f79c70119340661c7c3dc6.jpg),称为 partition function。 + +要用梯度法优化参数,我们对这个对数似然函数关于参数求梯度,则根据链式法则![](img/1ccf70e5d6a513bd68f7e03a07057d93.jpg)。此时我们发现![](img/f2ce9e6d873f29db1e266d4b00a9a8db.jpg),然后第一项也是期望的话,梯度就变成了一个很有趣的差了,![](img/192b1d0f2e9ddc0702efd1dda0faea3e.jpg),就是**专家策略下的轨迹分布下的收益关于参数的梯度**减去**当前收益函数对应的软化最优策略下的轨迹分布下的收益关于参数的梯度**。第一块是关于数据的,第二块是从当前策略进行采样。这样的梯度类似于想要增加数据的概率,也要减少模型的概率。第一块可以从专家样本中估计,第二块更多是一些推断。 + +这里我们来讨论第二块期望怎么估计。把第二块期望的轨迹收益按照时间拆开,![](img/c0aaec9eb451051fdb4d7602e6f74382.jpg)。其中状态行动分布![](img/63b6862422d9ca5fb45e26ab396efe44.jpg)。容易发现,前者就是我们上一篇中的策略,后者就是我们上一篇中的路径概率,![](img/f75df24cf02612fc463a48bd16857edd.jpg),![](img/c945735d1c0aa2fcebf5ce256fbf4549.jpg)。从而,![](img/d9da1021f215cab012fa1e953f77c906.jpg),是后向信息和前向信息之积。令![](img/a71d7e86f68a92cf62a231e012c14de1.jpg)作为在![](img/654b00d1036ba7f7d93e02f57fc00a75.jpg)时刻状态行动![](img/e8a17863b5e591e16e20b69a0cab56f6.jpg)访问概率,那么第二块的期望就可以写成一个二重积分![](img/8a46aae55f664eb5586b0f61f68c10ce.jpg),也可以简写为一个内积关系![](img/794d611303bbd02f7347ce1e1d96992b.jpg)。从而,我们填补了梯度公式,并得到了一个**最大熵逆增强学习** (MaxEnt IRL) 算法,循环执行以下步骤: + +1. 给定![](img/492b92e8089c848702efed7c983570ce.jpg),按照[上一篇](https://zhuanlan.zhihu.com/p/33534968)的方法求出对应的![](img/c1c691ab01107ccb2a6131af75175d56.jpg)和![](img/a6b578ffd8a671fc660deeaa1aebf86d.jpg)。 +2. 计算访问概率![](img/a71d7e86f68a92cf62a231e012c14de1.jpg)。 +3. 求解梯度![](img/47040f8f28315851115e7dcf59183218.jpg)。 +4. 走一个梯度步![](img/1282d4ff8e474c392a88fc2b328c66ea.jpg)。 + +这个是表格形式的最大熵逆增强学习的算法。该思想由 Ziebart et al. (2008) 发表在 AAAI 上的"[Maximum Entropy Inverse Reinforcement Learning](http://link.zhihu.com/?target=http%3A//www.aaai.org/Papers/AAAI/2008/AAAI08-227.pdf)"提出。之所以称为最大熵,因为原理其实与上一篇中的熵正则化类似。我们可以说明如果我们的![](img/052c7bfe395c453f5ea1308b52b2df29.jpg)是这样的线性形式,那么其实这样的算法是在最优化![](img/80885bef591a347bc6e42aa0aa8c0b7f.jpg),在保证学习的策略的特征和专家策略特征一致的基础上使得策略的熵最大。 + +Ziebart et al. (2008) 发表在 AAAI 上的"[Maximum Entropy Inverse Reinforcement Learning](http://link.zhihu.com/?target=http%3A//www.aaai.org/Papers/AAAI/2008/AAAI08-227.pdf)"使用这一套方法用于道路网络导航的 MDP 问题。根据人类驾驶员的驾驶路径数据弄出一个 MDP 问题,状态是在哪个交叉口,行动是在每个交叉口往哪儿走,因此状态和行动空间都是离散的,虽然很大但是还是可以弄成一个大表的。他们的目标用于看这个人的驾车路线(GPS 等)来实时推测他想去的目的地;也用于找怎么样的道路是代价更高/低的。他们使用线性代价函数,手工定制了路的类型(高速、主道、辅道)、速度、车道、转向等特征。这说明在实际问题中这种表格形式也是有一定可行性的。 + +Wulfmeier et al. (2015) 的"[Maximum Entropy Deep Inverse Reinforcement Learning](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1507.04888)"及其应用,Wulfmeier et al. (2016) 发表在 IROS 上的"[Watch This: Scalable Cost-Function Learning for Path Planning in Urban Environments](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1607.02329)"也使用了类似的方法,还是使用了表格的形式,但是收益函数的设置更复杂,是一个**用神经网络来对若干人工特征进行非线性组合**的形式,算法本质上和最大熵逆增强学习没有区别,只是需要用神经网络来计算收益,最后需要用梯度去更新的也是神经网络。注意这个问题中状态空间只是一个二维平面,行动空间是离散的方向。该方法的主要局限性是**仍然需要迭代求解 MDP**,而且还**需要假设系统动态是已知的**。 + +![](img/034d8c0587560aae5aa9224af7c916a6.jpg) + +## 深度逆增强学习 + +前面我们提到了逆增强学习的经典处理方法最大熵逆增强学习法,是一个学习收益函数的概率框架。这类算法的表格实现可以推广到收益函数是一个使用神经网络组合特征的非线性形式,但是状态空间和行动空间都得离散且比较小,因为求解梯度需要枚举所有状态-行动对,然后递推求解几个动态规划问题:当状态空间和行动空间大的时候就不能接受了。要处理深度逆增强学习问题,我们希望能适应**离散较大的甚至是连续的状态行动空间**,而且我们需要对**系统动态未知**的情况下做有效的学习。在无模型的增强学习算法中我们使用了一些抽样手段,在这里也希望能用上去。 + +假设我们不知道系统动态,但可以像普通增强学习一样抽样。注意到我们前面对数似然函数的梯度![](img/192b1d0f2e9ddc0702efd1dda0faea3e.jpg),前者是专家样本数据中得到的,后者是当前收益函数对应最优策略下的。要做到后者,一个比较直接的想法是使用任何最大熵增强学习方法学习出策略![](img/593252a209f1f57ab6aa8df7496f504c.jpg),然后根据这个策略来采集![](img/7376870ec6366122615ec0defd600fea.jpg)。此时,就用专家样本的结果减掉新抽样本的结果,![](img/bceea97f16b954c1fa220bac1d58736d.jpg)来做无偏估计。然而事实上这种学习的做法是代价很高的,因为我们不假定有模型,所以可能要用无模型的增强学习算法,这将使得每一步都花掉很多很多时间。这里我们可以采用一些小技巧,我们可以不用完全地把对应的最优策略学出来,而只是**每次把策略改进一点点**,然后用这个不准确的策略去近似估计梯度。然而现在多出来一个问题,由于我们使用的策略是不正确的(不是最优的策略),因此我们的估计量将不再无偏。对于分布错误的问题,一个有力武器是重要性抽样(我们在[策略梯度法部分](https://zhuanlan.zhihu.com/p/32652178)有过介绍),用其他分布下抽样结果来得到正确分布下的无偏估计:![](img/9f9aa2bf03a498d72bfdd3415c5e2ae4.jpg),其中权重为 ![](img/023c5a434c2fdba6ec87e7e5404a136d.jpg),分子正比于收益的指数(_ 我觉得 Levine 教授原文![](img/7ab644944bf5756474a40d56ee2a49db.jpg)少了一个概率,无法推导成下面的形式,或者是可能它的定义和我上面说的不同了,请评论区大神帮忙研究下 _),分母是现在分布的概率。因为我们前面会除以权重之和,就不需要关注![](img/336aa2078ea3bfe3e6fc1516ade078c9.jpg)归一化的问题。使用之前策略梯度法一样的展开,对同一条![](img/f124a74ff959930ae4c0a1dd94e9c8cd.jpg),我们得到![](img/52cb99d6ff6ad9c5955bb0d0fe589507.jpg)这样比较简单的形式。进一步,最优下![](img/8262e953bccac30cd2526e0b70727f2c.jpg),无需做 IS。每一步策略迭代都使我们更接近最优分布,因此事实上是在逐步改进的。 + +![](img/0caf5c9e1169acc95f605b3216099b56.jpg) + +Finn et al. (2016) 发表在 ICML 上的文章"[Guided Cost Learning: Deep Inverse Optimal Control via Policy Optimization](http://link.zhihu.com/?target=http%3A//proceedings.mlr.press/v48/finn16.html)" 提出了**引导代价学习** (guided cost learning) 算法。需要给定一些人工的示范,然后算法从一个随机的策略![](img/868db68e71ec9cabbe333cb77dd676bc.jpg) 开始,通过运行策略![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)去生成随机样本,然后使用重要性抽样和人工示范的方式来更新收益函数,根据收益函数稍微更新一下分布,然后下一阶段的分布更好。最后,我们得到了最终的类似于专家的收益函数和对应的策略。事实上,这个文章中使用了基于模型的算法中的 GPS 算法来做策略更新,然而事实上任何改进策略的方法应当都是适用的。她们的文章中使用这样的方法来“教”机器人完成人工动手的操作如摆放盘子和往目标杯子里倒水。这项工作相对更早期的逆增强学习算法,如 Kalakrishnan et al. (2013) "[Learning Objective Functions for Manipulation](http://link.zhihu.com/?target=https%3A//pdfs.semanticscholar.org/2732/9bc3b6c5a25aeadd3503d01064570b8a4a5c.pdf)" 的路径积分 IRL (path integral IRL) 和 Boularias et al. (2011) "[Relative Entropy Inverse Reinforcement Learning](http://link.zhihu.com/?target=http%3A//proceedings.mlr.press/v15/boularias11a.html)" 的相对熵 IRL (relative entropy IRL) 的思路的改进主要在于,早期的算法虽然使用了重要性抽样,但是没有下面的那个箭头,**没有对策略进行更新**,也因此只得到收益函数而不产生最终的策略。但是早期算法如果在初始分布不错的情况下(要求可能较高),也是可以得到一些不错效果的。她们比较了手工设计的收益函数,相对熵 IRL 和 GCL 算法的效果。 + +事实上,很可能我们得到的收益函数不是一个很好的收益函数,但是往往这个策略函数反倒还可以。 + +## 与生成对抗网络 (GAN) 的联系 + +Goodfellow et al. (2014) 提出了生成对抗网络 (Generative Adversarial Networks) 红遍机器学习界。GAN 是一个生成模型,由两个神经网络组成,一个生成网络,一个判别网络。判别网络用于输入一张图片,判断是生成网络生成的还是数据集里面真实的;而生成网络则尝试通过生成类似于数据集里图片的方式“欺骗”判别网络。IRL 也和 GAN 有一些相似之处,在我们最大似然估计中,尝试去增加专家样本的出现概率,减少当前策略样本的出现概率。Finn et al. (2016) 发表于 NIPS 的文章 "[A Connection between Generative Adversarial Networks, Inverse Reinforcement Learning, and Energy-Based Models](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1611.03852)" 进行一个对比,IRL 中的轨迹对应着 GAN 中的样本,IRL 中的策略对应着 GAN 中的生成器(生成轨迹和样本),而 IRL 收益函数则对应了 GAN 中的判别器。 + +事实上,可以令 GAN 的判别器取决于收益的方式来完成类似的目标。假设一个轨迹在专家(数据)分布下的概率是![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg),当前策略下的概率是![](img/1154bf9399e70c0c2dd3fbe51497e31e.jpg),最优判别器应该为![](img/4906a7119ffd5ec758c201830f91b1d4.jpg)。在 IRL 中,我们假设专家分布下的概率是![](img/1da7ab075e4562997ef71c227c28f45f.jpg),从而![](img/12ff50744e5d2a5104f948cf15c38a51.jpg)。我们的判别器要最小化损失函数 (reward/discriminator optimizaion) ![](img/fe02ab9ec869acecb151b8e69f6187c8.jpg),简单说就是使得对应分布下的似然最大,这也是 IRL 的目标函数。我们的生成器要最小化损失函数 (policy/generator optimization) ![](img/644d229f5e7c71ac41c787c498507292.jpg),使得在当前分布下判别器尽可能分不清,这个结论和上篇中的熵正则化的增强学习的结论是很相似的。对于未知的系统动态,我们交替进行策略更新来最大化收益函数,然后进行收益更新来提高样本收益且降低当前策略收益,也是类似这样的过程。GCL 算法中,机器人尝试的收益函数是要去最小化的,人类示范的收益函数是要去最大化的,去尝试学习最大熵模型的分布![](img/c6eacb417bebb1b9bdf189cb77796d82.jpg)。此外,一个有趣的交汇是,IRL 也和基于能量的模型 (energy-based models, EBM) 很有关系。 + +Ho and Ermon (2016) 发表在 NIPS 上的 "[Generative adversarial imitation learning](http://link.zhihu.com/?target=http%3A//papers.nips.cc/paper/6391-generative-adversarial-imitation-learning.pdf)" 一文将 GAN 和模仿学习联系得更直接,就认为机器人的动作是负样本,人类示范动作是正样本,![](img/2ef8e3c4ee5d37a4b74a8cfea6f454b4.jpg)是一个二分类器来表示轨迹是一个正样本的概率,并使用![](img/24a39f17f654bc847f5752622068d04d.jpg)作为收益函数。事实上它和 GCL 是差不多的,只是 GCL 的 D 是一个给定的函数形式,而这边 D 是一个二分类器(因此该算法不是 IRL,但是非常像),总体来说两个算法都是 GAN 的变种。 + +总体来说,IRL 是从专家示范中推断出未知收益函数的手段, 一类比较好用的 IRL 算法是最大熵 IRL,相对类似超平面分割的方法来说可以消除歧义,也解决了人类示范可能不是最优这种情况。这类算法可以用表格动态规划来实现,比较简单有效,但是只有在状态行动空间较小,动态已知的情况下才能应用。有一类微分最大熵 IRL 这边没有涉及,它适合于大而连续的空间,但需要知道系统动态。我们这里讲的深度 IRL 使用的是基于样本的最大熵 IRL,可以用于连续空间,可以不假设有模型存在,较广泛。它的实现可以用 GCL 算法,该算法与 GAN 也有很深的渊源,和它紧密相关的还有生成对抗模仿学习算法(但不是 IRL,不推测收益函数)。 + +**注:水平有限,本文可能有较多谬误之处,请评论区大神多多指教!** \ No newline at end of file diff --git a/docs/ucb-cs294-112-notes-zh/2.md b/docs/ucb-cs294-112-notes-zh/2.md new file mode 100644 index 0000000000000000000000000000000000000000..99c9688409618e0f2b917b77f8c5fc716590db1d --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/2.md @@ -0,0 +1,96 @@ +# (2) 模仿学习 + +> 作者:[谢天](https://www.zhihu.com/people/xie-tian-55-77) +> +> 来源:[POST 馆](https://zhuanlan.zhihu.com/c_150977189) + +## 序贯决策问题 + +在这里我们先假设大家都已经对监督学习 (Supervised Learning) 的基本概念非常熟悉了。我们在这里先介绍一下今后要使用到的记号: + +![](img/353e3c72c51418d8afc3d1dc22e2c4d0.jpg) + +跟上一篇一样,这只是一个有监督学习的例子,把图像通过某种方式进行分类,譬如在这个例子中将左边的图片分类成老虎。我们把图像![](img/85b06aa39fe239c2ada7f9e124d05bcc.jpg)称为**观测** (observation),而把输出的结果![](img/d700c80f3e82735a63b228ea4417a460.jpg)称为**行动** (action):系统要做的行动无非是给观测到的图像贴上属性变量的标签。在从![](img/85b06aa39fe239c2ada7f9e124d05bcc.jpg)到![](img/d700c80f3e82735a63b228ea4417a460.jpg)的过程中有一个**策略** (policy) 函数![](img/608d47dd1d38da0451828afaad540e1b.jpg),这个函数确定了给定观测![](img/85b06aa39fe239c2ada7f9e124d05bcc.jpg)之后,行动![](img/d700c80f3e82735a63b228ea4417a460.jpg)的概率分布,这个分布比较常见的方式是通过一个 Softmax 函数来确定。这个策略里面有一个参数![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg),而如果![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)是一个神经网络,那么这个参数![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)就是神经网络的权重。在监督学习中,我们的目标是找到一组很好的参数![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg),使得它能很好地完成任务。 + +![](img/ef504946d38568070bf2f96cc263c369.jpg) + +我们将这一设定进一步延伸到序贯决策问题中去,这一问题是由很多时间点的决策问题组成的。首先我们给之前的所有变量都打上下标![](img/654b00d1036ba7f7d93e02f57fc00a75.jpg),以说明这是![](img/654b00d1036ba7f7d93e02f57fc00a75.jpg)时刻的决策问题:在![](img/654b00d1036ba7f7d93e02f57fc00a75.jpg)时刻,我们观测到![](img/ab0308a7c7fd0b36c63ca97415b12edb.jpg),然后做出行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)。不同于监督学习的独立同分布假设,在序贯决策问题中认为当期的行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)会影响到下一期的观测![](img/9f6c6e381426eddd13a467493fcbc5fa.jpg)。所以当你看到老虎的时候,你需要做出合适的动作,说不定你下一期就不会再看到老虎了;而如果你的动作不正确,也许就会发生惨剧。在这个问题中,我们要做的行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)就不再是把它标注为老虎了,而是采取的某项真正意义上的动作。这种动作可以是离散意义的,譬如跑掉、忽略或者去抚摸它等,在数学表达上和之前的类似,可以使用 Softmax;也可以是连续的,譬如选择往哪个方向跑,可能会去用一个高斯分布的均值和方差来表示;当然混合起来也是可以的。 + +在这边还出现了一个**状态** (state) 的概念,通常指真实环境的相关配置全貌,包含了我们去了解这个世界所需要的一切信息,但这些信息不见得能从单一的观测中得出来。以一个猎豹追逐羚羊的图片作为例子,这个图片作为观测,本身是一个很大的张量;而在图片背后,其实潜藏着一个真实的物理系统,包含了譬如猎豹和羚羊的坐标、速度以及其他各种量。这样的系统构成了我们所真正关心的状态本身。究竟是使用状态还是观测,取决于我们能否完全了解到整个情况:我们看到的感受到的,不见得就是整个环境本身,往往是不充分的。如果我们的图片上猎豹正好被一辆车挡住,此时虽然我们在观测中看不见猎豹,但它依然是真实存在的;但是对于下围棋这种例子,棋盘上所有情况都是非常清楚的,因此观测就是状态本身了。 + +![](img/2347d8951026652c80b5552867b44aba.jpg) + +用一个图形来表示它们的关系。我们从状态![](img/c4af7d8e59380f621826e58208e79448.jpg)中获得了观测![](img/ab0308a7c7fd0b36c63ca97415b12edb.jpg)(这里假设观测不完全),并根据策略![](img/cfef52b3e3e4ed53073ad6a097a05e00.jpg)来得出行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)。这里有一个转移概率函数![](img/dbc5fb456ec98abcf4b92d28764aa198.jpg)(很多文献中的 dynamics 也通常指的是这类转移概率),表明了在状态![](img/c4af7d8e59380f621826e58208e79448.jpg)下执行行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)所得到的下一个观测![](img/6f1879550aee78e4a3f8af859b64171c.jpg)的概率分布。这里有一个性质,也就是![](img/6f1879550aee78e4a3f8af859b64171c.jpg)被认为仅由![](img/c4af7d8e59380f621826e58208e79448.jpg)和![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)影响,而与之前的状态和行动无关:也就是之前的所有后果全部被包含在状态![](img/c4af7d8e59380f621826e58208e79448.jpg)之中了,你可以忘掉过去所有的东西,此谓 Markov 性,也是序贯决策问题的重要假设。注意到对于观测来说,这个性质是不成立的,观测序列不具有 Markov 性。![](img/698f49ad5ae10dc2e930d7fc2093b1aa.jpg)的记号最早来源于著名动态规划开山鼻祖的 Richard Bellman,取 state 和 action 的首字母;在机器人和最优控制领域则常见使用![](img/a19ca0b4a8843a49943f2aaae73fd48d.jpg)来作为记号,来源于最优控制的鼻祖 Lev Pontryagin。 + +## 模仿学习 + +我们考虑自动驾驶问题,在这个问题上我们或许可以使用一些监督学习的方法,来根据观测来预测驾驶员应该要做出的行动。一种可行的思路是,找到成百上千的司机,在他们的车前装上摄像机,并且以一个固定频率来记录他们的动作(如方向盘转向、油门、刹车操作)。这样我们就能得到一大堆观测![](img/ab0308a7c7fd0b36c63ca97415b12edb.jpg)和行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg),作为我们的训练样本数据。我们想要通过这些训练数据,来训练一个神经网络以输出行动(转向、油门、刹车)的分布。分布可以是离散的,这时就需要把这些行动离散化;也可以是连续的,如输出转向角度和预期速度的高斯分布。将这些训练数据放入一个监督学习的算法,如带动量 (momentum) 的 SGD,或者 ADAM 等算法。这时我们得出一个策略![](img/cfef52b3e3e4ed53073ad6a097a05e00.jpg),纯粹是由监督学习得到的。 + +那么这样做是否有很好的效果?事实上并不然。我们可能不能得到非常充足的数据,以至于很难泛化到新的情形中去。但即便我们的数据已经充足,这个做法也可能会导致很大的问题。下面给一个直观的例子。图的黑色线条是我们的训练轨迹,假设状态是一维的位置信息。 + +![](img/aa4199c96ff1b10a292351b444560b99.jpg) + +如果我们训练完毕,期望能够重新生成这条黑色轨迹。我们的训练误差可能被控制得很小,但这种函数的近似手段通常不会是非常完美的。我们使用红色的线来描绘根据之前策略得到的期望轨迹。如我们在第一个拐弯处出现了一个非常小的失误(第一次出现夹角处),这时我们的状态是和训练轨迹有一个非常小的差距的。这个失误本身并不严重,而麻烦的是,这个失误导致进入了一个新的状态,在这个状态中可能会犯的错误比之前的失误更大。虽然可能只大一点点,但是会导致这个轨迹偏离越偏越大,最后发散到一个很离谱的地方。这本质上是因为序贯决策的特性才导致了这样的问题:如果只是一个单独的问题,也许会犯点小错误,但这个错误是有限的;而这里的决策并不是独立同分布,每个行动都会影响下一个状态,这样错误就会被累积起来。 + +即便前面充满了对这样简单粗暴算法的批判,但是这样的做法事实上也有人在使用,如 NVIDIA 的一项关于自动驾驶的研究,Bojarski et al. (2016) 收集了 3000 英里的数据后效果一样不差。他们成功的秘诀主要是使用了一些“黑科技”,下图是其原理图。 + +![](img/b73e8aa9bdfc9bf4fb48f498aa5fbb91.jpg) + +如上图所示,他们不仅在车正前方装上了摄像头,还在车的偏左偏右的两侧同样装上,通过这样获得增强的训练数据。这个小技巧就是,收集到了向前的图像,并将其标注上司机的实际操作方案。与此同时,你也获得了向左一个角度和向右一个角度的图像数据:我们可以将左摄像头得到的图像所对应的司机操作稍微加一个向右的角度,右摄像头向左,作为一个简单的补偿。从更广泛的意义上理解,这样的做法本质上是一个稳定控制器 (stabilizing controller),对于漂移的情况给出了对于偏差的补偿校正方案。即便我们单条的轨迹可能偏离很大,但是整体轨迹的分布还是比较稳定的:不关于一个特定的有界的区域偏离太多。 + +![](img/ce956379b786e6e3efddb5d7b85b0cd0.jpg) + +对于一个轨迹分布![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg),其中轨迹![](img/0e496530e9d6f5451cc50d149f93aa53.jpg),之后的课程中我们可以使用一个类似迭代 LQR 的算法构建一个高斯分布来描述它。转而从一个概率的角度来看这个问题的话,我们使用策略![](img/cfef52b3e3e4ed53073ad6a097a05e00.jpg)来确定行动,训练的是根据输入![](img/ab0308a7c7fd0b36c63ca97415b12edb.jpg)来输出![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)的分布的这样一个监督学习算法。我们的训练数据中其实是符合一个特定的分布的,称为![](img/8c290d09ef57dedc870ad2970d760954.jpg)。当我们真正运行我们的策略时,因为行动会对将来的观测产生影响,实际上轨迹路线上看到的数据分布将和训练数据的分布不同,称为![](img/701c6620ae08adb9e0c2e001157d7f81.jpg),通常与![](img/8c290d09ef57dedc870ad2970d760954.jpg)不同,除非我们的训练是完美的,且看到了与训练数据一模一样的初始观测。如果两个分布不同,那么这将意味着我们将在一个与训练集有很大差异的测试集上进行测试,这在监督学习中也称为域转移 (domain shift),通常机器学习不能保证在测试集有任何的效果。 + +那么我们如何能做到使得![](img/c192bb519a08d03eb6bf425ca9a2057e.jpg)呢?一个有趣的想法是,鉴于我们要去让![](img/701c6620ae08adb9e0c2e001157d7f81.jpg)去接近![](img/8c290d09ef57dedc870ad2970d760954.jpg)可以说是削足适履的,倒不如转头去对![](img/8c290d09ef57dedc870ad2970d760954.jpg)做点手脚让它能贴近![](img/701c6620ae08adb9e0c2e001157d7f81.jpg),譬如从收集数据的时候就“根据”![](img/1bd05854f73537385ab1d87151f20ba1.jpg)去做。这也是 Ross et al. (2011) 提出的算法 DAgger (Dataset Aggregation) 的思想基础。它的目标是从分布![](img/701c6620ae08adb9e0c2e001157d7f81.jpg)收集训练数据。为了做到这一点,我们只需要去运行策略![](img/cfef52b3e3e4ed53073ad6a097a05e00.jpg)来收集一些新的数据就可以了。困难的是,我们需要去对![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)进行重新标记:我们不仅仅是需要图像,更重要的是要给出对应的行动才是。一个简化版本的 DAgger 算法是这样的: + +1. 从人工提供的数据集![](img/21bc4cc988147190659f4a120137f8be.jpg)中训练出策略![](img/cfef52b3e3e4ed53073ad6a097a05e00.jpg); +2. 运行策略![](img/cfef52b3e3e4ed53073ad6a097a05e00.jpg)来获得一个新的数据集![](img/203c6cdf28e82793e7a31b873212f042.jpg); +3. 人工来对数据集![](img/079e5856d4585ffaa8feaf3703735b8d.jpg)进行标注,得到一系列![](img/40b3e823d3ff0b56dea56098705fa25f.jpg); +4. 合并数据集,![](img/8b60be1d00a787dbb89f01ab84ac6359.jpg)。返回第一步。 + +第一步可以由任意的监督学习算法来完成,第二步我们希望没有什么意外发生。第三步听起来有点奇怪,就像找个人来看一个电影,然后指导这个机器应该做些什么;这个事情有的时候简单,有的时候就非常困难了,但必须得做以获得标签。这样做下来,数据集![](img/3300f92a16244b4d821dcd91df491aae.jpg)就会有越来越多的在线 (on-policy) 数据,该算法所得出的策略结果和人类专家的差异(训练误差)就会逐渐收敛到一个有界的情形,从而使得数据集分布收敛到策略分布。这个算法以“向老师请教怎么做”的互动形式模仿老师的工作,而不仅仅是老师拿出一大堆意见的填鸭式灌输而缺乏互动,我自己感觉这在人类教育中也是很有意思的想法。特别的是,就第二步而言,我们可以运行策略几分钟然后马上找个人来标注数据再重新训练,也可以运行一年然后再标注,取决于具体的需要。有一个使用 DAgger 训练的无人机飞行避开树木的例子,先用一个训练集来训练策略,让它飞一段时间后人工对这些数据进行标注,再重新训练。 + +在这个过程中,第三步我们可能会需要很长的人工标注时间(我感觉通常比收集数据本身难多了),而且有相当难度。譬如指导汽车驾驶,如果坐在驾驶位上可能是非常熟练的,但给你图片让你给出标注可能就不那么容易了。那么能不能在不用很多数据的时候使得模仿学习成功呢?深度增强学习的理论常常给予否定答复,然而在实践中往往是可行的。DAgger 算法解决分布“漂移”的问题,而如果我们的模型非常好,不会产生“漂移”,事情就会容易很多。要想做到这点,我们需要去非常精确地去模仿专家的行为,同时也不要过拟合,虽然在很多情况下这个事情很难做到。如果能做到这点,虽然我们不能完全消除累积错误,但是一定程度上可以得到缓解。 + +有两个原因使得我们经常不能很好地学习专家行为。 + +第一个是非 Markov 行为,意思是专家所做的行为可能不完全依赖于当前所看到的东西。我们在前面学习的假设中,给定的策略形式![](img/cfef52b3e3e4ed53073ad6a097a05e00.jpg)假设行动只依赖于当前的观测。在这样的假设下,如果我们看到同样的东西两次,那么我们也做同样的行动两次,和之前是否看见过是没有关系的。这在一些情况下并不合理,是因为我们只能得到部分观测 (partially-observed),当前的状态不能被这个观测所完全推断出来。还有一点就是即便是人类,看到同样的事情两次会做出一模一样的行动,通常也是非常不自然的:譬如开车,每次行为都会有些差异,我们也很难理解我们为什么这么做,也不理解到底发生了什么。要想解决这个问题,一个想法是把之前所有的观测都提供出来,变成![](img/65091bbebb08870dab7408cbc86e13be.jpg):行动依赖于过去所有的观测,这样就能处理非 Markov 行为了。那么怎么使用整个历史呢?在自动驾驶的例子中,如果历史帧数多的话,权重参数的个数就会增长得很快。在这个时候,通过权重共享等手段,循环卷积神经网络就可以大显身手了。训练的目标是让输出的行为概率分布更接近人工操作。对于 RNN 的选择,通常使用 LSTM 的效果是比较好的。 + +![](img/6f80e04336e3155d0b0c2467ecc5176a.jpg) + +第二个是多峰 (multimodal) 行为。当我们要驾驶无人机躲避一棵树的时候,我们可能会向左绕或者向右绕,但如果将这些决策进行平均的话就变成向前飞然后撞上去了,就悲剧了。如果我们采用离散的概率分布,其实问题不大:如果离散成(向左飞,向前飞,向右飞),那么肯定向左向右有一个很大的概率而向前飞概率很低。而如果我们使用连续的概率分布,或者我们将它离散化得非常细,那么概率分布将会一团糟。如果我们使用高斯分布这样的单峰分布,显然是不合理的。这只是一个比较简单的例子,是这类问题的冰山一角,实际中经常发生。那么我们怎么去解决这类问题呢? + +1. 第一种方法是使用高斯分布的混合,即把分布表示为![](img/2168a711d05581caa9e1ec850051bb89.jpg)这样的加权线性组合,这样就可以代表一些多峰分布;这五类方式的主要缺点是需要指出这个分布有多少个峰,如果有十个峰的话可能还是很麻烦的。 +2. 第二种是使用隐性密度模型 (Implicit Density Model),这类模型可以表达任意概率分布:虽然它本身还是输出一个高斯分布或者一个什么其他的简单分布,甚至可以是一个值。现在我们输入的不仅仅是一个观测图像本身,同样也输入一个噪音进去,譬如给定维数的多元高斯噪音,然后得到输出。这一模型可以学习任何的非线性函数,可以把单峰的噪音变成多峰的输出。我自己感觉这个模型输入了一个随机噪音进去,对应了原分布的某一个位置,有点像概率论里面的分布变换。这种方法的主要问题是这个模型很难训练。 +3. 第三种是使用自回归离散化 (Autoregressive Discretization)。如果有连续的动作,一个可行的方法是将其离散化;但是如果维度大了,离散化后的联合分布将维度灾难。一个小技巧是避免联合离散化所有维度。假设我们有三个维度,首先我们离散化维度 1,通过诸如 Softmax 的方法得到维度 1 的几个离散分类的分布![](img/91130ee3a03ec033601dbaf1a1d32236.jpg)。然后我们从这个分布里面进行抽样,得到维度 1 的值(其实是某个分类),然后把这个值输送给另一个神经网络(顺便还有图像或者某些隐藏层数据),这个神经网络给出离散化后维度 2 的分布,再如此得到维度 3 的分布。这样做的一个好处是,维度 2 的分布是以维度 1 的样本为条件的,即![](img/41a3f666e20291461efe3096128a1c01.jpg)。这样就可以表示出任何的联合分布,但是在一个时段只需要离散化一个维度。当你训练这样的模型时,只需要给每个维度的正确值就可以了,做一个标准的监督学习过程。在测试中,需要依此采样然后馈入后续网络之中。 + +总结来说,模仿学习通常有一定局限性(分布不匹配的问题、误差累积问题),但有时候能做得不错,如使用一些稳定控制器,或者从稳定轨迹分布中抽样,抑或是使用 DAgger 之类的算法增加更多的在线数据,理想化地如使用更好的模型来拟合得更完美。 + +## 案例 + +第一个案例是 Giusti et al. (2016),使用一个四旋翼在森林小道里飞。他们的策略与之前 NVIDIA 的相似,也使用了左右摄像头进行补偿。实际上,他们遇到的问题比 NVIDIA 的自动驾驶更为困难:因为森林小道通常是非常凌乱的,很难进行清晰的感知,有些时候给一个图应该往哪儿飞都得仔细分析一会儿。首先,他们将动作的输出离散为向前、向左、向右三个;然后训练深度卷积神经网络来从图片得到动作。在这个问题中,收集数据可能是比较困难的,因为四旋翼本身非常续航时间很短,经常需要充电;他们的解决方法是用人头上绑三个 GoPro 摄像机来收集数据,并认为左中右三个相机拍摄到的图像应该被分别标为右前左。事实上,这样做的效果非常好:虽然这样做会非常尴尬,但每个人都能做到。 + +![](img/59c8d4ad4428914b5168af7fbe123065.jpg) + +第二个案例是 Daftry et al. (2017),同样是四旋翼控制问题,使用 DAgger 来规避分布不匹配的问题。在 DAgger 的第三步,需要人工参与标注。人类通常比较难看着某些动画来拉控制杆,因为人类需要一些反馈信息。他们编了一个更直观的接口,使用了画图中红线的方式,来计算出四旋翼应该调整的角度,这样对于人工标注的难度就大大降低了。同样,他们建立了一个深度神经网络,从一个图片入手输出四旋翼指令。他们的数据中有夏天的数据和冬天的数据(两者看起来差异很大),引入了一个对抗域适应机制,设计一个通用的神经网络来解决两个季节问题和不同四旋翼的问题。 + +![](img/dad3a6a5bee8c41dac0d47b9d21ec25d.jpg) + +第三个案例是 Rahmatizadeh et al. (2016),使用游戏手柄和模拟器训练机械臂的运作,把一个盒子(标志物)夹起来放到某个地方去。使用 LSTM 来处理非 Markov 问题,使用混合高斯分布来处理多峰问题。他们在训练时候也故意会犯一些错误,来阐述一些更正手段。当机器人成功后人会把盒子移开,机械臂会再去夹。有趣的是这没有一个阶段性任务的说法,事实上只是一个 LSTM 不停地在运转而已。Levine 教授推测 LSTM 之所以有意义,很可能是因为人的指导过程会产生非 Markov 的偏差。 + +![](img/c21944e091bba28f733241a217827943.jpg) + +模仿学习在很多其他领域也有应用。如结构预测问题,不仅仅是输出一个标签,而是更结构化的输出。这种预测问题在自然语言处理,如机器翻译或问答机器人中尤为重要。比如人家提问“Where are you”,回答“I'm at work”。如果像 RNN 一样一个词一个词输出,如果第二个词 at 变成了 in,那么第三个词可能就不能是 work 了,即便和数据本身比较接近,可能说 school 会好一些:第二个词的选择会影响第三个词。因此在结构预测问题中,答案的一部分会影响另一部分,有点类似一个序贯决策问题。因此一些模仿学习方法已经在这个领域中流行了起来:因为通常有训练数据所以会比较像模仿学习,而且是序贯的。其他的诸如交互和主动学习,要从人的反馈中学习;再就是逆增强学习。 + +那么模仿学习的最大问题是什么?第一,人类需要提供数据,而人能提供的数据通常是非常有限的,即便如头戴摄像机这样相对便宜的手段被开发出来,而深度神经网络通常需要大量的数据才能把事情做好,此为一大限制。第二,人类不善于提供有些类型的行动指导,原因可能是多种多样的。第三,人类可以自主学习而机器则不能,自主学习的好处是我们可以通过自己的经验获得无限量的数据,看到错误可以自我修正,达到连续的自我提升。 + +## 奖励/代价函数 + +要超越模仿学习,我们必须找到我们真正想要的是什么。回到一开始人与老虎的那个例子,让我们先不考虑策略函数。在这种情况下,我们真正想要做的事情是给出一连串决策,使得被老虎吃掉的概率最小:![](img/627ffbb945ab0ec72770a35907ed911f.jpg)。如果我们真的知道被老虎吃掉这个事情怎么用数学形式表示,我们可以把它描述成一个最优化问题。一般来说,我们想做的是最小化一系列的代价函数:![](img/8ef8b1f49c134b63699d10c171b5296e.jpg)。譬如我们可以把被老虎吃掉的概率当成我们的代价函数,或者负的奖励函数。我们不能选择最终我们停留在什么状态,这是由系统转移的动态决定的;我们能选择的就是一系列的行动。因此,如果要超越模仿学习,我们需要定义关于代价或者奖励的目标函数:代价函数![](img/3c12b654e1a4590c3ec60521476929f3.jpg)或者奖励函数![](img/c1fced4c82901b14545188685ac0b947.jpg),两者是相反数关系。奖励函数在动态规划领域更流行,而代价函数在最优控制领域更流行。 + +在实践中,奖励函数有很多种形式。譬如让一个机械手抓住一个小球并放到某个指定地点,当然我们可以选择![](img/e252e9b2647235f0aa74524fac4f9397.jpg)这样简单的函数,但这样的函数通常很难帮我们解决增强学习问题:直到你把小球移动到目标位置之前,你真的不知道你应该这样做。所以通常解决实践问题,我们会设计一些更循序渐进的奖励函数,如 ![](img/c8b94ab3bcd1a052f9cefb5232f69132.jpg) 之类,我们减少机械臂和小球的距离,也要减少小球和目标的距离,也避免让动作做得太大。这三个目标都不是我们真正想做的意图,但能帮助我们做事情。一个使机械小人奔跑的例子也是,![](img/55aa1922c2618c7cefca3bec51e729f1.jpg)这样的函数并不好,而使用![](img/e7faab54808449c9df58627ce48e084f.jpg)之类的函数,要增加小人的运动速度,控制躯干的倾斜角度避免倾倒,保持躯干的高度。 + +同样,模仿学习也可以写出奖励函数,如![](img/a06668c8ded97786d94a657f39470f87.jpg),也就是我们策略的行动应该尽量与专家的指导意见一致。事实上 DAgger 算法也在优化这个东西,它能够逐渐使得这个奖励函数靠近最优的奖励函数。 + +通常我们设计代价和奖励函数会有一些困难。当我们玩电子游戏的时候,可能会有一个得分显示在屏幕上,来说明你现在玩得有多好;但在很多现实问题中,并没有一个显式的得分这样的概念,比如一个孩子想要倒一杯水,很难说奖励函数是什么。Rusu et al. (2016) 用了一种方法把机器人在模拟仿真下学习到的策略转移到现实控制问题中,但是他们在模拟中可以轻松得到的小红方块的位置,在真实情况下就变得不容易光从图像中感知到位置了:他们需要写出一个计算机视觉程序来定位这个红色方块。这样一来,他们虽然自称是从像素中得到数据,但是还是需要用监督学习来确定红色方块,是有一些悖论的,也说明了奖励函数的设计在这个像素级别的问题中不是端到端的。 \ No newline at end of file diff --git a/docs/ucb-cs294-112-notes-zh/3.md b/docs/ucb-cs294-112-notes-zh/3.md new file mode 100644 index 0000000000000000000000000000000000000000..e1f5ca5d4b0cff3b3b52f0b0d0f108e181bc6fdd --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/3.md @@ -0,0 +1,102 @@ +# (3) 增强学习简介 + +> 作者:[谢天](https://www.zhihu.com/people/xie-tian-55-77) +> +> 来源:[POST 馆](https://zhuanlan.zhihu.com/c_150977189) + +## Markov 决策过程与增强学习 + +在上一篇中,我们已经熟悉了状态![](img/c4af7d8e59380f621826e58208e79448.jpg)、观测![](img/ab0308a7c7fd0b36c63ca97415b12edb.jpg)、行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)、策略![](img/cfef52b3e3e4ed53073ad6a097a05e00.jpg)或者是![](img/753092e4f965d22839d8ceb952c7c3fb.jpg)的概念,也知道了从包含认知世界所需要的所有信息的状态![](img/c4af7d8e59380f621826e58208e79448.jpg)得到观测![](img/ab0308a7c7fd0b36c63ca97415b12edb.jpg),然后使用策略![](img/cfef52b3e3e4ed53073ad6a097a05e00.jpg)做出行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg),最后由状态![](img/c4af7d8e59380f621826e58208e79448.jpg)和行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)经过系统固有的转移概率分布函数 (dynamics) ![](img/51e4e556c8cc9e6e99844de4ce5017e1.jpg)得到下一期的状态![](img/8fb507a31bd0b2ce96091d0ec0e8b5c8.jpg)这样周而复始的过程,同样我们也明白了给定状态![](img/c4af7d8e59380f621826e58208e79448.jpg),假设之后的状态![](img/8fb507a31bd0b2ce96091d0ec0e8b5c8.jpg)和之前的状态![](img/1ab9558c76f670356befc5109a699cf9.jpg)等无关的 Markov 性。 + +我们同样给出了如果我们有充分的数据,一定程度上可以做监督学习(模仿学习)。但是如果我们没有数据的话,需要用一些方式来定义这个任务。在上一篇的结尾也提到,一个核心是要去设置一个收益函数![](img/94c2edd239f2416ba7d7a367f9d01462.jpg),它定义了什么样的 (状态, 行为) 二元组是好的,以及什么样的是不好的。譬如在自动驾驶问题中,如果汽车开得很顺利速度很快,收益函数应该很高;而如果和其他车辆撞上了,那么收益函数应该很低。收益函数的目的不是直接告诉你现在应该做什么,只是告诉你哪些结果会被认为是比较好的。而增强学习问题的一大目标就是,弄清楚现在应该做什么,使得未来的结果会更好。这也被称为延迟收益 (delayed reward) 问题,现在的行为可能不立即产生什么奖惩,而会对将来的结果产生严重的影响。 + +状态![](img/33c815432ff85d6f9342f1abc64af657.jpg)、行动![](img/d700c80f3e82735a63b228ea4417a460.jpg)、收益函数![](img/94c2edd239f2416ba7d7a367f9d01462.jpg)和转移概率![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg)共同定义了**Markov 决策过程** (Markov Decision Process, MDP)。 + +为了描述这一过程,我们先来回顾一下俄罗斯数学家 Andrey Markov 提出的 Markov 链。Markov 链本身并不是直接与增强学习相关。Markov 链![](img/f3ce87ee55d1069fe7bf7a5617366168.jpg)由状态空间 (state space) ![](img/5d55d99469b366ad144a269efc0ded6a.jpg)和转移算子 (transition operator) ![](img/cd5444d93349adbd66d721eb495b3ed3.jpg)共同构成。每一个状态![](img/486c45f279fe3d51866add4512c5440a.jpg)可以是离散的分类变量,也可以是连续的数值之类;转移算子确定了概率![](img/548ee9d00a5dc6d39faf986f55369c51.jpg),是给定当前状态转移到下一个某状态的转移概率。该算子其实是一个线性算子。如果状态是离散的,令![](img/720f6d1371c99438b6d9715a4f3e3bed.jpg)为在![](img/654b00d1036ba7f7d93e02f57fc00a75.jpg)时刻处于状态![](img/31df9c730e19ca29b59dce64b99d98c1.jpg)的概率,从而![](img/09b2bc93e6d534c58907ccad2503aa8e.jpg)是一个加和为 1 的概率分布向量,表示了在![](img/654b00d1036ba7f7d93e02f57fc00a75.jpg)时刻的概率分布;令转移概率![](img/d6682d8b53a6255f81d67f88a1b9b9b4.jpg),则这些概率组成一个转移概率矩阵![](img/cd5444d93349adbd66d721eb495b3ed3.jpg),且有![](img/7361b237a6bcb43f0379c9d23bae6e81.jpg)的关系。如果状态是连续的,则无非状态变成了无数个,转移概率矩阵无穷大,但还是线性的。Markov 性体现在转移概率的定义上,当我们知道状态![](img/ac38b18cffeff5d93b3e1f9a9cd11281.jpg)了,下一个状态就不依赖于其他的信息了,分布为![](img/548ee9d00a5dc6d39faf986f55369c51.jpg)。 + +Markov 决策过程 (MDP) 是将 Markov 链放在一个决策环境的扩展产物,在 1950 年代由 Richard Bellman 等人提出。Markov 决策过程![](img/decade55a657d45ec2c5e7b47f842201.jpg)相比之前多了一些组件。其中状态空间![](img/5d55d99469b366ad144a269efc0ded6a.jpg)保持不变,多了一个行动空间 (action space) ![](img/f6637765bcbad8cdf38d16ded73297c4.jpg),行动![](img/ee1a6751ebd629ed15678133f4b3af7c.jpg)同样可以是离散的也可以是连续的。在这里,转移概率不仅受到状态影响,还受到行动影响,因此转移算子![](img/cd5444d93349adbd66d721eb495b3ed3.jpg)在这里变成了一个张量,每个元素![](img/df50856ec23cf4bee059bda16030227e.jpg)。如果令![](img/00a4a76b5a1fd26db1ec3e16b9b26cd2.jpg),![](img/dc010f1c626c6f3a49ef31b6f49153e6.jpg)的话,同样存在一个线性关系: ![](img/bf03027db1ac5944ffbf4d842f5d762e.jpg)。因此下一期的状态只与当期状态和当期行动有关系。最后一部分![](img/3d1640c248bf61a3677d387de2273b25.jpg)是收益函数,是一个![](img/cafc589de260e43036182b94585bbfd1.jpg)的映射。 + +一个更加广义的问题被称为**部分可观察的 Markov 决策过程** (Partially Observed Markov Decision Process, POMDP)。该过程![](img/0da1daa31bbc9b3beb6cc0c019fffa3a.jpg)新增了两个组件:观察空间![](img/f947b05e8c3e9490dbcccfbd807f6c89.jpg) (observation space),同样是可以离散可以连续的;![](img/4358013758c3d540537f4d8035ed200e.jpg)为排放概率 (emission probability),决定了给定由![](img/ac38b18cffeff5d93b3e1f9a9cd11281.jpg)后,![](img/8b4c3e8be7da971e832789294ddd61d4.jpg)的概率分布为![](img/94c85a10ab15c360317e8d7866dd2761.jpg)。 + +现在我们来说明增强学习的目标是什么。在这里我们假设的策略函数是清楚的,![](img/6406ca8c8101cbfa51992c6fd878ace5.jpg)可以由一个参数为![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)的深度神经网络确定(这里先假设完全可观察)。我们将状态![](img/33c815432ff85d6f9342f1abc64af657.jpg)输入到深度神经网络之中,得到行动![](img/d700c80f3e82735a63b228ea4417a460.jpg),共同输入给环境。环境通过某些转移概率函数![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg)(一般我们假设这个是不知道的),得到新的状态![](img/d2683f5b20dac211246c30b1e0a7c2dd.jpg),形成一个循环。 + +![](img/e1790d12e391c32a971e7a67d40fd760.jpg) + +我们考虑一个有限长度的(状态, 行动)轨迹 (trajectory),![](img/2b9a2a42ce080e40e5cded3e76cf40eb.jpg)。对于这样的轨迹,发生的概率为![](img/4ae3bb9b9987b4e735031eea8f5168e4.jpg)。我们通常不能控制初始状态![](img/9852aef9c75200eca15057b3188c038e.jpg),而后面每一期的行动都由当前状态和策略函数决定,转移概率具有 Markov 性,故可以表现为这样乘积的形式。而我们想做的是,选出一组最优的神经网络参数![](img/bb46e1fd7a4111c77093b2d8e742cff7.jpg),使得![](img/184af7ec8dde19e852920210992ae355.jpg),即最大化总收益函数的关于轨迹期望。收益可以非常稀疏,如打一场篮球赛,如果最后时点赢了那么得到收益为 1,此外其他时间的收益都是 0;如果想减少自动驾驶中车祸的数量,也可以设置成一旦发生车祸就给予-1 的收益;总体来说,如何使用收益函数是非常灵活的。 + +值得一提的是,这个发生概率其实本质上是一个关于增广的空间![](img/b637c4140d6cb6a419012469a63e87d4.jpg)的 Markov 链。具体来说,可以表示为![](img/3569a649d4520b67b1b03e9546621e4f.jpg)。 + +对于有限长度的轨迹问题,事实上![](img/76db95bab615b58b983c36d85cf7ecef.jpg),只需要关注这个 Markov 链在一个时间点上的边际分布就可以了。对于![](img/94dc2ab00fb6cbf83f92f63e007204ec.jpg)的无限长度的问题,由于我们之前已经把![](img/b637c4140d6cb6a419012469a63e87d4.jpg)的 Markov 链化,因此有![](img/0bd9dc59373d157413e99268d63d0ef4.jpg),进一步![](img/a1c2f8d5b1226e67bdb44b12a6ddf18b.jpg)步转移算子![](img/5300187cb9bf098e9df3d8e3425e20f1.jpg)。我们考虑![](img/8c6722896a975cd892239237491de1cf.jpg)是否逐渐收敛到一个平稳分布 (stationary distribution):之所以说平稳分布,是因为经过一次状态转移后,分布不发生变化,这样的分布也就是![](img/f48e0eb597c1bf0978f3307f974487a6.jpg),也就是![](img/a8e344ce992c2391f332dee5b713e36b.jpg),或者说以矩阵特征向量的角度考虑,![](img/4e4d506c887c843f43a8fbcbe1884ffd.jpg)是![](img/cd5444d93349adbd66d721eb495b3ed3.jpg)特征值为 1 的特征向量。由于![](img/cd5444d93349adbd66d721eb495b3ed3.jpg)是一个随机矩阵,给定一些正则条件,这样的向量总是存在的,此时![](img/afb448dff3f5dcb5173191ca0e934fc0.jpg)是其平稳分布。对于无限长度的问题,我们也可以对目标函数进行平均,![](img/bbbbf1468207b076b6abfb7ea3765a55.jpg),它将完全由平稳分布下的情形所控制。 + +在增强学习中,我们几乎只关心期望,而不是个别的值,这是因为这给予了我们很好的数学性质。譬如说在盘山公路上开一辆车,如果正在运行那么收益函数为+1,如果掉下山崖则收益函数为-1。此时,我们的收益函数是不光滑的。假如说我们从非常复杂的系统中提取出了一个概率![](img/492b92e8089c848702efed7c983570ce.jpg),作为掉下的概率,此时如果我们关注期望的话,平稳分布下的收益函数的期望,![](img/df1a45644d86996d1e8acd583982a011.jpg)则是关于![](img/492b92e8089c848702efed7c983570ce.jpg)光滑的!这一点非常重要,允许我们使用诸如基于梯度的算法来优化非光滑的目标(可能是非光滑的转移,或者非光滑的收益函数等等导致)。 + +## 增强学习算法的一般步骤 + +![](img/5e147a50ea1ba42d1da197f820f7bd11.jpg) + +几乎所有的增强学习算法都会由以上三部分组成,即便可能特定算法会退化掉其中的一部分。 + +1. 生成样本。我们在现实世界(或者模拟器)中运行我们的策略,来收集轨迹样本。有的时候,这个轨迹可以只是一个转移,这样就是一个很短的轨迹;也可以是完整的有始有终的一条。 +2. 拟合模型/估计收益。对于策略学习算法,则这个部分就是策略评估 (policy evaluation);对于基于模型 (model-based) 的增强学习算法,那么就是模型拟合,等等。这个步骤中并不改变我们的行为,但我们想通过研究我们在第一步中得到的样本来看发生了什么,当前的策略有多好,或者尝试去分析物理环境等等。 +3. 改进策略 (policy improvement)。根据之前的研究结果,改进策略,再投入到第一步的运行中去。 + +不同算法在不同步骤要做的事情也差异很大。在绿色方块的第二步,策略梯度法只需要计算一个求和来得到收益,诸如![](img/6afd416bf934ae08a5e888d19546dd0e.jpg); 基于值函数的方法诸如演员-评论家算法和 Q 学习算法则需要去拟合一个用深度神经网络代表的函数![](img/481f051ec74b7e8a209e64ed66ede8e2.jpg);基于模型的方法则需要去估计转移概率![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg)。在蓝色方块的第三步,策略梯度法需要对神经网络的参数进行一个梯度步的调整,诸如![](img/290e810e72af69bd76c68232bac70a25.jpg);Q 学习法则需要找到一个使得 Q 函数最大的行动![](img/bd91fff32902c7989ce531baeb2f5df1.jpg);基于模型的方法则需要用诸如反向传播梯度的方法去优化策略函数![](img/6406ca8c8101cbfa51992c6fd878ace5.jpg)。 + +哪些步骤昂贵,哪些步骤廉价,实际上取决于选取的算法和要处理的实际问题。就生成样本而言,如果我们运行诸如汽车、机器人等,需要用到真实物理系统的话,我们只能以 1 倍速度实时收集数据(除非有了时间穿梭手段);当然如果我们有多个物理系统我们可能可以进行并行的数据收集。而如果我们使用诸如 MuJoCo 之类的模拟器,那么我们可以期待有 10000 倍速度的加速。因此取决于我们的具体问题,生成样本的难度可能会是效果的主要限制因素,当然也可能微不足道。同样,绿色方块第二步策略梯度法计算求和很容易,而 Q 学习方法的拟合神经网络则代价较高而且很难并行。但是,在蓝色方块第三步中,Q 学习方法对应的找到使得 Q 函数最大的行动却非常容易,而基于模型的方法的反向传播优化策略则相对很困难。 + +![](img/18e5e113ec8b81912961f55d50dcabf0.jpg) + +让我们来考虑如上的有点像基于模型的增强学习中,用反向传播来训练增强学习模型的玩具例子。假设环境![](img/dad139946fdd1363ecd86d20700a53a6.jpg)是确定性的(非随机),策略![](img/1bd05854f73537385ab1d87151f20ba1.jpg)用一个神经网络表示,给定状态,输出一个行动。整体形式类似于一个 RNN,优化策略的方法是反向传播收益函数的梯度。要做这件事情,我们要收集数据(第一步橙色方块),也要更新模型![](img/dad139946fdd1363ecd86d20700a53a6.jpg),保证模型和实际发生状态转移情况一致(第二步绿色方块)。前向传播用于计算收益函数,也属于第二步绿色方块之中。唯一属于第三步蓝色方块的是计算梯度并将其反向传播。当然这个过程也是非常不足的,譬如只处理确定性的环境和策略,只处理连续的状态和行动,且优化问题也是非常难以求解的。 + +## Q 函数与值函数 + +那么如何处理随机系统呢?因为我们考虑的目标主要还是关于期望,因此条件期望成为一个非常有力的工具。我们想描述一个期望![](img/6cb444c25460338afee04548cb683fb0.jpg),而这个期望则可以由一系列嵌套的条件期望所描述: ![](img/8210694f9b5134fa9b98f3351fc3f46d.jpg) 其中第一个状态是服从于初始分布,在第一个期望内,我们要对第一个行动取期望,是服从于我们的策略的。第二个状态是以第一个状态和第一个行动为条件的,依次类推。而我们想做的事情,首先是找到一个非常好的**第一个行动**![](img/ebc140645dd4bd2a91ca78746a11ccf0.jpg)。我们把中间的递归部分抽离出来,令![](img/19a8daf64aa58db751dc2b8690f2ffde.jpg) ,如果我们知道这样一个函数,那么原来的问题就可以被简写为 ![](img/6a0c8a1837de8c840c35888e8ee6094f.jpg) ,我们对![](img/ebc140645dd4bd2a91ca78746a11ccf0.jpg)的选择的事实上就不依赖于其他的东西了。我们把这样的函数称为**Q 函数** (Q-function),表现为在状态![](img/9852aef9c75200eca15057b3188c038e.jpg)下,选择行动![](img/ebc140645dd4bd2a91ca78746a11ccf0.jpg)所能带来的收益函数的条件期望。如果 Q 函数已知,那么改进策略将非常容易:我们只需要挑选一个![](img/ebc140645dd4bd2a91ca78746a11ccf0.jpg),使得 Q 函数最大化就行了,即![](img/4a787ef9a3a13c0fb59246b3e000394a.jpg)。同样也可以在其他步骤类似这样做法。 + +那么我们给几个重要的概念下定义。 + +> Q 函数:![](img/2276fcae497e3c99b0b2535f978cbe30.jpg),从![](img/654b00d1036ba7f7d93e02f57fc00a75.jpg)时刻状态为![](img/c4af7d8e59380f621826e58208e79448.jpg)起,执行行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg),之后根据给定策略决策,未来总收益的条件期望。 +> 值函数 (value function):![](img/db22fa15b67efc7eec7dc50fd7068c10.jpg),从![](img/654b00d1036ba7f7d93e02f57fc00a75.jpg)时刻状态为![](img/c4af7d8e59380f621826e58208e79448.jpg)起,根据给定策略决策,未来总收益的条件期望。 + +由于 Q 函数和值函数的特别关系,值函数也可以表示为![](img/5ab2048e8ae20de5e2999e4745c7c2f1.jpg)。需要注意的是,这样定义的函数的右上角都有个![](img/868db68e71ec9cabbe333cb77dd676bc.jpg),指的是它都是关于某个特定的策略函数![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)的。注意,经过这样的标记后,![](img/cc040071dfd87bc2dce9ce9165626e84.jpg)正好是增强学习的目标函数。 + +这两类函数之所以有价值,是因为如果我们已知这两类函数,那么能够很方便地做很多事情。譬如: + +* 如果我们现在有一个策略![](img/868db68e71ec9cabbe333cb77dd676bc.jpg),且我们知道![](img/c8661aa6447d8182642e291cc63b65f7.jpg),那么我们可以构造一个新的策略![](img/59b66599957ebeab11f06eaa15eab76e.jpg),这个策略至少和![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)一样好(且可能更好),是因为这一个策略最大化未来的收益。这一点与当前的![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)是什么没有关系。 +* 我们可以增加“好的行动”发生的概率。注意到,![](img/29d98c693c9b047981aafe5813c2179f.jpg)代表了在策略![](img/4df543f439ceed1785f6db6d90532ba9.jpg)下的行动平均水平,所以如果![](img/b128226bee473967675cc8361eee0bea.jpg),就能说明![](img/d700c80f3e82735a63b228ea4417a460.jpg)是高于平均水平的行动。那么我们便可以改动策略,使得这样的行动发生的概率上升。 + +## 增强学习算法的权衡 + +回顾我们的目标,![](img/e77c340b11434074173cb0511dff0334.jpg)。在增强学习中,有以下几类基本算法: + +* **策略梯度法**:这类算法直接对目标函数关于参数求梯度。本质是一阶最优化算法,求解无约束优化问题的通用方法。 +* **值函数方法**:这类方法尝试去近似估计**最优策略下的**值函数或 Q 函数,而并不揣测策略函数是什么。注意此时策略并需要不显式表达出来,只需要选择使得 Q 函数最大的行动即可(或者值函数类似于动态规划中的手段)。 +* **演员-评论家 (actor-critic) 方法**:这类方法尝试去近似估计**当前策略下的**值函数或 Q 函数,并用这个信息求一个策略的梯度,改进当前的策略。所以也可以看作是策略梯度法和值函数方法的一个混合体。 +* **基于模型 (model-based) 的增强学习方法**与上面的几类都不同。它需要去**估计转移概率**来作为模型,描述物理现象或者其他的系统动态。有了模型以后,可以做很多事情。譬如可以做行动的安排(不需要显式的策略),可以去计算梯度改进策略,也可以结合一些模拟或使用动态规划来进行无模型训练。 + +我们来看基于模型的方法如何分解成三个方块的步骤。在第二步绿色方块中,显然它需要去学习转移概率![](img/51e4e556c8cc9e6e99844de4ce5017e1.jpg)。在第三步蓝色方块中,改进策略可能有很多不同的选项。 + +1. 有了模型,我们可以抛开策略,直接使用模型去模拟安排。对于连续问题,可以用一些轨迹优化和最优控制的方法;对于离散问题,可以使用譬如蒙特卡洛树搜索 (Monte Carlo Tree Search, MCTS) 的方法来对离散的行动空间进行计划。 +2. 我们可以将梯度反向传播回策略之中,这通常需要一些技巧来使得它能真正起效。 +3. 也可以使用模型来学习值函数和 Q 函数。如果运气好,在一个空间足够小的离散环境下可以使用动态规划,一个更流行的方法是用这个模型生成综合的“经验”,然后进行无模型训练(如 Dyna 算法)。 + +值函数类算法在绿色方块中做的是去拟合一个值函数或者 Q 函数,而蓝色方块的策略改进部分则没有显式的过程,策略仅仅是去选一个行动使得 Q 函数最大。直接的策略梯度法的绿色方块做的是计算收益![](img/9938d3b26d69ca3acd27c543a92b0374.jpg),蓝色方块做的是计算一个梯度![](img/81ed86ba25d05c3057e787e2f7f11be4.jpg),这一点做起来是非常神奇的。演员-评论家算法是两者的混合,因此这两个它都做一点:绿色方块它拟合值函数或者 Q 函数,并用这些函数去评估收益,蓝色方块还是跟策略梯度法做的一样,走一个梯度步。 + +为什么我们需要那么多中不同的强化学习算法?在强化学习中,没有一个单纯的算法在所有情形下都表现得很好,因此算法之间需要有很多**权衡点**:首先是**样本效率** (sample efficiency),就是要有一个不错的策略效果需要橙色方块收集多少数据;其次是**稳定性**和**易用性**,主要体现在选择超参数和学习率等调参的难度,在不同的算法中这个难度可以差别很大。不同的算法也有不同的前提假设:有些算法假设系统动态和策略是随机的,有些是确定性的;有些连续有些离散;有些有限期 (episodic) 有些无限期。还有一个很现实的问题是,在不同的问题下,要去表示一个东西的难度是不一样的,譬如有些问题去表示一个策略是比较容易的,而有些问题去拟合模型更容易:因此方法的选择对于特定问题很有关系。 + +在橙色方块中,我们主要关心样本效率。样本效率意味着我们要得到一个好的策略,需要收集的样本数量:这决定了我们需要在模拟器或者真实世界运行我们的策略多久才能让它到一个稳定状态。最重要的一点是,我们的算法是否是**离线** (off-policy) 的。离线的意义是我们可以在不用现在的策略去生成新样本的情况下,就能改进我们的策略。其实就是能够使用其他策略生成过的历史遗留数据来使得现在的策略更优。**在线** (on-policy) 算法指的是每次策略被更改,即便只改动了一点点,我们也需要去生成新的样本。在线算法用于梯度法通常会有一些问题,因为梯度算法经常会走梯度步,些许调整策略就得生成大量样本。 + +![](img/0a2ccfdf4c05691db6c3e0c7a6bdaed1.jpg) + +上图是一个算法间的样本效率比较图(是非常粗糙的,具体效果如何其实非常依赖于特定的问题)。以竖线为分界点,离线算法有较高的样本效率,在线算法则较低。如最右侧的进化算法,甚至都不使用梯度信息,只是把参数当成一些黑盒子,使用一些不可微函数的方法来作用在参数上:它们需要最多的样本,因为它们没有利用梯度信息。在线的策略梯度法也是在线算法,每次策略更改后需要重新收集数据,但它利用了梯度信息所以会高效一些。演员-评论家算法在两侧都可以有。离线的 Q 学习法,通常学习 Q 函数可以是完全离线的,样本效率较高。基于模型的深度增强学习方法更有效,更极端的基于模型的浅度增强学习方法不去拟合神经网络,使用一些更加高效的贝叶斯方法,但通常会引入一些很强的假设来作用于一些特定的问题。 + +然而样本效率低并不代表这个方法是“坏”的。为什么我们会用一个样本效率较低的算法?答案有很多,其中一个答案是现实时间并不与样本效率相同。如果你有一个很快的模拟器,可能你根本不关心收集样本所需要的时间;我们关心的是真实发生的时间消耗,优化我们的策略需要花多少时间,其中包含模拟时间和优化神经网络的时间。有一些时候,将进化算法进行并行是最快的;在线的策略梯度法有时候也很容易做并行,也相当快,如果模拟是相当廉价的。相对的,基于模型的增强学习,即便它们充分利用数据,真实时间也相当慢,因为可能去拟合了很多个不同的神经网络模型(转移概率、策略),需要反向传播很长的序列,有可能更昂贵。 + +关于稳定性和易用性,我们需要问一系列问题。首先是这样的算法收敛么?如果收敛的话,收敛到什么地方?它在所有情况都收敛么?至于这为什么会成为问题,我们在监督学习中训练巨大的模型,在现在技术下通常收敛得不错。这是因为,在监督学习中,我们采用的基本上都是某种意义上的梯度下降法,而这样的算法分析起来是相对简单的,大家对它比较了解,也有很好的让它收敛的办法。而增强学习通常不使用梯度下降法,譬如 Q 学习法本质上是一个不动点迭代的过程,在一定条件下收敛;基于模型的增强学习,当我们在优化转移模型时,它并不优化期望收益函数;策略梯度法是梯度方法,比较好用,但它的样本效率比前两者都要低。这些都是权衡,更聪明的算法可能更难用。 + +很多方法都有缺点,如值函数拟合方法,一般来说我们优化的是它对期望收益函数拟合得多好,但是把这个函数拟合得好并不意味着有一个很好的策略,减少预测误差不见得最大化期望收益;在更坏的情况下,它什么都不优化,事实上,很多流行的值函数拟合方法在非线性的问题中并不能保证收敛性。基于模型的增强学习方法,立足于减少模型预测误差,这是一个监督学习问题,一般会收敛;但这不意味着一个更好的模型能得到一个更好的策略。策略梯度法是仅有的关于目标函数使用梯度上升方法的,但也有一些缺点。 + +不同的方法由不同的假设。**完全的可见性**常常被值函数拟合类方法所假设,可以通过加入 RNN 的方法来缓解;**有限期**被纯策略梯度法和一些基于模型的增强学习算法假设,这些方法不用去训练值函数,对于有些机器人问题中确实是如此的(机器人拼乐高的例子);**连续性和光滑性**也是一些连续的值函数学习法和一些基于模型的增强学习算法(如浅层学习)所假设的,如果知道连续性,那么可以有一些技巧可做。要看问题具体满足什么样的假设,然后选取合适的算法。 + +值函数拟合方法有 Q 学习(深度 Q 网络 DQN)、时间差分学习、拟合值迭代等,策略梯度法有 REINFORCE、自然策略梯度 (Natural Policy Gradient)、信赖域策略优化 (Trust Region Policy Optimization, TRPO)等,演员-评论家算法如 A3C、基于模型的增强学习算法如 Dyna 和引导策略搜索 (Guided Policy Search)等。 + +基于值函数方法的一个最经典的例子是使用 DQN 来打 Atari 游戏 (Mnih et al., 2013),使用卷积神经网络来估计 Q 函数,学习的不是策略而是 Q 函数来预测未来的收益,并由此得到策略。Levine et al. (2016) 使用引导策略搜索 (GPS) 这样的基于模型的增强学习方法来做基于像素图像的机器人控制,拟合局部模型。Schulman et al. (2016) 使用加入值函数近似的策略梯度法 (TRPO) 来训练小人模拟行走,走的时间逐渐变长。 \ No newline at end of file diff --git a/docs/ucb-cs294-112-notes-zh/4.md b/docs/ucb-cs294-112-notes-zh/4.md new file mode 100644 index 0000000000000000000000000000000000000000..65bf0aec1f30fb6aec5e9810545b40b883925f04 --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/4.md @@ -0,0 +1,105 @@ +# (4) 策略梯度法 + +> 作者:[谢天](https://www.zhihu.com/people/xie-tian-55-77) +> +> 来源:[POST 馆](https://zhuanlan.zhihu.com/c_150977189) + +## 策略梯度法 + +在上一篇中,我们已经熟悉了智能体通过增强学习与环境打交道的运作机理:当前智能体处于某个状态![](img/33c815432ff85d6f9342f1abc64af657.jpg),会根据某种诸如由参数为![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)的神经网络所表示的策略![](img/6406ca8c8101cbfa51992c6fd878ace5.jpg),得到行动![](img/d700c80f3e82735a63b228ea4417a460.jpg),作用于环境中,由环境内在的某种动态决定的状态转移概率![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg)得到新的状态,接着循环往复。我们也知道了根据这样的决策过程,由 Markov 性,一个轨迹的出现概率是![](img/4ae3bb9b9987b4e735031eea8f5168e4.jpg)。我们的目标是选出一组最优的神经网络参数![](img/bb46e1fd7a4111c77093b2d8e742cff7.jpg)最大化总收益函数的关于轨迹分布的期望![](img/e77c340b11434074173cb0511dff0334.jpg)。 + +首先我们要研究怎么去评估这个目标,然后再考虑如何去改进当前的策略。我们把目标函数记作![](img/0e23f7e6ffd9093e2e4f840c66d2fd28.jpg)。除非我们的分布性质非常干净譬如说高斯分布,通常我们不能精确地对这个期望进行评估,但我们可以去用蒙特卡洛方法抽样近似。如果我们根据轨迹分布来抽样的话,目标函数的一个无偏估计是![](img/92bb90af8ba2a3e605fb1111e989a82f.jpg),其中样本量为![](img/9341d9048ac485106d2b2ee8de14876f.jpg),第![](img/31df9c730e19ca29b59dce64b99d98c1.jpg)个样本在![](img/654b00d1036ba7f7d93e02f57fc00a75.jpg)时刻的状态为![](img/45b65e7000ee1796b17b2aef5e7c9e86.jpg),行动为![](img/860a4117021ad87e7834aed6b0baadbb.jpg)。因为分布是关于我们当前策略的,因此我们抽样的方式是在实际环境或者模拟器中运行我们的策略,来生成这些轨迹。如对于机器人,只是让它去尝试完成任务,看它做得怎么样。同样策略下,不同轨迹可能有些做得好有些做得不好,对每个轨迹得到一个评分![](img/67040ac52b0210420be06984fca88520.jpg),然后把这些评分平均起来来近似我们的目标函数。这是一个最简单的利用蒙特卡洛方法来评估一个策略是否好的方式。 + +现在考虑怎么去改进策略,在连续优化中最常见的方法是计算其梯度,然后让参数走一个梯度步。现在看怎么在这个目标中实现这个步骤。令轨迹的收益![](img/f5221945e0d837c23431899288849b1c.jpg),则![](img/6abcfd2478ff64b806bc0997993a3752.jpg)。根据期望的定义,![](img/d96b471ec7f91bd9c0d21375f3896476.jpg)。它的梯度为![](img/b8ef9aeaf3c06194c8bcad280704e1fa.jpg),因此其实我们关心的主要是![](img/1691efb2aaf59178894730f0ccd41656.jpg)这个部分。以下有一个非常重要的恒等式: + +> ![](img/6a51b45041c1abddbaa621e89a371914.jpg) + +我们把这个式子代回去,得到![](img/e64138b463aebe0c99516077222822b9.jpg),因为式子中又再度出现了![](img/c507087331a2c89503c821123e63eb5b.jpg)这个概率,它本质上又变回了一个期望:![](img/ec14592ebd45ea5c5655cdb5d9b5d87c.jpg)。回想我们的概率表达形式![](img/4ae3bb9b9987b4e735031eea8f5168e4.jpg),将两边取对数,得到![](img/09b51215156e2ed649755527fdb826af.jpg)。在原式子中,我们需要的是这个东西关于![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)的梯度,而事实上初始分布和转移概率本身都与参数![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)并不相关。因此形式上只有![](img/43ddc657d98b8ac9d6130013e6048391.jpg)。再将![](img/5164fb743e48ff41c28bebd1f2e65763.jpg)展开,我们得到的最终形式如![](img/d54161c43a0609856d70526aec1b2628.jpg)。这个形式的最大优点是,它不需要我们知道状态的初始分布,也不需要我们知道转移概率:而这两者通常正是非常困难的!这一点是非常重要的,我们只需要从环境中抽一些样本来估计一个期望,然后我们唯一需要知道的事情是关于我们策略的梯度,不需要知道这个环境本身是什么样的。 + +关于蒙特卡洛估计方法,与之前类似,我们也可以从实际系统中抽样,用![](img/2d0414d2df862214a8d1afde81ec8b1c.jpg)来作为一个无偏估计。得到梯度后,使用梯度上升法走一个的梯度步![](img/290e810e72af69bd76c68232bac70a25.jpg)。我们在上一篇提到过一般的增强学习算法都可以由三大块构成,第一步橙色方块是我们生成很多样本,用于估计目标函数和梯度;第二步绿色方块用来估计收益![](img/30769aea11949ff87c45b397934c34c1.jpg),用于判断我们的策略有多好,非常简单,只需要一个加总;第三步蓝色方块需要我们搞清楚![](img/d98b7cab888cd63dce6ab9989df79b4c.jpg),求出梯度然后走一个梯度步。这样,我们就得到了一个最简单的策略梯度法 REINFORCE (Williams, 1992): + +1. 运行策略![](img/6406ca8c8101cbfa51992c6fd878ace5.jpg),抽取样本![](img/e1e7d3e6593a505cbd9aed9e2dec65c5.jpg); +2. 估计梯度![](img/2d0414d2df862214a8d1afde81ec8b1c.jpg); +3. 走一个梯度上升步![](img/290e810e72af69bd76c68232bac70a25.jpg)。 + +不幸的是,通常直接这么做效果不会很好,因此我们需要做很多工作让它能真正运行起来。但在优化这个算法之前,我们首先要解决之前的遗留问题,搞清楚![](img/1f086b51fd25f196185b6f742bb15cef.jpg)到底是什么。这个是根据策略分布不同而有差异的,譬如说之前我们所讲述的模仿学习之中,模仿学习也想学习一个策略![](img/753092e4f965d22839d8ceb952c7c3fb.jpg),从一个状态输出一个行动之类:假设我们只有两种操作,向左转或者向右转,那么策略就变成了一个向左或者向右的概率。 + +考虑一个人形机器人的控制问题。此时小人需要得到连续的控制变量,而不是离散的。假设我们的策略函数输出的是一个高斯分布,形如![](img/54e7160d1af273ab27e7ebf03bff3d30.jpg),我们的神经网络根据当前状态输出均值,而一个简单的情形,协方差矩阵可能是固定的。根据分布函数,我们有![](img/882a0f20f5c1072eea3e62ec94033100.jpg),形式非常简单;将它取梯度,得到![](img/e6a149e064a6abacdcabb76570f4c9bb.jpg)。在实践中,![](img/dc7d6cfed42818b77d33cfe1b7074bdd.jpg)是对神经网络取梯度,需要一次反向传播。而训练神经网络我们也是走一个梯度步,因此我们只需要在走梯度步的时候乘上权重![](img/21b586e0107fa5ed916a533c6d9ed2d6.jpg)就行。 + +我们回顾一下之前我们都做了些什么。我们用轨迹样本近似了目标函数的梯度![](img/e2f75542d12f8d56270d0634c5e621b7.jpg)。在普通的监督学习之中,我们可能会尝试使用极大似然估计,梯度是![](img/e31c86db029ec87f20b76e5f758f8de3.jpg)。可以发现策略梯度在做非常相似的事情,除了策略梯度法尝试对不同的样本进行加权,权重是收益函数之和。每个样本的收益可正可负,因此在行为上,极大似然估计梯度总是尝试去增加所有样本的出现概率,而策略梯度法则尝试去减少一些不好的样本的出现概率,增加其他样本的出现概率,属于一个趋利避害的试错过程的梯度上升法版本。在计算机程序上,这两者也是非常相似的:如果我们能有代码计算极大似然估计,那么它也可以稍作修改以执行策略梯度法。 + +如果我们的观测不完全,即只有部分观测信息,怎么办?在策略梯度法中,这不是个问题。我们可以得到基于观测的梯度![](img/1c36cc85264ff1a6406eb6de6d85e8d9.jpg),可以发现这个式子中完全没有用到 Markov 性。也就是说,我们可以直接在 POMDP 中使用策略梯度法,不需要任何的修改;但是在之后的诸如演员-评论家算法、Q 学习算法之类的,这个性质往往是不成立的。这是策略梯度法的一大优势。但即便如此,它不能保证你能得到一个运行得很好的策略,因为非 Markov 性可能导致真正运行得好的策略和之前的历史有关,但是它能在你的**策略簇中**找到一个不错的策略。如果你觉得历史还是非常重要的,那么可能使用一个 RNN 会好一些。 + +策略梯度法通常会有一些问题。第一个问题下一节会讲,第二个问题我们会在将来讨论怎么去缓解。 + +![](img/e8c8bc1d275d59049af46c9d54d40f10.jpg) + +第一个问题:在两个图中,x 轴代表轨迹,而 y 轴代表轨迹对应的收益。蓝色实线是我们选取策略的分布密度。我们从分布之中抽取了三个样本,在(a)图中,可以发现最左边的样本的收益是一个很大的负数,而右边两个都是很小的正数。我们想做的就是把我们的策略右移到右边的虚线,使得在坏的位置密度更低,好的位置密度更高。实际上,正负的数值对这个算法影响很大:两个小正数和一个大负数可能把步伐拉得比较大。而我们(b)图中,只是把收益都加上了一个很大的常数,收益之间的相对差不变。如果我们**把所有情况的收益都增减同一个常数**,我们可以把这个常数从这个期望中提出来,作为一个与参数无关的部分,因此**整个期望关于参数求梯度的结果是不发生变化的**。此时,策略梯度法就会想增加第一个样本的概率(行为发生了根本性变化),但更想增加后两个的概率。这个情况下,移动的步伐就小了很多,取而代之的是可能方差就增大了,变得更平缓了。这一点被称为“**高方差**”问题。一个更极端的情形是,有很好的样本,但是它的收益函数是 0(其他的样本收益为负数),那么如何动完全依赖于我现在的策略在什么位置。我们只需要把奖励函数整体上下移动,就可以完全改变策略梯度法的行为。这个问题主要是因为如果我们选取无数个样本的话,那么这些差异互相会被抵消掉;但是对有限个样本的选择会很有偏差,就会导致这样的问题:对于这样的高方差问题,当然增加样本总是能缓解的,但是增加样本也使得学习效率降低。 + +![](img/760f12bcd418f6afd1815df3ee070840.jpg) + +第二个问题:让我们考虑一个一维的连续状态和行动的增强学习问题。参数是![](img/206a9e0ac4413b94fc214ad070e155f9.jpg)。对数策略函数是一个高斯分布,由这两个参数确定,整个簇的形式是![](img/8d1af87454e638a1efc984d22e2a55ee.jpg),依赖于行动和均值之差的平方,其中均值是当前状态的![](img/a1c2f8d5b1226e67bdb44b12a6ddf18b.jpg)倍。收益函数![](img/1c5e017926041e9184016bf9fb765e7f.jpg),前一部分表明最终状态希望是 0,后一部分说明我们希望行动大小尽量小:这在机械中是很合理的,如果我们的行动是电动机指令的话,通常不希望让电动机运转过强。在最优控制领域,这是一个 LQR 问题,可以用解析方法求出最优解,也很容易分析。但是在策略梯度法中,有趣的是,因为收益函数希望行动尽量小,梯度法总会倾向于减小![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg)(见上图,蓝色箭头为梯度,总在降低![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg)的方向),用于减少很大的![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)的概率:因为概率来源于高斯分布,而高斯分布的支撑集非常大。事实上,更小的![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg),更倾向于让我们进一步减少![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg)。即便我们的梯度总是指向正确的方向,它在![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg)上的分量更长些:在![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg)很小时候,![](img/a1c2f8d5b1226e67bdb44b12a6ddf18b.jpg)分量的大小可以忽略不计了。因此一个结果是,我们会快速下降![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg),然而逐渐地![](img/a1c2f8d5b1226e67bdb44b12a6ddf18b.jpg)就不动了,所以最终得到一个正确结果的速度奇慢无比。这也导致了策略梯度法的收敛速度很慢,而且选择学习率也是一个很难的问题:如果因为收敛速度慢而使用了较大的步长,反而更快地进入了一个让![](img/a1c2f8d5b1226e67bdb44b12a6ddf18b.jpg)难以动弹的状况。 + +## 方差削减 + +第一种方法是使用**因果关系** (casuality)。回顾我们的梯度为![](img/2d0414d2df862214a8d1afde81ec8b1c.jpg)。因果关系指的是,在时间点![](img/2c15f0037e2f63521caf0e6105ff1518.jpg)的策略不能影响时间点![](img/fe0bd1bae1ec1cf967482fe4832b82b8.jpg)的收益。这个关系看起来很蠢,就像今天做的事情不会影响昨天已经发生的事情。而事实上我们可以用这个关系得到更好的估计量。我们把后者这个括号做进前面去,![](img/ae4cbcc5d33fcffcb6277e561e22589d.jpg)。从另一个角度看,我们根据概率的可加性有![](img/3335f0a5f65b72ebab969a718f05e003.jpg) ,其中![](img/c7f6bd1a3b2d128799342c0f91c3bed6.jpg),相当于是一个在当前时点截断的轨迹,因为![](img/654b00d1036ba7f7d93e02f57fc00a75.jpg)时刻的收益的概率分布之和之前有关而与之后无关。我们将双重求和号调整顺序,得到![](img/e0c667d5d0475f2e09bb0e327cd84dd9.jpg):正好是我们之前论述的,一个策略只影响从它之后的部分。我们把![](img/d63a1fb5f45b35e7ec3154e1776882a6.jpg)记作今后收益 (reward-to-go),也就是从这个时刻起的收益。这样做的一大好处就是,我们这样采样做,数值求和上减少了,方差也倾向于随之减少;更重要的是我们几乎没有理由不这么做,这么做基本上总是好的,即便是计算上实现起来稍微复杂了一点,但也只是一个从后往前加的后缀和的事情。 + +第二种有效的方法是**基准线** (baseline)。回到![](img/ec14592ebd45ea5c5655cdb5d9b5d87c.jpg),我们希望好的轨迹的收益函数是正的,而差的轨迹是负的。然而之前也提到了它对值非常敏感,如果收益函数增加或者减少一个常数,结果就会很不同。所以我们想做的,可能是不依赖于轨迹自身有多好,而是一条轨迹**比平均好多少**:这里的平均指的是我们平时通常情况的普遍收益。举个例子,平均可以是![](img/d57b0c63bcc7afdfbb65594a1f7e88e3.jpg),然后我们使用![](img/45b1d007686b1a4c63f8c50c931cad9a.jpg)。看起来是非常合理的,而且更重要的是在这里![](img/6872867a863714d15d9a0d64c20734ce.jpg)是某个常数的话,这样做总是对的。数学上,![](img/a42d988b6b24a26426f8a167a62e341a.jpg) 。其中第一个等号是把期望写成积分形式,第二个等号直接利用了我们之前的恒等关系![](img/897a9776a5b77a77dc7dcb21973ffe06.jpg),第三个利用了![](img/6872867a863714d15d9a0d64c20734ce.jpg)是常数和积分微分可交换的性质,第四个利用了对一个概率密度积分恒等于 1 的性质。因此我们减去一个常数的基准线,这样得到的估计总是在期望意义下无偏的。 + +当然,我们这么取平均得到一个基线常数不见得是最好的,但是实际效果却通常较好。为了降低方差,我们可以求出一个理论上最优的![](img/6872867a863714d15d9a0d64c20734ce.jpg)。回忆方差的表达式为![](img/fa7241c6ed298009d45863afd4f627eb.jpg)。而![](img/45b1d007686b1a4c63f8c50c931cad9a.jpg),其方差为: ![](img/850363bac3a6961f66fe6e82710fa519.jpg) ,而我们在前面已经证明了后面一块等价于![](img/27b811e4ecef0cfc80039536d63eb0c4.jpg),与![](img/6872867a863714d15d9a0d64c20734ce.jpg)是不相关的。我们将方差取微商取一阶最优性条件,令![](img/7b7db50b67a9f3940457d92c064b9fa5.jpg),得到 ![](img/669f989bd57e6b841845aa805003f7c1.jpg) ,其中第一项微分后为 0。要使该微商等于 0,则需要![](img/4ca00b5649296f9fa44ca3b022adf867.jpg),因此最优解![](img/406f5459773e0aad83b2dc7e2e7deee3.jpg)。本质上来说,它是一个关于概率梯度的加权平均,不同样本的权重不同是因为概率的梯度不同。而我们前面说的简单平均只是它的一个粗糙简化版本而已,也是有一些理论根据的。在实践中也没有发现很大的效果差异。 + +## 离线的策略梯度法 + +我们不难发现策略梯度法是一个在线 (on-policy) 算法,这是因为策略梯度![](img/ec14592ebd45ea5c5655cdb5d9b5d87c.jpg),求期望的时候必须是从当前的分布上采样才能有无偏性,而这就要求每次梯度更新之后就根据新分布全部重新采样:如果策略是一个非常复杂的神经网络,每次迭代可能只更新一点点,但也要求把之前的样本全都扔了然后重新采样,对数据的利用率是非常低的。在前面也提到了,使用策略梯度法选择学习率可能是很难的,收敛速度也可以非常低。 + +如果我们没有从最新的![](img/c507087331a2c89503c821123e63eb5b.jpg)中得到的样本呢?虽然我们还是要求去估计期望,但是我们可以考虑用其他分布去估计它。假设我们有一堆从分布![](img/353b78416fee6234461a601efba6493b.jpg)中抽取出来的数据,并知道对应的轨迹和收益,那我们就可以使用**重要性抽样** (importance sampling) 的方法。 + +> 重要性抽样的原理是![](img/d21881d2bfbccef142f0130efba58d41.jpg) ,给了我们用其他分布的数据进行无偏估计的方法,但前面需要乘上一块东西,算是重新加个权重。 + +换到我们的目标函数上,则![](img/38e310fae5def3d1c34ef3ca75e8f984.jpg)。这里我们需要具体分析这个权重是什么。由于![](img/4ae3bb9b9987b4e735031eea8f5168e4.jpg), ![](img/30b354275bd10520322afea72e6fb923.jpg),同样最难处理的初始分布和转移概率也被消掉了:我们依然保持了无需知道这些繁琐内容的性质。在实践上可能会有一些问题,但是至少在理论上还是无偏的:只要给定足够多的样本就行。 + +现在我们要求出目标函数的梯度了。使用重要性抽样的技术,![](img/57cdebc7853d35d4b474842b9fed329e.jpg),可以发现与![](img/e7cda9ccf679bc0386ba6ecd89a6e169.jpg)有关的部分仅仅是![](img/da6913442777f3468e49c7b2ef07cb2b.jpg),因此将目标函数求梯度得![](img/27bce7b85d947994db6859d84a33c818.jpg)。继续利用恒等式![](img/897a9776a5b77a77dc7dcb21973ffe06.jpg),得到![](img/3de6a7cbcdc8e8356ad0ed287a8a147b.jpg)。我们将其展开,![](img/963506d41c344f1b20058f6306306d3b.jpg) 这个和之前还是比较相似的,只是前面加了一块权重。同样,之前所说的因果关系可以加到这里来,类似的推导过程可以得到![](img/2ed9d2f4a935e221c957c6e1179fcff1.jpg) ,可以理解为概率这块到此时为止,而收益从此时开始看起。 + +那么这么做的问题主要在哪里呢?我们不难看出中间这块连乘部分的数值,是关于![](img/5a047a5ca04e45726dba21b8302977da.jpg)指数增长的,如果每个数都略小于 1,而时间轴非常长,这个乘积最终将非常接近于 0,这样梯度效果就会很差了。 + +在课程的后面会具体介绍怎么解决,而这里给一个预览。我们把目标函数重写为![](img/79c0bf4a3efd3b6d5847fbdcc4418ec6.jpg),写成一个边际分布下的期望求和的形式。根据我们的决策过程,把期望进一步展开成![](img/98303e899013c0b251c1161a19cdaf3e.jpg)。 这样,我们就可以在两个层面上做重要性抽样了:![](img/c7b555810963a6943b79c78ddf5dc30d.jpg)。这样就不再有指数乘积问题,但是同时又带来了一个新的需要知道![](img/8fc730f99c88767766c281961cb0beaa.jpg)这样给定策略下某个时刻在某个状态的概率这样的大难题。一个近似的处理方式是我们可以把![](img/2b7332f632a1ea54a8d1867890531282.jpg)这块弄掉,当然这样做的话理论上就不再无偏了,但是事实上当两个策略足够接近的话,可以说明这个比值是不重要的:在很多问题的实践上是好的,而且有一定的理论保证。 + +## 用自动差分器做策略梯度法 + +我们现在想找到一个比较简单的方法去实现策略梯度法,以利用上 TensorFlow 或者 PyTorch 等自动差分器。回顾梯度![](img/b118501b402416cf442e1f8a1b31bebb.jpg),我们不想显式地去计算这些![](img/d98b7cab888cd63dce6ab9989df79b4c.jpg),然后再做乘法丢回去。我们需要一个图结构,可以用监督学习,它的极大似然的梯度正好是我们的策略梯度,那样就完美解决了。考虑到极大似然估计的目标函数为![](img/1976b0af2d5bc7a171653659b34d9921.jpg),梯度为![](img/7a19b211f01720564e6cf4f70d3d5cff.jpg)。我们要把![](img/040240c6cd77c1b6762a16c341a83d7c.jpg)给放进去。一个特性是,![](img/040240c6cd77c1b6762a16c341a83d7c.jpg)本身是不依赖于参数的,我们所需要做的一切就是做一个虚拟的损失函数,加权损失函数![](img/820bd64eefeb946b7b3c5d8a4f3c3f96.jpg),其中权重就是![](img/040240c6cd77c1b6762a16c341a83d7c.jpg),然后就用自动差分器求梯度就行了。当然,在线方法要求我们每一个梯度步重新采样,所以我们不能使用 SGD。 + +Levine 教授给出了 TensorFlow 样式的代码例子,给出了两者的区别(状态和行动认为是离散的,所以是 one-hot 编码,因此输入是二维张量): + +**最大似然估计:** + +``` +# Given: +# actions -(N*T) x Da tensor of actions +# states -(N*T) x Ds tensor of states +# Build the graph: +logits = policy.predictions(states) # This should return (N*T) x Da tensor of action logits +negative_likelihoods = tf.nn.softmax_cross_entropy_with_logits(labels=actions, logits=logits) +loss = tf.reduce_mean(negative_likelihoods) +gradients = loss.gradients(loss, variables) +``` + +**策略梯度法:** + +``` +# Given: +# actions -(N*T) x Da tensor of actions +# states -(N*T) x Ds tensor of states +# q_values – (N*T) x 1 tensor of estimated state-action values +# Build the graph: +logits = policy.predictions(states) # This should return (N*T) x Da tensor of action logits +negative_likelihoods = tf.nn.softmax_cross_entropy_with_logits(labels=actions, logits=logits) +weighted_negative_likelihoods = tf.multiply(negative_likelihoods, q_values) +loss = tf.reduce_mean(weighted_negative_likelihoods) +gradients = loss.gradients(loss, variables) +``` + +可以发现差别还是很小的,只是加了一个加权的过程。 + +在实践中,我们需要记住梯度的方差是非常大的,处理监督学习的方法不见得在这里适用,而且噪音非常大。一个比较实际的解决方法是使用很大的批量数据来降低方差。调整学习率是很有挑战性的,而且可能会需要很多时间来做这件事情。使用自适应的步长如 ADAM 等方法通常还可以。在之后的课程中会讲一些针对策略梯度法的步长调整方法。 + +Levine and Koltun (2013) 训练模拟机器人,使用重要性抽样的方法用演示例子去训练神经网络代表的策略。一点启发是抽样的分布不见得一定要是一个神经网络分布,也可以是其他给定数据的分布:这样如果那个分布好的话,可以减少训练所需要的时间,可以说是一个热启动。Schulman et al. (2015) 使用信赖域策略优化算法 (TRPO) 训练模拟机器人,使用自然梯度,并使用了自动调节步长的方法,可以做出离散和连续的行动,也可以玩 Atari 游戏。可以找到相关代码 (Duan et al., 2016, [https://arxiv.org/abs/1604.06778](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1604.06778), [rll/rllab](https://link.zhihu.com/?target=https%3A//github.com/rll/rllab))。这个方法适用范围比较广,如果不关注样本效率的话,通常较容易用于新的问题。 \ No newline at end of file diff --git a/docs/ucb-cs294-112-notes-zh/5.md b/docs/ucb-cs294-112-notes-zh/5.md new file mode 100644 index 0000000000000000000000000000000000000000..41f52b778a5269d566ecbf3a269c5b1bd3bd2c25 --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/5.md @@ -0,0 +1,87 @@ +# (5) 演员-评论家算法 + +> 作者:[谢天](https://www.zhihu.com/people/xie-tian-55-77) +> +> 来源:[POST 馆](https://zhuanlan.zhihu.com/c_150977189) + +## 策略梯度法与值函数的结合 + +在上一篇中,我们已经了解策略梯度法的本质是找出目标函数对策略的梯度的一个估计量![](img/b118501b402416cf442e1f8a1b31bebb.jpg),其中**今后收益** (reward-to-go)![](img/d63a1fb5f45b35e7ec3154e1776882a6.jpg),然后将策略沿着这个梯度方向走一步。注意到使用今后收益是由**因果关系** (casuality) 所得到的。 + +让我们把视线聚集在![](img/040240c6cd77c1b6762a16c341a83d7c.jpg),注意到![](img/040240c6cd77c1b6762a16c341a83d7c.jpg)其实是在状态![](img/45b65e7000ee1796b17b2aef5e7c9e86.jpg)下选取行动![](img/860a4117021ad87e7834aed6b0baadbb.jpg)之后的期望收益的估计量。这里使用字母 Q 绝不是偶然的,因为我们显然已经发现了它与我们在[第三讲](https://zhuanlan.zhihu.com/p/32598322)中所提到的 Q 函数有非常密切的关系。如果我们要得到其估计量,可以求出我们模拟出来的一条轨迹的收益的后面一段也就是![](img/040240c6cd77c1b6762a16c341a83d7c.jpg)。但是事实上我们在之前也说过,在同一个分布中抽取的轨迹可能也是千差万别的。用 MDP 的语言解释,可能是因为我们在之后根据策略函数分布随机选择了不同的动作,也有可能是选择了同一个动作但是由于系统环境的随机性导致下一个状态不同。一句题外话是,自从高三暑假拿到复旦本科录取通知书,上面有一句话我一直都很欣赏,“_ 一个真实的现在可以开垦一万个美丽的未来 _”,大抵如此:从一个起点出发的轨迹从来都不见得是殊途同归的,也很难用一个学生的人生去衡量整个学校的学生。 + +结果就是,真实的期望收益远远比根据策略做出行动的与系统互动的结果要复杂,无数的未来情况需要被平均在一起去得到真实的今后收益,本质上是一个积分:![](img/6154d98e71a3d40c8bfa4debd428a6ee.jpg)。也就是说,真正的期望今后收益应该是![](img/324e73dd8b2cc22ed0f79fcbc7c91765.jpg)。一旦我们知道期望今后收益,那么我们可以用它来替代![](img/040240c6cd77c1b6762a16c341a83d7c.jpg),即如果我们能用某种方式得到 Q 函数的值,那么![](img/5757ef402bd37ab3078cfca19995680a.jpg)将会成为一个更好的估计量。当然我们可以说![](img/040240c6cd77c1b6762a16c341a83d7c.jpg)是一个无偏估计,但这个估计其实只用了仅仅一个样本,会导致估计的方差非常大;如果你有无限个样本,那么方差就会比较低了。如果我们能把真实的 Q 函数值代入进去的话,那么我们就可以期望策略梯度有一个较低的方差。这也正好是我们在上一篇中提到的策略梯度法的最大瓶颈之一是高方差,解决这一瓶颈问题,我们就倾向于认为可以收敛到一个更好的解,或者使用较大的学习率(也就是增加单步步长),从而收敛得更快。 + +同样,我们可以引入基准线技术。我们选择的一个比较好的基准线是同样在第三讲中出现的值函数![](img/aa2250bf13e35808e86f21e9a58e81ab.jpg),也就是在给定策略下 Q 函数的期望。之所以采用值函数,是因为这和我们在[上一篇](https://zhuanlan.zhihu.com/p/32652178)中所提到的平均情况不谋而合:之前认为一个不错的基准线是![](img/bfa4acdbafb4d1c0b44b3f8fa15dc71c.jpg),而这里也正好是对应的期望。此时我们的估计量就变成了![](img/5fbf4d41c8c68c52ba69ee1f4eec9a8f.jpg),其中 + +> **优势函数** (advantage function) ![](img/37af708524d86ca2abf43a10d1252ae5.jpg),表现了给定策略,在状态![](img/c4af7d8e59380f621826e58208e79448.jpg)下,采用了行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)能比该策略的平均情况期望今后收益多出多少。 + +根据定义,如果我们对优势函数关于行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)取期望,结果是 0。这样的“杠杆”也正是我们想要的,使得更好的行动可能性更大,而规避更差的行动。同样的,如果我们能对优势函数估计得越好,那么策略梯度的方差就可以越小。回顾我们之前的![](img/d63a1fb5f45b35e7ec3154e1776882a6.jpg)是一个无偏估计,但是它的方差相当大;而我们考虑要做的是牺牲一点点无偏性,引入一个神经网络(神经网络总不是完美的),但期望它能显著地降低方差。这个偏差-方差的权衡在统计中是非常常见的。 + +## 演员-评论家算法 + +回到我们的一般步骤中,我们来看它与策略梯度法在第一步生成样本和第三步策略改进上并没有显著区别,主要区别在于第二步:我们现在尝试去做的是去拟合一个值函数:![](img/b1ebf6dd4752eb966ac00bad59fea571.jpg)三者之一,以期能得到一个更好的梯度估计。我们真正从“估计收益”变为了“拟合模型”。 + +![](img/b1ebf6dd4752eb966ac00bad59fea571.jpg)三者都是紧密相关的,那么我们到底去拟合哪个呢?一个非常自然的想法是去拟合![](img/871cc7713efd90ccf8d00f81365ed2e1.jpg),因为这是我们在梯度表达式中直接要用到的东西。我们可以生成一些数据,然后使用监督学习方法。这里有一个小技巧:我们发现 Q 函数![](img/2276fcae497e3c99b0b2535f978cbe30.jpg)取决于状态和行动两个维度,因此输入是对应两个空间的笛卡尔积。但是维度越大,同样的样本数估计的方差越大。根据 Q 函数和值函数的关系,![](img/0a911e0d8f373efff4ded9620fb6ec31.jpg) ,因为在我们的问题结构中,给定当期的状态和行动,当期的收益就是确定的了,可以把当期的收益提出来。而后边那块求和项其实就是值函数的期望![](img/4248247e0cde69e96da5057248205b9c.jpg)。如果我们愿意做一点近似,用轨迹样本来估计这个期望——此时不是使用整条轨迹,而仅仅是看一步以后的状态,那么我们的 Q 函数可以近似为![](img/d0aec79c2adad566037f4045c697fe60.jpg)。与此同时,优势函数也可以被近似为![](img/c7777031d90a084fa917ff08dbafe1f7.jpg)。这么一来,其实我们只要去拟合值函数 V 就好,其他的都可以被近似表示,这样拟合神经网络的维度的输入空间就只需要是状态空间了:要做的事情是去训练一个神经网络的参数![](img/b4591b72892f13da37e97ae1e729cd99.jpg),使得输入为状态![](img/33c815432ff85d6f9342f1abc64af657.jpg),输出给定策略下值函数的估计量![](img/c1fd392e146369cc310919c3d297d240.jpg)。因为实用性和便利性,绝大多数的演员-评论家算法都是去**拟合值函数 V**。 + +给定一个策略去拟合这样一个神经网络的过程我们称为**策略评估** (Policy Evaluation)。这个步骤不尝试去改进策略,它只是想从任意给定的状态出发,评估这个策略有多好。由于值函数表达式为![](img/e7de5c7e5ccab3e8ab5188f3e01f4a0c.jpg),目标函数![](img/8587778591bf32b7533d57b49aba0083.jpg)只是值函数的一个期望而已,所以拟合值函数 V 同时也为我们带来了目标函数。那么具体怎么做策略评估呢?与策略梯度法相似,我们依然使用蒙特卡洛方法,进行一次轨迹采样以后来近似![](img/444a0f634aaa609908e1e2a1c1913827.jpg);当然如果我们可以重启模拟器的话,最好能做多次轨迹采样后得到![](img/2d8583076ed40b6a726822d93935d86d.jpg),但是前者其实也还是不错的。 + +神经网络会有一些偏倚。因为可能我们从比较接近的两个状态出发做出的两条轨迹,结果上可能会有很大的偏倚;而对于神经网络来说,相似的输入基本上也就对应了相似的输出。毕竟神经网络只是一个函数的逼近器而已,对于确定性模型,它的输出是良定的 (well-defined),意味着对于同一个输入对应同一个输出。神经网络拟合很多样本,将其综合起来得到一个低方差的估计:从相似的出发点,一条轨迹极好,另一条极不好,神经网络会认为这是不合理的,并将其平均处理。如果样本越多,函数将近似得越好,结果就越好。但是譬如在两个相似状态之间存在一个断崖,那么答案就会出现问题,但是不管怎么说估计的方差总是小的。 + +训练神经网络的方式非常传统,就是收集一些训练数据![](img/c9dda0450b63ed0ca3a365456c5ee082.jpg),然后最小化诸如最小二乘的损失函数![](img/e68c339e3e67897047b4d26d15f669dc.jpg)。这是一个非常通常的损失函数,在最优控制中这个损失函数有一些概率解释;当然也可以用 Huber 损失函数,效果也是很好的。我们尝试去将其做得更好,意思是进一步降低方差。注意到在理想化的完美情况下,我们的目标是![](img/1f0feb004efc9c30bb164e3574da7fff.jpg)。第一个约等号和前面 Q 函数时候的技巧一致,用一步轨迹做近似;第二个约等号是将值函数 V 用神经网络做近似。这某种意义是一个自助方法 (bootstrap),如果神经网络相对于直接将轨迹的后半段加和的效果更好,那么就应该这样做;虽然这样近似使得估计有偏,但是我们期待函数估计的方差更小。看起来好像这样训练神经网络就是从里面拿出数据再放回去,其实不然,我们给它加入了些许知识,降低了其方差。进一步将这个一步估计泛化,我们可以做两步、甚至多步的估计,本质上是两者的折中版本。Levine 教授也提到了,训练神经网络的初值会影响训练行为,如 Q 学习中设置一部分初始的值函数非常大,来使得初始的更希望去试探这块区域。在演员评论家算法中,初值通常设置得比较小,这是为稳定性着想。 + +策略评估的两个游戏相关例子。Tesauro (1992) 使用增强学习在西洋双陆棋上取得了成功,做了一个 TD-Gammon 软件:当然事实上它只是一个值函数方法而不是演员-评论家算法。它的收益函数是游戏结果,值函数是给定局面状态,输出期望游戏结果。Silver et al. (2016) 给出了举世闻名的 AlphaGo,使用了蒙特卡洛树搜索 (MCTS)、值函数拟合和策略梯度等方法,事实上收益函数和值函数的想法和前者还是接近的,不过用了一些卷积神经网络。在这些例子中,策略评估的解释是相当直观的。 + +这里给出一个比较简单的演员-评论家算法,称为**批量演员-评论家算法** (batch actor-critic algorithm),与策略梯度法的结构非常相近: + +1. 运行机器人,根据策略![](img/6406ca8c8101cbfa51992c6fd878ace5.jpg)得到一些样本![](img/08af9511d0a24b663367639a38f2c07d.jpg),包括所处状态、行动和收益。 +2. 使用样本收益之和拟合![](img/efeeadbb1751057ffcd45eb68a1869a4.jpg)。这一步样本可以做蒙特卡洛,也可以做自助法;拟合可以用最小二乘的目标函数。 +3. 评估优势函数![](img/7057d26374fe008e57bc10fdc05e2c51.jpg)。 +4. 放入策略梯度函数![](img/65850e910191df7653f3c0f250f5ec84.jpg)。 +5. 走一个梯度步![](img/c4ccd195fb894683bdc96a78d5160005.jpg)。 + +## 贴现因子 + +如果说机器人拼乐高的问题是有终点的 (episodic),而训练小人行走,我们通常希望它能一直走下去 (continuous / cyclical)。这种无限期的问题会使得目标函数值越来越大。在上面我们使用了![](img/fa8cd8783384807e0a4015b370652001.jpg)作为估计,然后用![](img/963dff8ca17a1ccf8a9edcd338e87112.jpg)去训练![](img/c2a0f0e531e7612f38b821566243bd79.jpg)。那么对于无限期的问题,![](img/4733ae7a273a6fc512fd278d46cb99e0.jpg)可能会在训练中逐渐增加(减少),在很多例子中都能达到无穷,这样的情况就很麻烦了。为了解决这个问题,接下来我们要引入**贴现因子** (discount factor) 的概念,这个概念在金融、经济等领域相当常见:一般认为一笔钱在眼前的价值会比未来的价值要高,也可以与金钱的通货膨胀联系起来。因此,在建立模型时,我们也希望收益发生时间更接近眼前。我们的方法是,加入一个小小的贴现因子![](img/0792b1972415a26e7015bc70d7d59b7c.jpg),然后修改![](img/334ef0b6d8be87a217273cb772219b6c.jpg)。在实际应用中贴现因子设置成 0.99 效果不错。 + +实际上,引入了![](img/cdab9437b701fd21fb3294cfba7c4bc2.jpg)并不影响整个 MDP 框架,只是稍许改变了转移概率函数。我们可以将这个贴现因子放进 MDP 的架构进行解释。以离散问题为例,如原来的转移概率为![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg),我们在状态集合中新增一个死亡状态 (death state),本质上是一个吸收状态,且此后收益一直为 0(或者理解为游戏立即结束)。我们构建新的转移概率,![](img/18dc8ddcdf5b331ae5281ae4bf0fa7f6.jpg),且![](img/7c649d86e23c73b81dbc7fd5f9485373.jpg)。这也就是说在任意情况下,都有![](img/213f51efeef2728739f668784aee324f.jpg)的概率游戏结束,此后不收集任何收益。 + +抛开演员-评论家算法,现在我们讨论如何将贴现因子引入到策略梯度法中,稍稍有些复杂。对于蒙特卡洛策略梯度,我们有以下两种选项。这两者其实都可以有演员-评论家算法版本,但首先先写成策略梯度法形式。 + +第一种选择是我们直接利用因果关系后的式子,对后半部分进行贴现得到![](img/0625450a0e0592be0cc5eab8234d8a03.jpg),如果我们式子中加入了评论家的话就变成了![](img/356c92f362f5be02499925d26079485b.jpg);第二种选择是我们回到一开始的策略梯度式子,进行贴现![](img/85552bb5c41e6e0594b9752dee84253d.jpg)。这两者其实是不相等的,可以发现将第二种选择进行重组后变成了 ![](img/6216a8742291e8adb9510b3ebad5dbb9.jpg) ,多出了一项对梯度进行![](img/9a09921b172482229e38e3158a8b3c92.jpg)贴现的系数。主要的区别是,第二种选择的做法使得越往后的步骤影响力越小。但是看起来很奇怪,我们一开始使用正确的策略梯度法,但是如果使用第二种选择进行贴现的话,梯度也被贴现了。事实上,如果你想从初始时间点 1 开始进行贴现,第二种选择的表达式是正确的;但是一般来说没人想这么做,我们一般还是采用第一种选择。原因是,譬如我们想运行一个小机器人无限长时间,我们一般不关注它在第一个时间点是不是速度很快,而是在每一个时间点是否很快。我们采用第一种选择,是想去**近似一个无限时间长的平均收益,且使用贴现因子**。这样就可以对无限期问题有一个总和的界。关于这个理论是比较复杂的,可以参考 Thomas (2014) 发表在 ICML 上的文章。 + +现在我们把贴现因子加入到演员-评论家算法。在之前的批量演员-评论家算法中,只需要把第三步从![](img/7057d26374fe008e57bc10fdc05e2c51.jpg)变为![](img/850c3827d5f51de9cd19f123c8470891.jpg)就可以了。注意贴现因子使得对于无限长问题也有一个上界。我们在这里同样给出一个**在线的演员-评论家算法** (online actor-critic algorithm):前者与策略梯度法相似,是根据策略生成一大堆轨迹,然后做一个很大的计算更新,再重新生成策略。在线算法可以在每一步收集样本之后,就立即更新评论家![](img/4733ae7a273a6fc512fd278d46cb99e0.jpg)和策略。 + +1. 在线运行机器人,根据策略执行行动![](img/ef7ab5eba60ecc20526c57baebb61929.jpg),得到一个状态转移样本![](img/ac3968d237b497ed865d7ad806732bd0.jpg),即从一个状态出发执行某行动到哪个新的状态,单步收益多少。 +2. 使用评论家的结果![](img/6a9b5e1e716c27b1ea3ffa15b0766395.jpg)来更新![](img/efeeadbb1751057ffcd45eb68a1869a4.jpg)。 +3. 评估优势函数![](img/9770ba37cbd9f993589d809e3436491e.jpg)。 +4. 放入策略梯度函数![](img/22264eb468afa38ffceba3788f9c857b.jpg)。 +5. 走一个梯度步![](img/c4ccd195fb894683bdc96a78d5160005.jpg)。 + +可以发现,第二步我们只用一个例子去更新。我们这么急迫的原因是,如果我们没有评论家,我们就不知道这个结果到底应该是什么。如果我们有了好的评论家,那么我们就可以做这样的自助法了。第三步只需要算一个值就行了,第四步也是单样本的梯度。 + +## 实现细节 + +现在我们来研究批量和在线的演员-评论家算法的实现细节。首先第一点是算法中的神经网络结构设计。相对于之前的模型我们只有一个从状态![](img/33c815432ff85d6f9342f1abc64af657.jpg)映射到演员策略![](img/6406ca8c8101cbfa51992c6fd878ace5.jpg)的神经网络,在这里我们还需要去近似评论家函数,因此会有一个从![](img/33c815432ff85d6f9342f1abc64af657.jpg)映射到![](img/efeeadbb1751057ffcd45eb68a1869a4.jpg)的神经网络。一个非常直观的做法是,我们可以将两个网络分别训练,成为两个独立的网络。这样做法的主要好处是简单而稳定,也是在一开始上手的时候非常建议使用的。但是一个很大的不足是,在演员和评论家之间并没有建立起共享的特征,譬如如果特征是非常高维的图像,那么如果在图像的低级别特征(也就是经过多层卷积)进行共享还是有意义的。因此一个替代的解决方案是使用同一个输入,构建一个同时输出演员策略和评论家函数的输出。这在网络特别大的时候更有效,但是缺点在于训练起来可能会比较恶心,因为会有两个不同的梯度(策略梯度和回归梯度)往不同的方向推动共享的参数,数据类型也不太一样,因此让这个网络稳定下来需要很多技巧,如初始化数值和学习率的选择。Levine 教授的建议是,如果模拟器(如 Atari 模拟器和 MuJoCo)很快的话,不妨使用双网络结构,这样比较容易。 + +![](img/3a73bab0c6c55d51a7173fff12f29829.jpg) + +在上一节的末尾我们提到了在线演员-评论家算法,其中第四步只用一个样本去估计梯度,第二步也只用一个样本去更新评论家函数。这样做多少是有点困难的,因为方差会相当高。问题主要出在它依然是一个在线 (on-policy) 算法,在线意味着在第五步更新![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)之后,所有的样本需要推倒重来。如果我们能做出一个批量的样本,那么效果可能会明显变好。一个方法是我们尽量少去更新策略,将这个算法弄成拟在线 (quasi-online) 的形式,做多步之后再去更新策略。如果我们可以假设样本可以由多个智能体(多辆汽车,多个机器人等)来收集的话,一个更好的方法是并行训练,如下图。第一种是采用左边图形的**同步法** (synchronized),多个智能体各走一步得到训练数据,用样本数据去计算梯度,先完成的需要等待(因此是一个同步点);然后用多个智能体的梯度加总起来更新演员策略参数网络,大家再去根据新网络执行下一步。每次可以是不同的状态,不同的行动,然后到不同的下一个状态,但这都是不相干的:每次采样完毕后可以继续运行,可以重启,也可以其他操作。一种更先进的方法是**异步法 ** (asynchronous),基本上就是移除这些同步点,每个智能体完成操作以后就去用自己的梯度去更新中央服务器参数,中央服务器积累了一定的步数,就把更新信息发送回所有的智能体。有点像闭着眼走路,但是实际上运行得不错。移除同步点后通常实现简单,更快,基本上哪儿都好;但希望模拟本身要非常快。 + +![](img/3849fe5e6780265cb8b31ea0d8f04624.jpg) + +我们进一步想看基准线方法如何更好地应用于演员-评论家方法。对于演员-评论家算法,我们的策略梯度估计为![](img/356c92f362f5be02499925d26079485b.jpg)。这个方法的主要优点是我们采用了评论家函数,因此希望有一个更小的方差;然而这个估计并不是无偏的,因为评论家函数总不能被完美拟合;而且在训练的前期评论家函数通常非常不准确,因此不管方差有多小因为评论家函数的无意义导致怎么都不会得到一个很好的值。另一个极端是策略梯度法完全的蒙特卡洛抽样,![](img/3a573d2fab49b547c4653a318c6cb3e6.jpg),其中![](img/6872867a863714d15d9a0d64c20734ce.jpg)是任意常数。这个做法的主要是之前我们已经证明了的无偏性,也提到了主要缺点是单样本估计的极高方差使得本身并不怎么有意义。这边评论家函数的另一种正确用法是,将评论家函数(根据当前状态的)作为基准线![](img/6872867a863714d15d9a0d64c20734ce.jpg),从而得到![](img/2a3a44e4fb4e9ae6125b6c30cfdfc50d.jpg)。与之前的常数不同,这个基准线是依赖于状态的;但是这样做依然是无偏的(类似之前的推导展开),而且事实上改为任何只与![](img/45b65e7000ee1796b17b2aef5e7c9e86.jpg)相关的函数都是无偏的。因此无偏性得到了保留,但是如果基准线接近真实收益,那么方差就会大大降低。依赖于状态的基准线能更敏感地解决问题,比一个常数的降方差功效更好。 + +我们新引入了一个依赖状态的基准线,那么我们现在想在此基础上进一步引入行动。考虑优势函数![](img/37af708524d86ca2abf43a10d1252ae5.jpg)。它的一种估计是![](img/76396378a118075e0a7e1ea7f0cf634c.jpg),显然它是无偏的,但是因为这是单样本估计所以有高方差的问题;然而如果我们使用![](img/a6f40c9f924d4799d083333e94fd43d7.jpg)来作为根据,如果评论家函数是正确的那么它的期望将达到 0 是非常好的,但是这个估计根本就不正确。那么有没有补偿方法呢?我们看这样一个结构: ![](img/e8ede47aec1edc50f072c552b6d1e427.jpg) ,虽然前面一项本身不正确,但是我们在后面加入了一个修正项使得其无偏:如果我们能用一个办法来评估第二项(根据 Q 的结构不同,可能有一些结构可以以解析形式表达,如策略是高斯的,Q 函数是二次的,那么这个结构就是可以在没有样本的情况下得到评估的,但是是否有这样的结构还是很需要运气),这个无偏估计就可以用。这样的用 Q 函数作为评论家的相关内容 (Q-Prop, Gu et al., 2016) 会在后续课程中更多提到。因此,我们得到的启发是,基于状态的基准线是无偏的,基于行动的基准线是有偏的,但是偏差有可能可以通过一个校正项补救回来。 + +在之前我们适用的演员-评论家算法的估计都是一步的,即![](img/6205cdeb5570e0f41234db16faacbb81.jpg)。下标 C 的意思指的是评论家 Critic。这个估计的优点主要在于方差较低,但是缺点也很明显,如果值函数是错的的话,那么就会引起很大的偏差(当然肯定总是错的)。另一个极端就是纯粹的蒙特卡洛而不使用评论家,![](img/ed9b611a03efec2fbf8a3c1c730de705.jpg)。我们也知道了它是一个无偏估计,但这样的单样本估计的方差非常高。现在我们考虑一个方法,中和两者的优缺点,得到一个折中方案。一种方法是对两者进行混合,如果发现方差或者偏差过高,那么就提高或者降低组合系数。另一个是,我们发现由于贴现因子的作用,这样指数下降的函数,随着时间往后推移,收益的贡献比例将非常低。 + +![](img/684cadc604f93609aa2aa7ab4bde711f.jpg) + +![](img/d049a2c2e2a1f50b6da4ea25bee478b1.jpg) + +在上图,从一个状态出发,不同的轨迹的效果随着时间后移而渐行渐远,因此是一个从小方差到大方差的过程,贡献逐渐下降而方差逐渐上升。单个样本很容易被淹没于未来轨迹的汪洋大海之中,遥远的未来的可能性如此之多,如果我们看 50 年以后会怎么样基本上是做白日梦。我们要做的是在轨迹上在方差变得太大前切一条线,因为后面的步骤可能性太多,效用实在太低;而我们用评论家函数 V 去替代后面的部分,作为一个平均情况:![](img/b4b0b321dbb9a9a7ea64b932895b1632.jpg)。这样的表达式允许我们通过调整![](img/493731e423d5db62086d0b8705dda0c8.jpg)来控制偏差方差的权衡,通常选择一个大于 1 的值如 4、5 会运行得较好。这也称为![](img/493731e423d5db62086d0b8705dda0c8.jpg)步收益。 + +Schulman et al. (2016) 提出了**广义优势估计** (Generalized Advantage Estimation, GAE)。本质上是![](img/493731e423d5db62086d0b8705dda0c8.jpg)步收益的推广。这种方法不再选择一个单一的步数,而是对所有的步数进行一个加权平均,![](img/5fa5b3d592b7a7fed873a721e83c613e.jpg)。其中![](img/a5d888208b026f3597f6e71a9acf768c.jpg)是权重。现在的一个重要问题是如何选择权重。我们希望降低方差,因此一种比较合理的方法是让权重也指数下降,即![](img/132ddea60fe305e88a270e307a3b3ac0.jpg),其中![](img/4b02744dcdc25bdb9348ddac5c193439.jpg) 是一个底数参数,权重加和为 1。代入之后经过整理,我们可以得到![](img/7e6fd93e433783cf818e9656f0d38d52.jpg),其中![](img/f9e3ceebceb29defb521d469fd423e89.jpg)是一个类似演员-评论家的东西。这个方法说明了贴现因子在里面扮演的新角色,和之前非常不同。![](img/5e8df2ba7e47a784c714d176ed8bbb7a.jpg)非常像一个贴现因子,如果它比较小,那么我们将在很早期就切断,偏差较大方差较小;反之则较后切断,偏差较小方差较大。因此从另一种意义上解读,贴现因子意味着方差降低。 + +演员-评论家算法也有很多应用。在前面提到的 Schulman et al. (2016) 使用 GAE 估计量来进行模拟机器人的训练,用的是批量演员-评论家算法(因为模拟器中样本容易获取)。Mnih et al. (2016) 使用在线演员-评论家算法训练三维迷宫导航问题,采用了异步并行的技术,使用了 4 步收益,它的演员策略网络和评论家策略建立在同一个神经网络之内(因为输入是像素图像)。 \ No newline at end of file diff --git a/docs/ucb-cs294-112-notes-zh/6.md b/docs/ucb-cs294-112-notes-zh/6.md new file mode 100644 index 0000000000000000000000000000000000000000..bccb3fd8c9a13b75ff74ea92e6e96468f15c6cf5 --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/6.md @@ -0,0 +1,81 @@ +# (6) 基于值函数的方法 + +> 作者:[谢天](https://www.zhihu.com/people/xie-tian-55-77) +> +> 来源:[POST 馆](https://zhuanlan.zhihu.com/c_150977189) + +## 动态规划与值函数的拟合 + +在上一讲的演员-评论家算法中,本质上我们已经把在某种策略下的值函数(这里的值函数是广义的,包括 V、Q、A 等)用到增强学习的算法里面去了,形成一个策略-值函数的交融算法。而在这一篇中,我们尝试去构造一个没有“演员”的“评论家”,也就是纯粹的值函数方法。我们在之前的学习中也了解到值函数的厉害之处,它自身包含了非常多的信息。 + +我们在之前的两篇中分别介绍了策略梯度法和演员-评论家算法,它们的特点本质上都是寻找策略梯度,而只是演员-评论家算法使用某种值函数来试图给出策略梯度的更好估计。然而策略梯度通常有非常高的方差,要把它弄好需要花费很大的努力。那么我们可能会考虑一个问题:**强化学习能否彻底抛开策略梯度这一架构?** + +回忆优势函数![](img/37af708524d86ca2abf43a10d1252ae5.jpg),指的是给定策略,在状态![](img/c4af7d8e59380f621826e58208e79448.jpg)下,采用了行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)能比该策略的平均情况期望今后收益多出多少。我们在演员-评论家算法里面花了很大力气去估计这个东西。假设我们在某个策略下已经知道这个函数,那么意义是,如果我们在状态![](img/c4af7d8e59380f621826e58208e79448.jpg)下执行![](img/c644be55e3a98173fdc5353db44cf839.jpg),也就是根据优势函数得到一个当前最好的决策(当然我们得坚持之后还是完全按照策略![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)来),那么根据定义,这个决策必然是在期望意义下最优的:换句话说,它至少不差于任何的![](img/5b6e660bba784c9852da7b6b73b8cf11.jpg)。这个结论是非常显然的;值得注意的是,这个结论的成立性是广泛的,和策略![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)具体是什么东西没关系。 + +刚才的结论给了我们一个策略改进(第三步蓝色方块)的思路。对于一个策略![](img/868db68e71ec9cabbe333cb77dd676bc.jpg),如果我们已经得到了它对应的优势函数,那么我们必然可以构造出一个新的策略![](img/41c12e6c8c7c8c5895c320e0cec991ac.jpg):刚才我们已经指出了在任意一个状态下,这样的策略不差于原策略,至少和原策略一样优且有可能更好。需要注意的是这是一个确定性策略。事实上这是本篇中要涉及的算法的内在思想。 + +作为开始,我们先不引入神经网络和复杂的动态系统等很复杂的东西,假设状态和行动的个数很少,以至于 V、Q、A 函数都能用一个表格来记录下来;转移概率也是完全已知的。在这个最简单的环境里,上述算法就可以用一个非常经典的**策略迭代法** (Policy Iteration, PI) 来简单实现。策略迭代法循环执行以下两个步骤: + +1. 策略评估 (Policy Evaluation):计算所有的![](img/87b6e1b1d459e07ea55433ff449800bf.jpg)。 +2. 策略改进 (Policy Improvement):令![](img/a3c4711e2fa5d16da102c71554ff0184.jpg),其中![](img/41c12e6c8c7c8c5895c320e0cec991ac.jpg)。 + +要执行这个过程,最大的问题就是如何计算![](img/87b6e1b1d459e07ea55433ff449800bf.jpg)。在之前我们提到的是,![](img/7e1abd66b26196f960e2f89cb81b9b9b.jpg)。因为在这里我们的转移概率已经知道了,因此我们只需要去研究值函数 V 就行了。这一类方法广义上被称为**动态规划** (Dynamic Programming, DP)。形式上,假设我们已知转移概率为![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg),且状态和行动都是离散的而且空间足够小,这样我们所有的数据都可以在表里记下来。类似于我们在之前提到的自助法,![](img/77e18e9e84e8a2d026270a4112980af0.jpg)。自助法的意思是,我们只需要在后面插入当前的估计(就是查表得到)就行了。(_ 这里我补充一下,从深层次来说,这样的表达式又叫 Bellman 方程,但在这个课中似乎不涉及到这一块的理论 _)由于我们现在采用的是一个确定性策略,这样的单点确定性策略也可以写作![](img/d07e5d5b7a01ad26723219c0681e64a0.jpg),即给定状态下得出行动这样的一个函数形式。于是,之前的公式就可以被进一步简写为![](img/0252227b14a80e8988d93e2975c8344a.jpg)——这也就成为了我们策略评估步的公式,我们用值函数 V 去替代优势函数 A。需要注意的是,标准的策略迭代法的第一步需要关于我们的当前策略解出比较精确的![](img/c8478f1f4ac7ded9e9066522a6dbcd74.jpg),本质上是一个不动点问题:一种方法是之前的公式进行反复迭代直到收敛;另一种方法是求解一个比较大的线性系统(之前的公式是线性的)。 + +不要忘记我们本篇的目标是在算法中完全抛开策略函数。可以回顾我们每一步更新的新策略其实都是![](img/c644be55e3a98173fdc5353db44cf839.jpg),而给定状态![](img/c4af7d8e59380f621826e58208e79448.jpg)下,![](img/d3caa16b217f9abe59363402c7e9cf3c.jpg)和![](img/5291a48569cbbf86eb19e04f4fa4e82e.jpg)之间其实只相差了一个常数![](img/2676a8847383ea9c5b6bca782dcb4fbf.jpg),因此![](img/3f15977cd5ed505a8107e4be1da953bd.jpg),我们可以用 Q 去替代 A 在这里的地位。事实上,如果我们有了一个大 Q 表,每一行代表一个状态,每一列代表一个行动,那么我们只需要标出每一行的最大值的格子位置就可以了,因此 Q 函数本身就可以隐式地表示一个策略;同样,![](img/84dc90feae6cc26bf13881c799b8245b.jpg)正是对应的值函数。那么这样,我们就正式地把策略的重要地位给架空了,得到一个更简单的动态规划求解方法:**值函数迭代法** (Value Iteration, VI)。事实上该方法可以把以下两步混在一起把 Q 函数架空,但是 Q 函数在我们的值函数方法中有很高的地位,我们不这样做。我们反复执行以下两步,直到收敛。其中第一步属于绿色方块,第二步属于蓝色方块。 + +1. 更新 Q 函数:![](img/35b5962d1070ebe504540917fd3a0153.jpg)。 +2. 更新 V 函数:![](img/ec5b0a4d83e59b107aee8d61ef15db63.jpg)。 + +在对经典的两大动态规划算法进行完简单的介绍后,我们考虑的是如何把这样的方法搬运到深度增强学习中来。在相对比较复杂的问题中,我们知道状态个数是非常之大的,很难用一个很大的表来保存所有状态的 V 值或者 Q 值。譬如在一个彩色的赛车游戏中,分辨率是 200 * 200,那么根据屏幕显示而设定的状态总数可以达到![](img/c420f7e5b13f09eba72574f6695327f8.jpg),这个数字大得超乎想象。这样的个数随着维度的增长而几何爆炸的问题通常称为维度灾难 (curse of dimensionality)。引入到深度增强学习中,一个非常直接的想法就是使用一个巨大的神经网络来代替这个大表,如弄一个参数为![](img/b4591b72892f13da37e97ae1e729cd99.jpg)的深度神经网络来拟合![](img/81e2adc8cc6f526d62be3ca4fc27b7bc.jpg)函数,输入状态,输出对应的值函数。为了训练这样的函数,我们使用一个平方损失函数![](img/67efb8809d6b2578c2400910c94128fd.jpg)来做这样的回归问题。从而,之前的值函数迭代法可以被改写为以下的**拟合值函数迭代算法** (Fitted Value Iteration): + +1. ![](img/3d49d4cb998532aa92b69da3cad3cc7a.jpg)。 +2. ![](img/79041bc1d89c256b2584aafae1262ef8.jpg)。 + +第一步我们就和之前演员-评论家算法一样计算出一个目标,然后第二步训练神经网络减少神经网络输出与目标的值函数之间的差异。然而事实上,第一步的这个 max 操作是非常难做的:一个最大的问题是我们**假设我们已经知道了系统的转移概率**!要做这个 max,我们必须知道每个行动会导致概率往哪些状态转移。我们用一些无模型的增强学习,可能可以执行很多操作来看结果,但状态往往不能回撤复原以尝试其他的选项;而第一步的 max 要求我们尝试各种不同的操作来看结果。 + +我们尝试去避免做这么强的假设。回顾我们之前的策略迭代法,我们迭代进行两步:第一步求解![](img/c8661aa6447d8182642e291cc63b65f7.jpg),第二步用这个 Q 函数来更新策略。其中,第一步的做法可以是反复迭代值函数 ![](img/0252227b14a80e8988d93e2975c8344a.jpg) ,然后再通过一步转移和加上![](img/94c2edd239f2416ba7d7a367f9d01462.jpg) 来得到 Q 函数;但同样也可以是![](img/924c3530f4be11efe2f0bd129bccfcbf.jpg)。现在的 Q 函数可以用样本来拟合出来。这一切告诉我们:只要有 Q 函数,一切就可以在不知道系统转移概率的情况下运转起来。进一步,我们也考虑将 Q 函数使用诸如神经网络的结构来近似,得到**拟合 Q 函数迭代算法** (Fitted Q-Iteration): + +1. ![](img/75d5c5e81134dff4a1546051bee7c1c2.jpg),其中我们使用![](img/ff9397929bf50b3a3e6e8c0f3b0ddb27.jpg)来近似![](img/b04135bd55841a1fdceb826c8bc82c58.jpg)。 +2. ![](img/af0e250946e1096c575e70bb1d91ff70.jpg)。 + +可以发现,这样的决策算法的根本好处在于不需要去同一状态尝试不同的行动选项,因为 Q 函数已经告诉你不同行动的效果了:我们无需在真实环境中尝试各种不同行动后复位,而只需要在我们所涉及的 Q 函数拟合器上做这点就可以了。此外,我们这样的两步算法有很大的优点。第一,算法中只需要用到很多![](img/d8952012d5ece7e22b010e0116c03ad0.jpg)的一步转移样本,而这些样本是可以离线的;这个在演员-评论家算法中是不通用的。第二,这个算法只用到一个网络,没有用到策略梯度,因此也没有高方差的问题。但是,这个算法的致命缺点是,对于这样的非线性函数拟合机制下的算法,没有任何收敛性保证(不进行拟合的大表格 Q 迭代算法在一定条件下有收敛性)。我们接下来会进一步探讨这些优缺点。一个完整的拟合 Q 函数迭代算法的一个简单框架是这样的: + +1. 执行某个策略,收集容量为![](img/9341d9048ac485106d2b2ee8de14876f.jpg)的数据集![](img/7570037806327f96a6f2b01145f79c67.jpg)。 +2. ![](img/7c15fd4258b49114f5effdae74de9f9d.jpg)。 +3. ![](img/af0e250946e1096c575e70bb1d91ff70.jpg)。反复执行![](img/a5db490cd70a38a0bb9f3de58c51589f.jpg)次 2-3 步骤后跳回第一步继续收集数据。 + +第一步的策略其实是任意的,因为 Q 函数迭代算法不对数据集的策略做出任何假设。根据收集数据数量的不同,可以变成收集一堆数据的批量算法,也可以变成只收集一个数据的在线算法。第三步可以选择怎么去训练神经网络,比如走多少个梯度步,算得精确一点还是简单走几步就停了。 + +现在来解释该算法的**离线** (off-policy) 性质。实际上第一步可以用上任意策略的数据,因为第二步和第三步的计算没有需要用到当前策略下的数据,而只是单步转移的片段就可以了。![](img/e4cf1c5cd668e0660fcc47a7288d51ee.jpg)只需要对决策空间的一个枚举,而转移![](img/93ee5ad133c3b083a120da2ccb6e5817.jpg),在给定了状态和行动的情况下,也跟当前策略没关系。某种意义上可以说 Q 函数是对策略的一个解耦合。因此,我们可以收集一大堆转移数据放进一个大桶里,我们的算法从大桶中抽取数据,这个算法照样可以运转。 + +那么拟合 Q 函数迭代算法到底在优化一些什么呢?在第二步中,如果我们是表格 Q 函数迭代的话,max 就是在改进策略。第三步中,我们在最小化一个期望误差![](img/3703cd8447a1e83a19726a317d499309.jpg),也被称为 Bellman 误差。可以发现,在理想情况下,如果这个误差为 0,那么我们所求得的 Q 函数就满足![](img/54e3b668ec7748410e9f4b3f6bfa3868.jpg),这正是确定**最优 Q 函数**的 Bellman 方程,也对应了**最优策略**:![](img/e610ed90d4f8ef4c36f7c5e867080edd.jpg),这个最优策略最大化期望收益。如果我们不使用近似,且每一个![](img/b637c4140d6cb6a419012469a63e87d4.jpg)都有概率发生的话,那么我们可以说明![](img/1f70ec452b25a3d5cfe57fe369c224dc.jpg)对应着最优策略。在这边,**即便算法是离线的,但是收集数据的分布还是有很大关系的**。一个极端情况,我们假设![](img/50705df736e9a7919e768cf8c4e4f794.jpg)只是一个单点分布,除了一个状态外概率都为 0:这样我们就成为只知道一个状态的井底之蛙了,不能对其他状态的好坏做出正确评价。因此,尽管算法是离线的,但请尽可能确保我们收集的数据中包含了真正运行时会访问到的那些状态和行动。此外,如果我们使用诸如神经网络的东西去拟合 Q 函数表,那么之前所说的大量理论保证将丧失。 + +在之前的拟合 Q 函数迭代算法中,我们收集大量数据,然后反复做样本-做回归。我们把每次收集的样本数设为 1,然后把 K 设为 1,并且设置只走一个梯度步,就变成了**在线 Q 迭代算法** (Online Q-iteration),循环以下三步。 + +1. 执行某个行动![](img/78bc32b822dda546b64dc94fde1b960b.jpg),收集观察数据![](img/343430c448f3d17f3a18443077585b6c.jpg)。 +2. ![](img/7c15fd4258b49114f5effdae74de9f9d.jpg)。 +3. ![](img/7265ea9cf89d482790a3925e3ca43c61.jpg)。 + +该算法每轮执行一个行动,得到一个转移观察,算出目标值,做一步的随机梯度下降。这是标准的 Q 学习算法,虽然是离线的,但还是和刚才所说的一样,第一步的支撑集希望足够大。那么如何选择行动呢?我们最终的行动服从一个单点分布,选择一个使得 Q 最大的行动。但是如果我们把这个东西直接搬过来在学习过程中使用的话,是不好的。事实上,这是在线学习中的一个很纠结的问题:探索 (exploration) 和开发 (exploitation)。学习就是一个探索的过程,如果我们还没进行足够的探索,在 Q 函数还不够准确的时候,我们根本无法分别出到底哪个是真正好的,会忽略掉真正优秀的方案。在在线学习中,有多种启发式方法来脱离这一局面。一种策略称为![](img/aeb302325ebc29add21f094ad38ad261.jpg)-贪心,也就是分给最大的![](img/55b67e6588a2bc5b94a739b63783b152.jpg)![](img/f596186d7c7f0599adf449b9161a678e.jpg)的大概率的同时,也保留![](img/aeb302325ebc29add21f094ad38ad261.jpg)概率平均分给其他所有的![](img/b55f25aec34a8626bae8e9f1f6ccc9bf.jpg)种行动。另一种常用的设定是 Boltzmann 探索,概率分布为![](img/de9e74fbbf37eca81c16ed9c8df02568.jpg)。它假定 Q 函数多多少少知道一些哪个行动好,但是有噪音。这样 Q 比较大的行动有显著较高的概率被选到,同时保持了其他选项的可能性。 + +## 算法的理论 + +让我们回到非神经网络近似的值函数迭代算法,它本质上在做![](img/144d3919c2f4007afd2a185e00f8971f.jpg)。那么第一个问题就是,这个算法收敛么?如果是的话,收敛到什么?首先,我们定义一个备份算子 (backup operator) ![](img/ae087b2ee711b4d242670c584abd0bc9.jpg) ,形式上写作![](img/474654c002d015035123911c34c4416a.jpg),其中![](img/deffa3e8d9fd1e5f6d8daaa306e80666.jpg)是所有状态下选择行动![](img/d700c80f3e82735a63b228ea4417a460.jpg)的一步收益的向量,![](img/2df29e0634b726874df29f97681f2047.jpg)指的是选择行动![](img/d700c80f3e82735a63b228ea4417a460.jpg)的转移矩阵,诸如![](img/f870c06fdb5b7160cb19d4b0b320cd34.jpg),max 是按分量取最大。实际上,我们可以发现最优下,![](img/1ce7177a602efa817624ed92ea889be9.jpg)是![](img/ae087b2ee711b4d242670c584abd0bc9.jpg)算子的一个不动点,因为![](img/751fc8ddd5fa0fd4f9157e9061ad10d8.jpg),所以![](img/248563d18be1eb2c930ad5f89586d805.jpg)。与之前 Q 函数的讨论相似,这一个不动点总是存在,总是唯一,且总是对应着最优策略。现在我们的关键问题是如何去找到这样一个不动点,因为不动点意味着最优值函数和最优策略。 + +我们可以通过证明![](img/ae087b2ee711b4d242670c584abd0bc9.jpg)是一个收缩映射 (contraction mapping) 的方式来证明值函数迭代法收敛到一个不动点。事实上,![](img/ae087b2ee711b4d242670c584abd0bc9.jpg)是一个无穷模下的收缩映射,因为对任何的两个值函数![](img/21ec2ab32d1af3e766487093bb20cf22.jpg)和![](img/c10c3a15014cf7e0b1b76f3b1cc9e5a0.jpg),我们可以证明![](img/a0d76431d0746be878aae0cf9e2af4b3.jpg),两者的间隙每次都减小到原来的![](img/cdab9437b701fd21fb3294cfba7c4bc2.jpg)倍。如果我们选择![](img/e413ec70af8ae2c4719b3f4607d0d7d1.jpg)的话,那么因为![](img/248563d18be1eb2c930ad5f89586d805.jpg),有![](img/06b8cebbd8e55f5c0a2d8da13f29a176.jpg)。因此每做一次迭代,我们都能把两者之差的无穷模稍微减小一些。 + +使用算子![](img/ae087b2ee711b4d242670c584abd0bc9.jpg),我们可以把每一步的值函数迭代算法写成![](img/3a9f0b75a95784adb8f853ccc7b7f059.jpg)。为了把 Q 函数用神经网络表示,现在我们来看拟合值函数迭代算法。拟合值函数迭代需要做一个回归,它的本质是从神经网络能表示的所有函数的簇![](img/c20ff3270833f8171a7cb01cc34dc280.jpg)里面,找到一个函数![](img/a46e048aab0e2f1215f939e9f2b1a66f.jpg),使得![](img/be9df62849d35ab4e4e72871e181d09a.jpg)。虽然在理论上,一个无限大的深度神经网络可以拟合任意函数,但是在实际使用中,我们一般只能使用一个有限大小的神经网络,因此它能表示的只是所有函数的一个子集。 + +![](img/6ba1bed963fee0917976ed361b8c812b.jpg) + +如上图,蓝色的线代表该神经网络能代表的函数的全集,我们从一个函数出发,进行一次备份操作,然后使用最小二乘回归来投影到这个函数集合。我们定义投影算子![](img/bea8259ddc81b502185ea944dd0ec451.jpg),那么我们的拟合值函数迭代算法可以写成![](img/80c0b820c3e1ebf9ee38fd666ac99c15.jpg)这样的复合映射。注意到投影算子最小化的是欧几里得距离,是 2 模下的收缩映射。![](img/ae087b2ee711b4d242670c584abd0bc9.jpg)是一个无穷模下的收缩映射,![](img/a0d76431d0746be878aae0cf9e2af4b3.jpg);![](img/5bf4bb781dd2d49d92ccf59eed28ec0f.jpg)是一个 2 模下的收缩映射,![](img/7a12b9ec1f617907f55f18046e1a93e7.jpg),但问题在于如果我们将这两个映射进行复合,那么![](img/8103c32cbdfc5697b6d3808151f6f7bf.jpg)并不是一个收缩映射,因为它们不是在同一个模下收缩的。 + +![](img/ebbebc713ddf745becd38ed5d382533f.jpg) + +上图是一个该算法发散的例子。假设最优解![](img/1ce7177a602efa817624ed92ea889be9.jpg)在那个五角星处,然后我们从![](img/21ec2ab32d1af3e766487093bb20cf22.jpg)开始一脚走到了![](img/9c4501554984db58ca4414c592e22347.jpg),然后被投影回归扯回了![](img/a46e048aab0e2f1215f939e9f2b1a66f.jpg)。从图上看,我们的解到最优解的距离越来越远了。注意到,不用无穷模的原因是当状态空间很大或者无限的情况下,无穷模下的投影问题极其难解。我们只能寻求找到最优解的一个投影(同样对于策略梯度法我们也只能期望找到最优策略的一个投影),但是事与愿违的是,反复进行拟合值函数迭代算法,可能使你从较好的解开始越来越差。因此我们的结论是,值函数迭代法在表格中是收敛的,但是拟合值函数迭代法在一般意义下是不收敛的,在实践中也通常不收敛,但是有一些方法来缓解这些问题。 + +拟合 Q 函数迭代法也差不多,![](img/42fdaa2d0fa15776132d8707f1f046a4.jpg),只是把 max 放到里面去了;同样投影算子![](img/bd37d824739c450f8643ad773ac1b3bd.jpg),因此![](img/c80543a25eb35f0fca64d6ac87a1b0d2.jpg)。它的收敛结果与之前也别无二致,同样一般意义下不收敛。对于在线 Q 迭代算法来说,它的第三步![](img/7265ea9cf89d482790a3925e3ca43c61.jpg)看起来在走一个梯度步,我们看似抓住了一个救命稻草:梯度下降法应该是可以收敛的?但是,Q 函数方法的梯度并不是目标函数的梯度,因此与策略梯度法并不同,它并不是梯度下降法。 + +这个不收敛结论同样也适用于演员-评论家算法。如一步自助法![](img/e310e61172a1b9ea8a6240f91dfb676f.jpg)关于无穷模收缩,而拟合函数 ![](img/ac253426fd7d206af3c21d0ac74c5efe.jpg)关于 2 模收缩,因此拟合下的自助法做的策略评估同样不具有收敛性。顺便说一下,在演员-评论家算法中用的![](img/c8478f1f4ac7ded9e9066522a6dbcd74.jpg),指的是关于策略![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)的值函数,是评论家用的函数;而在值函数迭代中用的![](img/1ce7177a602efa817624ed92ea889be9.jpg),则是最优策略![](img/167830654a46117ccea36be088e6b391.jpg)所代表的值函数,也是最优的值函数。 + +在这一篇中,我们暴露了很多问题,而在接下来的内容中,我们将尝试如何缓解这些问题,从而让算法能正常运转起来。 \ No newline at end of file diff --git a/docs/ucb-cs294-112-notes-zh/7.md b/docs/ucb-cs294-112-notes-zh/7.md new file mode 100644 index 0000000000000000000000000000000000000000..9bf33fe7ccd719e342c55c6efd73bb2e85dbd15e --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/7.md @@ -0,0 +1,124 @@ +# (7) 深度增强学习中的 Q 学习方法 + +> 作者:[谢天](https://www.zhihu.com/people/xie-tian-55-77) +> +> 来源:[POST 馆](https://zhuanlan.zhihu.com/c_150977189) + +## 回放缓冲池与目标网络 + +在上一篇中,我们介绍了一些纯粹使用值函数的方法(这个是在动态规划中最最经典的要素),最重要的是 Q 学习方法,这类方法抛开了一个显式的策略,直接去学习 Q 函数,使我们知道在某个特定的状态下执行某一操作效果有多好;也指出了如果我们使用神经网络来进行拟合所可能出现的不收敛现象:这些问题将在所有的使用某些结构(如神经网络)拟合值函数,然后使用拟合的值函数作为“评论家”来做自助的方法中都存在。在这一篇中,我们将介绍一些方法,使得在实践中这些问题能被有效克服。 + +在 Q 学习中,我们已经介绍过,可以使用拟合 Q 迭代的方法:在每一轮迭代中,使用某些策略收集很多![](img/343430c448f3d17f3a18443077585b6c.jpg)的样本,然后执行若干步构造目标值和回归的过程。当然我们希望收集到的样本的支撑集越大越好,以避免盲区。它的一个特例是在线 Q 迭代,也就是每次只收集一个样本,构造目标值,然后回归只走一个简单的梯度步。我们仅以在线 Q 迭代算法为例,它循环执行以下步骤(此处目标值已经填入)。 + +1. 执行某个行动![](img/78bc32b822dda546b64dc94fde1b960b.jpg),收集观察数据![](img/343430c448f3d17f3a18443077585b6c.jpg)。 +2. ![](img/d9f156d6b933aad223d2fcc6fa2532bd.jpg)。 + +我们之前已经说明过,它**不是一个梯度下降算法**,因此,梯度法的收敛性在这里不适用。第二点很关键的问题是,在普通的 SGD 中,我们常常认为每一次拿到的数据之间都有一定的不相关性;而在第一步收集的数据中,**数据通常都是非常相关的**:下一步的观察数据可能和这一步非常相关。因此,梯度也会非常相关。因此,我们会尝试去使用一些手段来缓解这些问题。我们考虑解决的问题主要有两个:序贯状态的强相关性,以及目标值总是在变动。 + +![](img/1b744935c9b978bd95bfdcd86a4b4df0.jpg) + +序贯样本为什么会成为痛点?让我们先考虑一个简单的回归问题,这个回归问题尝试去拟合一堆数据,而这堆数据是一个正弦波。一般我们希望数据是独立同分布的,而我们在序贯问题中先得到了开始的几个样本,然后逐渐得到后面几组,每得到一组我们就走一个梯度步。这样我们就很难去学习整个正弦波,而更容易在局部形成过拟合的同时,忘掉了其他样本的信息。在演员-评论家算法中,可以采用一些并行学习的方法,这里 Q 学习也可以:使用多个独立的智能体进行独立的数据收集,然后使用同步或者异步的方法进行梯度更新,这样可以使得样本的相关度减轻,但是这样的做法可能是相当“繁重”的。 + +另一种更常见的做法,**回放缓冲池** (Replay Buffer),利用到了 Q 学习算法本质上是离线 (off-policy) 的这样一个性质:也就是说,Q 学习算法使用到的数据不需要根据当前的策略收集得到。相对的,演员-评论家算法是一个在线 (on-policy) 算法,因此对于演员-评论家算法来说并行学习是首选之一,然而在 Q 学习中并非如此。在拟合 Q 迭代算法中,我们每一步收集一些样本,然后进行若干步目标值构造和回归。在收集样本的步骤中,我们可以使用任意策略(当然我们希望样本的支撑集足够大),因此我们不妨假设一个极端情形:收集样本的步骤被完全省略了,我们在很早的时候就收集了非常非常多的样本,然后全部丢在了一个数据库之中,我们在每次训练更新的时候随便从里面拉出一些来。这样做完全是可以的,因为我们事实上不根据策略和模拟器进行任何交互。 + +这给了我们一个启示,我们可以构造一个样本池![](img/ae087b2ee711b4d242670c584abd0bc9.jpg),然后每次从里面抽出一批样本,进行梯度更新: ![](img/025861dbd6577265884153627bdc1fdd.jpg) 。这样做的好处不仅在于这样抽出的样本不再具有很强的相关性了,同时我们每次可以用的样本量也从 1 个变成了很多个,可以使用多样本来降低梯度的方差(有点类似于 mini-batch SGD 的做法)。现在我们想要知道的是,高覆盖面的数据到底从哪里来。在实践中,对于很大的状态空间,我们通常很难去很好地覆盖;我们能做到的最好情况的可能也只是覆盖我们所可能到的沧海之一粟。因此,我们在 Q 学习的过程中,还是需要同时去为样本池补充新鲜血液。这也要求我们使用一些探索策略向外界环境输出一些不同的策略,然后得到样本进入样本池。训练过程有点像某些抽奖箱子里每次抽一张卡,抽完丢回去再抽。因为我们投入的数据会被反复使用到,有点类似于回放,因此被称为**回放缓冲池** (Replay Buffer)。 + +![](img/e85ee9bf098bd0b36f08c9348b2053b6.jpg) + +从而,一个(同步的)使用回放缓冲池的 Q 学习算法是这样的: + +1. 使用某些策略(如![](img/aeb302325ebc29add21f094ad38ad261.jpg)-贪心)跟环境打交道收集一批数据![](img/7570037806327f96a6f2b01145f79c67.jpg),并加入到回放缓冲池![](img/ae087b2ee711b4d242670c584abd0bc9.jpg)中。 +2. 从回放缓冲池![](img/ae087b2ee711b4d242670c584abd0bc9.jpg)中抽一批样本![](img/7570037806327f96a6f2b01145f79c67.jpg)。 +3. 更新一个梯度步:![](img/025861dbd6577265884153627bdc1fdd.jpg),反复执行 2-3 步![](img/a5db490cd70a38a0bb9f3de58c51589f.jpg)次之后返回第一步继续收集样本。 + +注意到,如果缓冲区足够大的话,那么新进入数据占权重其实是很小的,很可能不会被抽到。当然这不是个问题,新进数据只是为了让样本池的支撑集更广(更新 Q 函数使得更新策略,新策略会访问到之前没去过的地方)而已。在![](img/a5db490cd70a38a0bb9f3de58c51589f.jpg)的选择上,通常选择 1 就不错,然而如果数据获取代价比较高的话(如需要与真实物理系统打交道),更大的![](img/a5db490cd70a38a0bb9f3de58c51589f.jpg)有时候会产生更高的数据使用效率。由此,回放缓冲池成功解决了数据的强相关性问题,但是目标值的变动问题还是没有解决。 + +之前听过一个童话,说小猪问妈妈幸福在哪里,妈妈表示在尾巴上,然后小猪尝试咬自己尾巴但是抓不到,但是妈妈表示只要你一直走幸福就会一直跟着你。暖心的小童话在这边就变成了一个讨厌的事实:我们想要使得![](img/1130833be4db17dba78ddfe929e6fb76.jpg)尽量靠近目标值![](img/14ac07c542a73ed99672f0b9c8b296c8.jpg),但只要我们不停迭代![](img/1130833be4db17dba78ddfe929e6fb76.jpg),我们的目标值就跟尾巴一样一直会动来动去的!这就跟射击中的移动靶一样,总比固定靶要难打很多。但是如果我们能够像之前一样,先把目标值算出来,然后再去做最小化最小二乘的回归,那么这样的回归就会稳定很多。 + +在这里,我们把之前的思想改造成一个**目标网络** (Target Network),以提高实践中的稳定性(虽然还是没有什么理论保证)。整体想法与之前使用回放缓冲池的 Q 学习算法没有什么太大区别,只不过是我们再执行若干步(如 10000 步)整个算法迭代后,就把整个网络的参数![](img/b4591b72892f13da37e97ae1e729cd99.jpg)存下来称为目标网络![](img/72e90d334c5ac06723e7bfd9dc940049.jpg)(就像很多软件的自动存档功能一样),然后我们每次做的梯度步变成了![](img/48931ab5f3baef59e3c443eb256fcb74.jpg),也就是说我们的目标不再是![](img/911bd844a0123b3442a933a2c908619f.jpg)而是![](img/a1eff788e54cd01841535aa3964a3c45.jpg)了。这样就能使得我们的“靶子”在一段时间内保持确定,不再是每走一个梯度步目标就动一下,就像“秦王绕柱走”一样的“放风筝”策略一样避敌。等我们已经足够接近靶子了,然后再允许靶子动到一个更好的地方去。我们可以发现,如果我们把靶子固定,那么这个算法非常接近一个监督学习算法。这跟人一样,一开始学走路就把步伐放得太大容易摔跤,我们这样做可以把训练速度放下来,同时提高训练的稳定性,从而这个目标网络更新步数需要权衡以提高收敛概率:太大训练太慢,太小则容易不稳定。理论上,这样做不改变任何事情,但是实践中,这样降低靶子移动的频率,非常有助于训练的稳定性,减少训练所需要的时间。综合这两种技巧,Mnih et al. (2013) 在 NIPS 提出了举世闻名的深度 Q 网络 (Deep Q Network, DQN) 算法,也是深度 Q 学习中最经典的算法。 + +1. 在环境中执行某个操作![](img/78bc32b822dda546b64dc94fde1b960b.jpg),观察到![](img/343430c448f3d17f3a18443077585b6c.jpg),并加入到回放缓冲池![](img/ae087b2ee711b4d242670c584abd0bc9.jpg)中。 +2. 均匀地从回放缓冲池![](img/ae087b2ee711b4d242670c584abd0bc9.jpg)中抽取一个小批量样本![](img/f364df6a5c75d576ad558761c027c47d.jpg)。 +3. 使用目标网络![](img/a1eff788e54cd01841535aa3964a3c45.jpg),计算出目标值![](img/b3cc15dd3b3921272afd8cfcbf4d35a6.jpg)。 +4. 走一个梯度步,![](img/70747286d99b9a797b7f0b2b7788bced.jpg)。 +5. 每隔![](img/9341d9048ac485106d2b2ee8de14876f.jpg)步,把整个神经网络的参数![](img/b4591b72892f13da37e97ae1e729cd99.jpg)复制到目标网络![](img/72e90d334c5ac06723e7bfd9dc940049.jpg)中去。返回第一步。 + +小批量样本的特性是,其中第三第四步是可以并行的。 + +![](img/b8ccda82b58beb66a62c2abfffd962ab.jpg) + +关于目标网络,也有另一种实现策略。看上图,我们在第一个绿色方块更新了目标网络,此后若干个步骤,我们都将以这个目标网络为基础进行迭代,然后逐渐误差越来越大,直到下一个目标网络更新点,就形成了一个断点。这样其实对于步骤和步骤之间并不公平,有些步骤访问的延迟很高,有的步骤则很低。为了使得延迟公平化,可以使用一个类似于指数平滑的方法(随机优化中的 Polyak Averaging),不再是若干步执行更新而是每一步都做一个小变动:![](img/c3069f9353fcc9a7455ec2315b0f8855.jpg)。实践中![](img/687ea19aad79c360559598d48aca6a87.jpg)效果不错。从优化的角度,可以对这样的做法有一些理论解释。 + +![](img/f36ae0213ed9569290f29c557905cc87.jpg) + +现在,让我们对在线 Q 学习、拟合 Q 迭代、DQN 算法进行一个比较。我们可以发现,对于有回放缓冲池和目标网络的 Q 学习算法来说,最外层循环是更新目标网络的参数,内层循环是使用同一个策略收集若干数据集丢进缓冲池后,迭代若干次从池中抽样然后做小批量样本的梯度步;而对于拟合 Q 迭代算法,最外层循环是使用同一个策略收集若干数据集丢进缓冲池,而内层循环则是更新目标网络的参数,然后迭代抽样做梯度步。外面两层操作顺序是相反的。DQN 是其中的一个特例。 + +从而,我们可以把过程的主要步骤分为三部分:第一步是数据收集 (data collection),第二步是目标更新 (target update),第三步是 Q 函数回归 (Q-function regression)。此外,还有一个从缓冲池里丢弃旧数据的操作。第一步的数据收集是用于充实我们的缓冲池的。我们拿我们有一定探索性质的策略与外界打交道,从而获得一些转移数据;如果缓冲区太大了,我们也需要把一些旧数据丢进垃圾桶(如把缓冲区弄成一个固定大小的循环型,老的数据自然被丢弃),这是因为旧数据可能是在很垃圾的策略下得到的,已经没什么实际价值。第二步以一定的频率(或者 Polyak Averaging)用当前的参数去更新目标网络参数,如果我们想稳定一点的话,这一步通常频率很低。第三步是一个学习过程,它从目标网络中取得参数,从缓冲池中取得数据,然后进行回归以后更新当前的参数。广义看,不同的算法之间,只在于这几个操作的频率有所区别,取决于样本取得代价,网络更新代价和对稳定性的需求。对于在线 Q 学习,我们取得数据后只使用一次就丢弃了(也就是样本池里只有一个样本),三个步骤的频率是一样的。对于 DQN,缓冲池比较大,第一步和第三步运行频率一致,而第二步频率很低。对于拟合 Q 迭代,就形成了一个嵌套结构,第三步是第二步的内循环,而第二步是第一步的内循环,频率指数降低。 + +## 让 Q 学习更好的技巧 + +![](img/f67d6aeebdb21eeffd49b493b8711cd8.jpg) + +我们在前面已经知道,Q 函数本身是有意义的:在某个状态下,我们进行了某种操作,今后会带来的期望收益。那么我们使用之前估计得到的 Q 函数值是否能准确反映呢?Mnih et al. (2015) 在 Nature 上的论文做了一系列正面实验。上面四个图中,上面两个是平均收益,下面两个是平均 Q 值,我们发现当估计的 Q 值上升的时候,总体来说收益也呈一个上升的趋势;但是在训练片段中收益波动相当大,Q 值虽然不能很好去拟合收益,但是波动相对小,相对光滑。下面举两个 Atari 游戏的例子来说明这些值函数的意义。 + +![](img/11a80f69132567f5bda493eee62ce4db.jpg) + +在打砖块 (breakout) 游戏中,我们知道每当球撞到一个砖块,就会产生一个小小的收益,因此,值函数就会有一个小型的峰出现。上面四个图每次都是要打掉一个砖块时的画面,正好对应了下面的四个峰。更进一步地,我们一个很好的策略是让这个砖块里面产生一个小孔,然后让球进去那个基本封闭的区域里面跳来跳去,打掉很多砖块产生大量得分:这个判断正好和图 3(成孔前夕)-图 4(成孔后进入)一致,从而值函数给予了很高的评分:图 3 是一个希望,而图 4 美梦成真。这说明我们的值函数的局面评估定性上是合理的。 + +![](img/ff6a6440da9636e83e28f4750f392e23.jpg) + +在弹球游戏 (pong) 中,我们控制右边的板子上下移动来接球。操作有三种:无操作、向上、向下。在图 1 和图 4 中,三种操作都可以接受,尤其是在图 4 中我们不管做什么样的操作都已经获胜了;而图 1 中接小球还有足够的容错可能。而在图 2 则接小球有了很强的紧迫性,而图 3 紧迫性更强几乎没有容错机会了,所以向上的 Q 值很高,向下和不动的 Q 值很低。 + +![](img/107e95babf8363ef499e6a2a7b1d5cf2.jpg) + +我们说了很多使用值函数评估局面、Q 函数来做决策的合理性。因为我们只需要按照 Q 函数最大的准则来进行行动,似乎只有 Q 的相对数值大小才有决定性作用。那么这些绝对数值是否准确?很遗憾,van Hasselt et al. (2015) 这些数值是被高估的。我们只看上图的红色部分(DQN estimate 和 DQN true value)。红色的波动很厉害的那条折线代表了神经网络所估计出来的 Q 值,而下面那条红色直线是根据 DQN 的策略行动实际所能得到的期望收益:所以理想情况下,在很多步估计之后,红色折线应该和红色直线有一个相切关系。但是事实上,我们在不同的游戏中都发现估计出来的红色曲线明显比真实值红色直线要高,呈现一个系统性趋势。这说明了 DQN 实际上严重高估了 Q 值。事实上 DQN 的表现还是不错的,尽管这个 Q 值可能估计得很离谱:实际上对于两个不同的操作![](img/ebc140645dd4bd2a91ca78746a11ccf0.jpg)和![](img/5a64c9c517e630bfa1cf82c078c51d17.jpg),只要让估计的![](img/a1e8ba82b43c795cf1dfd8b4c06d32fb.jpg)差和真实值差不多或者长得像就能让 DQN 工作起来。 + +这样的**高估** (overestimate) 现象在 DQN 中是系统性问题,原因出在目标值![](img/b3cc15dd3b3921272afd8cfcbf4d35a6.jpg)的后面那个 max。我们选择最大的那个数会产生怎样的结果呢?考虑两个随机变量![](img/5b5355ce154bafbedea47d1b9c47057f.jpg)和![](img/eba851e782c37c3da8835054fb87c6ac.jpg),我们有![](img/d9216c6c1b24456d3dc4b2bbd2c9d61e.jpg)。这个结论在多个随机变量中也是适用的。想象一下,这些变量都有一些噪音,而取 max 操作则扩大化了这些噪音,在这种情况下我们是关于噪音取 max,可能我们找到的是若干个数中噪音最大的那个。我们的 Q 都是从样本轨迹里学出来的,所以都含噪,![](img/e4a8aefc8fe880d35980a05923135182.jpg)即便接近真实的 Q 值但也都是不完美的,因此我们可能得到的只是噪音最高的选项而不是真正 Q 最大的选项。注意到一个简单的事实,![](img/43d8b2a2c811da923719bcdbf291c5cd.jpg),它点明了这一问题的来源。如果对于某一行动 Q 值过大了,我们做![](img/05b4db5abba0a812e5eafb610432560a.jpg)过高估计了接下来行动的值,然后继续传导到后续的迭代中去。我们的决策选择![](img/da50092fd8e85bfbd6b20e96c836f79f.jpg)本身就是来自于![](img/a1eff788e54cd01841535aa3964a3c45.jpg),而我们所选用的 Q 函数值也同样来自![](img/a1eff788e54cd01841535aa3964a3c45.jpg)。 + +van Hasselt et al. (2010, 2015) 的**双重 Q 学习** (Double Q-learning) 技术用于缓解这一问题:它本身希望切断**过高估计的行动 - 过高估计的值的传导**这样的一个链条。如果最大 Q 决策选择和它对应的 Q 函数的相关性被斩除,那么这就不再是一个问题了。双重 Q 学习的想法就是,不要使用同一个网络来确定行动和估计 Q 函数值。它使用两个网络![](img/6110152d00521b309aca98c8584c57a7.jpg)和![](img/fac2dd3cef9b63d4e27ece42142a4a09.jpg),更新时候采用以下交错手段: + +* ![](img/e24226cb6ff26a6d55d7bad387223d9d.jpg) +* ![](img/b35013592f1d8bd56503d8d518a6360e.jpg) + +也就是说,更新一个网络的时候,使用另一个网络的值。如果两个 Q 网络的噪音的来源不同,那么它的噪音就不再如此容易扩大了。在实际中,我们在前面已经介绍了目标网络![](img/72e90d334c5ac06723e7bfd9dc940049.jpg)了,因此事实上我们已经有两个不同的网络![](img/b4591b72892f13da37e97ae1e729cd99.jpg)和![](img/72e90d334c5ac06723e7bfd9dc940049.jpg)了,可以把它利用起来!在标准的 Q 学习中,我们使用![](img/71a989897d81548b87c86b809bbd68b1.jpg),而在这里我们只需要稍作修改,![](img/994d95ea18c78bc3a2161f6a3fedc5ac.jpg),用当前网络来确定我们选择哪个行动,而用目标网络来评估 Q 值。在实践中,我们遇到的问题就会被很大程度上缓解。 + +我们使用 Q 学习,在回归中会设置一个目标值![](img/49d4fffe8dc031059140ce114efd82a4.jpg)。这个目标值信号来自于两块,一块是当前的收益,一块是 Q 值代表的未来期望收益。如果训练还是在早期,通常 Q 就比较小(初始化为小的随机数),那么当前收益就会成为主要成分,Q 值只是噪音。对于时间较长的问题,如果 Q 已经训练到比较后期了,从数值的量级上考虑,可能当前收益所占比就很小,Q 值所占比较大。如果 Q 占比比较大,那么这个目标值可能不太好,只有一期的收益,剩下都由 Q 来决定。在[演员-评论家算法](https://zhuanlan.zhihu.com/p/32727209)中,我们已经提到了这样的自助法存在最低方差的好处,但是如果 Q 值不准确就会带来最大的偏差;而如果我们不使用自助法而直接看一条轨迹,那么将是无偏的,但是方差巨大。从而,我们介绍了一个折中的方法,就是使用![](img/9341d9048ac485106d2b2ee8de14876f.jpg)步收益后再把未来的自助项加进去。转化到我们当前的问题中就是![](img/191ae297f989ba9cf2068f21e6c7e80e.jpg)。 + +使用![](img/9341d9048ac485106d2b2ee8de14876f.jpg)步收益的主要好处是,可以降低 Q 函数估计不准确所导致的目标值的偏倚(但同时增加了方差),同时尤其是在早期训练中有效提升速度;但是它也带来严重的根本性问题,这样的训练只有在在线训练的时候才是正确的!为了解释这一问题,我们回忆我们的策略是由 Q 函数决定的:![](img/162d69b606eb8fd32cc2fa428bd5fb19.jpg);而我们在上面使用![](img/9341d9048ac485106d2b2ee8de14876f.jpg)步收益,估计的其实是![](img/5e7d76f4d1a5840a591f920b5463a644.jpg),而我们所有的转移,对于![](img/1e7e65996d1d4812aa10e0831a78c94a.jpg)的![](img/4470ca2da26a12f359cb71dfce176c83.jpg),都是要从当前的![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)里面来的。我们之前没有这样的问题是因为![](img/bee18259b98e1060ecc919f2046a472d.jpg),不涉及到在线的转移问题。那么怎么处理这一问题呢?第一种做法是,**直接忽略掉这个问题**。在理论上这是不能接受的,但是实际中通常效果还不错。忽略能否可行,跟待解决问题本身是紧密相关的。第二种做法是**切割轨迹**以得到在线数据。也就是说,我们可以把之前的片段拿过来,然后一步步看我们的策略是否支持这样的行动,如果出现了分歧那么就直接切断:从而这个片段的前面部分是符合我们当前策略的,可以作为一个在线数据使用。这样的做法当数据主要是在线数据(我们需要及时淘汰旧数据)且行动空间很小(如 pong 弹球游戏只有上下和不动三种操作)时效果不错,而如果行动空间很大时则几乎不可能起到什么作用。此外,也可以考虑跟策略梯度法一样做**重要性抽样**重新加权,这样得到的估计总是无偏的,具体可以参考 Munos et al. (2016)在 NIPS 上的文章:Safe and efficient off-policy reinforcement learning。 + +春季课程中,Schulman 还请他的同事 Szymon Sidor 总结了一些经验,和 Levine 教授这边混在了一起: + +![](img/bcf39b8869877165446c3f29834e3cbf.jpg) + +1. 上图显示了几个问题的几种不同 Q 学习的效果 (Schaul et al., 2015)。发现对于不同的问题,Q 学习在有些问题上很可靠,在有些问题上波动很大,需要花很多力气来让 Q 学习稳定下来。因此发现几个能让 Q 学习比较可靠的问题来试验程序,譬如 Pong 和 Breakout。如果这些例子上表现不好,那就说明程序有问题。 +2. 回放缓冲池的大小越大,Q 学习的稳定性越好。我们往往会用到上百万个回放样本,那么内存上怎么处理是决定性的。建议图像使用 uint8 (1 字节无符号整型) 存储,然后在存储![](img/d8952012d5ece7e22b010e0116c03ad0.jpg)的时候不要重复存储同样的数据。 +3. 训练的时候要耐心。DQN 的收敛速度很慢,对于 Atari 游戏经常需要 1000-4000 万帧,训练 GPU 也得几个小时到一天的时间,这样才能看出能显著地比随机策略要来的好。 +4. 在使用![](img/aeb302325ebc29add21f094ad38ad261.jpg)贪心等策略的时候,一开始把探索率调高一些,然后逐渐下降。 +5. Bellman 误差可能会非常大,因此可以对梯度进行裁剪(clipping,也就是设一个上下限),或者使用 Huber 损失![](img/b5368f3dc300981c0da2601513e83348.jpg)进行光滑。 +6. 在实践中,使用双重 Q 学习很有帮助,改程序也很简单,而且几乎没有任何坏处。 +7. 使用![](img/9341d9048ac485106d2b2ee8de14876f.jpg)步收益也很有帮助,但是可能会带来一些问题。 +8. 除了探索率外,学习率 (Learning Rate, 也就是步长) 也很重要,可以在一开始的时候把步长调大一点,然后逐渐降低,也可以使用诸如 ADAM 的自适应步长方案。 +9. 多用几个随机种子试一试,有时候表现差异会很大。 + +## 行动空间连续时的 Q 学习 + +在我们之前的问题中,通常假设策略很容易得到:![](img/162d69b606eb8fd32cc2fa428bd5fb19.jpg),求 max 只需要遍历行动空间就行了;目标值![](img/b3cc15dd3b3921272afd8cfcbf4d35a6.jpg)的 max 也是这样。但是如行动空间是连续的时候,这个 max 就不容易做了。这个问题在后者中尤其严重,因为它是训练过程中最内层循环要做的事情,频率比前者要高多了。那么如何做 max 呢? + +第一种想法是直接做优化。在最内层循环做基于梯度的优化算法(如 SGD)相对来说是比较慢的。注意到我们的行动空间通常都是比较低维的(相对整个系统而言),不使用梯度信息的随机优化也许能有用武之地。最简单的方法是使用离散随机踩点:![](img/fa1a5cb07364baeb6b25682fff09054d.jpg),其中行动是从某些分布(如均匀分布)中得到的。这个方法是最简单的,而且还比较容易并行,但是这样得到的结果是不准确的,尤其是在维度增加的情况下看起来就不像是能找到一个效果很好的解;不过有些时候,我们也不真正在乎优化求解的精度。此外,还有一些更好的方法,譬如交叉熵方法 (Cross-entropy Methods) 这样的迭代随机优化算法,或者如 CMA-ES (Covariance Matrix Adaptation Evolutionary Strategies) 这样的进化算法。这些通常在不超过 40 维的决策问题中有效。 + +![](img/3eed1d55204dd10d4c9558aa86dc5cd3.jpg) + +第二种方法是,我们选取一个比较容易优化的函数簇来拟合我们的 Q 函数。在此之前,我们适用的都是通用的神经网络来拟合 Q,有些情况下我们不必要这么做。譬如在 Q 函数是二次函数的时候,![](img/7a334093dedb7fdbe31a820786ed10fd.jpg),我们就训练一个神经网络或者其他结构,输入状态,输出![](img/d7ce41750efb7325a3191507939507d2.jpg),其中![](img/4e4d506c887c843f43a8fbcbe1884ffd.jpg)和![](img/21ec2ab32d1af3e766487093bb20cf22.jpg)都是向量,![](img/f0481b76bd881625dd55f21f6d81bbc8.jpg)是矩阵(可以用如低秩形式表示)。这样的方法称为 NAF (Normalized Advantage Functions),它的天然特性就是![](img/7fb380bd0ed15a070ded59f007529699.jpg)和![](img/26edd775c418202315443dd9794ef3d7.jpg)。这个很容易和高斯分布建立起联系;当然,这样的 Q 函数中行动是没有界限的。我们这么做的话,算法上不需要做任何改变,非常容易,而且和原来的 Q 学习一样高效。但是缺点就在于 Q 函数只能是固定的形式(如这里的二次函数),非常受限,Q 函数的建模泛化能力将大大降低。 + +第三种方法比第二种方法更为广泛,是去新学习一个最大化器,在 Lillicrap et al. (2016) 在 ICLR 上的一篇文章中被作为 DDPG (Deep Deterministic Policy Gradient) 算法介绍。考虑到![](img/f1471f58fca3cd89e27996bcf10a37ee.jpg),可以想的是另外训练一个最大化器![](img/97ec688c0e72f9d3a863f8aa478c4e15.jpg),作为最大化的算子。训练的方法是,让![](img/de7edf70f701853408ca6619b59d7af2.jpg),这个可以用梯度上升法,梯度可以遵循链式法则:![](img/843454ffceadb49a6fbd983de6f0ba85.jpg)。从而,我们的目标值![](img/ee64da19c7c3630410074d84a804859b.jpg)。整个 DDPG 算法迭代执行以下步骤: + +1. 在环境中执行某个操作![](img/78bc32b822dda546b64dc94fde1b960b.jpg),观察到![](img/343430c448f3d17f3a18443077585b6c.jpg),并加入到回放缓冲池![](img/ae087b2ee711b4d242670c584abd0bc9.jpg)中。 +2. 均匀地从回放缓冲池![](img/ae087b2ee711b4d242670c584abd0bc9.jpg)中抽取一个小批量样本![](img/f364df6a5c75d576ad558761c027c47d.jpg)。 +3. 使用目标网络![](img/a1eff788e54cd01841535aa3964a3c45.jpg)和最大化器![](img/1488f26e5c9b828cf97340094ba3da15.jpg),计算出目标值![](img/81abd39760c40036163219d3b0b53054.jpg)。 +4. 当前网络走一个梯度步,![](img/70747286d99b9a797b7f0b2b7788bced.jpg)。 +5. 最大化器走一个梯度步,![](img/0d25522cb5092918469444242bdbc96f.jpg)。 +6. 使用 Polyak Averaging 更新![](img/72e90d334c5ac06723e7bfd9dc940049.jpg)和![](img/e7cda9ccf679bc0386ba6ecd89a6e169.jpg)。 + +相当于相对 DQN,只是增加了一个最大化器,第三步使用最大化器,第五步更新最大化器,同时最大化器的更新也是用 Polyak Averaging。 + +Q 学习有很多应用。Lange and Riedmiller (2012) 使用拟合 Q 迭代的方法控制小赛车(和其他低维度系统),因为较早期,所以拟合的函数簇包含了随机森林和神经网络。它们是训练了一个自编码器 (autoencoder) 来降维,在隐层上面做 Q 学习。这是同时出现 Q 学习和神经网络比较早的论文,但是 Q 学习没有和神经网络直接结合起来。两者直接结合起来,产生的最经典的 DQN 出自于 Mnih et al. (2013) 在 NIPS 上的文章,用同一种方法成功攻克了多种 Atari 游戏。它们的训练直接使用图像,而不是在一个隐空间中训练。这个工作使用了回放缓冲池和目标网络的技术,使用了一步的备份和一步的梯度步。这个结果在后来也有很多技巧可以改进,如双重 Q 学习。Lillicrap et al. (2015) 最早提出了 Q 学习在连续控制(简单机器人模拟器)上的应用,即 DDPG。这项工作考虑连续的空间,并使用了一个最大化器网络;采用了回放缓冲池、目标网络、Polyak Averaging 更新等技术,使用了一步的备份和一步的梯度步(与 DQN 一致)。Gu et al. (2017) 使用 Q 学习法控制真实的机器人。这项工作同样考虑连续控制,对 Q 函数采用了二次函数的 NAF 近似,也同样采用了回放缓冲池和目标网络技术。在收集数据上,使用了多个不同的机器人来并行处理。因为是真实物理场景,数据比较难采集,所以每个模拟步走了 4 个梯度步(一步备份)。 \ No newline at end of file diff --git a/docs/ucb-cs294-112-notes-zh/8.md b/docs/ucb-cs294-112-notes-zh/8.md new file mode 100644 index 0000000000000000000000000000000000000000..b30425dd96f5103b5bb6056fda0660ce49f04a8c --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/8.md @@ -0,0 +1,112 @@ +# (8) 最优控制与规划 + +> 作者:[谢天](https://www.zhihu.com/people/xie-tian-55-77) +> +> 来源:[POST 馆](https://zhuanlan.zhihu.com/c_150977189) + +## 基于模型的增强学习方法 + +在之前的[增强学习简介](https://zhuanlan.zhihu.com/p/32598322)之中,我们已经了解了我们的增强学习问题的一般结构是:给定一个状态![](img/33c815432ff85d6f9342f1abc64af657.jpg),策略函数![](img/6406ca8c8101cbfa51992c6fd878ace5.jpg)可以由某种含参![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)的结构(如策略梯度法和演员-评论家算法使用显式的策略网络,值函数方法的策略是隐式的)确定,并通过这个策略函数得到一个行动![](img/d700c80f3e82735a63b228ea4417a460.jpg),将![](img/b637c4140d6cb6a419012469a63e87d4.jpg)共同输入给环境,环境通过某些转移概率函数![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg),得到新的状态![](img/d2683f5b20dac211246c30b1e0a7c2dd.jpg),形成一个循环。根据 Markov 性,轨迹![](img/2b9a2a42ce080e40e5cded3e76cf40eb.jpg)的发生概率为![](img/4ae3bb9b9987b4e735031eea8f5168e4.jpg),是由我们掌握的策略函数和环境掌握的转移概率共同决定的。增强学习问题的目标是最大化总收益函数的关于轨迹的期望,一般来说就是得到一组最优的参数使得![](img/184af7ec8dde19e852920210992ae355.jpg)。我们在前几篇中主要介绍了无模型 (model-free) 的深度增强学习算法,这些算法的主要特征是不假设我们知道初始分布![](img/2a17da27c62a897689d3a1cb042c4f9e.jpg)和转移概率![](img/51e4e556c8cc9e6e99844de4ce5017e1.jpg):在一般的问题中,这些概率是非常难知道的;这些无模型方法可以很好地绕开这些不知道的东西,我们甚至不尝试去学习这些转移概率。 + +在一些问题中,我们可以假设我们知道系统的转移概率 (dynamics) 。最简单地,我们设计一个 AI 来下棋(如围棋,棋类的规则是众所周知的);很多系统是容易建模的,如给汽车设计一个导航系统(不是具体的驾驶行为,而是站在比较高角度的路径规划,这个就会相对容易很多,各种地图上已经有很完善的类似功能了);更具体地,我们可能会在一个模拟器中研究诸如机器人运动和视频游戏的问题,我们可以通过模拟器得到下一个状态到底是什么。退一步说,即便我们不知道转移是什么,但我们在很多问题中也可以学出这些转移。比如在系统识别 (system identification) 问题中,我们已经有一个模型结构(如机器人的结构已知)了,需要通过学习去拟合里面未知参数(如机器人的各部分质量和摩擦系数等);更广泛地,我们可能会去用观察到的转移数据去拟合一个广义的模型(比如神经网络或者高斯过程)。 + +那么这些转移概率是毫无用处的么?如果我们能知道这些转移概率,通常问题就会变得简单很多。不同于无模型的方法,基于模型的 (model-based) 增强学习方法通过学习转移概率来决定如何选择行动。在这一篇中,我们将先介绍如果我们完全知道转移概率,如何进行行动决策(最优控制、轨迹优化);之后,我们再去关注如何去学习未知的转移概率,以及如何通过诸如模仿最优控制的方法学习策略。 + +让我们先忘记策略这个东西的存在。类似[之前](https://zhuanlan.zhihu.com/p/32575824)人在老虎面前的决策问题,我们需要给出一连串决策,使得被老虎吃掉的概率最小:![](img/f3134fb3fb3a2bec340c2d13d90e5064.jpg),这类问题通常能转化为一个最小化代价的问题:![](img/99e7c00db12760ebac7cb5d47fadfbcc.jpg),或者是最大化收益。我们假设环境![](img/dad139946fdd1363ecd86d20700a53a6.jpg)是确定的,目标是最大化收益问题,那么问题的结构就变成了环境向智能体给出了初始状态![](img/9852aef9c75200eca15057b3188c038e.jpg),然后智能体做出一系列的行动决策![](img/0a98b6bf6f718b534b8d03cf9d11d8ff.jpg),直接交给环境。在确定性环境下,我们上面做的就是一个最优控制了;而对于环境是随机的情况下,轨迹条件概率为![](img/04cf23f3661fd33654067b566eaacd34.jpg)(注意是我们给定行动决策序列之后,状态序列的概率),我们一下子做好的期望收益最大的**开环** (open-loop) 控制系统![](img/f6be7aeb28531cb23c3fd8140b3ac9c9.jpg)就不见得是最优的了:因为我们通常没有必要一下子把所有的决策全部做了,可以通过做第一个决策来观察之后是什么样的随机情况这样的反馈机制,来继续做后面的决策,使得接下来的决策做得更好。这样的机制通常被称为**闭环** (closed-loop)。下图说明,区别在于开环系统在一开始就把所有决策单向传递给环境,因此不接受反馈;闭环系统则每次只传递单次行动,并接受下一个状态作为反馈。 + +![](img/7f98d9b4acd9808e59803f2bd42817e1.jpg) + +在一个闭环控制系统中,我们就需要一个策略![](img/89eb2e91be70247f33a5542dcaf0f42b.jpg)了,在策略的加持下,我们的轨迹概率就变成了![](img/c015f10519ede8c9ab477ed0bda43078.jpg);我们需要做的是得到一个最优的策略![](img/89eb2e91be70247f33a5542dcaf0f42b.jpg),使得期望收益最大:![](img/14c39dca3d6bf161e27afa0e837c3702.jpg)。关于这个策略簇,我们在之前提到的主要是用一个神经网络来确定,此外在这一篇中我们还将提到使用经典的轨迹优化 (trajectory optimization) 方法来训练一个(时变的)线性策略簇![](img/2c4f7fec75101287c6d7da0e2fc23849.jpg),基本上就是主要执行![](img/0e3b2539d37a16b811786a3550a06d05.jpg),并使用当前给定状态做出一些线性修正。因此,根据我们限定的策略簇不同,策略的学习可以从非常简单到非常复杂。 + +## 交叉熵方法 (CEM) + +我们的第一类规划算法是随机优化,通常用于时长比较短的问题。让我们先将之前的控制问题进行一些抽象,如![](img/35c93e80fa2055096ee664bcc3f51dd2.jpg),其中![](img/5f02066e4afc0ab06a7109b2ccd06e89.jpg)是某种函数,我们并不关心具体是什么,只是想把它最大化;再进一步把决策序列写成![](img/bab4ec68a5669018a9f1c8a043f6d825.jpg)。(_ 因为在这边我们的决策只能决策行动,决策和行动是一码事,在后文中,我们将 action 行动和 decision 决策混用 _)在上一篇讲 Q 学习的连续控制中,我们也提到了这类算法中最简单的是从某种分布(如均匀分布)中挑选若干个决策序列![](img/008f6438536c3fdc55c7ad12a772b371.jpg),然后选取![](img/1dd7aa3ec2a7edbcab062793eaffb026.jpg)。这样的算法在低维问题中还是有一定效果的,有时候被称为随机打靶法 (random shooting method)。 + +![](img/ae50dc9b4f172f3c2bf99154d73b8a60.jpg) + +这种方法的一个改良版本称为**交叉熵方法** (Cross-entropy Method, CEM),对 30 到 50 维这样的问题效果不错。在之前的随机打靶法中,我们需要从某种分布中选取决策序列,但是关键问题是,我们使用哪一种分布?在一开始,我们对于如何选择![](img/4853ca095c827306fda5063deb28f83e.jpg)没有任何先验知识,所以采用某种均匀的先验分布![](img/c9a0072723ebe428c218adc2f3b1aefa.jpg)。经过一把采样之后(如上图的四个采样),我们发现有一些样本效果比较好,于是我们选出几个较好的样本,来拟合一个分布(如采用图中的高斯分布),作为下一次采样的先验分布。通常认为这样的分布抽样效果会比之前的要好,但是对于很病态的问题我们也没什么太好的办法。第二次采样(下图)进一步更新分布。对于连续值输入的交叉熵方法,算法可以描述成以下步骤的循环: + +1. 从先验分布![](img/c9a0072723ebe428c218adc2f3b1aefa.jpg)中抽样:![](img/008f6438536c3fdc55c7ad12a772b371.jpg)。 +2. 计算![](img/b28149196d0e25529e68861d1997c25c.jpg)。 +3. 选取一个![](img/e20d7153f84cdfedda2b0cb56997ca29.jpg)(也可以选一个比例),挑选出 J 值最大的子集![](img/a92d64295ba8076fd1c6201264b430c6.jpg)。 +4. 用![](img/a92d64295ba8076fd1c6201264b430c6.jpg)重新拟合先验分布![](img/c9a0072723ebe428c218adc2f3b1aefa.jpg)。 + +我们拟合的分布通常使用多元高斯分布,在维度较高时甚至简化成协方差矩阵为对角阵的情况也不错。有一种叫做 CMA-ES 的方法,有点像是在 CEM 方法中加入动量以进行改进,每次不是重新去拟合高斯分布,而是去追随一个高斯分布跟随 J 值最大子集移动的方向。这类优化方法本质上并不是很好,只是因为做起来比较容易:如果都是使用神经网络的话,这些值求起来比较容易,也比较适合并行。所以这个方法的优点主要是,一,非常简单;二,并行求解起来非常快。但是它也有很严重的问题,第一点就是这种基于抽样的方法对维度有比较强的限制,即便我们的问题不是很病态,维度一大也会很容易错过表现好的抽样区域;第二点我们这样抽样也使得我们只能处理开环规划的问题。 + +## 蒙特卡洛树搜索 (MCTS) + +在离散决策问题中,**蒙特卡洛树搜索** (Monte Carlo Tree Search, MCTS) 是用于求解闭环控制的复杂问题的更先进的工具。这一方法在离散问题中非常通用,它也在 AlphaGo 的早期版本中承担很重要的作用。 + +![](img/a7dcfc76be2217a0e6105a56f2017b09.jpg) + +在上图中,我们假设初始状态![](img/21ada23d4152305a43f59b6fdf76009c.jpg)已知,每一步的行动有 0 和 1 两种。每次执行完毕一个操作![](img/7617c5f412d8ba08311c56a7e3032fcb.jpg)以后,就会进入一个新的状态![](img/728a11c3b11e1b323358ada0345f8c98.jpg),然后继续往复。这样我们随着时间展开成一棵非常庞大的树,要想去对这棵树做一个彻底的搜索(哪怕展开的层数一多)显然是非常不切实际的。在之前我们采用了“树搜索”的思想,这个时候我们对其加一些“蒙特卡洛”。我们搜索到一定程度后,树就不再展开:把此时的叶子节点作为叶子来看待,使用一些启发式策略(也可以是随机策略)来评估这些叶子节点的好坏。即便这个策略并不好也没关系,我们只需要继续对每个叶子节点出发继续执行这个策略若干步来看最后结果怎样,来大概给这个叶子节点的效果打个分。注意,此时打分的复杂度不再是指数级别的,而是**叶子的个数**乘上**启发式策略运行长度**。这个方法的基本思想是,如果当前已经进入了一个优势很大的局面(或者已经赢了),那么一些比较菜的策略也应该能把优势保持到最后;如果我们已经进入了一个怎样都会输的不利局面,那很多人的选择也是乱玩把游戏结束了。因此不会对我们的启发式策略要求很高。因此,在实际中,大家做 MCTS 的时候通常选择的就是随机策略,选一个很好的策略通常是次要的。 + +在实际中,即便我们对深度进行了限制,这棵搜索树的节点扩展还是指数级别的。因此,我们不能指望搜索所有的路径。MCTS 的最核心想法还是搜索最“有前途”的节点(**选择最大价值的节点**),然后加入一些小小的修正,来补偿那些访问比较少的部分(**也倾向于很少被访问到的节点**)。譬如说我们从一个节点出发走一步,行动 0 之后的节点打分为+10,行动 1 之后的节点打分为+15。当然,这些都不是这个行动真实价值:因为毕竟只是一些很糟糕的随机策略得出的评分而已,而且可能有一定随机性。但是这个值还是有一定意义的,可能认为+15 的节点比+10 的节点可能会稍微好上一点点:因此如果我们时间有限的话,更愿意在+15 的节点上进行探索投资。 + +MCTS 的一般结构为: + +1. 假设当前决策的根节点为![](img/21ada23d4152305a43f59b6fdf76009c.jpg),使用某种 TreePolicy(![](img/21ada23d4152305a43f59b6fdf76009c.jpg))得到一个叶子节点![](img/c43f169c2a462f5f8efce150c2da1433.jpg)。 +2. 使用某种随机策略(或其他)DefaultPolicy(![](img/c43f169c2a462f5f8efce150c2da1433.jpg))评估该叶子节点。 +3. 更新在![](img/21ada23d4152305a43f59b6fdf76009c.jpg)到![](img/c43f169c2a462f5f8efce150c2da1433.jpg)路径上的所有值,并返回第一步重新循环若干次。 +4. 循环 1-3 若干次后,从根节点![](img/21ada23d4152305a43f59b6fdf76009c.jpg)的所有决策中找一个评分最高的。 + +TreePolicy 有很多,其中一个很流行的 UCT (Upper Confidence Bounds for Trees) TreePolicy(![](img/ac38b18cffeff5d93b3e1f9a9cd11281.jpg))为:如果![](img/ac38b18cffeff5d93b3e1f9a9cd11281.jpg)没有完全被展开(也就是从状态![](img/ac38b18cffeff5d93b3e1f9a9cd11281.jpg)有行动没有被评估过),那么选择一个没有评估过的新行动![](img/1b2a8b7cd624ff7839851d7f32259ca9.jpg);否则就选取一个得分最大的儿子![](img/a3cb5df87811ac506b987dbaaf8fb566.jpg),其中得分公式为![](img/5e713e4099000503539ed5c767c4ab21.jpg),越大越好,![](img/b44c973ab5625e97f17e92687c1206ae.jpg)为该节点为跟的子树的所有已经被展开过的节点的评分之和,![](img/2ecb1ec4cf404627b7f1db2e1f72ece9.jpg)为该节点为根的子树中已经被展开过的节点个数,因此![](img/214f2479a81528899936fd8bcd4c4223.jpg)就是![](img/ac38b18cffeff5d93b3e1f9a9cd11281.jpg)的平均评分了;后者则是用来评估稀有性。我们使用一个例子来解释该算法。 + +![](img/6052bd4d21855b25473236810616e913.jpg) + +假设每个节点的行动都是 2 个。在一开始,我们只有一个节点![](img/21ada23d4152305a43f59b6fdf76009c.jpg),没有被展开,根据 UCT TreePolicy(![](img/21ada23d4152305a43f59b6fdf76009c.jpg))策略,我们应该展开![](img/21ada23d4152305a43f59b6fdf76009c.jpg)的所有行动,得到新节点后进行评分。我们经过某种随机策略得到![](img/74d2211bbd012f5e5cece449d0be8b6a.jpg)下的新状态评分为 10,因此 Q 值和 N 值分别更新为 10 和 1;同样![](img/e273d67d5cbd2ca8e731810395fa74f3.jpg)下的新状态评分为 12,由此得到图(1)。此时,节点![](img/21ada23d4152305a43f59b6fdf76009c.jpg)的所有行动都已经完全展开,因为两棵子树展开程度一致,通过 Q/N 的比值,我们决定展开右侧子树一步,得到(2)中的节点,根据随机策略评估得分为 10。此时右侧的![](img/728a11c3b11e1b323358ada0345f8c98.jpg)的 Q/N 比值为 11,仍高于左侧,但是差距不大,我们假设得分公式中第二项左侧明显占优势(因为右侧已经访问过了,左侧还没访问过),此时左侧![](img/728a11c3b11e1b323358ada0345f8c98.jpg)得到展开,得到图(3),接着继续迭代两次得到图(4)。 + +关于 MCTS,Browne et al. (2012)的"A Survey of Monte Carlo Tree Search Methods"给了一个很好的研究综述。Guo et al. (2014) 发表在 NIPS 上的"Deep Learning for Real-Time Atari Game Play Using Offline Monte-Carlo Tree Search Planning"一文提供了一种使用 MCTS 来提供 Atari 游戏样本,并使用监督学习(也就是之前所提到过的[模仿学习](https://zhuanlan.zhihu.com/p/32575824))的方法来训练 Atari 游戏策略。他们使用 DAgger 算法来实现模仿学习,回忆 DAgger 算法的第一步是从数据集训练策略,第二步是用策略取得新样本,第三步是**人工标注新样本**,第四步是将新样本并入数据集。他们在第三步中引入 MCTS 来对每个样本进行“应该选择哪个动作”的标注。之所以要在 MCTS 之外训练一个游戏策略,一方面是因为在实时游戏中,MCTS 通常效率很低,而且耗费很大计算量(_ 注:这也是 AlphaGo Lee 版使用大量计算力,每一盘据说耗费电费数千美元的原因,而进入 AlphaGo Master 版认为神经网络已经效果不错了,那么 MCTS 的地位就下降了,决策更加轻量级:MCTS 的引入是为了弥补神经网络不准确的缺陷 _);另一方面,训练一个策略可能会有很多其他用途,比如做一些感知 (perception) 和泛化 (generalization) 到其他状态。 + +## 轨迹优化 + +**轨迹优化** (Trajectory Optimization) 是连续控制中的重要问题。在这里,我们假设状态和行动都是连续的。使用控制的记号,我们的问题可以被写作:![](img/f7fe54896d48390439183ea3b7e0dad0.jpg),其中 x 代表状态 s,u 代表行动 a,f 代表状态转移(动态,dynamics)。在这里,因为约束是等号,对于这样的确定性问题,我们也可以写作一个无约束问题:![](img/1d23ede5053008d7db880a180b7f7cff.jpg),由于非常复杂通常不会这么去写,但是这么写是无约束的所以一定程度上更方便使用一些基于梯度的优化算法。我们需要的是以下几类梯度:![](img/9f53de5bc7dce2a82299c411a183b664.jpg),使用类似于反向传播的链式法则,我们就能求出目标函数关于行动的梯度。 + +在实践中,这样的一阶算法通常效果并不是很好,使用二阶微分信息通常是非常有帮助的:原因是,考虑到第一次行动![](img/46153327395220b1e7d56d80a5025c78.jpg),在整个式子里面出现了很多次,因此![](img/46153327395220b1e7d56d80a5025c78.jpg)的值是非常敏感的,相对来说最后一次行动的影响则非常小,这样得到的梯度是非常病态 (ill-condition) 的,容易梯度爆炸或者梯度消失。因此使用一阶算法在实践中往往不太可行,但是好消息是这样的问题结构事实上容易得到一些非常有效的二阶算法。注意这些算法并不去训练一个神经网络,但对解决这一类的或者相关的增强学习问题很有帮助。 + +![](img/493e5eae0dbf745d2b4cc2e892bdd5ad.jpg) + +关于轨迹优化,有两类思想有所区别的算法(_ 注:我不知道这两个名词应该怎么翻译,就随便写一个意译了 _)。一类是**射击法** (shooting method),这类方法只关注去优化每一个时刻的行动![](img/73c613b5fd668889d500bfc284cbc5ca.jpg),而把状态![](img/f0017ba74157ab6dcc71add24224bad2.jpg)看作是行动产生的结果。本质上就是![](img/1d23ede5053008d7db880a180b7f7cff.jpg),之所以叫做射击法是因为如上图,动作稍稍一晃就会打出差别很大的轨迹来。 + +![](img/9551ac9f9c9c8f4b9e4e03e9e52326cd.jpg) + +另一类叫做**搭配法** (collocation method),同时优化每个时刻的状态![](img/f0017ba74157ab6dcc71add24224bad2.jpg)和行动![](img/73c613b5fd668889d500bfc284cbc5ca.jpg),同时使用约束来将状态和行动维系起来(甚至有时候只优化状态,而把行动看成状态转移的手段)。本质上就是![](img/2a6fa79a1da8041096c475ca21765631.jpg)。搭配法有点像上图,一条轨迹上由很多钉子确定,然后可以通过移动钉子来改变这条轨迹。它相对射击法来说更加稳定,但是问题更难求解(需要引入约束条件);如果我们不想引入约束,那么就会遇到如射击法一样稍微一晃差异很大的问题。 + +在为非线性动态系统提供求解方法之前,我们先来研究一类线性模型,以及对应的控制器 LQR (Linear Quadratic Regulator, 线性二次型调节器)。它研究的问题是![](img/1d23ede5053008d7db880a180b7f7cff.jpg)中,动态系统为![](img/405a6b9f64f940c14c1aced4b56008f0.jpg)的线性形式,这一类线性系统非常有局限性,但同时也特别好求解;代价函数为![](img/d4ee4d0ec4e6d27310c9101e92d71a46.jpg)的二次形式(我们在优化问题中就不关心常数项了),因此叫线性二次型调节器。这一类问题可以在一定程度上泛化到非线性模型,因此我们先来研究如何求解这个问题。 + +LQR 的主要想法依然是类似于动态规划的逆推算法。首先,我们先从递推边界![](img/5a047a5ca04e45726dba21b8302977da.jpg)阶段开始研究。假设我们现在![](img/532d36c09879be111eee7e83ed361fee.jpg)都已经确定了,先当它们是常数进行处理,那么我们的目标函数仅剩![](img/47db6ded12a8e323305b437a3c0381bf.jpg),可以写作![](img/e403d9835dcc5568d8df467f6535d61a.jpg) (Q 函数在这里是未来代价,cost-to-go,之前我们出现过未来收益 reward-to-go),其中![](img/da121a4c5a6b21690f8072df161a98b1.jpg),以及![](img/8b73cb62a17078d13456adbc8e45ed62.jpg)。该函数的一阶最优化条件是![](img/114f4cbcf37e7f3113985acb15922faf.jpg)(这里假设![](img/84de26bb16301f23ddbef54b82230640.jpg)了,不然需要稍微变化下)。这样,假设矩阵可逆,我们在最后一个阶段的最优决策![](img/edf93baa472bacd8dd9434f58ea6414b.jpg)就可以写成![](img/e2c3a75c9898a7c2bfe707438dd3bc9d.jpg)的函数:![](img/1a8f45977029b7978d600a0087c67b27.jpg),其中![](img/6893ee69657ee53daca99e781803a67a.jpg),![](img/6dd1c9b767765a9ad7c11f7d552fc9ed.jpg)。这某种意义上可以看作是最后一个阶段的策略函数:给定状态,最优决策是状态的线性函数。如此,我们就能用最后一个阶段的状态完全确定最后一个阶段的最优决策了,使用代入消元法,我们得到![](img/9d6b8d362486cc7aecac97c0264bc07c.jpg) 。将其展开后进行一些整理,我们得到![](img/56c6f529c995972d0f582513d0519075.jpg),其中![](img/2cfd2c716d68b94da3e4bd7bd48de45b.jpg),![](img/56dc83936edacb650ea97faf8faa7abd.jpg)。 + +现在让我们倒退到倒数第二个阶段,研究![](img/93bee57396d470c221c8116b3a8ffed9.jpg)。其表达式为![](img/6ea11555b45efbcfceeeac975bab1d8b.jpg)注意![](img/5a08ff907173761e9ca6920c92ae223a.jpg)。里面的 V 函数我们在前面已经确定了是一个关于![](img/e2c3a75c9898a7c2bfe707438dd3bc9d.jpg)的二次型,而![](img/ab5031f9f2650d8508eff6ea8df57aa8.jpg)是一个线性函数,因此 V 关于![](img/9ab0daac17ec4daee5f8ba0c18865070.jpg)是二次的,经整理后得到![](img/399a675883c01129cab2dce253e9db89.jpg),其中![](img/f51eefc9c4c162883c6ce7b1b29a92a8.jpg),![](img/fcefb54b8994420b2d90290d15307599.jpg)。根据一阶最优性条件![](img/443a96e3d52ab59de6de1af2a00bff8e.jpg),最优决策![](img/866f65b3be3987cd8d46227b92ac2346.jpg),其中![](img/48e2fb013319b2e44334656028d808ba.jpg),![](img/9b40d084aa1217b678aa67fe11f449fc.jpg)。然后继续得到![](img/54b5111b0705ccfbabb1bcb07b252ff6.jpg),以此类推。因此,LQR 中,我们为了求出最优决策,通常会执行以下过程: + +for ![](img/a84856940a40224287e16ba72e5edd11.jpg) to 1: + +1. ![](img/ea4a20574f303559b9cba7b9c7665d80.jpg),![](img/cc59ccc6f5016a8b7d66605cef4f56ab.jpg) +2. ![](img/a559dc46053e8b6e30b2ba2a5ec76d0c.jpg),因此![](img/6b7003809791bf91d347cf4ac7337ddb.jpg),其中![](img/a180ccd5586d20462a02929ec61eb6a7.jpg),![](img/04689577bce0087146ee4653528ac28a.jpg)。 +3. ![](img/4c212d675cf484302bba7259001e2e7c.jpg),![](img/24cf113492d21e59451dd2bfe2bc0059.jpg),从而![](img/95febb4b111ff56c73297e9b9f6e91bb.jpg)。 + +其中,![](img/de97ae28a91fc04a42d6ea970700baa2.jpg)代表了我们从状态![](img/f0017ba74157ab6dcc71add24224bad2.jpg)执行![](img/73c613b5fd668889d500bfc284cbc5ca.jpg)后直到最后的最小代价,![](img/30bef27bb7fd32632209e0a9c624f4f5.jpg)是从状态![](img/f0017ba74157ab6dcc71add24224bad2.jpg)出发直到最后的最小代价,有点像之前的 Q 函数和值函数的关系。求解完后,如果我们知道初始状态![](img/3d5d6d97d61d6e7a16541f2392baa301.jpg),就可以在每一步执行![](img/9f39ed8e55a5171ff8196a95d809a764.jpg)作为最优策略。 + +LQR 在随机系统中也能起到一定作用。在某些高斯随机过程中,如![](img/3537c9b928abc5edf83d84105bacda28.jpg),相当于是在原来的确定性过程中加入了一些(单峰)高斯噪音,噪音协方差阵可以是时变的,这个在建模中还是比较普遍的。这样的系统中最优解依然是![](img/9f39ed8e55a5171ff8196a95d809a764.jpg),也就是说在这个问题中,我们可以忽略高斯噪音的影响。其原因主要是高斯分布具有对称性(解析地看,高斯随机变量的二次型的期望有解析解)。但是,如果噪音和状态、行动有关,那么问题就变得非常复杂了。 + +现在我们将 LQR 算法应用到非线性问题中去。对于可微的非线性问题,为了利用 LQR,我们期望它能使用某种近似手段近似到 LQR 的结构中去。一个非常直接的做法是在函数局部性上做点文章,局部进行泰勒展开进行近似,为了在形式上保持一致,我们将动态函数 f 展开到一阶:![](img/0dccffc8075f76044b5fa5c5fed1db97.jpg),把代价函数 c 展开到二阶:![](img/8f0448f45d1d652c054f70ca3aa3eb4f.jpg) 。从而,在每个展开点![](img/1d2d1bcd2018ea28e212bb8f5cee49a1.jpg),我们以它为原点建立坐标系,令![](img/5080dfeb7c0fc4ff07f63562cab54865.jpg),![](img/83ad44e8d9f31b4eb5605c00db4a8c3a.jpg),定义新的![](img/75e942875e93fbbaf859adfbba1e14e0.jpg),![](img/eda1f619949fe4b477d49f47c84e662f.jpg),其中![](img/5ede8aa2c5000f2b0890e44f21bc5581.jpg),![](img/20c75a031a1b18c35f91c880efef3691.jpg),![](img/cd6d52ed1397584b31bcc3883f102490.jpg)。这样我们就可以用这么一套新东西来运行 LQR 了。这个方法叫做迭代 LQR (iterative LQR, iLQR),一个简单版本迭代执行以下步骤直到收敛: + +1. ![](img/5ede8aa2c5000f2b0890e44f21bc5581.jpg),![](img/20c75a031a1b18c35f91c880efef3691.jpg),![](img/cd6d52ed1397584b31bcc3883f102490.jpg)。 +2. 使用 LQR 逆推得到![](img/d62f837d8482cfb4baf47e784cf4483b.jpg),其中每一步代入![](img/5080dfeb7c0fc4ff07f63562cab54865.jpg),![](img/83ad44e8d9f31b4eb5605c00db4a8c3a.jpg)。 +3. 根据上一步的结果,顺推得到所有的![](img/f927e5ceac43077134bc501f0c36e25c.jpg),其中![](img/7a83e328f81b4938a5b997aa56e4db41.jpg),![](img/9845666762ee0a2ca62338790529bd65.jpg)。 +4. 使用第三步的结果更新![](img/51b0855b9a7f2f5d2d44b5ba9f275a16.jpg)。 + +这个方法事实上是一种近似的牛顿法来求解![](img/1d23ede5053008d7db880a180b7f7cff.jpg)。牛顿法求解的过程也是每一步![](img/fc4951180627f83da0765ea266e6b18d.jpg),而 iLQR 的想法也跟牛顿法一样,局部近似一个复杂的非线性函数。但是 iLQR 并不等价于牛顿法,而确切使用牛顿法需要将动态系统 f 展开到二阶:![](img/3b9fa0f5fd5834ea978f395dcac5d7d6.jpg),这样的方法也被称为**差分动态规划** (Differential Dynamic Programming, DDP)。在实际中我们通常不这样使用,因为 f 通常是一个向量值函数,做二阶微分以后会变成一个张量,会比较复杂。在实践中,一阶微分就效果不错了,虽然它需要更多步数才能收敛,但是考虑到计算二阶微分的成本,还是值得的(iLQR 只是 DDP 方法去掉了 f 的二阶微分)。 + +![](img/1c08ff63758ab19dfd35c24181fb0d60.jpg) + +在使用牛顿法来求解非常复杂的非线性函数时也有一些技巧。如,如果我们每一步都执行![](img/fc4951180627f83da0765ea266e6b18d.jpg),不见得是好的。这是因为梯度和 Hessian 阵都是局部的,而实际函数并不是一个二次函数。如实际函数是蓝色曲线,在蓝色点上近似展开到二阶,便“认为”该函数是红色的二次函数,然后尝试去找这个函数的最低点。然而,这个解可能在实际中并不好(在红叉位置,走得太远了),甚至比原来的解更大了,实际最优解在五角星位置。所以一个比较好的处理方法是做一些线搜索 (line search),也就是把 iLQR 的第三步中,![](img/9845666762ee0a2ca62338790529bd65.jpg)改为![](img/d6609e668dbe1a9022dffecb50120404.jpg),其中![](img/82005cc2e0087e2a52c7e43df4a19a00.jpg)是一个较小的系数。注意如果![](img/82005cc2e0087e2a52c7e43df4a19a00.jpg)是 0,那么在迭代中轨迹不会发生变化。因此![](img/82005cc2e0087e2a52c7e43df4a19a00.jpg)决定了如何关于旧轨迹和新轨迹的插值比例系数。一个比较简单的方法是搜索![](img/82005cc2e0087e2a52c7e43df4a19a00.jpg),直到它提高了预期设定的一个比例。关于这块文献,Mayne and Jacobson (1970) 最早提出了 DDP 算法,Tassa et al. (2012) 给出了做 iLQR 的实践指导意见,Levine and Abbeel (2014) 给出了不用线搜索的另一种信赖域方法。 + +Tassa et al. (2012) 使用 iLQR 做模型预测控制 (Model-Predictive Control) 来控制模拟机器人。这并不是与深度增强学习紧密相关的,只是使用了 iLQR 方法。他们的控制架构是在每一步中, + +1. 观察状态![](img/f0017ba74157ab6dcc71add24224bad2.jpg); +2. 使用 iLQR 来计划![](img/3847044b8f3b76dafa5be88a4ae3bcd3.jpg),来最小化![](img/c1ad9ea26e494612965253539807b189.jpg); +3. 执行![](img/73c613b5fd668889d500bfc284cbc5ca.jpg),抛弃![](img/a24f6c1417e09ddc14c4f2dc77d3393a.jpg)。 + +也就是说,在每一步中先使用 iLQR 对未来若干步进行计划,然后只采用第一步的策略,然后下一次重新进行多步规划。本质上它不是一个“学习”过程,所有执行内容都是在线计划的,因此能够非常好地抗新加入的外力干扰(如何在外力干扰下让机器人保持直立,如何在模型错误也就是质量错误的情况下还能保持直立),稳定性非常好。(_ 注:非常建议大家自己去看一下这个视频:_[http://homes.cs.washington.edu/~todorov/media/TassaIROS12.mp4](https://link.zhihu.com/?target=http%3A//homes.cs.washington.edu/%7Etodorov/media/TassaIROS12.mp4))这个主要意义是,如果我们能有模型的话,即便我们不做学习也能够做很多事情。 + +在真实问题中,我们的模型可能会很复杂,甚至很难说能写下一组物理方程就能表示问题;和人类、互联网互动的就更加不确定了,我们能做到最好的可能就是从数据中进行一些建模了,在接下来我们将继续介绍基于模型的增强学习算法。 \ No newline at end of file diff --git a/docs/ucb-cs294-112-notes-zh/9.md b/docs/ucb-cs294-112-notes-zh/9.md new file mode 100644 index 0000000000000000000000000000000000000000..e0832e5e037ea9cf394f28d95af6b7656b21cf3f --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/9.md @@ -0,0 +1,133 @@ +# (9) 用数据拟合模型 + +> 作者:[谢天](https://www.zhihu.com/people/xie-tian-55-77) +> +> 来源:[POST 馆](https://zhuanlan.zhihu.com/c_150977189) + +## 基于模型的增强学习:框架 + +在上一篇中,我们在假设模型动态![](img/7eddc344bf3a3724aa2ea06320b90275.jpg)已知的情况下,发现可以利用模型动态做很多事情。在连续控制中,我们提到了使用 iLQR/DDP 的轨迹优化方法,这些方法主要要用到模型动态的一阶微分![](img/b1572ffc28875eceb6bdfc9339d151ee.jpg);我们甚至了解到,Tassa et al. (2012) 使用 iLQR 做模型预测控制,在我们知道模型是什么的情况下可以不通过学习步骤制定出非常鲁棒的控制(使用 MPC,哪怕模型是错的,也有很强的鲁棒性)。如果我们不知道模型的话,要利用这个方法,就得去学习这个模型,然后对其进行微分。在离散问题中,我们也提到了蒙特卡洛树搜索 (MCTS) 方法。在 MCTS 方法中,我们要去模拟状态的转移,就要知道模型系统的动态,这样我们才能返回到祖先节点进行其他行动的搜索。因此,如果我们知道模型动态![](img/64c613a4857247b600ba1b633c35d712.jpg),或者随机的分布![](img/51e4e556c8cc9e6e99844de4ce5017e1.jpg),那么我们就可以使用上一篇的方法。因此我们考虑去从数据中学习![](img/7eddc344bf3a3724aa2ea06320b90275.jpg),然后根据它来进行之后的计划。这样的方法被统称为**基于模型的增强学习** (model-based reinforcement learning)。 + +一个最简单版本的基于模型的增强学习算法(v0.5 版),执行以下三步: + +1. 运行某种基本策略![](img/53db70b7acd91a9af3baf6b8b3158908.jpg)(如随机策略)来收集样本数据![](img/d97aebf95713474e67d99f37b6ec149b.jpg)。 +2. 通过最小化![](img/f183e2116930d3b0b438387f5329e0f5.jpg)的方法来学习模型动态![](img/77cff52584c80e30470b34d9850cbee3.jpg)。 +3. 根据![](img/77cff52584c80e30470b34d9850cbee3.jpg)来计划未来行动。 + +第一步的策略对于驾驶汽车来说可能是随便转方向盘,显然不是什么好策略,但是也可以用这个来得到一些数据。第二步是去构建一个损失函数并最小化用模型预测出来的状态和真实发生的状态来拟合。第三步则是使用上一篇中的方法来进行计划。这样简单的方法在有些时候也可以起作用。本质上,这正是经典机器人学中系统识别 (system identification) 问题中在使用的方法:现在已经有一个参数形式的![](img/77cff52584c80e30470b34d9850cbee3.jpg)了,如已经有了机器人的运动方程,但是很多参数譬如质量和长度什么的不知道,而需要通过回归等方法去估计(有点像待定系数法)。此外,这样的方法中,这个“基本策略”还是要有所讲究的:譬如说不能总是执行一个行动,因为这样我们学习到的模型可能无法适应很多从来没见过的行动;即便基本策略执行各种情况,但是执行它可能错过重要的状态空间部分,这样也是不行的(当然这个说法本身就很玄学了)。总体来说,这个 v0.5 版本对于我们有一个利用物理知识手工推导的模型系统动态方程(我们有丰富的先验知识),只有个别(如 10-30 个)参数不知道的情况下还是很好用的:这时候随机策略可能足够好。 + +![](img/1b0ab2765caf207a07e5194ca55a0e6a.jpg) + +但在一般情况下,v0.5 版本明显是有缺陷的。如现在智能体在这样一个斜坡坡面上训练,我们的目标是到达山顶。我们第一步进行一些随机走动,训练数据如红色曲线;然后我们需要拟合一个模型,来预测行动如何影响智能体的高度(因为我们的目标是尽可能往高处爬):我们通过红色部分的数据,得到的结论可能是越往右走,高度越大;最后一步,我们使用这个模型去进行规划,得到的结果就是如黄色轨迹一般坠落山崖。这里出现的问题主要就是如我们之前在[模仿学习](https://zhuanlan.zhihu.com/p/32575824)一篇中讲到的**分布不匹配** (distribution mismatch) 问题:我们的训练数据分布和实际遇到的情况不匹配。在这里,我们通过分布![](img/9d2788b87afa62cdb2e42b5e2be64b35.jpg)来收集数据,但是实际用于规划行动时,我们不再执行![](img/92546131c30d45daa7f1ce8eeba04c9a.jpg)下的分布,遇到的是![](img/b4015417e4fab132708d8ac1d66690b8.jpg),与之前遇到的分布是不同的。即便我们训练了一个在分布![](img/9d2788b87afa62cdb2e42b5e2be64b35.jpg)下很好的模型,但这个模型在![](img/b4015417e4fab132708d8ac1d66690b8.jpg)所遇到的状态下可以任意差。值得一提的是,这样的分布不匹配问题在使用越具表达力的模型簇时越严重。因为如果像我们跟前面所说的一样只缺少几个待定参数,而模型具体形式已经知道了,那么其实对数据要求还是不高的;而使用如深度神经网络这样具有高表达力的模型,则会把红色部分的数据拟合得相当好(_ 我觉得是一种过拟合 _),然后尝试去遵循这个模型,就掉下去了。因此,越具有表达能力的模型事实上能越好地拟合![](img/9d2788b87afa62cdb2e42b5e2be64b35.jpg)分布下的数据,而这并不代表我们更加了解实际面对的分布![](img/b4015417e4fab132708d8ac1d66690b8.jpg)。 + +为了解决这个问题,我们跟之前模仿学习相似,收集更多我们更关心的“实际分布”下的数据,以使得![](img/04f3f5eff7a46c7deea752c89d338c9e.jpg)。因此我们的 v1.0 版基于模型的增强学习算法如下: + +一个最简单版本的基于模型的增强学习算法(v0.5 版),执行以下三步: + +1. 运行某种基本策略![](img/53db70b7acd91a9af3baf6b8b3158908.jpg)(如随机策略)来收集样本数据![](img/d97aebf95713474e67d99f37b6ec149b.jpg)。 +2. 通过最小化![](img/f183e2116930d3b0b438387f5329e0f5.jpg)的方法来学习模型动态![](img/77cff52584c80e30470b34d9850cbee3.jpg)。 +3. 根据![](img/77cff52584c80e30470b34d9850cbee3.jpg)来计划未来行动。 +4. **执行这些行动,并得到一系列结果数据![](img/d88e16608c6b67606a8cbe1d97b3d42c.jpg)加入到![](img/3300f92a16244b4d821dcd91df491aae.jpg)中。反复执行 2-4 步。** + +前三步与 v0.5 版无异,而 v1.0 版增加了第四步,收集新数据加入样本中并重新学习模型动态,希望藉此消除分布不匹配的问题。这个算法和 DAgger 不同,因为 DAgger 是为了适应策略的改进,而这里只是一些独立的强化学习步骤。 + +![](img/2f570252a319a6a6c3238154007beb0f.jpg) + +现在我们再对这个算法进行一些改进。考虑到如果我们犯了一个错误如何纠正:如果智能体失足坠落山崖,那么它就牺牲了,没什么进一步好做的了,这个是致命错误;但并不是所有错误都是致命的。如我们驾驶一辆车,每次问我们的模型,如果我们方向盘朝正前方,那么汽车会往什么方向走?然后模型总是回答,会稍微往右一点点:实际答案是我们的车会往正前方开,但是稍微往右一点点这个答案也相当接近正确答案了。但是麻烦在于,如果我们按照这个模型去行动,每一个时刻开车我们都以为需要加一些向左方向进行补偿,每一时刻方向盘都向左一点点的话,加起来很快这个车就会开出道路了。因此,即便我们的模型只有些许错误,我们在每个时刻尝试进行一些补偿,那么最后这些补偿加起来会成为很严重的错误。 + +![](img/3824deac3edc513457b08d1fcc3ee89f.jpg) + +基于模型的增强学习 v1.5 版跟上一篇中的稳健算法类似,进行一些 MPC。如果我们发现根据我们的规划走,这个车却向左偏了,当误差到一定程度时,我们就可以重新进行规划,希望这个重新规划的方法可以补偿。框架如下: + +1. 运行某种基本策略![](img/53db70b7acd91a9af3baf6b8b3158908.jpg)(如随机策略)来收集样本数据![](img/d97aebf95713474e67d99f37b6ec149b.jpg)。 +2. 通过最小化![](img/f183e2116930d3b0b438387f5329e0f5.jpg)的方法来学习模型动态![](img/77cff52584c80e30470b34d9850cbee3.jpg)。 +3. 根据![](img/77cff52584c80e30470b34d9850cbee3.jpg)来计划未来行动。(如使用 iLQR) +4. **基于 MPC 的思想,仅执行计划中的第一步行动,观察到新的状态![](img/d2683f5b20dac211246c30b1e0a7c2dd.jpg)。** +5. **将这一组新的![](img/3bc3544880a4efc804364152e40ab6aa.jpg)加入到![](img/3300f92a16244b4d821dcd91df491aae.jpg)中。反复执行若干次 3-5 步之后,回到第 2 步重新学习模型。** + +也就是说,每次我们仅执行整个计划序列中的第一步,然后走一步后对整个问题进行重新规划。重新规划路径有助于解决模型误差问题。第三步规划做得越频繁,每一次规划需要达到的精度越低,可以容忍更差的模型和更糟糕的规划方法。相对更简单的规划方法也可以起到作用,如可以接受更短的时长(也就是更加短视地规划问题),甚至一些随机采样的方法经常也可以做得很好。Tassa et al. (2012) 的演示中就说明了即便模型很离谱,MPC 也在倾向于做一些正确的事情。 + +在这个 v1.5 版本中,最难的一点是做规划。越精密的模型和方法,计划未来行动的代价越大,使得在线进行越困难。如玩 Atari 游戏,然后使用 MCTS 的方法,那么计算代价就会相当高。而 Guo et al. (2014) 使用模仿学习训练策略,则能更好地实现在线进行游戏。 + +![](img/268607a1c845c0f027feb229d3b8ba9e.jpg) + +MPC 方法可能很好,但是计算代价有可能会很大。我们之前的想法是构造一个策略函数![](img/4c5d89d0f9cec3ce2096ec064da2efd1.jpg)来得到具体的行动。为了得到策略函数,我们可以写出如上图的计算图来表明策略函数![](img/4c5d89d0f9cec3ce2096ec064da2efd1.jpg)如何影响收益,从而我们将梯度或者什么东西进行一系列反向传播。这个做法对确定性策略非常容易,也能拓展到随机策略。基于这种想法吗,我们有了基于模型的增强学习算法 v2.0 版: + +1. 运行某种基本策略![](img/53db70b7acd91a9af3baf6b8b3158908.jpg)(如随机策略)来收集样本数据![](img/d97aebf95713474e67d99f37b6ec149b.jpg)。 +2. 通过最小化![](img/f183e2116930d3b0b438387f5329e0f5.jpg)的方法来学习模型动态![](img/77cff52584c80e30470b34d9850cbee3.jpg)。 +3. **通过![](img/77cff52584c80e30470b34d9850cbee3.jpg),使用反向传播的方法来优化策略函数![](img/753092e4f965d22839d8ceb952c7c3fb.jpg)。** +4. **执行**![](img/753092e4f965d22839d8ceb952c7c3fb.jpg)**,将新的**![](img/3bc3544880a4efc804364152e40ab6aa.jpg)**加入到**![](img/3300f92a16244b4d821dcd91df491aae.jpg)**中。反复执行 2-4 步。** + +在第三步,我们不再是去用某种方法来规划未来路径,而是使用收益的梯度通过反向传播的方法来优化策略函数。第四步还是为了解决分布不匹配的问题,收集新数据用来重新训练模型动态。需要明确的是,![](img/dad139946fdd1363ecd86d20700a53a6.jpg) 只是去最小化损失函数,而![](img/868db68e71ec9cabbe333cb77dd676bc.jpg) 则是通过有点类似于 BPTT 训练 RNN 的方法进行求解的。当然这个方法本身并不是很好的,主要原因和训练 RNN 难度很大一致。我们的![](img/dad139946fdd1363ecd86d20700a53a6.jpg) 可能是很复杂的函数,我们对其求导,然后反向传播很多阶以后梯度可能会消失或者爆炸,在数值上很病态。有一些技巧可以对这些问题进行改善。对以上四个版本的框架进行比较,得到以下小结: + +* v0.5 版:我们收集随机样本,训练模型动态,并进行规划。比较适合模型动态形式基本已知,只需要去求解少数参数的情形。优点在于方法简单,没有迭代过程;缺点主要在于分布不匹配问题。 +* v1.0 版:针对分布不匹配问题,采用交替进行收集数据和重新训练模型并规划的方法。优点在于同样简单,而且解决了分布不匹配的问题;缺点在于它还是一个开环控制过程,在误差下容易出现“小车跑出道路”的问题。 +* v1.5 版:在 v1.0 版的基础上加入了 MPC 进行闭环控制,在每一步运行后进行重新规划。优点在于对小的模型误差鲁棒性较好,在模型不准确的时候也可以得到很好的控制;缺点在于它的计算代价比较大,需要一边在线运行规划算法,一边收集数据。 +* v2.0 版:不再使用 MPC 进行反复重新规划,而考虑构建一个策略函数,通过反向传播去更新策略函数。优点在于它在运行时计算代价较小,只需要根据策略函数执行行动,比规划算法容易很多;缺点在于它可能在数值上非常不稳定,尤其是在一些随机域之中。 + +这些算法很多都已经被用于实际问题中。如 Deisenroth et al. (2011) 在 RSS 的一文"[Learning to Control a Low-Cost Manipulator using Data-Efficient Reinforcement Learning](http://link.zhihu.com/?target=https%3A//rse-lab.cs.washington.edu/postscripts/robot-rl-rss-11.pdf)"中,使用 PLICO (Deisenroth and Rasmussen, 2011, ICML, "[PILCO: A model-based and data-efficient approach to policy search](http://link.zhihu.com/?target=http%3A//mlg.eng.cam.ac.uk/pub/pdf/DeiRas11.pdf)") 方法进行真实物理系统中的机器人控制。该文中,模型动态并不是一个神经网络,而是一个相对比较简单的高斯过程 (Gaussian Process, GP)。里面的方法本质上是 v2.0 版的框架,只是中间的![](img/dad139946fdd1363ecd86d20700a53a6.jpg) 被确定为高斯过程。 + +1. 运行某种基本策略![](img/53db70b7acd91a9af3baf6b8b3158908.jpg)(如随机策略)来收集样本数据![](img/d97aebf95713474e67d99f37b6ec149b.jpg)。 +2. **通过最大化![](img/996ffb65aa798cbb637ecaaa6f2799b5.jpg)的方法来学习模型动态![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg)。** +3. **通过**![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg)**,使用反向传播的方法来优化策略函数**![](img/753092e4f965d22839d8ceb952c7c3fb.jpg)**。** +4. 执行![](img/753092e4f965d22839d8ceb952c7c3fb.jpg),将新的![](img/3bc3544880a4efc804364152e40ab6aa.jpg)加入到![](img/3300f92a16244b4d821dcd91df491aae.jpg)中。反复执行 2-4 步。 + +其中最难的一点是第三步,在这里针对 GP 模型有比较特定的方法,但是大意对其他模型也是适用的。假设初始分布![](img/7723e64b08d33bad4335678557852ecb.jpg)已经给定为高斯分布,我们可以用当前学到的模型动态![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg)来计算分布![](img/ad98f28ac580a60494c218f07718188a.jpg)。初始分布如果没有给定,可以使用一些拟合高斯分布的手段。现在我们已经有了一个策略函数,也有了转移分布(模型动态),我们可以将其复合,然后求其边缘分布得到下一个阶段的分布![](img/ad98f28ac580a60494c218f07718188a.jpg)。如此这般,反复得到之后每个阶段的分布,然后使用这些边缘分布来求期望收益,再求解这个期望收益关于策略函数中参数![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)的梯度。具体来看,如果边缘分布![](img/7723e64b08d33bad4335678557852ecb.jpg)是一个高斯分布,那么如果我们的系统被认为是一个高斯过程的话,我们可以得到下一阶段状态的边缘分布![](img/d712476a938088d39e03829878f18156.jpg)的积分表达式,但这个分布通常不是一个高斯分布(可以是混合高斯):因此我们采用矩方法(匹配前两阶矩)将边缘分布![](img/d712476a938088d39e03829878f18156.jpg)投影到高斯分布![](img/ad98f28ac580a60494c218f07718188a.jpg)上,作为一个近似。(_ 具体表达式请参见论文,RSS 和 ICML 两篇都有 _)对于每一阶段,我们都使用其边缘分布![](img/7723e64b08d33bad4335678557852ecb.jpg)来对收益求期望,最后总的期望收益就是![](img/564d65198a235e7280ebe23c27aeaa2b.jpg),如果![](img/148a731bd7d2ba04c7aadf91c8458f74.jpg)性质较好(一般收益函数的采用都会去限制在一个比较好求解的范围内,以方便求解)且![](img/7723e64b08d33bad4335678557852ecb.jpg)是一个高斯分布的话,那么实际上这个期望是容易求的,对其使用链式法则求导即可(_ 收益是与均值、方差有关的,而均值、方差是和策略参数有关的,因此使用链式法则求导 _)。 + +Deisenroth et al. (2011) 使用这个方法去控制廉价的机械臂(摄像头 130 美元,机械臂 370 美元),来堆叠彩色立方体块。状态是立方体块的踪迹,行动是对机械臂的致动。在视频中,机械臂有 4 个关节的自由度,代价函数使得立方体块尽可能接近目标;学习实验次数很少,只用几十次。方法很简单,但是在实际问题中还是处理得很好。 + +在基于模型的增强学习中,我们非常关注的一点是我们应该用什么样的模型簇,这其实是一个权衡的问题。 + +* 和上一个例子一样,我们可以使用诸如**高斯过程**这样非常有效的贝叶斯方法。如果我们使用高斯过程,输入是![](img/b637c4140d6cb6a419012469a63e87d4.jpg),输出是![](img/d2683f5b20dac211246c30b1e0a7c2dd.jpg);优势在于,高斯过程和其他非参数贝叶斯模型的数据效率很高,这是因为它们可以在先验知识和现有证据之间做出取舍,以抵抗过拟合或者数据不足 (low-data regime):这对于基于模型的增强学习是很重要的,因为这种学习的速度取决于前期训练得有多好,而前期训练通常是数据不足的,如果前期严重过拟合了,就很容易卡住,后期也很难进行推进;缺点在于,高斯过程对于非光滑的系统动态效果不佳,而且对于数据大的情况下这个计算就会非常慢,训练是关于数据量立方级增长的,而神经网络则快很多。 +* 第二个选项是使用诸如**神经网络**这样非常强大的参数模型,输入是![](img/b637c4140d6cb6a419012469a63e87d4.jpg),输出是![](img/d2683f5b20dac211246c30b1e0a7c2dd.jpg)。如果用一个欧氏(![](img/1139d1606365c5ba8cbad1d11dac0b96.jpg))损失函数的话相当于训练一个高斯分布![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg)的均值,也可以使用更复杂的损失函数,处理多峰问题(见[第二篇](https://zhuanlan.zhihu.com/p/32575824)),或者选择除了高斯分布外更具表达能力的分布。它的优点不言自明,模型表现力非常强,而且非常擅长使用大量的数据,也适合推广到高维系统;它的缺点在于在数据不足的时候表现不佳,因此在基于模型的增强学习中使用神经网络要倍加小心,因为在早期训练中可能会做出非常诡异的举动。 +* 其他选项譬如高斯混合模型 (Gaussian Mixture Model, GMM),在机器人学中用得挺多的。它用很多![](img/3bc3544880a4efc804364152e40ab6aa.jpg)元组来训练 GMM,使用![](img/b637c4140d6cb6a419012469a63e87d4.jpg)来确定是在状态行动联合空间中的哪一块,然后再确定![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg)。如果相信模型是譬如分段线性的,那么这样的混合线性模型可能比较适用。(_ 这块我自己不是很熟悉,请大家多指教 _)同样也有很多其他特定领域的模型,如果你对你的系统比较了解,就可以写出一些方程,然后去学习那些未知参数,通常表现很好。 +* 其他能做的事情譬如说给定视频的一帧,来预测某行动后的之后帧会是什么,这种高维预测问题在之后会涉及。 + +Nagabandi et al. (2017) 最近的"[Neural Network Dynamics for Model-Based Deep Reinforcement Learning with Model-Free Fine-Tuning](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1708.02596)"一文中使用了 v1.5 版本的框架(同时使用了一些无模型的方法来进行微调)来进行模拟机器人控制。这里基于的模型是神经网络,而第三步的行动规划只是做较短期的的随机采样(随机采样多条行动轨迹,然后选取最好的一条)。这样做的原因是对神经网络数据不足时的过拟合倾向进行补偿,只进行短期规划使得错误不会积累太多;同时进行 MPC 重新规划,最佳路径只选取第一步行动。如果模型预测错误,也问题不大,可以重新规划。在不同种类机器人沿着检查点一步一步走的问题中,机器人移动速度不算很快,但是方案相对比较灵活,适应各种检查点的摆放轨迹。在 OpenAI Gym 的游泳项目中(游泳前进提高速度),如此基于模型的方法可以用很少的数据点(12k 个)完成无模型方法需要很多数据点(4m-11m 个)才能达到的目标,即便可能游得没有无模型方法那么快,但至少样本效率很高。基于模型的方法样本效率很高,但是渐进偏倚很大,因为最后动作精度都受限于模型。基于模型的方法使用 12k 个样本点达到收益函数 900,而无模型的方法通过 4m-12m 个样本点达到收益函数 4800;这个例子清晰地告诉我们两者区别原因在于**基于模型的方法尝试的是提高模型拟合程度(需要的样本数可能只是无模型的百分之一、千分之一),而无模型的方法则是去提高收益函数。** + +## 从全局模型到局部模型 + +从最开始到现在,我们讨论的模型几乎都是**全局模型** (global models),也就是说,我们学习一个![](img/7eddc344bf3a3724aa2ea06320b90275.jpg),对于整个系统中都起作用。出于这个目的,我们尝试使用单一的函数去拟合,譬如一个巨大的神经网络。它对于我们所能访问到的状态行动处表现不俗,也可以用它来进行很好的决策。在我们的 v1.0 版框架中,问题在于如果![](img/7eddc344bf3a3724aa2ea06320b90275.jpg)一开始估计不好,那么规划步就会去探索因为模型错误而被乐观估计的区域(模型指向了错误的![](img/d2683f5b20dac211246c30b1e0a7c2dd.jpg),恰好比较优秀,规划器以为会访问到,而实际不会)。譬如说对于一个只会行走的生物,模型却认为它下一步能飞起来,那么规划器会尝试去规划它下一步怎么飞,而事实上它并不能飞。(_Levine 教授的题外话是如果在编写一个物理模拟器的话,调试过程中不妨尝试使用一些增强学习算法,能帮助我们了解怎么样的行动会导致这个模拟器出 bug。如早期版本的 MuJoCo 有很多 bug,可能会使只能在地上爬的机器人站起来甚至飞起来,只是优化算法能弄清如何在这里面作弊。_) + +要把一个模型学习得很好其实是压力山大的,我们需要弄出一个很好的模型,在状态空间的绝大多数区域都收敛到一个很好的解。有些时候我们可以使用较短的规划期、MPC 等手段,但总体来说还是问题很大的。**在某些任务中,模型比行动策略要复杂很多**。譬如把一个有柄的杯子拿起来,我们的策略很简单,拿住杯柄握起来放到对应位置就行,跟各种物理关系不大;而这样一个问题的物理模型则非常复杂,如手可能是软的会变形,接触点可能很多,等等。因此将这些东西全盘考虑进来进行准确预测会很难。 + +相较于训练很好的全局模型,有一些我们可以做的事情,譬如训练**局部模型** (local models)。在我们之前所述的方法中,做轨迹优化通常需要的仅仅是模型在某点的导数,而这正是局部信息。因此,我们某种程度上也可以认为不见得一定要训练好一个全局模型才能做好优化问题,而训练一些能对梯度等局部信息有表征的模型也可以:事实上这个就简单很多了。 + +现在我们只来关心![](img/b1572ffc28875eceb6bdfc9339d151ee.jpg)。知道了这些信息之后,我们就可以用 iLQR 等方法来进行轨迹优化了。因此,我们的想法不是去拟合模型动态,而仅仅是去拟合关于当前轨迹或者策略的![](img/b1572ffc28875eceb6bdfc9339d151ee.jpg),譬如使用线性回归的方法。注意到 LQR 很好的特性是它是线性的,而且这个策略是可以在真实环境中运行的。 + +![](img/4df7ca93c58705962903e09c6811ab76.jpg) + +我们尝试对一个增强学习过程进行拆解(_ 注:这边图里![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)也变成![](img/648811253cdbfe19389964c25be56518.jpg)了,但我还是尝试把它区分开 _)。首先我们通过运行策略函数![](img/32ddbd60dbeab3d395ebfec5f1a8167c.jpg),来收集轨迹![](img/0077275f50d1e428aa93f877d54b69ae.jpg)。然后我们拟合模型动态![](img/39e0c1687c6b5063ee6c20328748f07a.jpg):为了简单起见,我们假设模型动态是一个高斯分布![](img/97f31cbcb5130521427b30a4667a9040.jpg),均值可能是比较复杂的非线性函数,然后有一个方差,基本上比较确定但是稍微有一些噪音。这个假设对连续系统还是比较合理的。我们假设在每个时刻,都有一个线性化表达式![](img/0f01f2cb77ec97dd1df26e4b6b3bc41e.jpg),对于不同时刻矩阵是不同的。这样近似其实已经很有表达力了,因为在不同的时间,前面的系数矩阵可能完全不同,但在给定时间下只是线性而已。这样近似更是因为我们通常只会用到![](img/dad139946fdd1363ecd86d20700a53a6.jpg)的一阶导,![](img/22c2fa35492148fabae560cf4dfa3e88.jpg):因此如果我们能拟合![](img/ae4366cfbd033baff1d82fc2b97b17b0.jpg),那么我们就能得到这两个微分结果。从而,我们可以用这个来使用 iLQR 方法改进我们的策略函数![](img/32ddbd60dbeab3d395ebfec5f1a8167c.jpg),然后重新下一个循环。 + +在这个大框架下,其实有很多值得探讨的问题。第一个问题是,**使用怎样的策略**(这里也是控制器 controller)**去收集数据**。我们现在不尝试去拟合一个全局模型了,所以选用怎么样的策略的重要性就更强了。如果我们只是随便选策略的话,那么我们很难去拟合当前策略下的局部信息。回顾 iLQR,执行完毕以后可以得到![](img/841586446e889c9f82e9a427c5271082.jpg),然后最优控制策略是![](img/9845666762ee0a2ca62338790529bd65.jpg)。一个非常简单的选择(v0.5 版)是直接把 iLQR 的选取![](img/4d19aaf807de3e5d449012896b1d26bf.jpg)作为锚点,![](img/62dba043c987f00fac2600b13e66dc88.jpg),当在行动中有偏差或者漂移的时候就会出问题。进一步我们选择 iLQR 给出的最优控制(v1.0 版),![](img/f5472a5d9cb8eef7ee4ea263635c7fca.jpg),看起来这样的确定性策略有点儿“太好了”,如果我们想拟合局部信息,可能总是采取某种意义上的最优策略并不好,可能会总是往一个地方不停钻,使用基本一样的数据去拟合会使局部信息非常病态。一个更好的版本(v2.0 版)执行高斯分布:![](img/5385856533bc6ab9fd5685fe96032eb3.jpg),其中均值是 iLQR 做出的最优控制,并**加入了一些噪音,使得数据不总是基本一样**,数据多样性稍微加强。在方差的选择上可能需要注意,因为我们想得到不同的轨迹,但也不是彻底不同:这样我们尝试的就是去拟合全局模型而不是局部模型了,但这样的线性化模型对全局模型的效果是很差的。 + +一个比较建议的方差是设置![](img/807111a383a1488083b7583beae74257.jpg)。这个原因是代表了我们从状态![](img/f0017ba74157ab6dcc71add24224bad2.jpg)执行![](img/73c613b5fd668889d500bfc284cbc5ca.jpg)后直到最后的最小代价的![](img/a559dc46053e8b6e30b2ba2a5ec76d0c.jpg),而如果![](img/c4049e59ae75c518d332fa892ba54101.jpg)很大的话,变动![](img/73c613b5fd668889d500bfc284cbc5ca.jpg)对 Q 值影响就很大:如果变动![](img/73c613b5fd668889d500bfc284cbc5ca.jpg)对 Q 值很敏感,那么我们就不要变动![](img/73c613b5fd668889d500bfc284cbc5ca.jpg)很多;反之,它对噪音的承受力就强,我们可以选择噪音的余地就大。我们加入噪音并不想很去干扰 Q 值,因此我们更愿意去加入一些对 Q 影响较小的噪音。相较于我们之前提到的 LQR 是去优化![](img/9753a5f88f862e742e5ce7c5462e96d5.jpg),有一个有趣的结论是,使用 v2.0 方法我们事实上是在最小化一个有定义的目标函数:![](img/421e1e071b1f2c84a98ad4e82b4835cc.jpg),也就是期望代价减去熵。其中熵函数定义为![](img/6d5458ce1760d8cbd41c652a7acc8928.jpg)。这样的目标其实是试图去找到噪音最大并且代价最小的的策略(双目标规划),也就是使策略尽可能随机,同时保持一个低代价(高收益):我们去学习一个局部模型,想做的恰好是这样的事情。这样的解又被称为**最大熵** (maximum entropy) 解。 + +第二个问题是如何去**拟合这个局部模型**。假设我们已经收集了一些轨迹转移数据![](img/d913b691c9d047fe34265115efbf3d1e.jpg)。我们使用高斯分布![](img/97f31cbcb5130521427b30a4667a9040.jpg)的模型动态,因为我们在上一篇中已经提到过对于这样的问题直接做 LQR 还是能得到最优解,我们可以忽略噪音的影响。最简单的拟合方法是我们直接使用线性回归,譬如假定![](img/d75d5fd98124935663412abf4603c86c.jpg)(可以有个截距项)。一种更好的做法是考虑到在相近的时间点,模型动态可能是比较接近的,因此贝叶斯线性回归([一个很细致的讲解在这里](http://link.zhihu.com/?target=http%3A//blog.csdn.net/daunxx/article/details/51725086))可能是一个比较好的选择,可以使用某些全局模型作为先验分布:我们可以把所有数据用来拟合一个全局模型,并把它作为先验,这样可以提高数据的使用率。这样的想法比较像是我们有一个全局模型,效果还可以但是不够完善,由此我们把它作为先验来提高局部模型的拟合。 + +当然,学习全局难度的模型需求量远比局部模型高,因为局部模型的矩阵形式比诸如神经网络全局模型简单很多,但是局部模型的难点在于每次策略更新之后,局部模型就得推倒重来,以收集更好的样本(也可以说是在线 (on-policy) 的基于模型的增强学习):两者是有权衡的,在一个盈亏平衡点后可能学习全局模型的代价相对更小了。具体代价和具体问题紧密相关,有些问题很容易去拟合全局模型,但是有些问题则很难。 + +![](img/b294bfc678e4edaa5c943deb8639dd61.jpg) + +第三个问题是,我们更新策略函数总是希望让它能与现在有所不同,那么**如果策略函数变化太大会怎么样**?在上图中,真实模型是绿色线的非线性函数,我们使用一个蓝色线的线性模型去拟合(因此在中部一点相切)。我们进行一步更新的时候,可能到达一个比较远的位置(红色竖虚线投影),此时蓝色拟合模型和绿色真实模型有很大的差别。在蓝色线性模型下,我们认为轨迹只会是蓝色的虚线;而我们实际运行时,由于蓝色拟合模型完全是错误的,实际上我们拐到了红色虚线这样很远的地方,就完全在计划之外了。我们之所以叫蓝色模型为局部模型,是因为它只能告诉我们在局部范围内如何改进策略,而如果我们策略变动过大,则这样不见得是一个改进(甚至可能是完全错误的),因为我们的局部模型太只关注局部了。我们要做的事情,是去限制每次迭代中,策略函数改变了多少,使得每一步走得不远。 + +那么我们怎么做才能使得新的策略与原策略接近呢?我们的策略函数是![](img/5385856533bc6ab9fd5685fe96032eb3.jpg),那么根据 Markov 性,一个轨迹的发生是![](img/641f46acacfaeca8956209ad0c87099f.jpg)。如果我们的新的轨迹分布![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg)和老的轨迹分布![](img/d766d20d1b586bdd1d3bdbfd302f9bc0.jpg)比较相近,那么模型动态也会比较接近。[KL 散度](http://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Kullback%25E2%2580%2593Leibler_divergence)是一个描述两个分布之间差异度的常见度量标准,![](img/3d2e44e745da6ff02d5b73ae9dd99264.jpg)。从而,我们在更新策略的时候,如果加入一个限制条件![](img/07298c7e524f8ef8c9a5b99ea00217f7.jpg),就能保证两个策略下轨迹分布的差异能被控制在一个局部之内。顺便一提,使用 KL 散度来控制轨迹分布差异的想法在除此之外的很多其他无模型的增强学习算法(如 TRPO)中也有应用。 + +现在我们来对 KL 散度的具体形式进行一些推导。因为两个轨迹分布的初始分布和模型动态是一样的,只有策略函数有所区别,因此现在有![](img/9bb9c3f1681153abfe74fc18e386fbe2.jpg)和![](img/cc6f4a2a376a1ba985675076df839791.jpg)。有点类似于策略梯度法,它们相减以后很多项也可以消去,得到![](img/cae188ad0186dba4b716e7ad0f2e2c5b.jpg),从而 ![](img/90e34fd5b09834befbd211d3e8dc4641.jpg)。将前一项进行重写,![](img/ea64a80e774640a26b218072827ba66d.jpg),然而![](img/7edc8e8380808f23a396b439035f8626.jpg)。因此,![](img/d49129dc87c9660437708570f5ec142c.jpg)。回顾我们刚才使用加入高斯噪音的 v2.0 版本策略函数![](img/5385856533bc6ab9fd5685fe96032eb3.jpg)是去优化![](img/759c4c7f82ca0c1612b75cfc15a49d22.jpg)的,因此如果我们能把![](img/ce170caf802e8c7aef5bcdcbcec814d1.jpg)搞到目标函数里面,那么我们就能用 iLQR 作为均值加上随机高斯噪音来优化这个问题。 + +一般我们会采用拉格朗日乘子法来把约束放到目标函数里面。一个对偶梯度下降法(Dual Gradient Descent,DGD,其实在这里是上升)是这么做的:考虑问题![](img/9c14e24f69944e3ac895ab410447c294.jpg),则拉格朗日函数![](img/db1c30e727a653d3d8be4d8a74c26121.jpg),因此对偶问题为![](img/23368154ce40df3828fa1c5df91cfa03.jpg),其中![](img/781a88b84016ef2451bc48141f2896b3.jpg)(_ 假设强对偶,感觉意思是不强对偶的话也强行这么做先 _),从而通过优化对偶变量的方式,最优对偶变量下的优化问题正是原始问题的解。假设在给定拉格朗日乘子![](img/5e8df2ba7e47a784c714d176ed8bbb7a.jpg)下,![](img/2081132f6bcc25d7c55706b822c09ae7.jpg),对其求导得![](img/2b799d257d8c2468f431742d807e8a8b.jpg),这是因为一阶最优性条件保证了![](img/b5f1f59d63acfa9c1d981f6dcf94c9d2.jpg)。因此对偶梯度法做循环迭代以下三步: + +1. 在给定拉格朗日乘子![](img/5e8df2ba7e47a784c714d176ed8bbb7a.jpg)下,求解最优的![](img/746412aca56dc8b00d584537fa21d668.jpg)。 +2. 求解![](img/e13f23b31f6c246a812a33419c0afe90.jpg)。 +3. 拉格朗日乘子走一个梯度步![](img/192458096516bdf515c04f846b5ba4e9.jpg)。 + +这里面最难实现的应该是第一步。我们要用 DGD 方法来求解之前所说的约束下问题![](img/32dea7f0a1dc974de5b61f04e88b8012.jpg)。其中,![](img/d49129dc87c9660437708570f5ec142c.jpg)。那么它的拉格朗日函数是![](img/f2146af519509f931f838e902dfc4619.jpg),现在给定拉格朗日乘子下,要去最小化这个函数,求出![](img/f5436bda01b5eaa36a2c128b916af600.jpg)。后面![](img/655bae996afa47a5f9073a57dce9e4c6.jpg)是常数项先扔掉,然后把整个式子除掉![](img/5e8df2ba7e47a784c714d176ed8bbb7a.jpg)(不严格地,假设乘子不为 0),那么原优化问题和![](img/f84ac4398f50bbb8ec5a28d62ddb831c.jpg)同解。那么我们只需要构造一个新的代价函数![](img/63218a9c53c160c52b5e4a44051538e3.jpg),然后执行 LQR,加入高斯噪音就可以了。迭代执行以下步骤: + +1. 构造![](img/63218a9c53c160c52b5e4a44051538e3.jpg),并使用 LQR 加入高斯噪音的方法得到![](img/63247bf31cb12ff5876af42a54685b29.jpg)。 +2. ![](img/d14f7b5e2c067b44531df60ee3b1d3c5.jpg),更新乘子![](img/33eb52f28d6ddf819c3b1dc2cd609cfd.jpg)。 + +控制两个策略间的 KL 散度在很多场合下都是非常有意义的(譬如在无模型增强学习中也存在采样的误差),而且控制两个策略间的 KL 散度等价于控制轨迹分布之间的 KL 散度。 + +Levine et al. (2015) 发表在 ICRA 上的"[Learning Contact-Rich Manipulation Skills with Guided Policy Search](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1501.05611)"一文阐述了使用局部模型,使用 KL 散度信赖域,结合 iLQR 进行规划来控制机器人的应用。机器人学习堆叠乐高块(插入动作),通过旋转机械臂来拟合模型动态,每收集一些(10 条)轨迹就停下来几秒用来更新局部模型,并更新策略函数。机械臂在反复试验后,逐渐倾向于完成插入乐高块的任务。这个工作并不训练神经网络,只是做局部的线性模型拟合来研究怎么去做这个任务。高斯噪声使得机器人倾向于进行一些探索。 + +Fu et al. (2016) 的发表在 IROS 上的"[One-shot learning of manipulation skills with online dynamics adaptation and neural network priors](http://link.zhihu.com/?target=http%3A//rll.berkeley.edu/iros2016onlinecontrol/online_control.pdf)"一文将全局模型和局部模型结合起来,使用全局模型做先验,进行贝叶斯回归来训练局部模型,来控制机器人完成任务。特别的是,机器人使用过去的经验来完成新的任务(任务不同,但有相似结构)。机器人使用过去的经验来训练一个全局模型![](img/14b0568f0eb9d67c67f0d66a594eeeb0.jpg),然后接受新任务的很多轨迹信息![](img/2b78dfeeaee80ce658fa36dd28dc94b5.jpg),在线训练一个经验估计![](img/c862bc90e7ddbe8ce687da918004db80.jpg),从而得到后验局部模型![](img/a12e4e326c12105329656bcb1fe98fca.jpg),做 MPC 每一步重新规划。在视频中可以看到,因为在线学习,所以在试验过程中一边就把局部模型给学习了,逐渐适应任务以提高执行水平。 \ No newline at end of file diff --git a/docs/ucb-cs294-112-notes-zh/README.md b/docs/ucb-cs294-112-notes-zh/README.md new file mode 100644 index 0000000000000000000000000000000000000000..bd9fe671b5cff770939374b902cd5d386d39d3ae --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/README.md @@ -0,0 +1,39 @@ +# UCB CS294-112 深度强化学习中文笔记 + +> 作者:[谢天](https://www.zhihu.com/people/xie-tian-55-77) +> +> 来源:[POST 馆](https://zhuanlan.zhihu.com/c_150977189) +> +> 工作进度上越早落后,你就会有越充足的时间赶上。 + +* [在线阅读](https://apachecn.github.io/ucb-cs294-112-notes-zh) +* [在线阅读(Gitee)](https://apachecn.gitee.io/ucb-cs294-112-notes-zh/) +* [ApacheCN 机器学习交流群 629470233](http://shang.qq.com/wpa/qunwpa?idkey=30e5f1123a79867570f665aa3a483ca404b1c3f77737bc01ec520ed5f078ddef) +* [ApacheCN 学习资源](http://www.apachecn.org/) + + +## 下载 + +### Docker + +``` +docker pull apachecn0/ucb-cs294-112-notes-zh +docker run -tid -p :80 apachecn0/ucb-cs294-112-notes-zh +# 访问 http://localhost:{port} 查看文档 +``` + +### PYPI + +``` +pip install ucb-cs294-112-notes-zh +ucb-cs294-112-notes-zh +# 访问 http://localhost:{port} 查看文档 +``` + +### NPM + +``` +npm install -g ucb-cserjiusi-yiyier-notes-zh +ucb-cserjiusi-yiyier-notes-zh +# 访问 http://localhost:{port} 查看文档 +``` diff --git a/docs/ucb-cs294-112-notes-zh/SUMMARY.md b/docs/ucb-cs294-112-notes-zh/SUMMARY.md new file mode 100644 index 0000000000000000000000000000000000000000..e84f0ec70e53073fd21b843150797ab4a475e381 --- /dev/null +++ b/docs/ucb-cs294-112-notes-zh/SUMMARY.md @@ -0,0 +1,13 @@ ++ [UCB CS294-112 深度强化学习中文笔记](README.md) ++ [(1) 简介](1.md) ++ [(2) 模仿学习](2.md) ++ [(3) 增强学习简介](3.md) ++ [(4) 策略梯度法](4.md) ++ [(5) 演员-评论家算法](5.md) ++ [(6) 基于值函数的方法](6.md) ++ [(7) 深度增强学习中的 Q 学习方法](7.md) ++ [(8) 最优控制与规划](8.md) ++ [(9) 用数据拟合模型](9.md) ++ [(10) 基于模型的增强学习的策略训练](10.md) ++ [(11) 概率图模型与软化增强学习](11.md) ++ [(12) 逆增强学习](12.md) diff --git a/docs/ucb-cs294-112-notes-zh/img/0077275f50d1e428aa93f877d54b69ae.jpg b/docs/ucb-cs294-112-notes-zh/img/0077275f50d1e428aa93f877d54b69ae.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca9c30def65f5f893d2151ff18ebf702b3784d35 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0077275f50d1e428aa93f877d54b69ae.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/008f6438536c3fdc55c7ad12a772b371.jpg b/docs/ucb-cs294-112-notes-zh/img/008f6438536c3fdc55c7ad12a772b371.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3eb87889da5f52cbf679a10a5e273c3641195a26 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/008f6438536c3fdc55c7ad12a772b371.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/00a4a76b5a1fd26db1ec3e16b9b26cd2.jpg b/docs/ucb-cs294-112-notes-zh/img/00a4a76b5a1fd26db1ec3e16b9b26cd2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ebdfe322a58998106c8d9d9593bfa178f20926d8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/00a4a76b5a1fd26db1ec3e16b9b26cd2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/014733d0a225577a47245d2f742c3c4e.jpg b/docs/ucb-cs294-112-notes-zh/img/014733d0a225577a47245d2f742c3c4e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b0a8a31aaf2cdf434aac4f2d9b6900a94db798f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/014733d0a225577a47245d2f742c3c4e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/023c5a434c2fdba6ec87e7e5404a136d.jpg b/docs/ucb-cs294-112-notes-zh/img/023c5a434c2fdba6ec87e7e5404a136d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..89a763d7f1027741671faf7be245918a5fc36ff5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/023c5a434c2fdba6ec87e7e5404a136d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0252227b14a80e8988d93e2975c8344a.jpg b/docs/ucb-cs294-112-notes-zh/img/0252227b14a80e8988d93e2975c8344a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e854f6858f05d3d1a217aced83d3fbf3845061db Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0252227b14a80e8988d93e2975c8344a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/025861dbd6577265884153627bdc1fdd.jpg b/docs/ucb-cs294-112-notes-zh/img/025861dbd6577265884153627bdc1fdd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70598c05873ebdb499e44a631ba3b3f5fd7cdba7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/025861dbd6577265884153627bdc1fdd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/034d8c0587560aae5aa9224af7c916a6.jpg b/docs/ucb-cs294-112-notes-zh/img/034d8c0587560aae5aa9224af7c916a6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1712b8aa684b1b27e42b6f9e60c675fd6c41f49b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/034d8c0587560aae5aa9224af7c916a6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/040240c6cd77c1b6762a16c341a83d7c.jpg b/docs/ucb-cs294-112-notes-zh/img/040240c6cd77c1b6762a16c341a83d7c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0eac31d55a8e23e0b739121876af1395f45129da Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/040240c6cd77c1b6762a16c341a83d7c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/04689577bce0087146ee4653528ac28a.jpg b/docs/ucb-cs294-112-notes-zh/img/04689577bce0087146ee4653528ac28a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38d412b901278061791c0632ecccd1a289587576 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/04689577bce0087146ee4653528ac28a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/04cf23f3661fd33654067b566eaacd34.jpg b/docs/ucb-cs294-112-notes-zh/img/04cf23f3661fd33654067b566eaacd34.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d67883c2566e6443fc4dc4bab39324520e8e4dd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/04cf23f3661fd33654067b566eaacd34.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/04f3f5eff7a46c7deea752c89d338c9e.jpg b/docs/ucb-cs294-112-notes-zh/img/04f3f5eff7a46c7deea752c89d338c9e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6187a1fa4f9dbfe667e03a0db6c4f7716aee36b5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/04f3f5eff7a46c7deea752c89d338c9e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/052c7bfe395c453f5ea1308b52b2df29.jpg b/docs/ucb-cs294-112-notes-zh/img/052c7bfe395c453f5ea1308b52b2df29.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eaa16f418c7b1287f56d057e58adfff764c14bbd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/052c7bfe395c453f5ea1308b52b2df29.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/053274c85b06311846bd8d945d08cde3.jpg b/docs/ucb-cs294-112-notes-zh/img/053274c85b06311846bd8d945d08cde3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..651bfa929956523bee61c9972a3a896741d6f3e0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/053274c85b06311846bd8d945d08cde3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/05b4db5abba0a812e5eafb610432560a.jpg b/docs/ucb-cs294-112-notes-zh/img/05b4db5abba0a812e5eafb610432560a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8dcbb02fb29e771e115e71d60886aa8ed5126c8a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/05b4db5abba0a812e5eafb610432560a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0625450a0e0592be0cc5eab8234d8a03.jpg b/docs/ucb-cs294-112-notes-zh/img/0625450a0e0592be0cc5eab8234d8a03.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da3de2cceb82eb9cfd95ef7f60dadd3e16cda4db Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0625450a0e0592be0cc5eab8234d8a03.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/06b8cebbd8e55f5c0a2d8da13f29a176.jpg b/docs/ucb-cs294-112-notes-zh/img/06b8cebbd8e55f5c0a2d8da13f29a176.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d309999e737a342be6e1ca683efe907dc7b2e85 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/06b8cebbd8e55f5c0a2d8da13f29a176.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/07298c7e524f8ef8c9a5b99ea00217f7.jpg b/docs/ucb-cs294-112-notes-zh/img/07298c7e524f8ef8c9a5b99ea00217f7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..54e7675f040bf559541004138d9979836a688be5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/07298c7e524f8ef8c9a5b99ea00217f7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0792b1972415a26e7015bc70d7d59b7c.jpg b/docs/ucb-cs294-112-notes-zh/img/0792b1972415a26e7015bc70d7d59b7c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4feedea1fb59a02ed67b54045ac9024056dfcd56 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0792b1972415a26e7015bc70d7d59b7c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/079e5856d4585ffaa8feaf3703735b8d.jpg b/docs/ucb-cs294-112-notes-zh/img/079e5856d4585ffaa8feaf3703735b8d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f5d770ffbeb24de95174934f1e439b4c322e0be9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/079e5856d4585ffaa8feaf3703735b8d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/07c5d5d170123f2fe44b9eb3b39c2ee2.jpg b/docs/ucb-cs294-112-notes-zh/img/07c5d5d170123f2fe44b9eb3b39c2ee2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fa998eeec625bd0640a3a0283c3c897b22e12bf Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/07c5d5d170123f2fe44b9eb3b39c2ee2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/08a1b571bcf6dd341c5c5bac8a2e8066.jpg b/docs/ucb-cs294-112-notes-zh/img/08a1b571bcf6dd341c5c5bac8a2e8066.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b3befa4d365a803017d426505bcae6362f3e743 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/08a1b571bcf6dd341c5c5bac8a2e8066.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/08af9511d0a24b663367639a38f2c07d.jpg b/docs/ucb-cs294-112-notes-zh/img/08af9511d0a24b663367639a38f2c07d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f2fb9436ec2350cccd40aef5921657f88f0cab0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/08af9511d0a24b663367639a38f2c07d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/09b2bc93e6d534c58907ccad2503aa8e.jpg b/docs/ucb-cs294-112-notes-zh/img/09b2bc93e6d534c58907ccad2503aa8e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f85e262c986af293a8d36a76460cfa917472e8d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/09b2bc93e6d534c58907ccad2503aa8e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/09b51215156e2ed649755527fdb826af.jpg b/docs/ucb-cs294-112-notes-zh/img/09b51215156e2ed649755527fdb826af.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6758d5759de31ab6e089201faf5543644e9ea283 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/09b51215156e2ed649755527fdb826af.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0a2ccfdf4c05691db6c3e0c7a6bdaed1.jpg b/docs/ucb-cs294-112-notes-zh/img/0a2ccfdf4c05691db6c3e0c7a6bdaed1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..387fe8347edb50305bdbbad77deb3b87fa090972 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0a2ccfdf4c05691db6c3e0c7a6bdaed1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0a911e0d8f373efff4ded9620fb6ec31.jpg b/docs/ucb-cs294-112-notes-zh/img/0a911e0d8f373efff4ded9620fb6ec31.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05f27a20369b1f1dca3e861217478273e2263ea3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0a911e0d8f373efff4ded9620fb6ec31.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0a98b6bf6f718b534b8d03cf9d11d8ff.jpg b/docs/ucb-cs294-112-notes-zh/img/0a98b6bf6f718b534b8d03cf9d11d8ff.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6b94493dc802ff157e8de030f4185b8eaac4a07 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0a98b6bf6f718b534b8d03cf9d11d8ff.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0bd9dc59373d157413e99268d63d0ef4.jpg b/docs/ucb-cs294-112-notes-zh/img/0bd9dc59373d157413e99268d63d0ef4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..37db706d25b2e7169ac0a7984ec2a24e00d14a04 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0bd9dc59373d157413e99268d63d0ef4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0caf5c9e1169acc95f605b3216099b56.jpg b/docs/ucb-cs294-112-notes-zh/img/0caf5c9e1169acc95f605b3216099b56.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1134439d5dc75e6c2ccd256e54ca8535f1d58eea Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0caf5c9e1169acc95f605b3216099b56.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0cd050164be1bb7d1b12dbb66798f4cb.jpg b/docs/ucb-cs294-112-notes-zh/img/0cd050164be1bb7d1b12dbb66798f4cb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c9f84f22d36e22e15e127202649b9b399857afe Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0cd050164be1bb7d1b12dbb66798f4cb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0d25522cb5092918469444242bdbc96f.jpg b/docs/ucb-cs294-112-notes-zh/img/0d25522cb5092918469444242bdbc96f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f75a3770b6cc7d8d216d57655a6f4738ed398054 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0d25522cb5092918469444242bdbc96f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0da1daa31bbc9b3beb6cc0c019fffa3a.jpg b/docs/ucb-cs294-112-notes-zh/img/0da1daa31bbc9b3beb6cc0c019fffa3a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..232b96df1122e59ae9179990a376055dfad062ec Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0da1daa31bbc9b3beb6cc0c019fffa3a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0dccffc8075f76044b5fa5c5fed1db97.jpg b/docs/ucb-cs294-112-notes-zh/img/0dccffc8075f76044b5fa5c5fed1db97.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9cd6fc34cf01c2c3edc1bfc73d9edcc0f7546e2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0dccffc8075f76044b5fa5c5fed1db97.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0e23f7e6ffd9093e2e4f840c66d2fd28.jpg b/docs/ucb-cs294-112-notes-zh/img/0e23f7e6ffd9093e2e4f840c66d2fd28.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e5073e91b4bb11525ffd8bd1ad4a15b8f728ecf Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0e23f7e6ffd9093e2e4f840c66d2fd28.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0e3b2539d37a16b811786a3550a06d05.jpg b/docs/ucb-cs294-112-notes-zh/img/0e3b2539d37a16b811786a3550a06d05.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c89e6bfff870bf4c7c25f1214b1b9785413b953 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0e3b2539d37a16b811786a3550a06d05.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0e496530e9d6f5451cc50d149f93aa53.jpg b/docs/ucb-cs294-112-notes-zh/img/0e496530e9d6f5451cc50d149f93aa53.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43aebde2c43d1a6e329d986fc1662c1e9151a897 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0e496530e9d6f5451cc50d149f93aa53.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0e9f81bb72f84c3598e52b39500d871d.jpg b/docs/ucb-cs294-112-notes-zh/img/0e9f81bb72f84c3598e52b39500d871d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1fc0a7f5ef6033be88800adea287bf03a4679649 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0e9f81bb72f84c3598e52b39500d871d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/0f01f2cb77ec97dd1df26e4b6b3bc41e.jpg b/docs/ucb-cs294-112-notes-zh/img/0f01f2cb77ec97dd1df26e4b6b3bc41e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a576b91513683c4a74fc397e3c96d1172a1e051 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/0f01f2cb77ec97dd1df26e4b6b3bc41e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/107e95babf8363ef499e6a2a7b1d5cf2.jpg b/docs/ucb-cs294-112-notes-zh/img/107e95babf8363ef499e6a2a7b1d5cf2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..568c7f9a61b5a217193c52f96f28b4eb5bd06cce Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/107e95babf8363ef499e6a2a7b1d5cf2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1130833be4db17dba78ddfe929e6fb76.jpg b/docs/ucb-cs294-112-notes-zh/img/1130833be4db17dba78ddfe929e6fb76.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39dd6c6395efeb2ac573d5bd7596052b1c936e36 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1130833be4db17dba78ddfe929e6fb76.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1139d1606365c5ba8cbad1d11dac0b96.jpg b/docs/ucb-cs294-112-notes-zh/img/1139d1606365c5ba8cbad1d11dac0b96.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a21d5d9e4d8a50d2f6b7bd6157d8fbe00a063773 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1139d1606365c5ba8cbad1d11dac0b96.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/114f4cbcf37e7f3113985acb15922faf.jpg b/docs/ucb-cs294-112-notes-zh/img/114f4cbcf37e7f3113985acb15922faf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d7837ca97809f9ae4c0c1c580b92059e28dce5c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/114f4cbcf37e7f3113985acb15922faf.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1154bf9399e70c0c2dd3fbe51497e31e.jpg b/docs/ucb-cs294-112-notes-zh/img/1154bf9399e70c0c2dd3fbe51497e31e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b06241986907825d70a0f6a1a306a6f7e26e9f1b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1154bf9399e70c0c2dd3fbe51497e31e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/11835dbe89196ca9f676882d65abdd90.jpg b/docs/ucb-cs294-112-notes-zh/img/11835dbe89196ca9f676882d65abdd90.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7ecd24235f2030251150da4097b175131f8fbda Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/11835dbe89196ca9f676882d65abdd90.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1194a3644d49d0e255c252e515519caf.jpg b/docs/ucb-cs294-112-notes-zh/img/1194a3644d49d0e255c252e515519caf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..826d3795f8a6bfadbb5e57ef27b0d57c5a3b5724 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1194a3644d49d0e255c252e515519caf.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/11a80f69132567f5bda493eee62ce4db.jpg b/docs/ucb-cs294-112-notes-zh/img/11a80f69132567f5bda493eee62ce4db.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3de7079e9fbc127fbaa93e76359beb29941a2ac Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/11a80f69132567f5bda493eee62ce4db.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1282d4ff8e474c392a88fc2b328c66ea.jpg b/docs/ucb-cs294-112-notes-zh/img/1282d4ff8e474c392a88fc2b328c66ea.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4cc623e9afd93f454bbb42c34f19f7dec4cf2cd3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1282d4ff8e474c392a88fc2b328c66ea.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/12ff50744e5d2a5104f948cf15c38a51.jpg b/docs/ucb-cs294-112-notes-zh/img/12ff50744e5d2a5104f948cf15c38a51.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a6b34199fde207ed44397268557625004806100 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/12ff50744e5d2a5104f948cf15c38a51.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/132ddea60fe305e88a270e307a3b3ac0.jpg b/docs/ucb-cs294-112-notes-zh/img/132ddea60fe305e88a270e307a3b3ac0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e834132531961f689b7b9612b5a972ec973387a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/132ddea60fe305e88a270e307a3b3ac0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/144d3919c2f4007afd2a185e00f8971f.jpg b/docs/ucb-cs294-112-notes-zh/img/144d3919c2f4007afd2a185e00f8971f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..89336acafd19580a29a3d2f184960a8539032633 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/144d3919c2f4007afd2a185e00f8971f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1488f26e5c9b828cf97340094ba3da15.jpg b/docs/ucb-cs294-112-notes-zh/img/1488f26e5c9b828cf97340094ba3da15.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cfe9492dbfb81b8213f7771048e9abac9c753b2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1488f26e5c9b828cf97340094ba3da15.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/148a731bd7d2ba04c7aadf91c8458f74.jpg b/docs/ucb-cs294-112-notes-zh/img/148a731bd7d2ba04c7aadf91c8458f74.jpg new file mode 100644 index 0000000000000000000000000000000000000000..482b2b95d33ca894247caf0028d84956b1d2e421 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/148a731bd7d2ba04c7aadf91c8458f74.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/14ac07c542a73ed99672f0b9c8b296c8.jpg b/docs/ucb-cs294-112-notes-zh/img/14ac07c542a73ed99672f0b9c8b296c8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a4d06c70386314ef86105bd7c0331e5e43eece95 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/14ac07c542a73ed99672f0b9c8b296c8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/14b0568f0eb9d67c67f0d66a594eeeb0.jpg b/docs/ucb-cs294-112-notes-zh/img/14b0568f0eb9d67c67f0d66a594eeeb0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8ffc3d7b383c8809d9bc35eae7986cdbeddd8cc Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/14b0568f0eb9d67c67f0d66a594eeeb0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/14c39dca3d6bf161e27afa0e837c3702.jpg b/docs/ucb-cs294-112-notes-zh/img/14c39dca3d6bf161e27afa0e837c3702.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd78e2a34d0818e75c9571fa5121dc6d2d8026ea Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/14c39dca3d6bf161e27afa0e837c3702.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/162d69b606eb8fd32cc2fa428bd5fb19.jpg b/docs/ucb-cs294-112-notes-zh/img/162d69b606eb8fd32cc2fa428bd5fb19.jpg new file mode 100644 index 0000000000000000000000000000000000000000..033bdd99de16299757988e01cab9e7ae35e3bd63 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/162d69b606eb8fd32cc2fa428bd5fb19.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/167830654a46117ccea36be088e6b391.jpg b/docs/ucb-cs294-112-notes-zh/img/167830654a46117ccea36be088e6b391.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b1e228eb5b7b5a3d2ea32822c893ed0a85b1c88 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/167830654a46117ccea36be088e6b391.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1691efb2aaf59178894730f0ccd41656.jpg b/docs/ucb-cs294-112-notes-zh/img/1691efb2aaf59178894730f0ccd41656.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16bd9e98b598327c764000e32fa8c875e2ac807b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1691efb2aaf59178894730f0ccd41656.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/184af7ec8dde19e852920210992ae355.jpg b/docs/ucb-cs294-112-notes-zh/img/184af7ec8dde19e852920210992ae355.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab13210125d131557b0172489cdeaea13c5e4ec5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/184af7ec8dde19e852920210992ae355.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/18dc8ddcdf5b331ae5281ae4bf0fa7f6.jpg b/docs/ucb-cs294-112-notes-zh/img/18dc8ddcdf5b331ae5281ae4bf0fa7f6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43220b75b3f5e3da7c74c90d7176eb303cb214d4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/18dc8ddcdf5b331ae5281ae4bf0fa7f6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/18e5e113ec8b81912961f55d50dcabf0.jpg b/docs/ucb-cs294-112-notes-zh/img/18e5e113ec8b81912961f55d50dcabf0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3755ae228cdd506c76c0749d64d12d457775a08 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/18e5e113ec8b81912961f55d50dcabf0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/191ae297f989ba9cf2068f21e6c7e80e.jpg b/docs/ucb-cs294-112-notes-zh/img/191ae297f989ba9cf2068f21e6c7e80e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca013e75160fb9c877d8bda0e9735b44ffd93d96 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/191ae297f989ba9cf2068f21e6c7e80e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/192458096516bdf515c04f846b5ba4e9.jpg b/docs/ucb-cs294-112-notes-zh/img/192458096516bdf515c04f846b5ba4e9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d0e6f83cded502d6c4b13e4d66178ba167447a1d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/192458096516bdf515c04f846b5ba4e9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/192b1d0f2e9ddc0702efd1dda0faea3e.jpg b/docs/ucb-cs294-112-notes-zh/img/192b1d0f2e9ddc0702efd1dda0faea3e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..001c81aa8a9a74a73e97dc98f0f43eb7a89c17d0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/192b1d0f2e9ddc0702efd1dda0faea3e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/194d7a8040c17d7b3a18235c6861b6a2.jpg b/docs/ucb-cs294-112-notes-zh/img/194d7a8040c17d7b3a18235c6861b6a2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72ccd427936dd9480d122456790d578ee7177742 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/194d7a8040c17d7b3a18235c6861b6a2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1976b0af2d5bc7a171653659b34d9921.jpg b/docs/ucb-cs294-112-notes-zh/img/1976b0af2d5bc7a171653659b34d9921.jpg new file mode 100644 index 0000000000000000000000000000000000000000..300b7a547e838c8e66cd5d5a4f4412efb3d62e1e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1976b0af2d5bc7a171653659b34d9921.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/197f111118da7cac5aa7a366d59e47e2.jpg b/docs/ucb-cs294-112-notes-zh/img/197f111118da7cac5aa7a366d59e47e2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88fc2bb56cde8c4290e010388a9463d07ecb2a3b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/197f111118da7cac5aa7a366d59e47e2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/19a8daf64aa58db751dc2b8690f2ffde.jpg b/docs/ucb-cs294-112-notes-zh/img/19a8daf64aa58db751dc2b8690f2ffde.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e87c2f194f0be12b381d69b3bc55e0b914bed62 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/19a8daf64aa58db751dc2b8690f2ffde.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1a7da2bb060b7fccc98e45f517c65ba5.jpg b/docs/ucb-cs294-112-notes-zh/img/1a7da2bb060b7fccc98e45f517c65ba5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a4e71c3ffcb5a3f0a87d23ba50f480c0415af488 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1a7da2bb060b7fccc98e45f517c65ba5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1a8f45977029b7978d600a0087c67b27.jpg b/docs/ucb-cs294-112-notes-zh/img/1a8f45977029b7978d600a0087c67b27.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0cd8f0c5089083b25c4006324e08a4ebf6a6ee27 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1a8f45977029b7978d600a0087c67b27.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1ab9558c76f670356befc5109a699cf9.jpg b/docs/ucb-cs294-112-notes-zh/img/1ab9558c76f670356befc5109a699cf9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3927d33f4c75b7989781e87fafe36cd3c68dca25 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1ab9558c76f670356befc5109a699cf9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1b0ab2765caf207a07e5194ca55a0e6a.jpg b/docs/ucb-cs294-112-notes-zh/img/1b0ab2765caf207a07e5194ca55a0e6a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ebd2f4d0e92cf1f14d635e79bfc2b3efefebf6a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1b0ab2765caf207a07e5194ca55a0e6a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1b2a8b7cd624ff7839851d7f32259ca9.jpg b/docs/ucb-cs294-112-notes-zh/img/1b2a8b7cd624ff7839851d7f32259ca9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5cd21836d5b860d77661d886291664dea4b43cf Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1b2a8b7cd624ff7839851d7f32259ca9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1b744935c9b978bd95bfdcd86a4b4df0.jpg b/docs/ucb-cs294-112-notes-zh/img/1b744935c9b978bd95bfdcd86a4b4df0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..740de5c97e06dbde0c1ce7edcac4a769886b5bce Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1b744935c9b978bd95bfdcd86a4b4df0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1b9a195d55c95114edbf220e74bc6b96.jpg b/docs/ucb-cs294-112-notes-zh/img/1b9a195d55c95114edbf220e74bc6b96.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d1ad65d10d8779acacfe5638d7902ec8c8855cb Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1b9a195d55c95114edbf220e74bc6b96.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1bd05854f73537385ab1d87151f20ba1.jpg b/docs/ucb-cs294-112-notes-zh/img/1bd05854f73537385ab1d87151f20ba1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..194939017518cb650b5e629ea6b9f8ef605ec998 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1bd05854f73537385ab1d87151f20ba1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1be030530c428b580a48fffdff71dc90.jpg b/docs/ucb-cs294-112-notes-zh/img/1be030530c428b580a48fffdff71dc90.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27b8c115d0be7fd45370c10b6221385b91bf08da Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1be030530c428b580a48fffdff71dc90.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1c08ff63758ab19dfd35c24181fb0d60.jpg b/docs/ucb-cs294-112-notes-zh/img/1c08ff63758ab19dfd35c24181fb0d60.jpg new file mode 100644 index 0000000000000000000000000000000000000000..568648a6b3210f40976fdea734f4aa57c4d70358 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1c08ff63758ab19dfd35c24181fb0d60.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1c36cc85264ff1a6406eb6de6d85e8d9.jpg b/docs/ucb-cs294-112-notes-zh/img/1c36cc85264ff1a6406eb6de6d85e8d9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3f45e245fbff78d76b497e117fff3a67227d979 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1c36cc85264ff1a6406eb6de6d85e8d9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1c5e017926041e9184016bf9fb765e7f.jpg b/docs/ucb-cs294-112-notes-zh/img/1c5e017926041e9184016bf9fb765e7f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51cec01585109bc8eab0547ce3638a896434dbc5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1c5e017926041e9184016bf9fb765e7f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1ccf70e5d6a513bd68f7e03a07057d93.jpg b/docs/ucb-cs294-112-notes-zh/img/1ccf70e5d6a513bd68f7e03a07057d93.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f68e7819f082eb5823103d15fecb8828e965eda Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1ccf70e5d6a513bd68f7e03a07057d93.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1ce7177a602efa817624ed92ea889be9.jpg b/docs/ucb-cs294-112-notes-zh/img/1ce7177a602efa817624ed92ea889be9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b85a003e2e2d55430f641ac4f530b12ae13f11cb Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1ce7177a602efa817624ed92ea889be9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1d23ede5053008d7db880a180b7f7cff.jpg b/docs/ucb-cs294-112-notes-zh/img/1d23ede5053008d7db880a180b7f7cff.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0dd62195ee010abbcce0968a1de383d37ab1d2d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1d23ede5053008d7db880a180b7f7cff.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1d2d1bcd2018ea28e212bb8f5cee49a1.jpg b/docs/ucb-cs294-112-notes-zh/img/1d2d1bcd2018ea28e212bb8f5cee49a1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3da5ce50a7e5f8760e37fcf8312d1d7f87b2db6a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1d2d1bcd2018ea28e212bb8f5cee49a1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1da7ab075e4562997ef71c227c28f45f.jpg b/docs/ucb-cs294-112-notes-zh/img/1da7ab075e4562997ef71c227c28f45f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1db056fc188aa78f97e2a9f88a1923cddd9060ac Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1da7ab075e4562997ef71c227c28f45f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1dd7aa3ec2a7edbcab062793eaffb026.jpg b/docs/ucb-cs294-112-notes-zh/img/1dd7aa3ec2a7edbcab062793eaffb026.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0fef0a5654021339586867dda8a3051187aaa4af Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1dd7aa3ec2a7edbcab062793eaffb026.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1e7e65996d1d4812aa10e0831a78c94a.jpg b/docs/ucb-cs294-112-notes-zh/img/1e7e65996d1d4812aa10e0831a78c94a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..556a587bd9a3bc14fc9fab3825d0afcb7cb9527a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1e7e65996d1d4812aa10e0831a78c94a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1ea1fa7f917ed1fc0b1dc52955416814.jpg b/docs/ucb-cs294-112-notes-zh/img/1ea1fa7f917ed1fc0b1dc52955416814.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d79e98af5f7d36d3abd18dd84757c66bd94173f5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1ea1fa7f917ed1fc0b1dc52955416814.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1f086b51fd25f196185b6f742bb15cef.jpg b/docs/ucb-cs294-112-notes-zh/img/1f086b51fd25f196185b6f742bb15cef.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b08b3c6e82ec05d12a316d0f1e02eb4f231e9e59 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1f086b51fd25f196185b6f742bb15cef.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1f0feb004efc9c30bb164e3574da7fff.jpg b/docs/ucb-cs294-112-notes-zh/img/1f0feb004efc9c30bb164e3574da7fff.jpg new file mode 100644 index 0000000000000000000000000000000000000000..448ab0b12e5eeaf79e1c8454d4e977f3b9c6e62e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1f0feb004efc9c30bb164e3574da7fff.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/1f70ec452b25a3d5cfe57fe369c224dc.jpg b/docs/ucb-cs294-112-notes-zh/img/1f70ec452b25a3d5cfe57fe369c224dc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a76ce8f217ca0cf6b33febd462aa040a3732161d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/1f70ec452b25a3d5cfe57fe369c224dc.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/203c6cdf28e82793e7a31b873212f042.jpg b/docs/ucb-cs294-112-notes-zh/img/203c6cdf28e82793e7a31b873212f042.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c8881bdb6f5a8471a766578acde8b3da8e741b6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/203c6cdf28e82793e7a31b873212f042.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/206a9e0ac4413b94fc214ad070e155f9.jpg b/docs/ucb-cs294-112-notes-zh/img/206a9e0ac4413b94fc214ad070e155f9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..54d25569d3d21716a602aad2ecec403fa7dc5a81 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/206a9e0ac4413b94fc214ad070e155f9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2081132f6bcc25d7c55706b822c09ae7.jpg b/docs/ucb-cs294-112-notes-zh/img/2081132f6bcc25d7c55706b822c09ae7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8456cd4d81fb086346e9eaccdd044d351e72b2a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2081132f6bcc25d7c55706b822c09ae7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/20c75a031a1b18c35f91c880efef3691.jpg b/docs/ucb-cs294-112-notes-zh/img/20c75a031a1b18c35f91c880efef3691.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8724d31cd8eb33e060d290eddfb0261e2e8e3c26 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/20c75a031a1b18c35f91c880efef3691.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/20cf282dbeed065f247f1cb553ce09a3.jpg b/docs/ucb-cs294-112-notes-zh/img/20cf282dbeed065f247f1cb553ce09a3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf30a9a94de51ae446034d214f3f2c36a6a6fd44 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/20cf282dbeed065f247f1cb553ce09a3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/20ddd8181c2e0d0fb893637e8572d475.jpg b/docs/ucb-cs294-112-notes-zh/img/20ddd8181c2e0d0fb893637e8572d475.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ba55ca0934440a5d4eb5a5df5fe40678fd822c5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/20ddd8181c2e0d0fb893637e8572d475.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/213f51efeef2728739f668784aee324f.jpg b/docs/ucb-cs294-112-notes-zh/img/213f51efeef2728739f668784aee324f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..518f62dbb42bd2d2b60c6b418e6643244bd9bc18 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/213f51efeef2728739f668784aee324f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/214f2479a81528899936fd8bcd4c4223.jpg b/docs/ucb-cs294-112-notes-zh/img/214f2479a81528899936fd8bcd4c4223.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7a26fdf22efe8563f88b990124ac6d54e01d34d9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/214f2479a81528899936fd8bcd4c4223.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2168a711d05581caa9e1ec850051bb89.jpg b/docs/ucb-cs294-112-notes-zh/img/2168a711d05581caa9e1ec850051bb89.jpg new file mode 100644 index 0000000000000000000000000000000000000000..702c855aec5c7b7efebf73a30d4f3af81712db35 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2168a711d05581caa9e1ec850051bb89.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/21ada23d4152305a43f59b6fdf76009c.jpg b/docs/ucb-cs294-112-notes-zh/img/21ada23d4152305a43f59b6fdf76009c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..320d3e69501573193c8e420ab9852aa79de8d9f5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/21ada23d4152305a43f59b6fdf76009c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/21b586e0107fa5ed916a533c6d9ed2d6.jpg b/docs/ucb-cs294-112-notes-zh/img/21b586e0107fa5ed916a533c6d9ed2d6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab1dd9854cf6109d38fd1d96b366e01f3afb2d08 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/21b586e0107fa5ed916a533c6d9ed2d6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/21bc4cc988147190659f4a120137f8be.jpg b/docs/ucb-cs294-112-notes-zh/img/21bc4cc988147190659f4a120137f8be.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9eec05a3c091970811be37e5789170a70be5b677 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/21bc4cc988147190659f4a120137f8be.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/21ec2ab32d1af3e766487093bb20cf22.jpg b/docs/ucb-cs294-112-notes-zh/img/21ec2ab32d1af3e766487093bb20cf22.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f53085db02cdbe3db6a85a731115c6308ecb498b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/21ec2ab32d1af3e766487093bb20cf22.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/22264eb468afa38ffceba3788f9c857b.jpg b/docs/ucb-cs294-112-notes-zh/img/22264eb468afa38ffceba3788f9c857b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2297c8fe24cb795ed8b0706cabd1f4f689af199c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/22264eb468afa38ffceba3788f9c857b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2276fcae497e3c99b0b2535f978cbe30.jpg b/docs/ucb-cs294-112-notes-zh/img/2276fcae497e3c99b0b2535f978cbe30.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9eb788fb4fa31f19c1721d38a64e37a8255ebcf6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2276fcae497e3c99b0b2535f978cbe30.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/22c2fa35492148fabae560cf4dfa3e88.jpg b/docs/ucb-cs294-112-notes-zh/img/22c2fa35492148fabae560cf4dfa3e88.jpg new file mode 100644 index 0000000000000000000000000000000000000000..137ddf3c07901aba2ede70acfb005820fa7b7dc2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/22c2fa35492148fabae560cf4dfa3e88.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/23368154ce40df3828fa1c5df91cfa03.jpg b/docs/ucb-cs294-112-notes-zh/img/23368154ce40df3828fa1c5df91cfa03.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7162b3f3c428dcd2da151637bb19e05fc2a18f58 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/23368154ce40df3828fa1c5df91cfa03.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2347d8951026652c80b5552867b44aba.jpg b/docs/ucb-cs294-112-notes-zh/img/2347d8951026652c80b5552867b44aba.jpg new file mode 100644 index 0000000000000000000000000000000000000000..004611dea4c362e3a1cbf61e266862138cc8e6e1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2347d8951026652c80b5552867b44aba.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg b/docs/ucb-cs294-112-notes-zh/img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8640fdad730989624210baa8d12643d3eaace2f5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/248563d18be1eb2c930ad5f89586d805.jpg b/docs/ucb-cs294-112-notes-zh/img/248563d18be1eb2c930ad5f89586d805.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d71e3a6740b36d581680963ef32fd6c93098366d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/248563d18be1eb2c930ad5f89586d805.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/24a39f17f654bc847f5752622068d04d.jpg b/docs/ucb-cs294-112-notes-zh/img/24a39f17f654bc847f5752622068d04d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..36f86e071e7b62d90b4a51d6d5804131258eae17 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/24a39f17f654bc847f5752622068d04d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/24cf113492d21e59451dd2bfe2bc0059.jpg b/docs/ucb-cs294-112-notes-zh/img/24cf113492d21e59451dd2bfe2bc0059.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3588f685922e5ca9e42000f012283f6760113cd9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/24cf113492d21e59451dd2bfe2bc0059.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2676a8847383ea9c5b6bca782dcb4fbf.jpg b/docs/ucb-cs294-112-notes-zh/img/2676a8847383ea9c5b6bca782dcb4fbf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a34ac65f2c0086436032547c582e80b35d58e2e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2676a8847383ea9c5b6bca782dcb4fbf.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/268607a1c845c0f027feb229d3b8ba9e.jpg b/docs/ucb-cs294-112-notes-zh/img/268607a1c845c0f027feb229d3b8ba9e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2ce1c39e41fa01160485b91eb32daffdb95986a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/268607a1c845c0f027feb229d3b8ba9e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/26d3564abd9bf4ef9d813aeffd64ca74.jpg b/docs/ucb-cs294-112-notes-zh/img/26d3564abd9bf4ef9d813aeffd64ca74.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc92e4015fd1af7be5736111268d5a5d08db8604 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/26d3564abd9bf4ef9d813aeffd64ca74.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/26edd775c418202315443dd9794ef3d7.jpg b/docs/ucb-cs294-112-notes-zh/img/26edd775c418202315443dd9794ef3d7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d2a638eceb2d16c3a113e635eb5ea837f9dda068 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/26edd775c418202315443dd9794ef3d7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/27b811e4ecef0cfc80039536d63eb0c4.jpg b/docs/ucb-cs294-112-notes-zh/img/27b811e4ecef0cfc80039536d63eb0c4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..381eaf4a5a525f80b237e3933e8d3f0dd069408e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/27b811e4ecef0cfc80039536d63eb0c4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/27bce7b85d947994db6859d84a33c818.jpg b/docs/ucb-cs294-112-notes-zh/img/27bce7b85d947994db6859d84a33c818.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4212276f655ac3127cbb2d2bfebb08f695f9b7db Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/27bce7b85d947994db6859d84a33c818.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/290e810e72af69bd76c68232bac70a25.jpg b/docs/ucb-cs294-112-notes-zh/img/290e810e72af69bd76c68232bac70a25.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b777f77316a744bd45fd9e32010a1a566495e79 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/290e810e72af69bd76c68232bac70a25.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/29d98c693c9b047981aafe5813c2179f.jpg b/docs/ucb-cs294-112-notes-zh/img/29d98c693c9b047981aafe5813c2179f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..658b4b997e363f5c5b93eaa024f00ddfa02800cd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/29d98c693c9b047981aafe5813c2179f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2a17da27c62a897689d3a1cb042c4f9e.jpg b/docs/ucb-cs294-112-notes-zh/img/2a17da27c62a897689d3a1cb042c4f9e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a9cb91e0380eec8b745c4d4aece6bff525a29d7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2a17da27c62a897689d3a1cb042c4f9e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2a3a44e4fb4e9ae6125b6c30cfdfc50d.jpg b/docs/ucb-cs294-112-notes-zh/img/2a3a44e4fb4e9ae6125b6c30cfdfc50d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e38a177d839c499dc928611a400148bccdea2987 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2a3a44e4fb4e9ae6125b6c30cfdfc50d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2a6fa79a1da8041096c475ca21765631.jpg b/docs/ucb-cs294-112-notes-zh/img/2a6fa79a1da8041096c475ca21765631.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9fa8bc01616b624db028e8c5d2b5ff310095f5a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2a6fa79a1da8041096c475ca21765631.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2b7332f632a1ea54a8d1867890531282.jpg b/docs/ucb-cs294-112-notes-zh/img/2b7332f632a1ea54a8d1867890531282.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d57887602a7a3866407007a0e6c445eb33e3460 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2b7332f632a1ea54a8d1867890531282.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2b78dfeeaee80ce658fa36dd28dc94b5.jpg b/docs/ucb-cs294-112-notes-zh/img/2b78dfeeaee80ce658fa36dd28dc94b5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01e0eb47d78f924a3912f47edb2620cb9ec4d5cb Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2b78dfeeaee80ce658fa36dd28dc94b5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2b799d257d8c2468f431742d807e8a8b.jpg b/docs/ucb-cs294-112-notes-zh/img/2b799d257d8c2468f431742d807e8a8b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..027e01d16d6c87cf5716ea2941275dea09f52185 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2b799d257d8c2468f431742d807e8a8b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2b9a2a42ce080e40e5cded3e76cf40eb.jpg b/docs/ucb-cs294-112-notes-zh/img/2b9a2a42ce080e40e5cded3e76cf40eb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d73f9fee52afd65a30af048d008807d7676f124c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2b9a2a42ce080e40e5cded3e76cf40eb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2c15f0037e2f63521caf0e6105ff1518.jpg b/docs/ucb-cs294-112-notes-zh/img/2c15f0037e2f63521caf0e6105ff1518.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c695a9db0267f282d419a46ffb0842615f8a3db9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2c15f0037e2f63521caf0e6105ff1518.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2c4f7fec75101287c6d7da0e2fc23849.jpg b/docs/ucb-cs294-112-notes-zh/img/2c4f7fec75101287c6d7da0e2fc23849.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62cba305e04e16307f39d432be6898710b88e45d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2c4f7fec75101287c6d7da0e2fc23849.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2cfd2c716d68b94da3e4bd7bd48de45b.jpg b/docs/ucb-cs294-112-notes-zh/img/2cfd2c716d68b94da3e4bd7bd48de45b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ed8bfdeddf3beff8e5b54824f481245b0f604a1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2cfd2c716d68b94da3e4bd7bd48de45b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2d0414d2df862214a8d1afde81ec8b1c.jpg b/docs/ucb-cs294-112-notes-zh/img/2d0414d2df862214a8d1afde81ec8b1c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c691c1ab2b6cef7e75974361d8e61018bb49da67 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2d0414d2df862214a8d1afde81ec8b1c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2d53ff33551d1d7e3459cab90cc3dfdf.jpg b/docs/ucb-cs294-112-notes-zh/img/2d53ff33551d1d7e3459cab90cc3dfdf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4cf2996b1bea8f66a683b0508dba2d5d1af4a73b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2d53ff33551d1d7e3459cab90cc3dfdf.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2d8583076ed40b6a726822d93935d86d.jpg b/docs/ucb-cs294-112-notes-zh/img/2d8583076ed40b6a726822d93935d86d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..669b7aec01746b99ca0fb98ce896f1301e2a1144 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2d8583076ed40b6a726822d93935d86d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2df29e0634b726874df29f97681f2047.jpg b/docs/ucb-cs294-112-notes-zh/img/2df29e0634b726874df29f97681f2047.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d25c897e08ebbe9d94832370b8fbdbc7d4d7693 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2df29e0634b726874df29f97681f2047.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2ecb1ec4cf404627b7f1db2e1f72ece9.jpg b/docs/ucb-cs294-112-notes-zh/img/2ecb1ec4cf404627b7f1db2e1f72ece9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16c13d6b202eeea5b93070394344557f6f1e27b2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2ecb1ec4cf404627b7f1db2e1f72ece9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2ed9d2f4a935e221c957c6e1179fcff1.jpg b/docs/ucb-cs294-112-notes-zh/img/2ed9d2f4a935e221c957c6e1179fcff1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d55ac177af86ef9deb408a2393ab9ef525bb4308 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2ed9d2f4a935e221c957c6e1179fcff1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2ef8e3c4ee5d37a4b74a8cfea6f454b4.jpg b/docs/ucb-cs294-112-notes-zh/img/2ef8e3c4ee5d37a4b74a8cfea6f454b4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3600660ddb3b5f0b3d02c4a057cba1dbf27e80b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2ef8e3c4ee5d37a4b74a8cfea6f454b4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2f570252a319a6a6c3238154007beb0f.jpg b/docs/ucb-cs294-112-notes-zh/img/2f570252a319a6a6c3238154007beb0f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..361349fe936fd8500897b51a3a85fd6ca425dd29 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2f570252a319a6a6c3238154007beb0f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2fe1796212fa4ffcc7f2892ba1b1779d.jpg b/docs/ucb-cs294-112-notes-zh/img/2fe1796212fa4ffcc7f2892ba1b1779d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..865c794b1f6f94f26374da240a0b8ef17fa1c786 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2fe1796212fa4ffcc7f2892ba1b1779d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/2ffd09689b73ce51d5343429bde37b0e.jpg b/docs/ucb-cs294-112-notes-zh/img/2ffd09689b73ce51d5343429bde37b0e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a074855671c9c96350aaee046652133f3e7c69a0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/2ffd09689b73ce51d5343429bde37b0e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/30769aea11949ff87c45b397934c34c1.jpg b/docs/ucb-cs294-112-notes-zh/img/30769aea11949ff87c45b397934c34c1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d0f382724fafe4212a2d30fa1fd5018774d6454 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/30769aea11949ff87c45b397934c34c1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/30b354275bd10520322afea72e6fb923.jpg b/docs/ucb-cs294-112-notes-zh/img/30b354275bd10520322afea72e6fb923.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75883544a176529d56aa993b89a5cd7f30505403 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/30b354275bd10520322afea72e6fb923.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/30bef27bb7fd32632209e0a9c624f4f5.jpg b/docs/ucb-cs294-112-notes-zh/img/30bef27bb7fd32632209e0a9c624f4f5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10d4560ce7debb3e51208598b863096685006aa7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/30bef27bb7fd32632209e0a9c624f4f5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/31df9c730e19ca29b59dce64b99d98c1.jpg b/docs/ucb-cs294-112-notes-zh/img/31df9c730e19ca29b59dce64b99d98c1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..559092b5789eb695b266389822ae3409cbc639d9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/31df9c730e19ca29b59dce64b99d98c1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3204ef1222946547d995c14aa3a98ff8.jpg b/docs/ucb-cs294-112-notes-zh/img/3204ef1222946547d995c14aa3a98ff8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c99dad7c1c507554e615434df67d99a1f45c763 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3204ef1222946547d995c14aa3a98ff8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/324e73dd8b2cc22ed0f79fcbc7c91765.jpg b/docs/ucb-cs294-112-notes-zh/img/324e73dd8b2cc22ed0f79fcbc7c91765.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2171564bb2bb3b0f010fc383d92b42d24b72ade9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/324e73dd8b2cc22ed0f79fcbc7c91765.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/32ddbd60dbeab3d395ebfec5f1a8167c.jpg b/docs/ucb-cs294-112-notes-zh/img/32ddbd60dbeab3d395ebfec5f1a8167c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..abd05b81c039250d73299de780c0cc7e422052e1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/32ddbd60dbeab3d395ebfec5f1a8167c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/32dea7f0a1dc974de5b61f04e88b8012.jpg b/docs/ucb-cs294-112-notes-zh/img/32dea7f0a1dc974de5b61f04e88b8012.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75e2f3332f2bca68cd591ac52f1e2cac5ee8881a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/32dea7f0a1dc974de5b61f04e88b8012.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/32eab9ee110799467d204f26d11f3616.jpg b/docs/ucb-cs294-112-notes-zh/img/32eab9ee110799467d204f26d11f3616.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d8f2a493cb31d8a501f521e571169b3ad727c9e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/32eab9ee110799467d204f26d11f3616.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3300f92a16244b4d821dcd91df491aae.jpg b/docs/ucb-cs294-112-notes-zh/img/3300f92a16244b4d821dcd91df491aae.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b72ed8ec0f36cab9192ab6df4a4fa28ac0f89059 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3300f92a16244b4d821dcd91df491aae.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3335f0a5f65b72ebab969a718f05e003.jpg b/docs/ucb-cs294-112-notes-zh/img/3335f0a5f65b72ebab969a718f05e003.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da8c181171c1b1e4e35d3c6768487dc7401976f2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3335f0a5f65b72ebab969a718f05e003.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/334ef0b6d8be87a217273cb772219b6c.jpg b/docs/ucb-cs294-112-notes-zh/img/334ef0b6d8be87a217273cb772219b6c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..238d93171561558074f74e3f31371f4ff5c7dbbd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/334ef0b6d8be87a217273cb772219b6c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/336aa2078ea3bfe3e6fc1516ade078c9.jpg b/docs/ucb-cs294-112-notes-zh/img/336aa2078ea3bfe3e6fc1516ade078c9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..511278711e82e3730dac72f5c6c93478c4f59dd6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/336aa2078ea3bfe3e6fc1516ade078c9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/33a886d276c4d9ffed3f3b7d2fbfd53e.jpg b/docs/ucb-cs294-112-notes-zh/img/33a886d276c4d9ffed3f3b7d2fbfd53e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb0944bed361faa744d438f8b412abc23f18e115 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/33a886d276c4d9ffed3f3b7d2fbfd53e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/33c815432ff85d6f9342f1abc64af657.jpg b/docs/ucb-cs294-112-notes-zh/img/33c815432ff85d6f9342f1abc64af657.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f3ecd7fcef24425755de25b60921edda46e8812 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/33c815432ff85d6f9342f1abc64af657.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/33eb52f28d6ddf819c3b1dc2cd609cfd.jpg b/docs/ucb-cs294-112-notes-zh/img/33eb52f28d6ddf819c3b1dc2cd609cfd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96c0d48f8fc825a4a62e343d100ce09aa161f675 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/33eb52f28d6ddf819c3b1dc2cd609cfd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/34053b6adaad916f26b3b18cbe1297c3.jpg b/docs/ucb-cs294-112-notes-zh/img/34053b6adaad916f26b3b18cbe1297c3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af950679bf60f6b6a02561dbc3b9a3dcad15ffc5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/34053b6adaad916f26b3b18cbe1297c3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/343430c448f3d17f3a18443077585b6c.jpg b/docs/ucb-cs294-112-notes-zh/img/343430c448f3d17f3a18443077585b6c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b2c4e1073a36a8a8c4dfc132d69098b99732a8f8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/343430c448f3d17f3a18443077585b6c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3494464458ae60cfb23ba33d9b58c5a5.jpg b/docs/ucb-cs294-112-notes-zh/img/3494464458ae60cfb23ba33d9b58c5a5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..998d161404bee5ae7db2aea40a0da6b2117be80b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3494464458ae60cfb23ba33d9b58c5a5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3537c9b928abc5edf83d84105bacda28.jpg b/docs/ucb-cs294-112-notes-zh/img/3537c9b928abc5edf83d84105bacda28.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4e9bcc735c7d295c5f0d6d846f33b1a3da0a856 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3537c9b928abc5edf83d84105bacda28.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/353b78416fee6234461a601efba6493b.jpg b/docs/ucb-cs294-112-notes-zh/img/353b78416fee6234461a601efba6493b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9fecd065fe027f33225b8d3fe8ed74ae1db1a386 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/353b78416fee6234461a601efba6493b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/353e3c72c51418d8afc3d1dc22e2c4d0.jpg b/docs/ucb-cs294-112-notes-zh/img/353e3c72c51418d8afc3d1dc22e2c4d0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9fa1afa6bb69d7639de3f8ad5611a28f74ca682 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/353e3c72c51418d8afc3d1dc22e2c4d0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3569a649d4520b67b1b03e9546621e4f.jpg b/docs/ucb-cs294-112-notes-zh/img/3569a649d4520b67b1b03e9546621e4f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1e8f472d6a0f0b9df5c65bcbd80e2615e8c86f3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3569a649d4520b67b1b03e9546621e4f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/356c92f362f5be02499925d26079485b.jpg b/docs/ucb-cs294-112-notes-zh/img/356c92f362f5be02499925d26079485b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34c7130e5788eb4eb7d92cbada0c404407b3fd9a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/356c92f362f5be02499925d26079485b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/35b5962d1070ebe504540917fd3a0153.jpg b/docs/ucb-cs294-112-notes-zh/img/35b5962d1070ebe504540917fd3a0153.jpg new file mode 100644 index 0000000000000000000000000000000000000000..15fdaced4ef47265e3174b4d24a221f4a277b4e3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/35b5962d1070ebe504540917fd3a0153.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/35c93e80fa2055096ee664bcc3f51dd2.jpg b/docs/ucb-cs294-112-notes-zh/img/35c93e80fa2055096ee664bcc3f51dd2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b85aea41d6adcee2fb8bf1fb6b532badce5c4837 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/35c93e80fa2055096ee664bcc3f51dd2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/367ecf53e018b445e6229254252d6943.jpg b/docs/ucb-cs294-112-notes-zh/img/367ecf53e018b445e6229254252d6943.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3205d63c84f824473b4d807ec42208b2ba8e509 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/367ecf53e018b445e6229254252d6943.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3703cd8447a1e83a19726a317d499309.jpg b/docs/ucb-cs294-112-notes-zh/img/3703cd8447a1e83a19726a317d499309.jpg new file mode 100644 index 0000000000000000000000000000000000000000..890ba9b6bb64078a7e6c39056adbe8e2ddb1dc51 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3703cd8447a1e83a19726a317d499309.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/37af708524d86ca2abf43a10d1252ae5.jpg b/docs/ucb-cs294-112-notes-zh/img/37af708524d86ca2abf43a10d1252ae5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da693246d673b75796e60ea240c38e0bcc87ba6b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/37af708524d86ca2abf43a10d1252ae5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3824deac3edc513457b08d1fcc3ee89f.jpg b/docs/ucb-cs294-112-notes-zh/img/3824deac3edc513457b08d1fcc3ee89f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a73d90bba3d3ace9ac31582f8480406ac2161cdf Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3824deac3edc513457b08d1fcc3ee89f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3847044b8f3b76dafa5be88a4ae3bcd3.jpg b/docs/ucb-cs294-112-notes-zh/img/3847044b8f3b76dafa5be88a4ae3bcd3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7de7703ced193cf7060f079ac88d17acd71e9bb7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3847044b8f3b76dafa5be88a4ae3bcd3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3849fe5e6780265cb8b31ea0d8f04624.jpg b/docs/ucb-cs294-112-notes-zh/img/3849fe5e6780265cb8b31ea0d8f04624.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ef6e2e62993515cc968a7cc63c6d095be114aff Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3849fe5e6780265cb8b31ea0d8f04624.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/38e310fae5def3d1c34ef3ca75e8f984.jpg b/docs/ucb-cs294-112-notes-zh/img/38e310fae5def3d1c34ef3ca75e8f984.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1371f7889713705d307ebcbc0e5edb8770bcc5ba Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/38e310fae5def3d1c34ef3ca75e8f984.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/399a675883c01129cab2dce253e9db89.jpg b/docs/ucb-cs294-112-notes-zh/img/399a675883c01129cab2dce253e9db89.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9f90d72e0bc18d7951a1e75647f1a470b8f81f3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/399a675883c01129cab2dce253e9db89.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/39e0c1687c6b5063ee6c20328748f07a.jpg b/docs/ucb-cs294-112-notes-zh/img/39e0c1687c6b5063ee6c20328748f07a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5cfa160fab808aa290b2ce67c5e336f0c45c4df0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/39e0c1687c6b5063ee6c20328748f07a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3a573d2fab49b547c4653a318c6cb3e6.jpg b/docs/ucb-cs294-112-notes-zh/img/3a573d2fab49b547c4653a318c6cb3e6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c2cf5ad0d486c8ac40c0b21e8ccfee7892fc36f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3a573d2fab49b547c4653a318c6cb3e6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3a73bab0c6c55d51a7173fff12f29829.jpg b/docs/ucb-cs294-112-notes-zh/img/3a73bab0c6c55d51a7173fff12f29829.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fcd7b2f9008758ee1836390455035a7e2e5f38a5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3a73bab0c6c55d51a7173fff12f29829.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3a9f0b75a95784adb8f853ccc7b7f059.jpg b/docs/ucb-cs294-112-notes-zh/img/3a9f0b75a95784adb8f853ccc7b7f059.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f770ded4d43bfe2409f0d60272c1e8223c82a4af Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3a9f0b75a95784adb8f853ccc7b7f059.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3b9fa0f5fd5834ea978f395dcac5d7d6.jpg b/docs/ucb-cs294-112-notes-zh/img/3b9fa0f5fd5834ea978f395dcac5d7d6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da5fb517f9cc76188d56276279bb875c3bd6864c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3b9fa0f5fd5834ea978f395dcac5d7d6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3bb9bad2b3bc96239009f033c7d5b01c.jpg b/docs/ucb-cs294-112-notes-zh/img/3bb9bad2b3bc96239009f033c7d5b01c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5cda4de884e724498f0c3a57530d3974848b7493 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3bb9bad2b3bc96239009f033c7d5b01c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3bc3544880a4efc804364152e40ab6aa.jpg b/docs/ucb-cs294-112-notes-zh/img/3bc3544880a4efc804364152e40ab6aa.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d4c949efd181ce7529ffe33018473d1e7e71e2b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3bc3544880a4efc804364152e40ab6aa.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3c12b654e1a4590c3ec60521476929f3.jpg b/docs/ucb-cs294-112-notes-zh/img/3c12b654e1a4590c3ec60521476929f3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12e8e3c69d5d966571a18f58771acdf04aa278ef Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3c12b654e1a4590c3ec60521476929f3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3c19456a2b7ab4866a4b96732ebd83f6.jpg b/docs/ucb-cs294-112-notes-zh/img/3c19456a2b7ab4866a4b96732ebd83f6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6254dd211c4dfcee89eb0826ab23f3ce8b73e5c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3c19456a2b7ab4866a4b96732ebd83f6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3d1640c248bf61a3677d387de2273b25.jpg b/docs/ucb-cs294-112-notes-zh/img/3d1640c248bf61a3677d387de2273b25.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3446263e5dc4c12ee0c371e9043a7b5da36560b0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3d1640c248bf61a3677d387de2273b25.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3d2e44e745da6ff02d5b73ae9dd99264.jpg b/docs/ucb-cs294-112-notes-zh/img/3d2e44e745da6ff02d5b73ae9dd99264.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f2c77fc1856dc2f377d231f0b10ef2bbf7332dc Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3d2e44e745da6ff02d5b73ae9dd99264.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3d49d4cb998532aa92b69da3cad3cc7a.jpg b/docs/ucb-cs294-112-notes-zh/img/3d49d4cb998532aa92b69da3cad3cc7a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad220b174be8bf4d9b61b4a0e10bc2a17f2c3116 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3d49d4cb998532aa92b69da3cad3cc7a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3d5d6d97d61d6e7a16541f2392baa301.jpg b/docs/ucb-cs294-112-notes-zh/img/3d5d6d97d61d6e7a16541f2392baa301.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1133450abdbb7631b4baa9db551489fd27473034 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3d5d6d97d61d6e7a16541f2392baa301.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3dd2e44fa1672425fb5951385ac2a89f.jpg b/docs/ucb-cs294-112-notes-zh/img/3dd2e44fa1672425fb5951385ac2a89f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..485d9d5f2a184e0216eb7e39e95a77d55c03c6e7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3dd2e44fa1672425fb5951385ac2a89f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3de6a7cbcdc8e8356ad0ed287a8a147b.jpg b/docs/ucb-cs294-112-notes-zh/img/3de6a7cbcdc8e8356ad0ed287a8a147b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..516b0ff73055c0899691b1c01e3dd8cff914de34 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3de6a7cbcdc8e8356ad0ed287a8a147b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3e981f93d23fd41432443477c4342850.jpg b/docs/ucb-cs294-112-notes-zh/img/3e981f93d23fd41432443477c4342850.jpg new file mode 100644 index 0000000000000000000000000000000000000000..11355ac7e4b95bcc249787bc5fc447bf2271d918 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3e981f93d23fd41432443477c4342850.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3eac92afed17c3c8bc952b161b935fe1.jpg b/docs/ucb-cs294-112-notes-zh/img/3eac92afed17c3c8bc952b161b935fe1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8230c2e5258d2a6566b855d7806081676538947f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3eac92afed17c3c8bc952b161b935fe1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3eed1d55204dd10d4c9558aa86dc5cd3.jpg b/docs/ucb-cs294-112-notes-zh/img/3eed1d55204dd10d4c9558aa86dc5cd3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ca26827cb3555141f7627ddf2cad802c2d341ce Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3eed1d55204dd10d4c9558aa86dc5cd3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3f15977cd5ed505a8107e4be1da953bd.jpg b/docs/ucb-cs294-112-notes-zh/img/3f15977cd5ed505a8107e4be1da953bd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b93c81b272b18b33cdf363d6000f94504e2fc3a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3f15977cd5ed505a8107e4be1da953bd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/3fb4a0a3d10d54fda62b86560346c0ee.jpg b/docs/ucb-cs294-112-notes-zh/img/3fb4a0a3d10d54fda62b86560346c0ee.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33f8e2550bacaea236378a357717949e5099f0ad Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/3fb4a0a3d10d54fda62b86560346c0ee.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/405a6b9f64f940c14c1aced4b56008f0.jpg b/docs/ucb-cs294-112-notes-zh/img/405a6b9f64f940c14c1aced4b56008f0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..998dc3c00f3b9a7fe6cc77b4e53a6019a4bc916f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/405a6b9f64f940c14c1aced4b56008f0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/406f5459773e0aad83b2dc7e2e7deee3.jpg b/docs/ucb-cs294-112-notes-zh/img/406f5459773e0aad83b2dc7e2e7deee3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a13d11ce01c9be7f4b97c4cc2eb5474bb35ad161 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/406f5459773e0aad83b2dc7e2e7deee3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/40b3e823d3ff0b56dea56098705fa25f.jpg b/docs/ucb-cs294-112-notes-zh/img/40b3e823d3ff0b56dea56098705fa25f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69f395a077bcba56d68318fa312eed63115c67b7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/40b3e823d3ff0b56dea56098705fa25f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4146f60d00703b2aeddbfe64af69ad05.jpg b/docs/ucb-cs294-112-notes-zh/img/4146f60d00703b2aeddbfe64af69ad05.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e27e5d20871754fa839a6dc61879d266e8303f90 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4146f60d00703b2aeddbfe64af69ad05.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/41a3f666e20291461efe3096128a1c01.jpg b/docs/ucb-cs294-112-notes-zh/img/41a3f666e20291461efe3096128a1c01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57444080e59990f6827836153e5b5a3cf3386dcf Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/41a3f666e20291461efe3096128a1c01.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/41c12e6c8c7c8c5895c320e0cec991ac.jpg b/docs/ucb-cs294-112-notes-zh/img/41c12e6c8c7c8c5895c320e0cec991ac.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9161ebca7b0c758ed34a335049855ce5ff5ad064 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/41c12e6c8c7c8c5895c320e0cec991ac.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/421e1e071b1f2c84a98ad4e82b4835cc.jpg b/docs/ucb-cs294-112-notes-zh/img/421e1e071b1f2c84a98ad4e82b4835cc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0aa63d48e43e3a50a874af185703d8b60e3d7f97 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/421e1e071b1f2c84a98ad4e82b4835cc.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4248247e0cde69e96da5057248205b9c.jpg b/docs/ucb-cs294-112-notes-zh/img/4248247e0cde69e96da5057248205b9c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21bfe742f9cd55feccdd11a637a0b728012786f1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4248247e0cde69e96da5057248205b9c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/42fdaa2d0fa15776132d8707f1f046a4.jpg b/docs/ucb-cs294-112-notes-zh/img/42fdaa2d0fa15776132d8707f1f046a4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2aa2caa145c211859eccea25e9bfb86aabdf3087 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/42fdaa2d0fa15776132d8707f1f046a4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4358013758c3d540537f4d8035ed200e.jpg b/docs/ucb-cs294-112-notes-zh/img/4358013758c3d540537f4d8035ed200e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f7f69555979fd7abbdb16efde203b3abb936db7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4358013758c3d540537f4d8035ed200e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/43d8b2a2c811da923719bcdbf291c5cd.jpg b/docs/ucb-cs294-112-notes-zh/img/43d8b2a2c811da923719bcdbf291c5cd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc9d9ce0636df5a83ecc6280462ba7e2e13979ca Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/43d8b2a2c811da923719bcdbf291c5cd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/43ddc657d98b8ac9d6130013e6048391.jpg b/docs/ucb-cs294-112-notes-zh/img/43ddc657d98b8ac9d6130013e6048391.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b238e4286575a5e6bc434c352dc8c18f4c5c2eab Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/43ddc657d98b8ac9d6130013e6048391.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/443a96e3d52ab59de6de1af2a00bff8e.jpg b/docs/ucb-cs294-112-notes-zh/img/443a96e3d52ab59de6de1af2a00bff8e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a603c6d3d927bd4e589000e2e10a34b94da89a8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/443a96e3d52ab59de6de1af2a00bff8e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/444a0f634aaa609908e1e2a1c1913827.jpg b/docs/ucb-cs294-112-notes-zh/img/444a0f634aaa609908e1e2a1c1913827.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fcd0c280a51c050f2702c2b5deb618ab1be8361a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/444a0f634aaa609908e1e2a1c1913827.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4470ca2da26a12f359cb71dfce176c83.jpg b/docs/ucb-cs294-112-notes-zh/img/4470ca2da26a12f359cb71dfce176c83.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b39144fd1dc8f01e6cfd40759be860fbf80aad1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4470ca2da26a12f359cb71dfce176c83.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4576230229ae64d2ca4ce89d938a1abb.jpg b/docs/ucb-cs294-112-notes-zh/img/4576230229ae64d2ca4ce89d938a1abb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b66d4f794ec19268f20142f0a710d2bb2ce6fd92 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4576230229ae64d2ca4ce89d938a1abb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/45b1d007686b1a4c63f8c50c931cad9a.jpg b/docs/ucb-cs294-112-notes-zh/img/45b1d007686b1a4c63f8c50c931cad9a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9afc8fa95cf5f39f21c07d088780096215d7a88 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/45b1d007686b1a4c63f8c50c931cad9a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/45b65e7000ee1796b17b2aef5e7c9e86.jpg b/docs/ucb-cs294-112-notes-zh/img/45b65e7000ee1796b17b2aef5e7c9e86.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07b987a298040b8e77b6a657bb7fb6e5b22efbe7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/45b65e7000ee1796b17b2aef5e7c9e86.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/46153327395220b1e7d56d80a5025c78.jpg b/docs/ucb-cs294-112-notes-zh/img/46153327395220b1e7d56d80a5025c78.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc8a43ba15ea6f9929d57c90bdda37376630e3cf Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/46153327395220b1e7d56d80a5025c78.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/47040f8f28315851115e7dcf59183218.jpg b/docs/ucb-cs294-112-notes-zh/img/47040f8f28315851115e7dcf59183218.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1583b0a556af48761ad220fb8874750a15995ccb Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/47040f8f28315851115e7dcf59183218.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/471ba33d97ed31e0daf3aaa986a07521.jpg b/docs/ucb-cs294-112-notes-zh/img/471ba33d97ed31e0daf3aaa986a07521.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f59d826b959257afa9fa4b52a519ca230bb058df Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/471ba33d97ed31e0daf3aaa986a07521.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4733ae7a273a6fc512fd278d46cb99e0.jpg b/docs/ucb-cs294-112-notes-zh/img/4733ae7a273a6fc512fd278d46cb99e0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc140042ea5f503e654582a960abf0671dcd381c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4733ae7a273a6fc512fd278d46cb99e0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4733c70abec259d8e2bddea6152a2410.jpg b/docs/ucb-cs294-112-notes-zh/img/4733c70abec259d8e2bddea6152a2410.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ef243423ff4e53c360a53efece79b92e6dd370d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4733c70abec259d8e2bddea6152a2410.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/474654c002d015035123911c34c4416a.jpg b/docs/ucb-cs294-112-notes-zh/img/474654c002d015035123911c34c4416a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0fdd59f60a6d730f2d7190520add929baa2c42ee Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/474654c002d015035123911c34c4416a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/47db6ded12a8e323305b437a3c0381bf.jpg b/docs/ucb-cs294-112-notes-zh/img/47db6ded12a8e323305b437a3c0381bf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5aa88c75051db790531d9593f9f1756c085c1d1d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/47db6ded12a8e323305b437a3c0381bf.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/481f051ec74b7e8a209e64ed66ede8e2.jpg b/docs/ucb-cs294-112-notes-zh/img/481f051ec74b7e8a209e64ed66ede8e2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a63d60e27057192a3200589eecfb7a0f694e8ea2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/481f051ec74b7e8a209e64ed66ede8e2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4853ca095c827306fda5063deb28f83e.jpg b/docs/ucb-cs294-112-notes-zh/img/4853ca095c827306fda5063deb28f83e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..582a06f4d5bdfcfc9443f9b89043b6a7bd443f20 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4853ca095c827306fda5063deb28f83e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/486c45f279fe3d51866add4512c5440a.jpg b/docs/ucb-cs294-112-notes-zh/img/486c45f279fe3d51866add4512c5440a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62d536a9921df2fad59b1249ab9adaf069baf9df Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/486c45f279fe3d51866add4512c5440a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/48931ab5f3baef59e3c443eb256fcb74.jpg b/docs/ucb-cs294-112-notes-zh/img/48931ab5f3baef59e3c443eb256fcb74.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a834b6a201352df9adcf7f70d4c82c5380941fd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/48931ab5f3baef59e3c443eb256fcb74.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/48e2fb013319b2e44334656028d808ba.jpg b/docs/ucb-cs294-112-notes-zh/img/48e2fb013319b2e44334656028d808ba.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e0cbd8fcc08e2858299fa82520808311fafa83f4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/48e2fb013319b2e44334656028d808ba.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4906a7119ffd5ec758c201830f91b1d4.jpg b/docs/ucb-cs294-112-notes-zh/img/4906a7119ffd5ec758c201830f91b1d4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..848ceed38c4916ade91358f734f6792ea191e02b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4906a7119ffd5ec758c201830f91b1d4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/491644b6ee6fe072f31d130a5bd1a93e.jpg b/docs/ucb-cs294-112-notes-zh/img/491644b6ee6fe072f31d130a5bd1a93e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc8291fdd8325c29b4f1f5320d23cc83ccc6137e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/491644b6ee6fe072f31d130a5bd1a93e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/492b92e8089c848702efed7c983570ce.jpg b/docs/ucb-cs294-112-notes-zh/img/492b92e8089c848702efed7c983570ce.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f86d7f489d795a7ead3be3b439f734d13a597091 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/492b92e8089c848702efed7c983570ce.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/493731e423d5db62086d0b8705dda0c8.jpg b/docs/ucb-cs294-112-notes-zh/img/493731e423d5db62086d0b8705dda0c8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb98ad41369692f902cd2dbf67babac333aec68e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/493731e423d5db62086d0b8705dda0c8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/493e5eae0dbf745d2b4cc2e892bdd5ad.jpg b/docs/ucb-cs294-112-notes-zh/img/493e5eae0dbf745d2b4cc2e892bdd5ad.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4321adf9a860083cf78df32e05dfa81b10e75794 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/493e5eae0dbf745d2b4cc2e892bdd5ad.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/49d4fffe8dc031059140ce114efd82a4.jpg b/docs/ucb-cs294-112-notes-zh/img/49d4fffe8dc031059140ce114efd82a4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51dbc4e22689c394c46a862f1962931c9b9cfdfa Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/49d4fffe8dc031059140ce114efd82a4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4a787ef9a3a13c0fb59246b3e000394a.jpg b/docs/ucb-cs294-112-notes-zh/img/4a787ef9a3a13c0fb59246b3e000394a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0bc76cb4f034cf7964684e7c38799357d654fb6b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4a787ef9a3a13c0fb59246b3e000394a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4ae3bb9b9987b4e735031eea8f5168e4.jpg b/docs/ucb-cs294-112-notes-zh/img/4ae3bb9b9987b4e735031eea8f5168e4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72da01babadf1714a13a9539a6380caa034590e9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4ae3bb9b9987b4e735031eea8f5168e4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4b02744dcdc25bdb9348ddac5c193439.jpg b/docs/ucb-cs294-112-notes-zh/img/4b02744dcdc25bdb9348ddac5c193439.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efbbd229029a6c5adc3bfec1cc31ae0e11925514 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4b02744dcdc25bdb9348ddac5c193439.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4c212d675cf484302bba7259001e2e7c.jpg b/docs/ucb-cs294-112-notes-zh/img/4c212d675cf484302bba7259001e2e7c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e1b6f6f41ecebce7bd1967e4a8529b0a9bc78d0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4c212d675cf484302bba7259001e2e7c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4c5d89d0f9cec3ce2096ec064da2efd1.jpg b/docs/ucb-cs294-112-notes-zh/img/4c5d89d0f9cec3ce2096ec064da2efd1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92cf42aa9b33038c5939bb4215c01bf31efd4f88 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4c5d89d0f9cec3ce2096ec064da2efd1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4ca00b5649296f9fa44ca3b022adf867.jpg b/docs/ucb-cs294-112-notes-zh/img/4ca00b5649296f9fa44ca3b022adf867.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a1d5d50de079a46d81862ac2ac80cb5d6d645527 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4ca00b5649296f9fa44ca3b022adf867.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4d02b500de715f0fb2af666b196c690d.jpg b/docs/ucb-cs294-112-notes-zh/img/4d02b500de715f0fb2af666b196c690d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb73dccde5d41280a71b8b1d296f47f8b020df2f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4d02b500de715f0fb2af666b196c690d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4d19aaf807de3e5d449012896b1d26bf.jpg b/docs/ucb-cs294-112-notes-zh/img/4d19aaf807de3e5d449012896b1d26bf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a09f160bd4a450b4603b2a95f394dadf942a0be8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4d19aaf807de3e5d449012896b1d26bf.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4d1a76192fc6cb3386633223c7e74d95.jpg b/docs/ucb-cs294-112-notes-zh/img/4d1a76192fc6cb3386633223c7e74d95.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e8319a07cb3d15d47cc54c6a957ef5f57a65265 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4d1a76192fc6cb3386633223c7e74d95.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4df543f439ceed1785f6db6d90532ba9.jpg b/docs/ucb-cs294-112-notes-zh/img/4df543f439ceed1785f6db6d90532ba9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e8717e8ff4b632214d00405014eb33229cb77e9c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4df543f439ceed1785f6db6d90532ba9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4df7ca93c58705962903e09c6811ab76.jpg b/docs/ucb-cs294-112-notes-zh/img/4df7ca93c58705962903e09c6811ab76.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5dd20e49aa0264c684980faf26ed7137420c668 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4df7ca93c58705962903e09c6811ab76.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4e4d506c887c843f43a8fbcbe1884ffd.jpg b/docs/ucb-cs294-112-notes-zh/img/4e4d506c887c843f43a8fbcbe1884ffd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe5805d4102a1a304f104385a577e425c43e38f4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4e4d506c887c843f43a8fbcbe1884ffd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/4ea95e76ac3dc2f7a91720740736f633.jpg b/docs/ucb-cs294-112-notes-zh/img/4ea95e76ac3dc2f7a91720740736f633.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba54ab8972dd0bb42856612473e21c3c1ed612dd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/4ea95e76ac3dc2f7a91720740736f633.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/50705df736e9a7919e768cf8c4e4f794.jpg b/docs/ucb-cs294-112-notes-zh/img/50705df736e9a7919e768cf8c4e4f794.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25a3f33341340250edebf558bd7938333391436f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/50705df736e9a7919e768cf8c4e4f794.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5080dfeb7c0fc4ff07f63562cab54865.jpg b/docs/ucb-cs294-112-notes-zh/img/5080dfeb7c0fc4ff07f63562cab54865.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efe672e222608e3b864c1eaba1113747b4453cff Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5080dfeb7c0fc4ff07f63562cab54865.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/50bdb2fb29c1e6c7e821f1c61cfa810f.jpg b/docs/ucb-cs294-112-notes-zh/img/50bdb2fb29c1e6c7e821f1c61cfa810f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c46c60fc79ab92a16a128211024baf6ea22f8da Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/50bdb2fb29c1e6c7e821f1c61cfa810f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5111a38eb8cde8aa0e0ba490e4ad4d4b.jpg b/docs/ucb-cs294-112-notes-zh/img/5111a38eb8cde8aa0e0ba490e4ad4d4b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92d2e86706ac7436ac7d66124384a339164c2ad7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5111a38eb8cde8aa0e0ba490e4ad4d4b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5164fb743e48ff41c28bebd1f2e65763.jpg b/docs/ucb-cs294-112-notes-zh/img/5164fb743e48ff41c28bebd1f2e65763.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb437f91e10ff4f66431d7a8a68967510a34c890 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5164fb743e48ff41c28bebd1f2e65763.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/51b0855b9a7f2f5d2d44b5ba9f275a16.jpg b/docs/ucb-cs294-112-notes-zh/img/51b0855b9a7f2f5d2d44b5ba9f275a16.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12100a463403cf7c198f9aa2ef9c3ecb8e5a2cc3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/51b0855b9a7f2f5d2d44b5ba9f275a16.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg b/docs/ucb-cs294-112-notes-zh/img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2588f00fa50bd3444714a56f1dd3f3409fb39196 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/51e4e556c8cc9e6e99844de4ce5017e1.jpg b/docs/ucb-cs294-112-notes-zh/img/51e4e556c8cc9e6e99844de4ce5017e1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94f1eb69efc8d13ca54bfb06ff310deeb69b6e1a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/51e4e556c8cc9e6e99844de4ce5017e1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5291a48569cbbf86eb19e04f4fa4e82e.jpg b/docs/ucb-cs294-112-notes-zh/img/5291a48569cbbf86eb19e04f4fa4e82e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc56880984dc4f885647a60bd69c6a63556baec0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5291a48569cbbf86eb19e04f4fa4e82e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/52cb99d6ff6ad9c5955bb0d0fe589507.jpg b/docs/ucb-cs294-112-notes-zh/img/52cb99d6ff6ad9c5955bb0d0fe589507.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ae4dc052f5a13b306b0370c54f8f4311238a8c6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/52cb99d6ff6ad9c5955bb0d0fe589507.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5300187cb9bf098e9df3d8e3425e20f1.jpg b/docs/ucb-cs294-112-notes-zh/img/5300187cb9bf098e9df3d8e3425e20f1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f0a7c835f2756d65ee7b7b97800fd7dfc76c600 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5300187cb9bf098e9df3d8e3425e20f1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/532d36c09879be111eee7e83ed361fee.jpg b/docs/ucb-cs294-112-notes-zh/img/532d36c09879be111eee7e83ed361fee.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9dcca4055a5febb38169aba4db0900c35f5815c7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/532d36c09879be111eee7e83ed361fee.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5385856533bc6ab9fd5685fe96032eb3.jpg b/docs/ucb-cs294-112-notes-zh/img/5385856533bc6ab9fd5685fe96032eb3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0f9404dd35bc356183ed5a60728d05c112bc6bd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5385856533bc6ab9fd5685fe96032eb3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/53bdb9568181c05b66e340643d81625f.jpg b/docs/ucb-cs294-112-notes-zh/img/53bdb9568181c05b66e340643d81625f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..825dbfb48614aae5e68b3fcf0bd88a54f11e94b2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/53bdb9568181c05b66e340643d81625f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/53db70b7acd91a9af3baf6b8b3158908.jpg b/docs/ucb-cs294-112-notes-zh/img/53db70b7acd91a9af3baf6b8b3158908.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae01ed98b19a0e4e2c3113358247f207bb9de000 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/53db70b7acd91a9af3baf6b8b3158908.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/548ee9d00a5dc6d39faf986f55369c51.jpg b/docs/ucb-cs294-112-notes-zh/img/548ee9d00a5dc6d39faf986f55369c51.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00a7bd1c71149bd3034b2d03cc253f8549df0168 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/548ee9d00a5dc6d39faf986f55369c51.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/54b5111b0705ccfbabb1bcb07b252ff6.jpg b/docs/ucb-cs294-112-notes-zh/img/54b5111b0705ccfbabb1bcb07b252ff6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7959a10aa825605a9ab06083dcc96f218956f5a1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/54b5111b0705ccfbabb1bcb07b252ff6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/54e3b668ec7748410e9f4b3f6bfa3868.jpg b/docs/ucb-cs294-112-notes-zh/img/54e3b668ec7748410e9f4b3f6bfa3868.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05458adb6d044d705c3197f2888ad1bdb6ec2365 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/54e3b668ec7748410e9f4b3f6bfa3868.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/54e7160d1af273ab27e7ebf03bff3d30.jpg b/docs/ucb-cs294-112-notes-zh/img/54e7160d1af273ab27e7ebf03bff3d30.jpg new file mode 100644 index 0000000000000000000000000000000000000000..afa835f1b288315d914260ff84f051798bd632da Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/54e7160d1af273ab27e7ebf03bff3d30.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/55aa1922c2618c7cefca3bec51e729f1.jpg b/docs/ucb-cs294-112-notes-zh/img/55aa1922c2618c7cefca3bec51e729f1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d0a88cf3c78b9c17b69eeaf4b21346a82a19a02 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/55aa1922c2618c7cefca3bec51e729f1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/55b67e6588a2bc5b94a739b63783b152.jpg b/docs/ucb-cs294-112-notes-zh/img/55b67e6588a2bc5b94a739b63783b152.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3129081011d6e3b7a551122bf57bccab390186c2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/55b67e6588a2bc5b94a739b63783b152.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/561cb3c497afbaf951df20db4b3dd1c5.jpg b/docs/ucb-cs294-112-notes-zh/img/561cb3c497afbaf951df20db4b3dd1c5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecc97fbc7c4102163ef7231868f99b5f04f51609 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/561cb3c497afbaf951df20db4b3dd1c5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5630fa150eed62e64d84f988f2439bb3.jpg b/docs/ucb-cs294-112-notes-zh/img/5630fa150eed62e64d84f988f2439bb3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cee7aa30800cf91fd291d6339b83a0abfc1a2260 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5630fa150eed62e64d84f988f2439bb3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/564d65198a235e7280ebe23c27aeaa2b.jpg b/docs/ucb-cs294-112-notes-zh/img/564d65198a235e7280ebe23c27aeaa2b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..288f0d96d423fbd2deea8ee4f3f3db87e66c9b57 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/564d65198a235e7280ebe23c27aeaa2b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/56c6f529c995972d0f582513d0519075.jpg b/docs/ucb-cs294-112-notes-zh/img/56c6f529c995972d0f582513d0519075.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03d607be78a60963c296512220026092a963ee94 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/56c6f529c995972d0f582513d0519075.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/56dc83936edacb650ea97faf8faa7abd.jpg b/docs/ucb-cs294-112-notes-zh/img/56dc83936edacb650ea97faf8faa7abd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..665808512506d001645646f935ad707796703b34 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/56dc83936edacb650ea97faf8faa7abd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/56fbb8f11192d35fff59940ecf719d85.jpg b/docs/ucb-cs294-112-notes-zh/img/56fbb8f11192d35fff59940ecf719d85.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6bf7237f6ef1a14e21b9bdbc369f443d7554dbfc Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/56fbb8f11192d35fff59940ecf719d85.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5757ef402bd37ab3078cfca19995680a.jpg b/docs/ucb-cs294-112-notes-zh/img/5757ef402bd37ab3078cfca19995680a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2594b877b123aae5aa55fe445cd61a4227beca1e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5757ef402bd37ab3078cfca19995680a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/57cdebc7853d35d4b474842b9fed329e.jpg b/docs/ucb-cs294-112-notes-zh/img/57cdebc7853d35d4b474842b9fed329e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5aa0a3149b975c9be6c1d82f8d18c62340a6be38 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/57cdebc7853d35d4b474842b9fed329e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/593252a209f1f57ab6aa8df7496f504c.jpg b/docs/ucb-cs294-112-notes-zh/img/593252a209f1f57ab6aa8df7496f504c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff973830824a86c9b20f632386896b6d7d6b79c1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/593252a209f1f57ab6aa8df7496f504c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/59b66599957ebeab11f06eaa15eab76e.jpg b/docs/ucb-cs294-112-notes-zh/img/59b66599957ebeab11f06eaa15eab76e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..581ef95f36308e44b59408e26f968ecf33b96782 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/59b66599957ebeab11f06eaa15eab76e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/59c8d4ad4428914b5168af7fbe123065.jpg b/docs/ucb-cs294-112-notes-zh/img/59c8d4ad4428914b5168af7fbe123065.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03b6fd19b395e9d1c79020fe5b8cb47398477ee5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/59c8d4ad4428914b5168af7fbe123065.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/59e0bc14e4494fd218a9c42e6564e35a.jpg b/docs/ucb-cs294-112-notes-zh/img/59e0bc14e4494fd218a9c42e6564e35a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df20fd57821166618e02c4ca8aac9a1d796cde11 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/59e0bc14e4494fd218a9c42e6564e35a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5a047a5ca04e45726dba21b8302977da.jpg b/docs/ucb-cs294-112-notes-zh/img/5a047a5ca04e45726dba21b8302977da.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b20e4c968d689d89dba1e435b00280c5c3cab3cb Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5a047a5ca04e45726dba21b8302977da.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5a08ff907173761e9ca6920c92ae223a.jpg b/docs/ucb-cs294-112-notes-zh/img/5a08ff907173761e9ca6920c92ae223a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f563e3487f5e41108e8c165fe5941befa63b19d2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5a08ff907173761e9ca6920c92ae223a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5a64c9c517e630bfa1cf82c078c51d17.jpg b/docs/ucb-cs294-112-notes-zh/img/5a64c9c517e630bfa1cf82c078c51d17.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9bc427676edc94f49c928a470302ce03beec1f05 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5a64c9c517e630bfa1cf82c078c51d17.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5ab2048e8ae20de5e2999e4745c7c2f1.jpg b/docs/ucb-cs294-112-notes-zh/img/5ab2048e8ae20de5e2999e4745c7c2f1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ef1da3d84f4eed0eba70d15207575ac3c6ac691 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5ab2048e8ae20de5e2999e4745c7c2f1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5b5355ce154bafbedea47d1b9c47057f.jpg b/docs/ucb-cs294-112-notes-zh/img/5b5355ce154bafbedea47d1b9c47057f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b85b0458af8af29b58db1e93eef71d8212d2f1a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5b5355ce154bafbedea47d1b9c47057f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5b6e660bba784c9852da7b6b73b8cf11.jpg b/docs/ucb-cs294-112-notes-zh/img/5b6e660bba784c9852da7b6b73b8cf11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6d8f493352a5e6bf897cd4bf2ba8dec1ad1b5e7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5b6e660bba784c9852da7b6b73b8cf11.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5bf4bb781dd2d49d92ccf59eed28ec0f.jpg b/docs/ucb-cs294-112-notes-zh/img/5bf4bb781dd2d49d92ccf59eed28ec0f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78a0a92a832a00208a6d385d875c5e1e108ad8fd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5bf4bb781dd2d49d92ccf59eed28ec0f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5d55d99469b366ad144a269efc0ded6a.jpg b/docs/ucb-cs294-112-notes-zh/img/5d55d99469b366ad144a269efc0ded6a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5029017bac3d6865cdfe08c5f870def9376d6884 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5d55d99469b366ad144a269efc0ded6a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5e147a50ea1ba42d1da197f820f7bd11.jpg b/docs/ucb-cs294-112-notes-zh/img/5e147a50ea1ba42d1da197f820f7bd11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d9a87555f75fa7e46398915fb9a475a91f7ea55 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5e147a50ea1ba42d1da197f820f7bd11.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5e713e4099000503539ed5c767c4ab21.jpg b/docs/ucb-cs294-112-notes-zh/img/5e713e4099000503539ed5c767c4ab21.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f989d3fdcdf2100d4f65556b98ef397c830872a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5e713e4099000503539ed5c767c4ab21.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5e7d76f4d1a5840a591f920b5463a644.jpg b/docs/ucb-cs294-112-notes-zh/img/5e7d76f4d1a5840a591f920b5463a644.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b68770dcc19a0a26fca50cf3f48a989b082957cc Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5e7d76f4d1a5840a591f920b5463a644.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5e8df2ba7e47a784c714d176ed8bbb7a.jpg b/docs/ucb-cs294-112-notes-zh/img/5e8df2ba7e47a784c714d176ed8bbb7a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc3cb5a13d0f68c9ce37c44816388e850811b395 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5e8df2ba7e47a784c714d176ed8bbb7a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5ede8aa2c5000f2b0890e44f21bc5581.jpg b/docs/ucb-cs294-112-notes-zh/img/5ede8aa2c5000f2b0890e44f21bc5581.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93352bdfec66e037587d987589ef956ce74a68db Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5ede8aa2c5000f2b0890e44f21bc5581.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5f02066e4afc0ab06a7109b2ccd06e89.jpg b/docs/ucb-cs294-112-notes-zh/img/5f02066e4afc0ab06a7109b2ccd06e89.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e51a8fe28693debc1c4b589f4dc377651ce6f95 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5f02066e4afc0ab06a7109b2ccd06e89.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5fa5b3d592b7a7fed873a721e83c613e.jpg b/docs/ucb-cs294-112-notes-zh/img/5fa5b3d592b7a7fed873a721e83c613e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c22bf86d77a9ef2f00f5d830574259c2684ad9f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5fa5b3d592b7a7fed873a721e83c613e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/5fbf4d41c8c68c52ba69ee1f4eec9a8f.jpg b/docs/ucb-cs294-112-notes-zh/img/5fbf4d41c8c68c52ba69ee1f4eec9a8f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f729894483a787ff2dbcdb788f51c776b4790207 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/5fbf4d41c8c68c52ba69ee1f4eec9a8f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6052bd4d21855b25473236810616e913.jpg b/docs/ucb-cs294-112-notes-zh/img/6052bd4d21855b25473236810616e913.jpg new file mode 100644 index 0000000000000000000000000000000000000000..936c1c4549d9765f2861f3a03422e6210a50cce5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6052bd4d21855b25473236810616e913.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/608d47dd1d38da0451828afaad540e1b.jpg b/docs/ucb-cs294-112-notes-zh/img/608d47dd1d38da0451828afaad540e1b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b0225d6f508ad39a0920ef3f3e28ed44b6f384c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/608d47dd1d38da0451828afaad540e1b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/60a1ee34bed9a7b2a701445d9554ce57.jpg b/docs/ucb-cs294-112-notes-zh/img/60a1ee34bed9a7b2a701445d9554ce57.jpg new file mode 100644 index 0000000000000000000000000000000000000000..483266c5cc0803e2a7e4eee4356520c7e728fe02 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/60a1ee34bed9a7b2a701445d9554ce57.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6110152d00521b309aca98c8584c57a7.jpg b/docs/ucb-cs294-112-notes-zh/img/6110152d00521b309aca98c8584c57a7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f35fcb6c4a15a9517ae039d75c6f89b0a3c5275 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6110152d00521b309aca98c8584c57a7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6154d98e71a3d40c8bfa4debd428a6ee.jpg b/docs/ucb-cs294-112-notes-zh/img/6154d98e71a3d40c8bfa4debd428a6ee.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5aa77a10309dcc4d2acbf76cbb65c51aba91cbd9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6154d98e71a3d40c8bfa4debd428a6ee.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/61616de1801a9677c387f72db1d82758.jpg b/docs/ucb-cs294-112-notes-zh/img/61616de1801a9677c387f72db1d82758.jpg new file mode 100644 index 0000000000000000000000000000000000000000..49a5fe27783cc9242a0dfe010992efe72f9ba47d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/61616de1801a9677c387f72db1d82758.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6205cdeb5570e0f41234db16faacbb81.jpg b/docs/ucb-cs294-112-notes-zh/img/6205cdeb5570e0f41234db16faacbb81.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c960a1c1a6aeed3a111ef059e8c81c4d2bd695f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6205cdeb5570e0f41234db16faacbb81.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6216a8742291e8adb9510b3ebad5dbb9.jpg b/docs/ucb-cs294-112-notes-zh/img/6216a8742291e8adb9510b3ebad5dbb9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d08666ddfe599bbc7c2e0087e4e63f66169ca6b5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6216a8742291e8adb9510b3ebad5dbb9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/627ffbb945ab0ec72770a35907ed911f.jpg b/docs/ucb-cs294-112-notes-zh/img/627ffbb945ab0ec72770a35907ed911f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..422f8ef3bd8ff4d910cb52dd0154664ff62a7f66 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/627ffbb945ab0ec72770a35907ed911f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/62dba043c987f00fac2600b13e66dc88.jpg b/docs/ucb-cs294-112-notes-zh/img/62dba043c987f00fac2600b13e66dc88.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b581a813fef1fbfc9bc33e6c094c1f4875cfcc96 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/62dba043c987f00fac2600b13e66dc88.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/62f072df24ac664479628b68423070c6.jpg b/docs/ucb-cs294-112-notes-zh/img/62f072df24ac664479628b68423070c6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..871b39429965ad058fec88ad527a5b94622c633e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/62f072df24ac664479628b68423070c6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/63218a9c53c160c52b5e4a44051538e3.jpg b/docs/ucb-cs294-112-notes-zh/img/63218a9c53c160c52b5e4a44051538e3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91af4ea6689019aa686b06c564a69b2c6a827594 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/63218a9c53c160c52b5e4a44051538e3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/63247bf31cb12ff5876af42a54685b29.jpg b/docs/ucb-cs294-112-notes-zh/img/63247bf31cb12ff5876af42a54685b29.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cbc8cd696f0482bf4949d4707a4324b96526a67e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/63247bf31cb12ff5876af42a54685b29.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/63b6862422d9ca5fb45e26ab396efe44.jpg b/docs/ucb-cs294-112-notes-zh/img/63b6862422d9ca5fb45e26ab396efe44.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0feeaad2385e6fd4881b125b500b854ad914f6d7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/63b6862422d9ca5fb45e26ab396efe44.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6406ca8c8101cbfa51992c6fd878ace5.jpg b/docs/ucb-cs294-112-notes-zh/img/6406ca8c8101cbfa51992c6fd878ace5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9509eb23f72ca4efa3b809bf3f7b635358696326 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6406ca8c8101cbfa51992c6fd878ace5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/641f46acacfaeca8956209ad0c87099f.jpg b/docs/ucb-cs294-112-notes-zh/img/641f46acacfaeca8956209ad0c87099f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..786b0a191bd030da0f538cc35fd45f7b9b8d67b2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/641f46acacfaeca8956209ad0c87099f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/644d229f5e7c71ac41c787c498507292.jpg b/docs/ucb-cs294-112-notes-zh/img/644d229f5e7c71ac41c787c498507292.jpg new file mode 100644 index 0000000000000000000000000000000000000000..51ca779599b73189f139e69774b75b04dac6d28f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/644d229f5e7c71ac41c787c498507292.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/648811253cdbfe19389964c25be56518.jpg b/docs/ucb-cs294-112-notes-zh/img/648811253cdbfe19389964c25be56518.jpg new file mode 100644 index 0000000000000000000000000000000000000000..242e0a906b8c55999d97ebdae88dcc85a3868d94 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/648811253cdbfe19389964c25be56518.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/64c613a4857247b600ba1b633c35d712.jpg b/docs/ucb-cs294-112-notes-zh/img/64c613a4857247b600ba1b633c35d712.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08774d4b62ef3b78cc0c229188bffc71faa9c0df Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/64c613a4857247b600ba1b633c35d712.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/65091bbebb08870dab7408cbc86e13be.jpg b/docs/ucb-cs294-112-notes-zh/img/65091bbebb08870dab7408cbc86e13be.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4bd193e1bdd7202b2a949afc5e73e734c6423be2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/65091bbebb08870dab7408cbc86e13be.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/654b00d1036ba7f7d93e02f57fc00a75.jpg b/docs/ucb-cs294-112-notes-zh/img/654b00d1036ba7f7d93e02f57fc00a75.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac0229578f025158eb3d75cc598d0d28e62ccd72 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/654b00d1036ba7f7d93e02f57fc00a75.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/655bae996afa47a5f9073a57dce9e4c6.jpg b/docs/ucb-cs294-112-notes-zh/img/655bae996afa47a5f9073a57dce9e4c6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d123b8539e1b20a47e609789d7a0f805239a0b4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/655bae996afa47a5f9073a57dce9e4c6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/65850e910191df7653f3c0f250f5ec84.jpg b/docs/ucb-cs294-112-notes-zh/img/65850e910191df7653f3c0f250f5ec84.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de02d54836e232c9d5e2b7e12748cdb8091d1db9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/65850e910191df7653f3c0f250f5ec84.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/669f989bd57e6b841845aa805003f7c1.jpg b/docs/ucb-cs294-112-notes-zh/img/669f989bd57e6b841845aa805003f7c1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23dee5b1122bff10dccec54b683b3a198e3889fc Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/669f989bd57e6b841845aa805003f7c1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/67040ac52b0210420be06984fca88520.jpg b/docs/ucb-cs294-112-notes-zh/img/67040ac52b0210420be06984fca88520.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3a3e5d7d19b7a6b442466a4b204e6bc3fc7db6c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/67040ac52b0210420be06984fca88520.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/677ef7a70eba41b27fa9f275cec99b6f.jpg b/docs/ucb-cs294-112-notes-zh/img/677ef7a70eba41b27fa9f275cec99b6f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..399ae870ba1245e2cb52b67842862c42fd99c76d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/677ef7a70eba41b27fa9f275cec99b6f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/67efb8809d6b2578c2400910c94128fd.jpg b/docs/ucb-cs294-112-notes-zh/img/67efb8809d6b2578c2400910c94128fd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..998b56d0f48b9f6c7d0cc9d18788d8edfc298508 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/67efb8809d6b2578c2400910c94128fd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/684cadc604f93609aa2aa7ab4bde711f.jpg b/docs/ucb-cs294-112-notes-zh/img/684cadc604f93609aa2aa7ab4bde711f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7bb53c98de82e132ad7c4648958663e85841b5b7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/684cadc604f93609aa2aa7ab4bde711f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6872867a863714d15d9a0d64c20734ce.jpg b/docs/ucb-cs294-112-notes-zh/img/6872867a863714d15d9a0d64c20734ce.jpg new file mode 100644 index 0000000000000000000000000000000000000000..819bb13be4063b44b2d72e078771899a45303c29 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6872867a863714d15d9a0d64c20734ce.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/687ea19aad79c360559598d48aca6a87.jpg b/docs/ucb-cs294-112-notes-zh/img/687ea19aad79c360559598d48aca6a87.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03a6719e8c1361feb25e3e5dc365fc0b68cd0d8b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/687ea19aad79c360559598d48aca6a87.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6893ee69657ee53daca99e781803a67a.jpg b/docs/ucb-cs294-112-notes-zh/img/6893ee69657ee53daca99e781803a67a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2eed9670f345c7fccae74916c4415e5883f8008 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6893ee69657ee53daca99e781803a67a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/68c9b5c1eb917c5cc68ec319b423d1f4.jpg b/docs/ucb-cs294-112-notes-zh/img/68c9b5c1eb917c5cc68ec319b423d1f4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec147dae1373c2b466b4140617be6e098d422deb Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/68c9b5c1eb917c5cc68ec319b423d1f4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/698f49ad5ae10dc2e930d7fc2093b1aa.jpg b/docs/ucb-cs294-112-notes-zh/img/698f49ad5ae10dc2e930d7fc2093b1aa.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d016d723d2a6dfabbbd9fd83284df8de51b3c53 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/698f49ad5ae10dc2e930d7fc2093b1aa.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6a0c8a1837de8c840c35888e8ee6094f.jpg b/docs/ucb-cs294-112-notes-zh/img/6a0c8a1837de8c840c35888e8ee6094f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6a1fadd5e6a1d6b5ddaf93ebe962752e86510d7e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6a0c8a1837de8c840c35888e8ee6094f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6a51b45041c1abddbaa621e89a371914.jpg b/docs/ucb-cs294-112-notes-zh/img/6a51b45041c1abddbaa621e89a371914.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ed76745a37f9c4245a083520b90dd4019c16348 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6a51b45041c1abddbaa621e89a371914.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6a9b5e1e716c27b1ea3ffa15b0766395.jpg b/docs/ucb-cs294-112-notes-zh/img/6a9b5e1e716c27b1ea3ffa15b0766395.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec9a72e033fcdc507821e793b799a82dcb7a1175 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6a9b5e1e716c27b1ea3ffa15b0766395.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6abcfd2478ff64b806bc0997993a3752.jpg b/docs/ucb-cs294-112-notes-zh/img/6abcfd2478ff64b806bc0997993a3752.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5246646fba7069ba97e69fe119b73d33651ac59 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6abcfd2478ff64b806bc0997993a3752.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6afd416bf934ae08a5e888d19546dd0e.jpg b/docs/ucb-cs294-112-notes-zh/img/6afd416bf934ae08a5e888d19546dd0e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fcc621b8bca0242f56c4fe5fbb5c48c139d4754 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6afd416bf934ae08a5e888d19546dd0e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6b7003809791bf91d347cf4ac7337ddb.jpg b/docs/ucb-cs294-112-notes-zh/img/6b7003809791bf91d347cf4ac7337ddb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39cd27ce439dfab0662bfd76ecce49ce96d6d532 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6b7003809791bf91d347cf4ac7337ddb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6b7d043a23d33b04179acbdedc804ba4.jpg b/docs/ucb-cs294-112-notes-zh/img/6b7d043a23d33b04179acbdedc804ba4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c93462e66ba35ee53d0900cea3dc2eadc62d211 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6b7d043a23d33b04179acbdedc804ba4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6ba1bed963fee0917976ed361b8c812b.jpg b/docs/ucb-cs294-112-notes-zh/img/6ba1bed963fee0917976ed361b8c812b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ee8864e0b10f8acf0a9cb10e7923f07568e5636 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6ba1bed963fee0917976ed361b8c812b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6cb444c25460338afee04548cb683fb0.jpg b/docs/ucb-cs294-112-notes-zh/img/6cb444c25460338afee04548cb683fb0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b12ca8021223cc1497d5988cbba0f7e5b4839304 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6cb444c25460338afee04548cb683fb0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6d5458ce1760d8cbd41c652a7acc8928.jpg b/docs/ucb-cs294-112-notes-zh/img/6d5458ce1760d8cbd41c652a7acc8928.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f23265664e408421d70e8cdeabd93f5b6a4f1d1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6d5458ce1760d8cbd41c652a7acc8928.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6dd1c9b767765a9ad7c11f7d552fc9ed.jpg b/docs/ucb-cs294-112-notes-zh/img/6dd1c9b767765a9ad7c11f7d552fc9ed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f071dd70b24fe5cf68b57bb9b6ba442a7bc7ea30 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6dd1c9b767765a9ad7c11f7d552fc9ed.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6ea11555b45efbcfceeeac975bab1d8b.jpg b/docs/ucb-cs294-112-notes-zh/img/6ea11555b45efbcfceeeac975bab1d8b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..368daafa46062c7ce7d1d6ead625dba85d5d4a20 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6ea11555b45efbcfceeeac975bab1d8b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6f1879550aee78e4a3f8af859b64171c.jpg b/docs/ucb-cs294-112-notes-zh/img/6f1879550aee78e4a3f8af859b64171c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..180024e23af6a428194507c0fa34508116ae7b3d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6f1879550aee78e4a3f8af859b64171c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/6f80e04336e3155d0b0c2467ecc5176a.jpg b/docs/ucb-cs294-112-notes-zh/img/6f80e04336e3155d0b0c2467ecc5176a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d5d266784822abf39bf7f8ec96692154020060a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/6f80e04336e3155d0b0c2467ecc5176a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/701c6620ae08adb9e0c2e001157d7f81.jpg b/docs/ucb-cs294-112-notes-zh/img/701c6620ae08adb9e0c2e001157d7f81.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e675b75691a2c60ff040d8a438e3334130347bf5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/701c6620ae08adb9e0c2e001157d7f81.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7057d26374fe008e57bc10fdc05e2c51.jpg b/docs/ucb-cs294-112-notes-zh/img/7057d26374fe008e57bc10fdc05e2c51.jpg new file mode 100644 index 0000000000000000000000000000000000000000..336b64a36ba6e37fa57e2f2c58b3e0e26ff0d2f8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7057d26374fe008e57bc10fdc05e2c51.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/70747286d99b9a797b7f0b2b7788bced.jpg b/docs/ucb-cs294-112-notes-zh/img/70747286d99b9a797b7f0b2b7788bced.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3dce085663a602a7e7c40beae4d7a9a7f4dc89bd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/70747286d99b9a797b7f0b2b7788bced.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/70925d77b822dc854ed73f02fb3ff683.jpg b/docs/ucb-cs294-112-notes-zh/img/70925d77b822dc854ed73f02fb3ff683.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e6b373f96f0e741f8ac508a8053da7d967b7c538 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/70925d77b822dc854ed73f02fb3ff683.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/71a989897d81548b87c86b809bbd68b1.jpg b/docs/ucb-cs294-112-notes-zh/img/71a989897d81548b87c86b809bbd68b1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32ecfa4b5d2c7cb34d5284d34d07ba3e991e882a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/71a989897d81548b87c86b809bbd68b1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/720f6d1371c99438b6d9715a4f3e3bed.jpg b/docs/ucb-cs294-112-notes-zh/img/720f6d1371c99438b6d9715a4f3e3bed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba5149b5376a77cf7a95f05c37143c2745239670 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/720f6d1371c99438b6d9715a4f3e3bed.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7265ea9cf89d482790a3925e3ca43c61.jpg b/docs/ucb-cs294-112-notes-zh/img/7265ea9cf89d482790a3925e3ca43c61.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ad6cd1c3238ac36e4fb587b8164f0aa1c079078 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7265ea9cf89d482790a3925e3ca43c61.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/728a11c3b11e1b323358ada0345f8c98.jpg b/docs/ucb-cs294-112-notes-zh/img/728a11c3b11e1b323358ada0345f8c98.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08334f50c60dcdd3830eb6ca7070f0034b789f10 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/728a11c3b11e1b323358ada0345f8c98.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/72e90d334c5ac06723e7bfd9dc940049.jpg b/docs/ucb-cs294-112-notes-zh/img/72e90d334c5ac06723e7bfd9dc940049.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96f679adb3001a8c39b2a6c6ef8bcad84f6ce81a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/72e90d334c5ac06723e7bfd9dc940049.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7361b237a6bcb43f0379c9d23bae6e81.jpg b/docs/ucb-cs294-112-notes-zh/img/7361b237a6bcb43f0379c9d23bae6e81.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1da23c7bd9f773df2baaf94bc65d2cb488c71b0e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7361b237a6bcb43f0379c9d23bae6e81.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7376870ec6366122615ec0defd600fea.jpg b/docs/ucb-cs294-112-notes-zh/img/7376870ec6366122615ec0defd600fea.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da05280ec03ae46d9c5f43ae5ed3f4a8b1b04a45 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7376870ec6366122615ec0defd600fea.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/73c613b5fd668889d500bfc284cbc5ca.jpg b/docs/ucb-cs294-112-notes-zh/img/73c613b5fd668889d500bfc284cbc5ca.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6707ab28269e5702fb83c97aa430d2956e833170 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/73c613b5fd668889d500bfc284cbc5ca.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/746412aca56dc8b00d584537fa21d668.jpg b/docs/ucb-cs294-112-notes-zh/img/746412aca56dc8b00d584537fa21d668.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9eaa2eb3eef4ad3fc6fca65fc2f2c65ba1e84f1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/746412aca56dc8b00d584537fa21d668.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/74d2211bbd012f5e5cece449d0be8b6a.jpg b/docs/ucb-cs294-112-notes-zh/img/74d2211bbd012f5e5cece449d0be8b6a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16605abcf0a0342d7dbcd6195faa02de468f3494 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/74d2211bbd012f5e5cece449d0be8b6a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/74d6a1f83a7e96c5049293e9cfaffe6b.jpg b/docs/ucb-cs294-112-notes-zh/img/74d6a1f83a7e96c5049293e9cfaffe6b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7248162a0634e4c9876a5ac2b29434013a7c5ef9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/74d6a1f83a7e96c5049293e9cfaffe6b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/751fc8ddd5fa0fd4f9157e9061ad10d8.jpg b/docs/ucb-cs294-112-notes-zh/img/751fc8ddd5fa0fd4f9157e9061ad10d8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb91bd3b89576dba97d8ba673d896961641a6359 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/751fc8ddd5fa0fd4f9157e9061ad10d8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/753092e4f965d22839d8ceb952c7c3fb.jpg b/docs/ucb-cs294-112-notes-zh/img/753092e4f965d22839d8ceb952c7c3fb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e85e26a682185bfa2ad8dc4bd5d7b66b7a9aadaa Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/753092e4f965d22839d8ceb952c7c3fb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7570037806327f96a6f2b01145f79c67.jpg b/docs/ucb-cs294-112-notes-zh/img/7570037806327f96a6f2b01145f79c67.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87d99d0beabf530409a84a7882bb5fba5a69c4ab Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7570037806327f96a6f2b01145f79c67.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/759c4c7f82ca0c1612b75cfc15a49d22.jpg b/docs/ucb-cs294-112-notes-zh/img/759c4c7f82ca0c1612b75cfc15a49d22.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa2c31d816e13ebe5de0e8a476114a3a56671cb9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/759c4c7f82ca0c1612b75cfc15a49d22.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/75cb786c82979cbfdbb01f7f53aaf98d.jpg b/docs/ucb-cs294-112-notes-zh/img/75cb786c82979cbfdbb01f7f53aaf98d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9bc3a9e62c9a2741c8b8a73a6e02eed80dbf6ac8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/75cb786c82979cbfdbb01f7f53aaf98d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/75d5c5e81134dff4a1546051bee7c1c2.jpg b/docs/ucb-cs294-112-notes-zh/img/75d5c5e81134dff4a1546051bee7c1c2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26a76e347d018c96db1e9ab320782bb7c15f6bd0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/75d5c5e81134dff4a1546051bee7c1c2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/75e942875e93fbbaf859adfbba1e14e0.jpg b/docs/ucb-cs294-112-notes-zh/img/75e942875e93fbbaf859adfbba1e14e0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..872f9bb8a8cfbe715572b1ba778f35fa5cc1039f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/75e942875e93fbbaf859adfbba1e14e0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/760f12bcd418f6afd1815df3ee070840.jpg b/docs/ucb-cs294-112-notes-zh/img/760f12bcd418f6afd1815df3ee070840.jpg new file mode 100644 index 0000000000000000000000000000000000000000..690c65baf5f7accfa5e8455a11b9c68d7357b3e0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/760f12bcd418f6afd1815df3ee070840.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7617c5f412d8ba08311c56a7e3032fcb.jpg b/docs/ucb-cs294-112-notes-zh/img/7617c5f412d8ba08311c56a7e3032fcb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffded6596c1da41183fec5e2def7dd160b7f9960 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7617c5f412d8ba08311c56a7e3032fcb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/76396378a118075e0a7e1ea7f0cf634c.jpg b/docs/ucb-cs294-112-notes-zh/img/76396378a118075e0a7e1ea7f0cf634c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7edf58c2a92684e6dc5fc03b986a62e2c126de4c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/76396378a118075e0a7e1ea7f0cf634c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/76db95bab615b58b983c36d85cf7ecef.jpg b/docs/ucb-cs294-112-notes-zh/img/76db95bab615b58b983c36d85cf7ecef.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b9aa2a5b38ce5d39d095d8aafaa6e1df3bd1cb2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/76db95bab615b58b983c36d85cf7ecef.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7723e64b08d33bad4335678557852ecb.jpg b/docs/ucb-cs294-112-notes-zh/img/7723e64b08d33bad4335678557852ecb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14690e9c9a0c88495a2d2867e828c0df6fef63cb Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7723e64b08d33bad4335678557852ecb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/77805fe3f77af93deca0f49bff62a31b.jpg b/docs/ucb-cs294-112-notes-zh/img/77805fe3f77af93deca0f49bff62a31b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0dfa947ea8a76f510b3eb52430c06a228c80489 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/77805fe3f77af93deca0f49bff62a31b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/77cff52584c80e30470b34d9850cbee3.jpg b/docs/ucb-cs294-112-notes-zh/img/77cff52584c80e30470b34d9850cbee3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3fc48fad6b7527de37537bdb65014e1ab784d13c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/77cff52584c80e30470b34d9850cbee3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/77e18e9e84e8a2d026270a4112980af0.jpg b/docs/ucb-cs294-112-notes-zh/img/77e18e9e84e8a2d026270a4112980af0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..79cdbab86b741f1d1dc07986d356a5ea91c3728b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/77e18e9e84e8a2d026270a4112980af0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/781a88b84016ef2451bc48141f2896b3.jpg b/docs/ucb-cs294-112-notes-zh/img/781a88b84016ef2451bc48141f2896b3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..167201dad6d273189ba4f17889e51c9697371f13 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/781a88b84016ef2451bc48141f2896b3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/78bc32b822dda546b64dc94fde1b960b.jpg b/docs/ucb-cs294-112-notes-zh/img/78bc32b822dda546b64dc94fde1b960b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f343ff25a674b81a966270b148b5a54af619cd8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/78bc32b822dda546b64dc94fde1b960b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/79041bc1d89c256b2584aafae1262ef8.jpg b/docs/ucb-cs294-112-notes-zh/img/79041bc1d89c256b2584aafae1262ef8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bec0d256c4690a86104dd6026f52c055c34f3193 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/79041bc1d89c256b2584aafae1262ef8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/794d611303bbd02f7347ce1e1d96992b.jpg b/docs/ucb-cs294-112-notes-zh/img/794d611303bbd02f7347ce1e1d96992b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0cb22f9191b81d0f373fd25f63688d20f17e41df Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/794d611303bbd02f7347ce1e1d96992b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/79c0bf4a3efd3b6d5847fbdcc4418ec6.jpg b/docs/ucb-cs294-112-notes-zh/img/79c0bf4a3efd3b6d5847fbdcc4418ec6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96b6d9f12a0a2951122297582e977c8e58e6b0da Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/79c0bf4a3efd3b6d5847fbdcc4418ec6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7a12b9ec1f617907f55f18046e1a93e7.jpg b/docs/ucb-cs294-112-notes-zh/img/7a12b9ec1f617907f55f18046e1a93e7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c99f573af4216a4c54dcf923991e44c22a15523 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7a12b9ec1f617907f55f18046e1a93e7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7a19b211f01720564e6cf4f70d3d5cff.jpg b/docs/ucb-cs294-112-notes-zh/img/7a19b211f01720564e6cf4f70d3d5cff.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8909a68661320e53379e5fcd2261b92eff7c690 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7a19b211f01720564e6cf4f70d3d5cff.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7a334093dedb7fdbe31a820786ed10fd.jpg b/docs/ucb-cs294-112-notes-zh/img/7a334093dedb7fdbe31a820786ed10fd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea9ba3fcd1780d9d98a0b558ed3a9033227b4e51 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7a334093dedb7fdbe31a820786ed10fd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7a83e328f81b4938a5b997aa56e4db41.jpg b/docs/ucb-cs294-112-notes-zh/img/7a83e328f81b4938a5b997aa56e4db41.jpg new file mode 100644 index 0000000000000000000000000000000000000000..613f2a10ada1ba84a2ab3e245cec279cdcfb3952 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7a83e328f81b4938a5b997aa56e4db41.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7ab644944bf5756474a40d56ee2a49db.jpg b/docs/ucb-cs294-112-notes-zh/img/7ab644944bf5756474a40d56ee2a49db.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f7dd57fa2fbfcb3844e4f3d2957096eddd150ed Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7ab644944bf5756474a40d56ee2a49db.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7b7db50b67a9f3940457d92c064b9fa5.jpg b/docs/ucb-cs294-112-notes-zh/img/7b7db50b67a9f3940457d92c064b9fa5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1e612c93b55a2cc720380e6251aea5a52f132fe Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7b7db50b67a9f3940457d92c064b9fa5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7c15fd4258b49114f5effdae74de9f9d.jpg b/docs/ucb-cs294-112-notes-zh/img/7c15fd4258b49114f5effdae74de9f9d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3eaf6a1f6674ae7c721b217c41ce14c0142f482f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7c15fd4258b49114f5effdae74de9f9d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7c649d86e23c73b81dbc7fd5f9485373.jpg b/docs/ucb-cs294-112-notes-zh/img/7c649d86e23c73b81dbc7fd5f9485373.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec58525a182b1daa8a51e0d95decbf30f41a0869 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7c649d86e23c73b81dbc7fd5f9485373.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7e1abd66b26196f960e2f89cb81b9b9b.jpg b/docs/ucb-cs294-112-notes-zh/img/7e1abd66b26196f960e2f89cb81b9b9b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b833409fe614ff334d545cf83edb5ff17d23af29 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7e1abd66b26196f960e2f89cb81b9b9b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7e6fd93e433783cf818e9656f0d38d52.jpg b/docs/ucb-cs294-112-notes-zh/img/7e6fd93e433783cf818e9656f0d38d52.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78d0835046b6fb2d5b3352d95f7970cbc2fe161e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7e6fd93e433783cf818e9656f0d38d52.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7edc8e8380808f23a396b439035f8626.jpg b/docs/ucb-cs294-112-notes-zh/img/7edc8e8380808f23a396b439035f8626.jpg new file mode 100644 index 0000000000000000000000000000000000000000..56504c2f6cd76a35b7cb13df5b19f2de8a7c3a76 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7edc8e8380808f23a396b439035f8626.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7eddc344bf3a3724aa2ea06320b90275.jpg b/docs/ucb-cs294-112-notes-zh/img/7eddc344bf3a3724aa2ea06320b90275.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08494e070d058ee669f9a6d6653da380838b2025 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7eddc344bf3a3724aa2ea06320b90275.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7f4cc8af7cdd2ce14e3367972fabf390.jpg b/docs/ucb-cs294-112-notes-zh/img/7f4cc8af7cdd2ce14e3367972fabf390.jpg new file mode 100644 index 0000000000000000000000000000000000000000..023a281cf17742fce309f863cdee9f7197303df4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7f4cc8af7cdd2ce14e3367972fabf390.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7f98d9b4acd9808e59803f2bd42817e1.jpg b/docs/ucb-cs294-112-notes-zh/img/7f98d9b4acd9808e59803f2bd42817e1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62346eb8e1c1a2c4baf876fa00adabc45e3789f2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7f98d9b4acd9808e59803f2bd42817e1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/7fb380bd0ed15a070ded59f007529699.jpg b/docs/ucb-cs294-112-notes-zh/img/7fb380bd0ed15a070ded59f007529699.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f7eaa736460b71cbe5a3cf679bcb6741aa8a744 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/7fb380bd0ed15a070ded59f007529699.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/807111a383a1488083b7583beae74257.jpg b/docs/ucb-cs294-112-notes-zh/img/807111a383a1488083b7583beae74257.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f71fe12afc4dfac4b03c603175f68f0bb8b5060 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/807111a383a1488083b7583beae74257.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/80885bef591a347bc6e42aa0aa8c0b7f.jpg b/docs/ucb-cs294-112-notes-zh/img/80885bef591a347bc6e42aa0aa8c0b7f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9b21a0999febdf1f336f59848262cf3e42b7324 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/80885bef591a347bc6e42aa0aa8c0b7f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/809bdce7cceb4eb4c572b511fcd8cfab.jpg b/docs/ucb-cs294-112-notes-zh/img/809bdce7cceb4eb4c572b511fcd8cfab.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96abe9468d711c1c77eae6e893e5259d2d0dfb3d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/809bdce7cceb4eb4c572b511fcd8cfab.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/80c0b820c3e1ebf9ee38fd666ac99c15.jpg b/docs/ucb-cs294-112-notes-zh/img/80c0b820c3e1ebf9ee38fd666ac99c15.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bcc788f5c42cebad7e75791be687b05e0e93b7d0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/80c0b820c3e1ebf9ee38fd666ac99c15.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8103c32cbdfc5697b6d3808151f6f7bf.jpg b/docs/ucb-cs294-112-notes-zh/img/8103c32cbdfc5697b6d3808151f6f7bf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..29a0e28f85ff49b780ee5dd44cb45747ef4abe08 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8103c32cbdfc5697b6d3808151f6f7bf.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/81abd39760c40036163219d3b0b53054.jpg b/docs/ucb-cs294-112-notes-zh/img/81abd39760c40036163219d3b0b53054.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0731934962b4b131b6f84d796a331628c2482c7e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/81abd39760c40036163219d3b0b53054.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/81e2adc8cc6f526d62be3ca4fc27b7bc.jpg b/docs/ucb-cs294-112-notes-zh/img/81e2adc8cc6f526d62be3ca4fc27b7bc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..48bc5b4b2f973fd87538a8b02b80703a106e20e6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/81e2adc8cc6f526d62be3ca4fc27b7bc.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/81ed86ba25d05c3057e787e2f7f11be4.jpg b/docs/ucb-cs294-112-notes-zh/img/81ed86ba25d05c3057e787e2f7f11be4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f79d005c5eee44ef3d19132903351122f9d3555 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/81ed86ba25d05c3057e787e2f7f11be4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/82005cc2e0087e2a52c7e43df4a19a00.jpg b/docs/ucb-cs294-112-notes-zh/img/82005cc2e0087e2a52c7e43df4a19a00.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a185cba282685452b55b2cd5e246a9e6256209ea Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/82005cc2e0087e2a52c7e43df4a19a00.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/820bd64eefeb946b7b3c5d8a4f3c3f96.jpg b/docs/ucb-cs294-112-notes-zh/img/820bd64eefeb946b7b3c5d8a4f3c3f96.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dffaf23601da9958e55df0d0b0e6d2a95c6b9098 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/820bd64eefeb946b7b3c5d8a4f3c3f96.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8210694f9b5134fa9b98f3351fc3f46d.jpg b/docs/ucb-cs294-112-notes-zh/img/8210694f9b5134fa9b98f3351fc3f46d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..487eed1e2ad0ad5e1c3d01ffbe830313e8716529 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8210694f9b5134fa9b98f3351fc3f46d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8262e953bccac30cd2526e0b70727f2c.jpg b/docs/ucb-cs294-112-notes-zh/img/8262e953bccac30cd2526e0b70727f2c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d19af965cbed4954eddfd35fa637e1bb5a23645e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8262e953bccac30cd2526e0b70727f2c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/83ad44e8d9f31b4eb5605c00db4a8c3a.jpg b/docs/ucb-cs294-112-notes-zh/img/83ad44e8d9f31b4eb5605c00db4a8c3a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..860c78a3aa8eab57ea822403d0da17b81da31bc6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/83ad44e8d9f31b4eb5605c00db4a8c3a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/841586446e889c9f82e9a427c5271082.jpg b/docs/ucb-cs294-112-notes-zh/img/841586446e889c9f82e9a427c5271082.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17b7f3b48588324f8a7f2ae6bcae5bbe2a50dfc1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/841586446e889c9f82e9a427c5271082.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/841ad9e04cca5a0051f26a055c9ec2b1.jpg b/docs/ucb-cs294-112-notes-zh/img/841ad9e04cca5a0051f26a055c9ec2b1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60ea6e1872fd8e476bd3c1b6c4c3ca0e6ca7eab9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/841ad9e04cca5a0051f26a055c9ec2b1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/843454ffceadb49a6fbd983de6f0ba85.jpg b/docs/ucb-cs294-112-notes-zh/img/843454ffceadb49a6fbd983de6f0ba85.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d29ea58f1afd65ba9da1853c3e6abcfc6cb286ea Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/843454ffceadb49a6fbd983de6f0ba85.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8450de36b5a9a0cca2401fca64de1a17.jpg b/docs/ucb-cs294-112-notes-zh/img/8450de36b5a9a0cca2401fca64de1a17.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b5ed9d56eeea35d955e866ea097fcf477616e3d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8450de36b5a9a0cca2401fca64de1a17.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/84d303ef7e174b56ee63a4f08fbb3295.jpg b/docs/ucb-cs294-112-notes-zh/img/84d303ef7e174b56ee63a4f08fbb3295.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1edef90daedd479ec79c34f98e18f39ca6a3b4a4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/84d303ef7e174b56ee63a4f08fbb3295.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/84dc90feae6cc26bf13881c799b8245b.jpg b/docs/ucb-cs294-112-notes-zh/img/84dc90feae6cc26bf13881c799b8245b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26ddd9cf355acf90345c66b65f9e547e0945d2a0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/84dc90feae6cc26bf13881c799b8245b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/84de26bb16301f23ddbef54b82230640.jpg b/docs/ucb-cs294-112-notes-zh/img/84de26bb16301f23ddbef54b82230640.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7276462fb98c38cfcf37b10ac0334ec4122a6196 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/84de26bb16301f23ddbef54b82230640.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/850363bac3a6961f66fe6e82710fa519.jpg b/docs/ucb-cs294-112-notes-zh/img/850363bac3a6961f66fe6e82710fa519.jpg new file mode 100644 index 0000000000000000000000000000000000000000..041945136ac244499c729e355abb2ba952c85d1b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/850363bac3a6961f66fe6e82710fa519.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/850c3827d5f51de9cd19f123c8470891.jpg b/docs/ucb-cs294-112-notes-zh/img/850c3827d5f51de9cd19f123c8470891.jpg new file mode 100644 index 0000000000000000000000000000000000000000..366b0727e159f753e19a612f09667651554cfc37 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/850c3827d5f51de9cd19f123c8470891.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/85552bb5c41e6e0594b9752dee84253d.jpg b/docs/ucb-cs294-112-notes-zh/img/85552bb5c41e6e0594b9752dee84253d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27ee8b241ca0c58342b96fc4dbf046917303dca6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/85552bb5c41e6e0594b9752dee84253d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8587778591bf32b7533d57b49aba0083.jpg b/docs/ucb-cs294-112-notes-zh/img/8587778591bf32b7533d57b49aba0083.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a4cd7414024118c1ab7f137c1de7078a3b4fd3b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8587778591bf32b7533d57b49aba0083.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/85b06aa39fe239c2ada7f9e124d05bcc.jpg b/docs/ucb-cs294-112-notes-zh/img/85b06aa39fe239c2ada7f9e124d05bcc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa057cb7055f7dd29d0ae7e2dd96f3aa9d94fa39 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/85b06aa39fe239c2ada7f9e124d05bcc.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/860a4117021ad87e7834aed6b0baadbb.jpg b/docs/ucb-cs294-112-notes-zh/img/860a4117021ad87e7834aed6b0baadbb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c170ce5a46c0108c016bc6ac88772c5c1f695db Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/860a4117021ad87e7834aed6b0baadbb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/866f65b3be3987cd8d46227b92ac2346.jpg b/docs/ucb-cs294-112-notes-zh/img/866f65b3be3987cd8d46227b92ac2346.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef7c7bdb19fbbcf53ed6f764917183e4858dd30a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/866f65b3be3987cd8d46227b92ac2346.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/868db68e71ec9cabbe333cb77dd676bc.jpg b/docs/ucb-cs294-112-notes-zh/img/868db68e71ec9cabbe333cb77dd676bc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ef69ec837d1458a6feaf22e8156584dd42b073f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/868db68e71ec9cabbe333cb77dd676bc.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/871cc7713efd90ccf8d00f81365ed2e1.jpg b/docs/ucb-cs294-112-notes-zh/img/871cc7713efd90ccf8d00f81365ed2e1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c91ad901873ec0a7de7d5002116d857f057cb9c4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/871cc7713efd90ccf8d00f81365ed2e1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/87b6e1b1d459e07ea55433ff449800bf.jpg b/docs/ucb-cs294-112-notes-zh/img/87b6e1b1d459e07ea55433ff449800bf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cbbbfacc2a20584b8df7142c79562c6dcf502d50 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/87b6e1b1d459e07ea55433ff449800bf.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/882a0f20f5c1072eea3e62ec94033100.jpg b/docs/ucb-cs294-112-notes-zh/img/882a0f20f5c1072eea3e62ec94033100.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b48bb57b631fc0d9f0148025d0ffd46d4bd95c0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/882a0f20f5c1072eea3e62ec94033100.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/897a9776a5b77a77dc7dcb21973ffe06.jpg b/docs/ucb-cs294-112-notes-zh/img/897a9776a5b77a77dc7dcb21973ffe06.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30336c1eb821808215969ffe448f772bdf154c55 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/897a9776a5b77a77dc7dcb21973ffe06.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/89eb2e91be70247f33a5542dcaf0f42b.jpg b/docs/ucb-cs294-112-notes-zh/img/89eb2e91be70247f33a5542dcaf0f42b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6947d4fe630c7d15f80f4de8bebf244c50a69242 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/89eb2e91be70247f33a5542dcaf0f42b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8a46aae55f664eb5586b0f61f68c10ce.jpg b/docs/ucb-cs294-112-notes-zh/img/8a46aae55f664eb5586b0f61f68c10ce.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b94fdc726481e341029993fa44307a2b2980600a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8a46aae55f664eb5586b0f61f68c10ce.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8b4c3e8be7da971e832789294ddd61d4.jpg b/docs/ucb-cs294-112-notes-zh/img/8b4c3e8be7da971e832789294ddd61d4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..68058234812e1e319c591673aba6d7d947f8d111 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8b4c3e8be7da971e832789294ddd61d4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8b60be1d00a787dbb89f01ab84ac6359.jpg b/docs/ucb-cs294-112-notes-zh/img/8b60be1d00a787dbb89f01ab84ac6359.jpg new file mode 100644 index 0000000000000000000000000000000000000000..085c19191e57816c8716885c6cec76c16d0ffd49 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8b60be1d00a787dbb89f01ab84ac6359.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8b73cb62a17078d13456adbc8e45ed62.jpg b/docs/ucb-cs294-112-notes-zh/img/8b73cb62a17078d13456adbc8e45ed62.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1185d431698fe9d074a443366d07337c01d75567 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8b73cb62a17078d13456adbc8e45ed62.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8c0dbed8e0fc267d90b7aad094a57ceb.jpg b/docs/ucb-cs294-112-notes-zh/img/8c0dbed8e0fc267d90b7aad094a57ceb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9456331261abfc03903c4103cefb1b6c123cd59d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8c0dbed8e0fc267d90b7aad094a57ceb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8c19961cff2f0a8202cbcabe3769a945.jpg b/docs/ucb-cs294-112-notes-zh/img/8c19961cff2f0a8202cbcabe3769a945.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2967778ef1b11ff1970970fa9afbfb85b20f030a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8c19961cff2f0a8202cbcabe3769a945.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8c290d09ef57dedc870ad2970d760954.jpg b/docs/ucb-cs294-112-notes-zh/img/8c290d09ef57dedc870ad2970d760954.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86239464f078b5cbc4ca6c3b7c8a4648daf42176 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8c290d09ef57dedc870ad2970d760954.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8c6722896a975cd892239237491de1cf.jpg b/docs/ucb-cs294-112-notes-zh/img/8c6722896a975cd892239237491de1cf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43c9ca081ceff60b3a38157208a15bba08ccc2e9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8c6722896a975cd892239237491de1cf.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8d1af87454e638a1efc984d22e2a55ee.jpg b/docs/ucb-cs294-112-notes-zh/img/8d1af87454e638a1efc984d22e2a55ee.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c01eebc24029fd065b668418d176d3b2fff4057 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8d1af87454e638a1efc984d22e2a55ee.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8dd6a431a284795b9969551243d2a6b1.jpg b/docs/ucb-cs294-112-notes-zh/img/8dd6a431a284795b9969551243d2a6b1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63a2413b680d23b0dbcc1c329e5c78ccc6a9842c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8dd6a431a284795b9969551243d2a6b1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8ef8b1f49c134b63699d10c171b5296e.jpg b/docs/ucb-cs294-112-notes-zh/img/8ef8b1f49c134b63699d10c171b5296e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4314e55a9f0fa2b2d684d2bcf500f0e26ef0e8a5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8ef8b1f49c134b63699d10c171b5296e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8f0448f45d1d652c054f70ca3aa3eb4f.jpg b/docs/ucb-cs294-112-notes-zh/img/8f0448f45d1d652c054f70ca3aa3eb4f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..420b3564b0eb07d6539edd48c388c7fd633f43eb Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8f0448f45d1d652c054f70ca3aa3eb4f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8f711561f9855336dea7e66e814596ac.jpg b/docs/ucb-cs294-112-notes-zh/img/8f711561f9855336dea7e66e814596ac.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02223c4c4121c528562031551a2de246dcb61d0b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8f711561f9855336dea7e66e814596ac.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8fb507a31bd0b2ce96091d0ec0e8b5c8.jpg b/docs/ucb-cs294-112-notes-zh/img/8fb507a31bd0b2ce96091d0ec0e8b5c8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bec575c9b05fc994a82b27b46a0a9981bb6c5b41 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8fb507a31bd0b2ce96091d0ec0e8b5c8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/8fc730f99c88767766c281961cb0beaa.jpg b/docs/ucb-cs294-112-notes-zh/img/8fc730f99c88767766c281961cb0beaa.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f368133df64c4b5d08e4a0e44d4cc59858a75df Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/8fc730f99c88767766c281961cb0beaa.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/90359accf3239cd186fe4395acf4e6b6.jpg b/docs/ucb-cs294-112-notes-zh/img/90359accf3239cd186fe4395acf4e6b6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bffef8ffa78d61a1fb66ca4ef0df0d2b36eab8cd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/90359accf3239cd186fe4395acf4e6b6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/90e34fd5b09834befbd211d3e8dc4641.jpg b/docs/ucb-cs294-112-notes-zh/img/90e34fd5b09834befbd211d3e8dc4641.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7fa23998ebcf15655f4f4ad8f2ebc94fb9860299 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/90e34fd5b09834befbd211d3e8dc4641.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/91130ee3a03ec033601dbaf1a1d32236.jpg b/docs/ucb-cs294-112-notes-zh/img/91130ee3a03ec033601dbaf1a1d32236.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e64fedbedc5fa7119691f9fb1970a4054d8b619 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/91130ee3a03ec033601dbaf1a1d32236.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/911bd844a0123b3442a933a2c908619f.jpg b/docs/ucb-cs294-112-notes-zh/img/911bd844a0123b3442a933a2c908619f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f961319b7495688f45199fedd444b70bc4ebc10 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/911bd844a0123b3442a933a2c908619f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/922a8c7e899a4fb2edfa61167015dcbc.jpg b/docs/ucb-cs294-112-notes-zh/img/922a8c7e899a4fb2edfa61167015dcbc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5463c0496b222531fa64b9c262bf2a10872aa55 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/922a8c7e899a4fb2edfa61167015dcbc.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/924c3530f4be11efe2f0bd129bccfcbf.jpg b/docs/ucb-cs294-112-notes-zh/img/924c3530f4be11efe2f0bd129bccfcbf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98a73cd927985be559ed3613c8fd52dee9f7bfae Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/924c3530f4be11efe2f0bd129bccfcbf.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/92546131c30d45daa7f1ce8eeba04c9a.jpg b/docs/ucb-cs294-112-notes-zh/img/92546131c30d45daa7f1ce8eeba04c9a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8022496ca65defb5bcb45f0ab2e4143244777846 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/92546131c30d45daa7f1ce8eeba04c9a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/925efdfea2a49656cd36ece0a9dec698.jpg b/docs/ucb-cs294-112-notes-zh/img/925efdfea2a49656cd36ece0a9dec698.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9e4c348657f53a2e29bff06ceb30708dd6d5d3d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/925efdfea2a49656cd36ece0a9dec698.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/92bb90af8ba2a3e605fb1111e989a82f.jpg b/docs/ucb-cs294-112-notes-zh/img/92bb90af8ba2a3e605fb1111e989a82f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d17a67718b744299a97f48713970b83dca55654 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/92bb90af8ba2a3e605fb1111e989a82f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9341d9048ac485106d2b2ee8de14876f.jpg b/docs/ucb-cs294-112-notes-zh/img/9341d9048ac485106d2b2ee8de14876f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..900275c2edd12b4c2bbf39da3493cd45eeeae885 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9341d9048ac485106d2b2ee8de14876f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/93650e97dd680d264a8d636dcb099907.jpg b/docs/ucb-cs294-112-notes-zh/img/93650e97dd680d264a8d636dcb099907.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d70f484f0c437590cddac3bf3963c4b7d88a510 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/93650e97dd680d264a8d636dcb099907.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/93bee57396d470c221c8116b3a8ffed9.jpg b/docs/ucb-cs294-112-notes-zh/img/93bee57396d470c221c8116b3a8ffed9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c8dbb1c15b558ff21e971298a372a35a33b488c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/93bee57396d470c221c8116b3a8ffed9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/93d5e62f3f8bb71a16e6164e362aa87b.jpg b/docs/ucb-cs294-112-notes-zh/img/93d5e62f3f8bb71a16e6164e362aa87b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43c20550434a2341934e65d0d430d5c5a6e2d698 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/93d5e62f3f8bb71a16e6164e362aa87b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/93ee5ad133c3b083a120da2ccb6e5817.jpg b/docs/ucb-cs294-112-notes-zh/img/93ee5ad133c3b083a120da2ccb6e5817.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d38ec7f77a6243b0d170a745f1ac1e7d8075ae7c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/93ee5ad133c3b083a120da2ccb6e5817.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/944bed48d9482ee25a9138392b9fd5a7.jpg b/docs/ucb-cs294-112-notes-zh/img/944bed48d9482ee25a9138392b9fd5a7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..447d97f68b92c22abec484ebcef2771e6ec25277 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/944bed48d9482ee25a9138392b9fd5a7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/94c2edd239f2416ba7d7a367f9d01462.jpg b/docs/ucb-cs294-112-notes-zh/img/94c2edd239f2416ba7d7a367f9d01462.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6cdb0d821b945c657bc11e1cfc76225d335bdbc0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/94c2edd239f2416ba7d7a367f9d01462.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/94c85a10ab15c360317e8d7866dd2761.jpg b/docs/ucb-cs294-112-notes-zh/img/94c85a10ab15c360317e8d7866dd2761.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec5146a3840f774f12e440128b7fbc2c438c10d5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/94c85a10ab15c360317e8d7866dd2761.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/94dc2ab00fb6cbf83f92f63e007204ec.jpg b/docs/ucb-cs294-112-notes-zh/img/94dc2ab00fb6cbf83f92f63e007204ec.jpg new file mode 100644 index 0000000000000000000000000000000000000000..37f7c21b1a73b64fae520b991890a4a102968aaf Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/94dc2ab00fb6cbf83f92f63e007204ec.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/952ee40e9db5a378abbbd8c220fc0b18.jpg b/docs/ucb-cs294-112-notes-zh/img/952ee40e9db5a378abbbd8c220fc0b18.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1aec318033683c7847814d96d05674ac699ef2ac Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/952ee40e9db5a378abbbd8c220fc0b18.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9551ac9f9c9c8f4b9e4e03e9e52326cd.jpg b/docs/ucb-cs294-112-notes-zh/img/9551ac9f9c9c8f4b9e4e03e9e52326cd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31550ef01816e9caa45c9bc4a71a8d6730e6e9b4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9551ac9f9c9c8f4b9e4e03e9e52326cd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/95febb4b111ff56c73297e9b9f6e91bb.jpg b/docs/ucb-cs294-112-notes-zh/img/95febb4b111ff56c73297e9b9f6e91bb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a15415eaf0138209832f117f8dfa0dd78a018f4c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/95febb4b111ff56c73297e9b9f6e91bb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/963506d41c344f1b20058f6306306d3b.jpg b/docs/ucb-cs294-112-notes-zh/img/963506d41c344f1b20058f6306306d3b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8e1f6efb584b93cbbb2d4ba48d871b0d332d932 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/963506d41c344f1b20058f6306306d3b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/963dff8ca17a1ccf8a9edcd338e87112.jpg b/docs/ucb-cs294-112-notes-zh/img/963dff8ca17a1ccf8a9edcd338e87112.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6bae7af97ad661d46870498ad8302fbd995304db Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/963dff8ca17a1ccf8a9edcd338e87112.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/96c9d62d90ce1279ddf00c820d22735c.jpg b/docs/ucb-cs294-112-notes-zh/img/96c9d62d90ce1279ddf00c820d22735c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a43e9aa1ffc14e4f7b96e01f4a7e53c92e7d618 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/96c9d62d90ce1279ddf00c820d22735c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9753a5f88f862e742e5ce7c5462e96d5.jpg b/docs/ucb-cs294-112-notes-zh/img/9753a5f88f862e742e5ce7c5462e96d5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f7bec4a8f746d36b2ed9264a6954718aacfd43d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9753a5f88f862e742e5ce7c5462e96d5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9770ba37cbd9f993589d809e3436491e.jpg b/docs/ucb-cs294-112-notes-zh/img/9770ba37cbd9f993589d809e3436491e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fce7142969f7319c4775da47615282f504bdfd7d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9770ba37cbd9f993589d809e3436491e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/97ec688c0e72f9d3a863f8aa478c4e15.jpg b/docs/ucb-cs294-112-notes-zh/img/97ec688c0e72f9d3a863f8aa478c4e15.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e18cdfadcda04195e0d2ed68a56d4fdc0b99733 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/97ec688c0e72f9d3a863f8aa478c4e15.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/97f31cbcb5130521427b30a4667a9040.jpg b/docs/ucb-cs294-112-notes-zh/img/97f31cbcb5130521427b30a4667a9040.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9516c6b6fcac10bec5f4ce423c579d1140ae62c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/97f31cbcb5130521427b30a4667a9040.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/98303e899013c0b251c1161a19cdaf3e.jpg b/docs/ucb-cs294-112-notes-zh/img/98303e899013c0b251c1161a19cdaf3e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0fc3db730d5cb3f40558685c81e9fba92f1888c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/98303e899013c0b251c1161a19cdaf3e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9845666762ee0a2ca62338790529bd65.jpg b/docs/ucb-cs294-112-notes-zh/img/9845666762ee0a2ca62338790529bd65.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f9928093d82db463a2eb7003302a76f41c87dcb Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9845666762ee0a2ca62338790529bd65.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9852aef9c75200eca15057b3188c038e.jpg b/docs/ucb-cs294-112-notes-zh/img/9852aef9c75200eca15057b3188c038e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb6bcbaf57887dc6e86b6d4a042b42adfcaf24b6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9852aef9c75200eca15057b3188c038e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9938d3b26d69ca3acd27c543a92b0374.jpg b/docs/ucb-cs294-112-notes-zh/img/9938d3b26d69ca3acd27c543a92b0374.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d5034ed6d1936901527c1d1493abc8e8e14fbf7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9938d3b26d69ca3acd27c543a92b0374.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/994cc5fd2c0dbff5aca2c66d2a9192b3.jpg b/docs/ucb-cs294-112-notes-zh/img/994cc5fd2c0dbff5aca2c66d2a9192b3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cfea9c8551e011b335f65b49d1e048e56ddef068 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/994cc5fd2c0dbff5aca2c66d2a9192b3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/994d95ea18c78bc3a2161f6a3fedc5ac.jpg b/docs/ucb-cs294-112-notes-zh/img/994d95ea18c78bc3a2161f6a3fedc5ac.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d65071ded1120cd8b960c67fbede05d25340c720 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/994d95ea18c78bc3a2161f6a3fedc5ac.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/994fd4ba3b537c9333ba995ba5f43432.jpg b/docs/ucb-cs294-112-notes-zh/img/994fd4ba3b537c9333ba995ba5f43432.jpg new file mode 100644 index 0000000000000000000000000000000000000000..653bd4b55046f59020fd7d802aadcca799d6c894 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/994fd4ba3b537c9333ba995ba5f43432.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/996ffb65aa798cbb637ecaaa6f2799b5.jpg b/docs/ucb-cs294-112-notes-zh/img/996ffb65aa798cbb637ecaaa6f2799b5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27cba298ff8ab6d1cfa78ed9f37307950414b27c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/996ffb65aa798cbb637ecaaa6f2799b5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/99e7c00db12760ebac7cb5d47fadfbcc.jpg b/docs/ucb-cs294-112-notes-zh/img/99e7c00db12760ebac7cb5d47fadfbcc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba0c12cbf48c4284a3b9986442b15d4efb31da90 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/99e7c00db12760ebac7cb5d47fadfbcc.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9a09921b172482229e38e3158a8b3c92.jpg b/docs/ucb-cs294-112-notes-zh/img/9a09921b172482229e38e3158a8b3c92.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27fc432312b35c4b9bd514a63f32e6e032b41259 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9a09921b172482229e38e3158a8b3c92.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9ab0daac17ec4daee5f8ba0c18865070.jpg b/docs/ucb-cs294-112-notes-zh/img/9ab0daac17ec4daee5f8ba0c18865070.jpg new file mode 100644 index 0000000000000000000000000000000000000000..991a36616b7ae452277403dbbc22317bd7365492 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9ab0daac17ec4daee5f8ba0c18865070.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9ad0752dc21c13eb7e56ed911bf8450d.jpg b/docs/ucb-cs294-112-notes-zh/img/9ad0752dc21c13eb7e56ed911bf8450d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9b94de575211d98eb291772ae2a9e3ebe435d98 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9ad0752dc21c13eb7e56ed911bf8450d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9b40d084aa1217b678aa67fe11f449fc.jpg b/docs/ucb-cs294-112-notes-zh/img/9b40d084aa1217b678aa67fe11f449fc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d54b58928676f63247b4d5281b093b73b6affac7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9b40d084aa1217b678aa67fe11f449fc.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9bb9c3f1681153abfe74fc18e386fbe2.jpg b/docs/ucb-cs294-112-notes-zh/img/9bb9c3f1681153abfe74fc18e386fbe2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f228555a30b8ffdaba6751ebd384cf095d0f2085 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9bb9c3f1681153abfe74fc18e386fbe2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9bd4cf30921b1124cf60ebae2f96d5c6.jpg b/docs/ucb-cs294-112-notes-zh/img/9bd4cf30921b1124cf60ebae2f96d5c6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0aee04a8ddabadfac639e0d30159a90e31eeac91 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9bd4cf30921b1124cf60ebae2f96d5c6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9c14e24f69944e3ac895ab410447c294.jpg b/docs/ucb-cs294-112-notes-zh/img/9c14e24f69944e3ac895ab410447c294.jpg new file mode 100644 index 0000000000000000000000000000000000000000..45abfa6bb7c8d43f3e15dd61e6204e64e634b1da Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9c14e24f69944e3ac895ab410447c294.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9c4501554984db58ca4414c592e22347.jpg b/docs/ucb-cs294-112-notes-zh/img/9c4501554984db58ca4414c592e22347.jpg new file mode 100644 index 0000000000000000000000000000000000000000..842b861c74359996bd845b2a0fe6a9766b136b4e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9c4501554984db58ca4414c592e22347.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9d2788b87afa62cdb2e42b5e2be64b35.jpg b/docs/ucb-cs294-112-notes-zh/img/9d2788b87afa62cdb2e42b5e2be64b35.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16b35bb0fd486072fca7bd885d28bb89829fccd6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9d2788b87afa62cdb2e42b5e2be64b35.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9d60a7f5436455aeeeedf61e654aa12b.jpg b/docs/ucb-cs294-112-notes-zh/img/9d60a7f5436455aeeeedf61e654aa12b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c18c15c7fbacbcf82a194f3e3d2b227ebb86d50 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9d60a7f5436455aeeeedf61e654aa12b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9d6b8d362486cc7aecac97c0264bc07c.jpg b/docs/ucb-cs294-112-notes-zh/img/9d6b8d362486cc7aecac97c0264bc07c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98fe0b27d429a78a9334347304e2597be1ff9ed3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9d6b8d362486cc7aecac97c0264bc07c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9dd1aff83b1e81060a1929c72632443d.jpg b/docs/ucb-cs294-112-notes-zh/img/9dd1aff83b1e81060a1929c72632443d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd369f628ff0cd2d16ace288e324082ea98ee53d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9dd1aff83b1e81060a1929c72632443d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9f0d7815004a46cc9606c92fa75ab9f3.jpg b/docs/ucb-cs294-112-notes-zh/img/9f0d7815004a46cc9606c92fa75ab9f3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7527cc8d3c93f91109f178df0f340985400f714 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9f0d7815004a46cc9606c92fa75ab9f3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9f39ed8e55a5171ff8196a95d809a764.jpg b/docs/ucb-cs294-112-notes-zh/img/9f39ed8e55a5171ff8196a95d809a764.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd388e435afb93e831895e691a57966e74b912b5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9f39ed8e55a5171ff8196a95d809a764.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9f53de5bc7dce2a82299c411a183b664.jpg b/docs/ucb-cs294-112-notes-zh/img/9f53de5bc7dce2a82299c411a183b664.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1acfb0ca4d60d5270a1ec14e319617721a068e9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9f53de5bc7dce2a82299c411a183b664.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9f6c6e381426eddd13a467493fcbc5fa.jpg b/docs/ucb-cs294-112-notes-zh/img/9f6c6e381426eddd13a467493fcbc5fa.jpg new file mode 100644 index 0000000000000000000000000000000000000000..341f170f2b5d7ed184b32d448861ada500cab750 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9f6c6e381426eddd13a467493fcbc5fa.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/9f9aa2bf03a498d72bfdd3415c5e2ae4.jpg b/docs/ucb-cs294-112-notes-zh/img/9f9aa2bf03a498d72bfdd3415c5e2ae4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08bdfae2bbc4004cf93262ed03581810ebd1f58d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/9f9aa2bf03a498d72bfdd3415c5e2ae4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a06668c8ded97786d94a657f39470f87.jpg b/docs/ucb-cs294-112-notes-zh/img/a06668c8ded97786d94a657f39470f87.jpg new file mode 100644 index 0000000000000000000000000000000000000000..24fa4a6e6ab4fd3590a6adf6a8f95ef81f99f28f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a06668c8ded97786d94a657f39470f87.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a0d76431d0746be878aae0cf9e2af4b3.jpg b/docs/ucb-cs294-112-notes-zh/img/a0d76431d0746be878aae0cf9e2af4b3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce9d5a22fea7e6b024532f490edd9db1254003a2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a0d76431d0746be878aae0cf9e2af4b3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a12e4e326c12105329656bcb1fe98fca.jpg b/docs/ucb-cs294-112-notes-zh/img/a12e4e326c12105329656bcb1fe98fca.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfd8fa43288abb56ff8713636025b1c4539d30a6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a12e4e326c12105329656bcb1fe98fca.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a180ccd5586d20462a02929ec61eb6a7.jpg b/docs/ucb-cs294-112-notes-zh/img/a180ccd5586d20462a02929ec61eb6a7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..949aaa17531d521c082f86edd42d7496107413a8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a180ccd5586d20462a02929ec61eb6a7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a19ca0b4a8843a49943f2aaae73fd48d.jpg b/docs/ucb-cs294-112-notes-zh/img/a19ca0b4a8843a49943f2aaae73fd48d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7da2a466470c1734edc6a378b9f5a476f21d13c7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a19ca0b4a8843a49943f2aaae73fd48d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a1c2f8d5b1226e67bdb44b12a6ddf18b.jpg b/docs/ucb-cs294-112-notes-zh/img/a1c2f8d5b1226e67bdb44b12a6ddf18b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1e2a7b41f89e0a0b0c3ae50eedf7d206bcc815d4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a1c2f8d5b1226e67bdb44b12a6ddf18b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a1e8ba82b43c795cf1dfd8b4c06d32fb.jpg b/docs/ucb-cs294-112-notes-zh/img/a1e8ba82b43c795cf1dfd8b4c06d32fb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f98deb5fdef284e6d5c190f57ca3bd031a90fde Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a1e8ba82b43c795cf1dfd8b4c06d32fb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a1eff788e54cd01841535aa3964a3c45.jpg b/docs/ucb-cs294-112-notes-zh/img/a1eff788e54cd01841535aa3964a3c45.jpg new file mode 100644 index 0000000000000000000000000000000000000000..68518942b08c89b625ff9f44bb81d853544d041d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a1eff788e54cd01841535aa3964a3c45.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a24f6c1417e09ddc14c4f2dc77d3393a.jpg b/docs/ucb-cs294-112-notes-zh/img/a24f6c1417e09ddc14c4f2dc77d3393a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..917199c6b9e2f00ed94e7844efd3b03141bbe909 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a24f6c1417e09ddc14c4f2dc77d3393a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a3c4711e2fa5d16da102c71554ff0184.jpg b/docs/ucb-cs294-112-notes-zh/img/a3c4711e2fa5d16da102c71554ff0184.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7df538f3dce4bc525d38f1888aeefbeac4c6aa80 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a3c4711e2fa5d16da102c71554ff0184.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a3cb5df87811ac506b987dbaaf8fb566.jpg b/docs/ucb-cs294-112-notes-zh/img/a3cb5df87811ac506b987dbaaf8fb566.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02432a6cc1955b7ec9893b47ca52f83be02e858f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a3cb5df87811ac506b987dbaaf8fb566.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a42d988b6b24a26426f8a167a62e341a.jpg b/docs/ucb-cs294-112-notes-zh/img/a42d988b6b24a26426f8a167a62e341a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f19435b24d9349a0c73ee0988d68e44a72e1c2ce Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a42d988b6b24a26426f8a167a62e341a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a46e048aab0e2f1215f939e9f2b1a66f.jpg b/docs/ucb-cs294-112-notes-zh/img/a46e048aab0e2f1215f939e9f2b1a66f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ab514a4106354226e922296f4f760db4fab177e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a46e048aab0e2f1215f939e9f2b1a66f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a559dc46053e8b6e30b2ba2a5ec76d0c.jpg b/docs/ucb-cs294-112-notes-zh/img/a559dc46053e8b6e30b2ba2a5ec76d0c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b570888cbcdf6edba007f86a8e211b23e5f0f0f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a559dc46053e8b6e30b2ba2a5ec76d0c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a5d888208b026f3597f6e71a9acf768c.jpg b/docs/ucb-cs294-112-notes-zh/img/a5d888208b026f3597f6e71a9acf768c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9eb24e78e071e0fc470bfbd6c3616f80e23cc7d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a5d888208b026f3597f6e71a9acf768c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a5db490cd70a38a0bb9f3de58c51589f.jpg b/docs/ucb-cs294-112-notes-zh/img/a5db490cd70a38a0bb9f3de58c51589f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..254084de37d77e0d240826748052722a8a9be0e7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a5db490cd70a38a0bb9f3de58c51589f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a6b578ffd8a671fc660deeaa1aebf86d.jpg b/docs/ucb-cs294-112-notes-zh/img/a6b578ffd8a671fc660deeaa1aebf86d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8fa2d2b6efa27a02e0ba498f680e9dcd791b044 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a6b578ffd8a671fc660deeaa1aebf86d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a6f40c9f924d4799d083333e94fd43d7.jpg b/docs/ucb-cs294-112-notes-zh/img/a6f40c9f924d4799d083333e94fd43d7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..821642f7922ef956793571443c2cc747334d6cd3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a6f40c9f924d4799d083333e94fd43d7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a71d7e86f68a92cf62a231e012c14de1.jpg b/docs/ucb-cs294-112-notes-zh/img/a71d7e86f68a92cf62a231e012c14de1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..041bb97bd2f493e7821c050082d4bf07e3f9f9ed Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a71d7e86f68a92cf62a231e012c14de1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a7d7833e37d30607ecbb9662e59f96f4.jpg b/docs/ucb-cs294-112-notes-zh/img/a7d7833e37d30607ecbb9662e59f96f4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db7d664e8bab673ac81e400fb457fba7001f75f0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a7d7833e37d30607ecbb9662e59f96f4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a7dcfc76be2217a0e6105a56f2017b09.jpg b/docs/ucb-cs294-112-notes-zh/img/a7dcfc76be2217a0e6105a56f2017b09.jpg new file mode 100644 index 0000000000000000000000000000000000000000..791d3153b8113fe09cb8e056cbe9b8507adf73c9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a7dcfc76be2217a0e6105a56f2017b09.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a84856940a40224287e16ba72e5edd11.jpg b/docs/ucb-cs294-112-notes-zh/img/a84856940a40224287e16ba72e5edd11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5626cef51d33dbed09badd9875ad7ff31d1df6ff Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a84856940a40224287e16ba72e5edd11.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a879ee6818d95b22005c0aace68e623e.jpg b/docs/ucb-cs294-112-notes-zh/img/a879ee6818d95b22005c0aace68e623e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81670fa65d5bf469a4497a0bdcd16e2a1de92a88 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a879ee6818d95b22005c0aace68e623e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a89133fca071feffac3f313bd8d8b982.jpg b/docs/ucb-cs294-112-notes-zh/img/a89133fca071feffac3f313bd8d8b982.jpg new file mode 100644 index 0000000000000000000000000000000000000000..36a1c7578aa182fed505fb757a77b38cd4a209a4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a89133fca071feffac3f313bd8d8b982.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a8e344ce992c2391f332dee5b713e36b.jpg b/docs/ucb-cs294-112-notes-zh/img/a8e344ce992c2391f332dee5b713e36b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6741ccf69e6c339ef5e41180df2aa56b026c2827 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a8e344ce992c2391f332dee5b713e36b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/a92d64295ba8076fd1c6201264b430c6.jpg b/docs/ucb-cs294-112-notes-zh/img/a92d64295ba8076fd1c6201264b430c6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2039f35675d48fd45a034127a39a9e87cf49ff73 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/a92d64295ba8076fd1c6201264b430c6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/aa2250bf13e35808e86f21e9a58e81ab.jpg b/docs/ucb-cs294-112-notes-zh/img/aa2250bf13e35808e86f21e9a58e81ab.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2e8c5458c038530f506b558201eedb70370ff66 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/aa2250bf13e35808e86f21e9a58e81ab.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/aa4199c96ff1b10a292351b444560b99.jpg b/docs/ucb-cs294-112-notes-zh/img/aa4199c96ff1b10a292351b444560b99.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62a47323a612cc3189380db65752dd26c4b68fde Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/aa4199c96ff1b10a292351b444560b99.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ab0308a7c7fd0b36c63ca97415b12edb.jpg b/docs/ucb-cs294-112-notes-zh/img/ab0308a7c7fd0b36c63ca97415b12edb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a89ba1894bc79f97b864866460e55a8eb716e299 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ab0308a7c7fd0b36c63ca97415b12edb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ab5031f9f2650d8508eff6ea8df57aa8.jpg b/docs/ucb-cs294-112-notes-zh/img/ab5031f9f2650d8508eff6ea8df57aa8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a8bf976098be5d917f4290a13e8de4f91bc028e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ab5031f9f2650d8508eff6ea8df57aa8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ac253426fd7d206af3c21d0ac74c5efe.jpg b/docs/ucb-cs294-112-notes-zh/img/ac253426fd7d206af3c21d0ac74c5efe.jpg new file mode 100644 index 0000000000000000000000000000000000000000..106293db11a8bd273a496acd91752845eb9b2171 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ac253426fd7d206af3c21d0ac74c5efe.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ac38b18cffeff5d93b3e1f9a9cd11281.jpg b/docs/ucb-cs294-112-notes-zh/img/ac38b18cffeff5d93b3e1f9a9cd11281.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b0c4ff07621296a51f88d5fa554eb25d6408db2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ac38b18cffeff5d93b3e1f9a9cd11281.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ac3968d237b497ed865d7ad806732bd0.jpg b/docs/ucb-cs294-112-notes-zh/img/ac3968d237b497ed865d7ad806732bd0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5e7d3f5851f089725f409a2e4a49b57796c0443 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ac3968d237b497ed865d7ad806732bd0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ac539e694189a47efa5de3fe30f47772.jpg b/docs/ucb-cs294-112-notes-zh/img/ac539e694189a47efa5de3fe30f47772.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb69aa0b5579ab3c771161e165e779f6dbe9114a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ac539e694189a47efa5de3fe30f47772.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ac69ad70a2c80173f91515cc83684690.jpg b/docs/ucb-cs294-112-notes-zh/img/ac69ad70a2c80173f91515cc83684690.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d60ffaea9fb1cbcbc6383deb595314e63e5fc60 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ac69ad70a2c80173f91515cc83684690.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/acf6a23665ebe82999f1f5bac4d05827.jpg b/docs/ucb-cs294-112-notes-zh/img/acf6a23665ebe82999f1f5bac4d05827.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b13d1fe58c609104d1c91e753dfbce44711df90 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/acf6a23665ebe82999f1f5bac4d05827.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ad98f28ac580a60494c218f07718188a.jpg b/docs/ucb-cs294-112-notes-zh/img/ad98f28ac580a60494c218f07718188a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..031c54bf322922ec4525ab78bed11f5fc51501fd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ad98f28ac580a60494c218f07718188a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ae087b2ee711b4d242670c584abd0bc9.jpg b/docs/ucb-cs294-112-notes-zh/img/ae087b2ee711b4d242670c584abd0bc9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1855889fc962b69ca2ce93f90964d063d6975751 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ae087b2ee711b4d242670c584abd0bc9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ae10e4346cae83ff28e42da0edca67df.jpg b/docs/ucb-cs294-112-notes-zh/img/ae10e4346cae83ff28e42da0edca67df.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a0d209da13148116abdc1265b846eab5951bd3e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ae10e4346cae83ff28e42da0edca67df.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ae4366cfbd033baff1d82fc2b97b17b0.jpg b/docs/ucb-cs294-112-notes-zh/img/ae4366cfbd033baff1d82fc2b97b17b0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df7319c2d400b59eff1ccb08620fe23da7a52bd3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ae4366cfbd033baff1d82fc2b97b17b0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ae4cbcc5d33fcffcb6277e561e22589d.jpg b/docs/ucb-cs294-112-notes-zh/img/ae4cbcc5d33fcffcb6277e561e22589d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1469987ffdb1a5ea224199de8a22d4cba5d5369d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ae4cbcc5d33fcffcb6277e561e22589d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ae50dc9b4f172f3c2bf99154d73b8a60.jpg b/docs/ucb-cs294-112-notes-zh/img/ae50dc9b4f172f3c2bf99154d73b8a60.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4220cc7cc31058143bba097f5df0b9771d98030a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ae50dc9b4f172f3c2bf99154d73b8a60.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/aeb302325ebc29add21f094ad38ad261.jpg b/docs/ucb-cs294-112-notes-zh/img/aeb302325ebc29add21f094ad38ad261.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d1c9677ad4c20b5f3b5a8b2b78b9f2f8dddf70a7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/aeb302325ebc29add21f094ad38ad261.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/af0e250946e1096c575e70bb1d91ff70.jpg b/docs/ucb-cs294-112-notes-zh/img/af0e250946e1096c575e70bb1d91ff70.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83c973c8dc8d6a87ecc018dbfbf7416e9c85e481 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/af0e250946e1096c575e70bb1d91ff70.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/af20e3e63e888097030b140bd99bd3bb.jpg b/docs/ucb-cs294-112-notes-zh/img/af20e3e63e888097030b140bd99bd3bb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5eaf8f99a9105f06f3f9f66ac42b45b516ff41f3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/af20e3e63e888097030b140bd99bd3bb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/afb448dff3f5dcb5173191ca0e934fc0.jpg b/docs/ucb-cs294-112-notes-zh/img/afb448dff3f5dcb5173191ca0e934fc0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..192277ba66ffe4b8439cc09defd1cdc6977519fc Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/afb448dff3f5dcb5173191ca0e934fc0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b01c8e38cb7bff34721444a3ee417b45.jpg b/docs/ucb-cs294-112-notes-zh/img/b01c8e38cb7bff34721444a3ee417b45.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3433842b614f84f9a78a4ce66ed16a782c33703e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b01c8e38cb7bff34721444a3ee417b45.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b03a2efdc6ceb6433989465aa3ed57fe.jpg b/docs/ucb-cs294-112-notes-zh/img/b03a2efdc6ceb6433989465aa3ed57fe.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5be184cabe0dff9d3b1a94fece3f9d89441bf30e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b03a2efdc6ceb6433989465aa3ed57fe.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b04135bd55841a1fdceb826c8bc82c58.jpg b/docs/ucb-cs294-112-notes-zh/img/b04135bd55841a1fdceb826c8bc82c58.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9503f1be45e7e01509b9a02a8f397eeb032dc163 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b04135bd55841a1fdceb826c8bc82c58.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b092165953df179ee6cc8c0a24ed5082.jpg b/docs/ucb-cs294-112-notes-zh/img/b092165953df179ee6cc8c0a24ed5082.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c106b4f0c6a89cdf6ff5318115827c630b0e11b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b092165953df179ee6cc8c0a24ed5082.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b118501b402416cf442e1f8a1b31bebb.jpg b/docs/ucb-cs294-112-notes-zh/img/b118501b402416cf442e1f8a1b31bebb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..964304eaf280760667f9680fb89f7b75de001505 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b118501b402416cf442e1f8a1b31bebb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b128226bee473967675cc8361eee0bea.jpg b/docs/ucb-cs294-112-notes-zh/img/b128226bee473967675cc8361eee0bea.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fade53394cc24a17c11ca1f69fc0ac6f4325a9bb Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b128226bee473967675cc8361eee0bea.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b1572ffc28875eceb6bdfc9339d151ee.jpg b/docs/ucb-cs294-112-notes-zh/img/b1572ffc28875eceb6bdfc9339d151ee.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f2f401ab52516497b34e717278984bfd5cae8a4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b1572ffc28875eceb6bdfc9339d151ee.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b1ebf6dd4752eb966ac00bad59fea571.jpg b/docs/ucb-cs294-112-notes-zh/img/b1ebf6dd4752eb966ac00bad59fea571.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66f16c1161ed802434c2c0ad35179f3b2b1d678c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b1ebf6dd4752eb966ac00bad59fea571.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b1ed7836f0192b89cb8e977adf2ef018.jpg b/docs/ucb-cs294-112-notes-zh/img/b1ed7836f0192b89cb8e977adf2ef018.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6be22c8c03ea6757f3c7a31d5851dda66383fb1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b1ed7836f0192b89cb8e977adf2ef018.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b28149196d0e25529e68861d1997c25c.jpg b/docs/ucb-cs294-112-notes-zh/img/b28149196d0e25529e68861d1997c25c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b2bc59fa14c6e8a11c3c5e2dfc573284bc05943b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b28149196d0e25529e68861d1997c25c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b294bfc678e4edaa5c943deb8639dd61.jpg b/docs/ucb-cs294-112-notes-zh/img/b294bfc678e4edaa5c943deb8639dd61.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b5b8c7cb3768a497487241c1d548a74ffc48ed4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b294bfc678e4edaa5c943deb8639dd61.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b3231b48ae5c4a7d4d638b72a0983eac.jpg b/docs/ucb-cs294-112-notes-zh/img/b3231b48ae5c4a7d4d638b72a0983eac.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc764d9ace6d8ea0e821d9ba5b50032c224dc8f6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b3231b48ae5c4a7d4d638b72a0983eac.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b35013592f1d8bd56503d8d518a6360e.jpg b/docs/ucb-cs294-112-notes-zh/img/b35013592f1d8bd56503d8d518a6360e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c60fd645c9da6165053ecca5405bee25ac4e73b6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b35013592f1d8bd56503d8d518a6360e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b3cc15dd3b3921272afd8cfcbf4d35a6.jpg b/docs/ucb-cs294-112-notes-zh/img/b3cc15dd3b3921272afd8cfcbf4d35a6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aab861683c1e4351aed2f68ed2ac2fe55fa25096 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b3cc15dd3b3921272afd8cfcbf4d35a6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b3d8b4f2ad4d077d79aa47f014faa1f9.jpg b/docs/ucb-cs294-112-notes-zh/img/b3d8b4f2ad4d077d79aa47f014faa1f9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a48ac71da00a74caf5c78395a528d8bc5eaad6d3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b3d8b4f2ad4d077d79aa47f014faa1f9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b4015417e4fab132708d8ac1d66690b8.jpg b/docs/ucb-cs294-112-notes-zh/img/b4015417e4fab132708d8ac1d66690b8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba06c5fedf584a875fb5f57a545ddb1c860b9fdb Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b4015417e4fab132708d8ac1d66690b8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b44c973ab5625e97f17e92687c1206ae.jpg b/docs/ucb-cs294-112-notes-zh/img/b44c973ab5625e97f17e92687c1206ae.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a7400c5aa7c555de32ef657f4be71e716f0d23db Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b44c973ab5625e97f17e92687c1206ae.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b4591b72892f13da37e97ae1e729cd99.jpg b/docs/ucb-cs294-112-notes-zh/img/b4591b72892f13da37e97ae1e729cd99.jpg new file mode 100644 index 0000000000000000000000000000000000000000..909611705ede5e2309b9a411d8c9f22893fa3919 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b4591b72892f13da37e97ae1e729cd99.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b4b0b321dbb9a9a7ea64b932895b1632.jpg b/docs/ucb-cs294-112-notes-zh/img/b4b0b321dbb9a9a7ea64b932895b1632.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9494db211700475727f2eb7ab34fa2c1b04780fe Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b4b0b321dbb9a9a7ea64b932895b1632.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b5368f3dc300981c0da2601513e83348.jpg b/docs/ucb-cs294-112-notes-zh/img/b5368f3dc300981c0da2601513e83348.jpg new file mode 100644 index 0000000000000000000000000000000000000000..750316e5640128a76c022d85d777c408306cc202 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b5368f3dc300981c0da2601513e83348.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b546d9c0663bd8adf6d5cff3dba8370d.jpg b/docs/ucb-cs294-112-notes-zh/img/b546d9c0663bd8adf6d5cff3dba8370d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38250107a9fb7af7502132fb0f7c18da923912e0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b546d9c0663bd8adf6d5cff3dba8370d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b55f25aec34a8626bae8e9f1f6ccc9bf.jpg b/docs/ucb-cs294-112-notes-zh/img/b55f25aec34a8626bae8e9f1f6ccc9bf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a1e3091c97ff28936192343d7f8550578c8f5984 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b55f25aec34a8626bae8e9f1f6ccc9bf.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b5f1f59d63acfa9c1d981f6dcf94c9d2.jpg b/docs/ucb-cs294-112-notes-zh/img/b5f1f59d63acfa9c1d981f6dcf94c9d2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a82d4b2d2e3c5bdf53d4ed73fff8dffe2082b54e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b5f1f59d63acfa9c1d981f6dcf94c9d2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b637c4140d6cb6a419012469a63e87d4.jpg b/docs/ucb-cs294-112-notes-zh/img/b637c4140d6cb6a419012469a63e87d4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0076a0aa820662953448fa93265c1b259e8d510 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b637c4140d6cb6a419012469a63e87d4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b73e8aa9bdfc9bf4fb48f498aa5fbb91.jpg b/docs/ucb-cs294-112-notes-zh/img/b73e8aa9bdfc9bf4fb48f498aa5fbb91.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5d4afea4593d9277a2380b0d0cd8e3f043c1c3b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b73e8aa9bdfc9bf4fb48f498aa5fbb91.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b76ac03c37765558105efda7de15064c.jpg b/docs/ucb-cs294-112-notes-zh/img/b76ac03c37765558105efda7de15064c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ffc03369eae32b26c47f1b61af168cda91ffcd7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b76ac03c37765558105efda7de15064c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b78351a3a805b0eed3d271eb38fb40dc.jpg b/docs/ucb-cs294-112-notes-zh/img/b78351a3a805b0eed3d271eb38fb40dc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b480d899df3265d26d4e678c52806bd241ec0929 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b78351a3a805b0eed3d271eb38fb40dc.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b847640ee1f0f9e65cd3797b679c025d.jpg b/docs/ucb-cs294-112-notes-zh/img/b847640ee1f0f9e65cd3797b679c025d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9c34dbba81f3c854cf6c09462bb4f43f1598485 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b847640ee1f0f9e65cd3797b679c025d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b8ccda82b58beb66a62c2abfffd962ab.jpg b/docs/ucb-cs294-112-notes-zh/img/b8ccda82b58beb66a62c2abfffd962ab.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d71da3e5b1f608f1f6f4d155cb67fb78645f453 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b8ccda82b58beb66a62c2abfffd962ab.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b8ef9aeaf3c06194c8bcad280704e1fa.jpg b/docs/ucb-cs294-112-notes-zh/img/b8ef9aeaf3c06194c8bcad280704e1fa.jpg new file mode 100644 index 0000000000000000000000000000000000000000..427ca8e5c0ad970e52fb6710ceaa5a4e7f11c8f6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b8ef9aeaf3c06194c8bcad280704e1fa.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b90d7ea7aae5cfd3f53ecec0a40322b8.jpg b/docs/ucb-cs294-112-notes-zh/img/b90d7ea7aae5cfd3f53ecec0a40322b8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b5f07c45d08fe94d487fef14748a735c251f743 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b90d7ea7aae5cfd3f53ecec0a40322b8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/b9951c8f0a6c559ef692c81d1de326df.jpg b/docs/ucb-cs294-112-notes-zh/img/b9951c8f0a6c559ef692c81d1de326df.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d2a7299bce0e3d85e9be7e01f3f43fcc89dd5be3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/b9951c8f0a6c559ef692c81d1de326df.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ba215edcde8fcafcde3af8b054c6c7df.jpg b/docs/ucb-cs294-112-notes-zh/img/ba215edcde8fcafcde3af8b054c6c7df.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53412403c8b5b2a126016452dad6bd000f32db5e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ba215edcde8fcafcde3af8b054c6c7df.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ba3e14941c5a050785db0bc7dcdef81a.jpg b/docs/ucb-cs294-112-notes-zh/img/ba3e14941c5a050785db0bc7dcdef81a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4a2553ace9195a041f1571f432f0de523602349 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ba3e14941c5a050785db0bc7dcdef81a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/bab4ec68a5669018a9f1c8a043f6d825.jpg b/docs/ucb-cs294-112-notes-zh/img/bab4ec68a5669018a9f1c8a043f6d825.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f3aaf953c8ad9e6d07688c57ee2a1f6a1ab358a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/bab4ec68a5669018a9f1c8a043f6d825.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/bb46e1fd7a4111c77093b2d8e742cff7.jpg b/docs/ucb-cs294-112-notes-zh/img/bb46e1fd7a4111c77093b2d8e742cff7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1b3da03c712e7d72a603e04dddda05f82111531 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/bb46e1fd7a4111c77093b2d8e742cff7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/bbbbf1468207b076b6abfb7ea3765a55.jpg b/docs/ucb-cs294-112-notes-zh/img/bbbbf1468207b076b6abfb7ea3765a55.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b8247ff654e36285d7cb63a9ce4142897546dec Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/bbbbf1468207b076b6abfb7ea3765a55.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/bceea97f16b954c1fa220bac1d58736d.jpg b/docs/ucb-cs294-112-notes-zh/img/bceea97f16b954c1fa220bac1d58736d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..382019fe8035b3a5067ee0933275695ded299f07 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/bceea97f16b954c1fa220bac1d58736d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/bcf39b8869877165446c3f29834e3cbf.jpg b/docs/ucb-cs294-112-notes-zh/img/bcf39b8869877165446c3f29834e3cbf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..643487129dd999a2dd0f19ebb14a98be671f4ec1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/bcf39b8869877165446c3f29834e3cbf.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/bd1470d811451a8a38fa7ecb19491b2f.jpg b/docs/ucb-cs294-112-notes-zh/img/bd1470d811451a8a38fa7ecb19491b2f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94101e4ca75c5b4054e7b9cac5f19dd06952702d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/bd1470d811451a8a38fa7ecb19491b2f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/bd37d824739c450f8643ad773ac1b3bd.jpg b/docs/ucb-cs294-112-notes-zh/img/bd37d824739c450f8643ad773ac1b3bd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ed6e247bb69804dd6c3ef1465b45fd7fe819a56 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/bd37d824739c450f8643ad773ac1b3bd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/bd8881cf681f11028b726cef99036af0.jpg b/docs/ucb-cs294-112-notes-zh/img/bd8881cf681f11028b726cef99036af0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69c02a38c5f250a77030e9259c4b14125cee3072 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/bd8881cf681f11028b726cef99036af0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/bd91fff32902c7989ce531baeb2f5df1.jpg b/docs/ucb-cs294-112-notes-zh/img/bd91fff32902c7989ce531baeb2f5df1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a1129633a56753c33b22ed565a20bf5b6a96da3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/bd91fff32902c7989ce531baeb2f5df1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/be9df62849d35ab4e4e72871e181d09a.jpg b/docs/ucb-cs294-112-notes-zh/img/be9df62849d35ab4e4e72871e181d09a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd4bfd737720836bd89f7b49c4df34f0f178bff0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/be9df62849d35ab4e4e72871e181d09a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/bea8259ddc81b502185ea944dd0ec451.jpg b/docs/ucb-cs294-112-notes-zh/img/bea8259ddc81b502185ea944dd0ec451.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6dc2d1c2e66e105b52888cb8421183b1203e3f35 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/bea8259ddc81b502185ea944dd0ec451.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/bee18259b98e1060ecc919f2046a472d.jpg b/docs/ucb-cs294-112-notes-zh/img/bee18259b98e1060ecc919f2046a472d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f5273bebf899c51721e74e0a7da4105501dcd2e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/bee18259b98e1060ecc919f2046a472d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/bf03027db1ac5944ffbf4d842f5d762e.jpg b/docs/ucb-cs294-112-notes-zh/img/bf03027db1ac5944ffbf4d842f5d762e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09e7d57ff9a4d7f1d4699d0166b7993416838d13 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/bf03027db1ac5944ffbf4d842f5d762e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/bfa4acdbafb4d1c0b44b3f8fa15dc71c.jpg b/docs/ucb-cs294-112-notes-zh/img/bfa4acdbafb4d1c0b44b3f8fa15dc71c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4fbfcc51fb4e78cfb74b8e9d652f239c49fee4ee Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/bfa4acdbafb4d1c0b44b3f8fa15dc71c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c015f10519ede8c9ab477ed0bda43078.jpg b/docs/ucb-cs294-112-notes-zh/img/c015f10519ede8c9ab477ed0bda43078.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ab22e5e39d0c4d2b133caf3dc07a09a664f6f3f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c015f10519ede8c9ab477ed0bda43078.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c06e9d534cda839ae39c8ebcfe18e92f.jpg b/docs/ucb-cs294-112-notes-zh/img/c06e9d534cda839ae39c8ebcfe18e92f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b84d3d6139d01ce7d90734c5065e893f1098eaa Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c06e9d534cda839ae39c8ebcfe18e92f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c0aaec9eb451051fdb4d7602e6f74382.jpg b/docs/ucb-cs294-112-notes-zh/img/c0aaec9eb451051fdb4d7602e6f74382.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae4f5c65256d8b605b235596135aa17d1deb6f28 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c0aaec9eb451051fdb4d7602e6f74382.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c10c3a15014cf7e0b1b76f3b1cc9e5a0.jpg b/docs/ucb-cs294-112-notes-zh/img/c10c3a15014cf7e0b1b76f3b1cc9e5a0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ae6ca694688a945bf1f09f3c787d52da86a098e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c10c3a15014cf7e0b1b76f3b1cc9e5a0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c10e10c1ee3bf28f39f615bf160cade1.jpg b/docs/ucb-cs294-112-notes-zh/img/c10e10c1ee3bf28f39f615bf160cade1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..252ff2b6b75f87a4818b2cae7671bca204a7c4a8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c10e10c1ee3bf28f39f615bf160cade1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c192bb519a08d03eb6bf425ca9a2057e.jpg b/docs/ucb-cs294-112-notes-zh/img/c192bb519a08d03eb6bf425ca9a2057e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..950c0ef381eab402aac71bbb642fcfe22cea03f8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c192bb519a08d03eb6bf425ca9a2057e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c1ad9ea26e494612965253539807b189.jpg b/docs/ucb-cs294-112-notes-zh/img/c1ad9ea26e494612965253539807b189.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8104f271f3c613cf9c1b417cdbdb56eb021bdaa2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c1ad9ea26e494612965253539807b189.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c1c691ab01107ccb2a6131af75175d56.jpg b/docs/ucb-cs294-112-notes-zh/img/c1c691ab01107ccb2a6131af75175d56.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34f083f85acc20954eebfcd4ec65d17268ef955f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c1c691ab01107ccb2a6131af75175d56.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c1fced4c82901b14545188685ac0b947.jpg b/docs/ucb-cs294-112-notes-zh/img/c1fced4c82901b14545188685ac0b947.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52456f6cd0350ee44b920eca3571a0bad9eb5784 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c1fced4c82901b14545188685ac0b947.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c1fd392e146369cc310919c3d297d240.jpg b/docs/ucb-cs294-112-notes-zh/img/c1fd392e146369cc310919c3d297d240.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5fb6e277a3f18ed5c292947e952d9db482a577e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c1fd392e146369cc310919c3d297d240.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c20ff3270833f8171a7cb01cc34dc280.jpg b/docs/ucb-cs294-112-notes-zh/img/c20ff3270833f8171a7cb01cc34dc280.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4746af36e2d6828d02b6cac82ddac581870cfea3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c20ff3270833f8171a7cb01cc34dc280.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c21944e091bba28f733241a217827943.jpg b/docs/ucb-cs294-112-notes-zh/img/c21944e091bba28f733241a217827943.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc353b08a301843828b09366ec86927b8a2d0db4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c21944e091bba28f733241a217827943.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c2a0f0e531e7612f38b821566243bd79.jpg b/docs/ucb-cs294-112-notes-zh/img/c2a0f0e531e7612f38b821566243bd79.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f560405f22fee05c74be248eb473df95e74939d4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c2a0f0e531e7612f38b821566243bd79.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c3069f9353fcc9a7455ec2315b0f8855.jpg b/docs/ucb-cs294-112-notes-zh/img/c3069f9353fcc9a7455ec2315b0f8855.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1b80bcb78f0554563b854a465159dfdc12bb24c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c3069f9353fcc9a7455ec2315b0f8855.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c39e2eb8bb6c7ab081391af21dedc447.jpg b/docs/ucb-cs294-112-notes-zh/img/c39e2eb8bb6c7ab081391af21dedc447.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d0fbfa612a1de95ac12ee38ebaea3ca963a5495b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c39e2eb8bb6c7ab081391af21dedc447.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c3d913dbb89f1b8e1a23a84dd7a905fd.jpg b/docs/ucb-cs294-112-notes-zh/img/c3d913dbb89f1b8e1a23a84dd7a905fd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ce92b5aeb6e50512d487377f65a46aa2be0a66b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c3d913dbb89f1b8e1a23a84dd7a905fd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c4049e59ae75c518d332fa892ba54101.jpg b/docs/ucb-cs294-112-notes-zh/img/c4049e59ae75c518d332fa892ba54101.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c2f9f2ff0bff1b45964f48ffaa01dbe0b3eb173 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c4049e59ae75c518d332fa892ba54101.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c420f7e5b13f09eba72574f6695327f8.jpg b/docs/ucb-cs294-112-notes-zh/img/c420f7e5b13f09eba72574f6695327f8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b86b3f836d19b5ce04ff2f13cce11474967c617d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c420f7e5b13f09eba72574f6695327f8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c43f169c2a462f5f8efce150c2da1433.jpg b/docs/ucb-cs294-112-notes-zh/img/c43f169c2a462f5f8efce150c2da1433.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce8423d17da7b3da2d7f83fd2923e3f8ddde9f76 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c43f169c2a462f5f8efce150c2da1433.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c4af7d8e59380f621826e58208e79448.jpg b/docs/ucb-cs294-112-notes-zh/img/c4af7d8e59380f621826e58208e79448.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3615036c091e789df0eb446a1dd9e57118297ef7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c4af7d8e59380f621826e58208e79448.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c4ccd195fb894683bdc96a78d5160005.jpg b/docs/ucb-cs294-112-notes-zh/img/c4ccd195fb894683bdc96a78d5160005.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7a5f30a8a4c3fc2976604c40fcc751472429d537 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c4ccd195fb894683bdc96a78d5160005.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c507087331a2c89503c821123e63eb5b.jpg b/docs/ucb-cs294-112-notes-zh/img/c507087331a2c89503c821123e63eb5b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c1a3cbfbe5966b3427c113cf7631cd809de920c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c507087331a2c89503c821123e63eb5b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c59126c3f91d4e1a8d572f47341ec77d.jpg b/docs/ucb-cs294-112-notes-zh/img/c59126c3f91d4e1a8d572f47341ec77d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7557c8a4dc189f689b5b152390b1ffd048140308 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c59126c3f91d4e1a8d572f47341ec77d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c644be55e3a98173fdc5353db44cf839.jpg b/docs/ucb-cs294-112-notes-zh/img/c644be55e3a98173fdc5353db44cf839.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc975dec1d68b58172a28d6e453d71f01097b180 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c644be55e3a98173fdc5353db44cf839.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c6eacb417bebb1b9bdf189cb77796d82.jpg b/docs/ucb-cs294-112-notes-zh/img/c6eacb417bebb1b9bdf189cb77796d82.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a5dca7637ad44f755c3987a4c3e36890a5d6864 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c6eacb417bebb1b9bdf189cb77796d82.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c6ffa945f08cc4c82a72f59be87d2af0.jpg b/docs/ucb-cs294-112-notes-zh/img/c6ffa945f08cc4c82a72f59be87d2af0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d09192e0650cf87f4fa9cfbb0066534202e9100 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c6ffa945f08cc4c82a72f59be87d2af0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c7777031d90a084fa917ff08dbafe1f7.jpg b/docs/ucb-cs294-112-notes-zh/img/c7777031d90a084fa917ff08dbafe1f7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10f0f11d562a6b6365556a25f1e54faa4c54b1bd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c7777031d90a084fa917ff08dbafe1f7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c7b555810963a6943b79c78ddf5dc30d.jpg b/docs/ucb-cs294-112-notes-zh/img/c7b555810963a6943b79c78ddf5dc30d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a8d4d1071c211d4699ee2c9142f979f1ac44241 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c7b555810963a6943b79c78ddf5dc30d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c7eb76d568f40a6973a8e85ed8ffc420.jpg b/docs/ucb-cs294-112-notes-zh/img/c7eb76d568f40a6973a8e85ed8ffc420.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4eebf2be649e2aeb17f9b680a1a4b12b5fefcca6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c7eb76d568f40a6973a8e85ed8ffc420.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c7f6bd1a3b2d128799342c0f91c3bed6.jpg b/docs/ucb-cs294-112-notes-zh/img/c7f6bd1a3b2d128799342c0f91c3bed6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8a60a9af8235f970f6c7038a88ad954a53d991d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c7f6bd1a3b2d128799342c0f91c3bed6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c80543a25eb35f0fca64d6ac87a1b0d2.jpg b/docs/ucb-cs294-112-notes-zh/img/c80543a25eb35f0fca64d6ac87a1b0d2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef0f7b2e71c2764dd79d0b0b4a056eb47fa82f46 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c80543a25eb35f0fca64d6ac87a1b0d2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c8478f1f4ac7ded9e9066522a6dbcd74.jpg b/docs/ucb-cs294-112-notes-zh/img/c8478f1f4ac7ded9e9066522a6dbcd74.jpg new file mode 100644 index 0000000000000000000000000000000000000000..015bcb15feff48a935d5a6dac097afe9587dc4de Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c8478f1f4ac7ded9e9066522a6dbcd74.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c862bc90e7ddbe8ce687da918004db80.jpg b/docs/ucb-cs294-112-notes-zh/img/c862bc90e7ddbe8ce687da918004db80.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f27e7d4870993a2ce4deea032f1cf412efc68281 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c862bc90e7ddbe8ce687da918004db80.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c8661aa6447d8182642e291cc63b65f7.jpg b/docs/ucb-cs294-112-notes-zh/img/c8661aa6447d8182642e291cc63b65f7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f67b41779a7e9ae01ff1f1b9f0657c910a09ce76 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c8661aa6447d8182642e291cc63b65f7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c8b94ab3bcd1a052f9cefb5232f69132.jpg b/docs/ucb-cs294-112-notes-zh/img/c8b94ab3bcd1a052f9cefb5232f69132.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e02d2b2eea0f1bd68bf383fcc43a917b3fe58650 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c8b94ab3bcd1a052f9cefb5232f69132.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c945735d1c0aa2fcebf5ce256fbf4549.jpg b/docs/ucb-cs294-112-notes-zh/img/c945735d1c0aa2fcebf5ce256fbf4549.jpg new file mode 100644 index 0000000000000000000000000000000000000000..64df3f5a72c59b27f689f6d7641872109c280e32 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c945735d1c0aa2fcebf5ce256fbf4549.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c986633ff82034a18f90022297c9c1f5.jpg b/docs/ucb-cs294-112-notes-zh/img/c986633ff82034a18f90022297c9c1f5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50fecc4aa895ee0cc324feac12b3834f4cb54c51 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c986633ff82034a18f90022297c9c1f5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c9a0072723ebe428c218adc2f3b1aefa.jpg b/docs/ucb-cs294-112-notes-zh/img/c9a0072723ebe428c218adc2f3b1aefa.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5370a50674f6f9f527d5e6c71a501be9e96fb15e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c9a0072723ebe428c218adc2f3b1aefa.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c9ce0d61a85d13c4917d5adffee01423.jpg b/docs/ucb-cs294-112-notes-zh/img/c9ce0d61a85d13c4917d5adffee01423.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c89c2881ab21397d3fc3aa5129ff1d9991de762a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c9ce0d61a85d13c4917d5adffee01423.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/c9dda0450b63ed0ca3a365456c5ee082.jpg b/docs/ucb-cs294-112-notes-zh/img/c9dda0450b63ed0ca3a365456c5ee082.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1dc3a4f12a5dc27f246cb0b10f3a9aaffddecb7d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/c9dda0450b63ed0ca3a365456c5ee082.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ca25a0d5e57cd7d390a08f52ac909d10.jpg b/docs/ucb-cs294-112-notes-zh/img/ca25a0d5e57cd7d390a08f52ac909d10.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0049e6289e92e4c29304b1a6b3f5ee132e0a49d8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ca25a0d5e57cd7d390a08f52ac909d10.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/cae188ad0186dba4b716e7ad0f2e2c5b.jpg b/docs/ucb-cs294-112-notes-zh/img/cae188ad0186dba4b716e7ad0f2e2c5b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..587f0eb383e73307c9b2fdcbba623e45bb1b9845 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/cae188ad0186dba4b716e7ad0f2e2c5b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/cafc589de260e43036182b94585bbfd1.jpg b/docs/ucb-cs294-112-notes-zh/img/cafc589de260e43036182b94585bbfd1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..babca5360f600f77f9ca26cb94b8144702c0ed5a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/cafc589de260e43036182b94585bbfd1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/cb033e9b655f6b18966920dcfc13ab2f.jpg b/docs/ucb-cs294-112-notes-zh/img/cb033e9b655f6b18966920dcfc13ab2f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..13a5ed1474d0a0d7e4609552c60d9331a91db32b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/cb033e9b655f6b18966920dcfc13ab2f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/cb967a79f0aabf8e1c0ce206845436ff.jpg b/docs/ucb-cs294-112-notes-zh/img/cb967a79f0aabf8e1c0ce206845436ff.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dcb253ba1507b8236e9ebe8c94c5c9571f9c8b6b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/cb967a79f0aabf8e1c0ce206845436ff.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/cbc9a7b7fa2984784634b8e9694021e0.jpg b/docs/ucb-cs294-112-notes-zh/img/cbc9a7b7fa2984784634b8e9694021e0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f6d9346998263929efb9fbdb29e4aa0f1e0973c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/cbc9a7b7fa2984784634b8e9694021e0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/cc040071dfd87bc2dce9ce9165626e84.jpg b/docs/ucb-cs294-112-notes-zh/img/cc040071dfd87bc2dce9ce9165626e84.jpg new file mode 100644 index 0000000000000000000000000000000000000000..425ceef7fe66150f0588315a888ded9bcd73c7b2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/cc040071dfd87bc2dce9ce9165626e84.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/cc29f2d255c4fd05a60a5fde2ef530c7.jpg b/docs/ucb-cs294-112-notes-zh/img/cc29f2d255c4fd05a60a5fde2ef530c7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2afc3cf020481f867c05a36d15ba71b455770e8c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/cc29f2d255c4fd05a60a5fde2ef530c7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/cc59ccc6f5016a8b7d66605cef4f56ab.jpg b/docs/ucb-cs294-112-notes-zh/img/cc59ccc6f5016a8b7d66605cef4f56ab.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a28d9b3f34b6e0e8f3dbeee95c5e3febed7baf9d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/cc59ccc6f5016a8b7d66605cef4f56ab.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/cc6f4a2a376a1ba985675076df839791.jpg b/docs/ucb-cs294-112-notes-zh/img/cc6f4a2a376a1ba985675076df839791.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7d716a989598afcf095c489481cec61cd1a712f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/cc6f4a2a376a1ba985675076df839791.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/cd5444d93349adbd66d721eb495b3ed3.jpg b/docs/ucb-cs294-112-notes-zh/img/cd5444d93349adbd66d721eb495b3ed3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0cfc3c5e5268de6fc963f2fbaf245f4a06a7ad3 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/cd5444d93349adbd66d721eb495b3ed3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/cd6d52ed1397584b31bcc3883f102490.jpg b/docs/ucb-cs294-112-notes-zh/img/cd6d52ed1397584b31bcc3883f102490.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4cd9db808400367922a04680f3e4d25c602b33d1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/cd6d52ed1397584b31bcc3883f102490.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/cdab9437b701fd21fb3294cfba7c4bc2.jpg b/docs/ucb-cs294-112-notes-zh/img/cdab9437b701fd21fb3294cfba7c4bc2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6612724bcde9e4d8044a72875cf99989946e173f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/cdab9437b701fd21fb3294cfba7c4bc2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ce170caf802e8c7aef5bcdcbcec814d1.jpg b/docs/ucb-cs294-112-notes-zh/img/ce170caf802e8c7aef5bcdcbcec814d1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c75de171b71ddb4613354784ad331acbde1f67b5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ce170caf802e8c7aef5bcdcbcec814d1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ce946f1b90dee657f8f69215560d6fc3.jpg b/docs/ucb-cs294-112-notes-zh/img/ce946f1b90dee657f8f69215560d6fc3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3292e4df7295be322499ee8c6c3d1b9a106713d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ce946f1b90dee657f8f69215560d6fc3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ce956379b786e6e3efddb5d7b85b0cd0.jpg b/docs/ucb-cs294-112-notes-zh/img/ce956379b786e6e3efddb5d7b85b0cd0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9601e8884eca1a4a377263156dc1098d29cdc04 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ce956379b786e6e3efddb5d7b85b0cd0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/cfef52b3e3e4ed53073ad6a097a05e00.jpg b/docs/ucb-cs294-112-notes-zh/img/cfef52b3e3e4ed53073ad6a097a05e00.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc184eca9746e244e35b75c33cbdd1ac05321b4e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/cfef52b3e3e4ed53073ad6a097a05e00.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d049a2c2e2a1f50b6da4ea25bee478b1.jpg b/docs/ucb-cs294-112-notes-zh/img/d049a2c2e2a1f50b6da4ea25bee478b1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..518db9610c22d3d6565606bd21f767ebb2968bdc Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d049a2c2e2a1f50b6da4ea25bee478b1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d07e5d5b7a01ad26723219c0681e64a0.jpg b/docs/ucb-cs294-112-notes-zh/img/d07e5d5b7a01ad26723219c0681e64a0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..492ed3879cdf78c2855c1bf2919c993da7701107 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d07e5d5b7a01ad26723219c0681e64a0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d0aec79c2adad566037f4045c697fe60.jpg b/docs/ucb-cs294-112-notes-zh/img/d0aec79c2adad566037f4045c697fe60.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd26890ebc9c2f66ef4d8952269abae46bbf6323 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d0aec79c2adad566037f4045c697fe60.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d0caa47722f79c70119340661c7c3dc6.jpg b/docs/ucb-cs294-112-notes-zh/img/d0caa47722f79c70119340661c7c3dc6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01fa0bdb9be1ddf3aa01e407f5c916b152238404 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d0caa47722f79c70119340661c7c3dc6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d14f7b5e2c067b44531df60ee3b1d3c5.jpg b/docs/ucb-cs294-112-notes-zh/img/d14f7b5e2c067b44531df60ee3b1d3c5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3921efcb5de91913701184ea258b08a2627de060 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d14f7b5e2c067b44531df60ee3b1d3c5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d1863e77077e51a5cec4f43fa22a6a58.jpg b/docs/ucb-cs294-112-notes-zh/img/d1863e77077e51a5cec4f43fa22a6a58.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5e3eaa200c75b9d3a2dc9425fe5780275a5317f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d1863e77077e51a5cec4f43fa22a6a58.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d21881d2bfbccef142f0130efba58d41.jpg b/docs/ucb-cs294-112-notes-zh/img/d21881d2bfbccef142f0130efba58d41.jpg new file mode 100644 index 0000000000000000000000000000000000000000..264d0ec7fcfe1b722e835c2218f0e3474eb59c8c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d21881d2bfbccef142f0130efba58d41.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d2683f5b20dac211246c30b1e0a7c2dd.jpg b/docs/ucb-cs294-112-notes-zh/img/d2683f5b20dac211246c30b1e0a7c2dd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83fff2979b8c3dbc2402fad4f305b1a1b2dca883 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d2683f5b20dac211246c30b1e0a7c2dd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d2b635e0f9431ce4740bd90932781ab7.jpg b/docs/ucb-cs294-112-notes-zh/img/d2b635e0f9431ce4740bd90932781ab7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9974c5150b067770d1a8c97b067c7325fdc4740c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d2b635e0f9431ce4740bd90932781ab7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d3caa16b217f9abe59363402c7e9cf3c.jpg b/docs/ucb-cs294-112-notes-zh/img/d3caa16b217f9abe59363402c7e9cf3c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d64ec64273899eb014cbdf2f118198c05ad001c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d3caa16b217f9abe59363402c7e9cf3c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d4302e1e800efe79923f3fa9cc58672f.jpg b/docs/ucb-cs294-112-notes-zh/img/d4302e1e800efe79923f3fa9cc58672f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9818847155c4cd1036c62292342eea9f37163213 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d4302e1e800efe79923f3fa9cc58672f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d49129dc87c9660437708570f5ec142c.jpg b/docs/ucb-cs294-112-notes-zh/img/d49129dc87c9660437708570f5ec142c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d74953f5813a19ad55b2fd6cad9b5cfd4c0c7f2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d49129dc87c9660437708570f5ec142c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d4ee4d0ec4e6d27310c9101e92d71a46.jpg b/docs/ucb-cs294-112-notes-zh/img/d4ee4d0ec4e6d27310c9101e92d71a46.jpg new file mode 100644 index 0000000000000000000000000000000000000000..087e723a27807b0b6434030f6ec1b770389e0a5e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d4ee4d0ec4e6d27310c9101e92d71a46.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d54161c43a0609856d70526aec1b2628.jpg b/docs/ucb-cs294-112-notes-zh/img/d54161c43a0609856d70526aec1b2628.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d0a48b618c722e3523ea72aaa29527095b70245e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d54161c43a0609856d70526aec1b2628.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d57b0c63bcc7afdfbb65594a1f7e88e3.jpg b/docs/ucb-cs294-112-notes-zh/img/d57b0c63bcc7afdfbb65594a1f7e88e3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0adc7a4f1f13c61d95d6297783af2dd3a54b7d30 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d57b0c63bcc7afdfbb65594a1f7e88e3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d62f837d8482cfb4baf47e784cf4483b.jpg b/docs/ucb-cs294-112-notes-zh/img/d62f837d8482cfb4baf47e784cf4483b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e08ce9ec2d1dafa6d630c01451e168fca6ec821 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d62f837d8482cfb4baf47e784cf4483b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d63a1fb5f45b35e7ec3154e1776882a6.jpg b/docs/ucb-cs294-112-notes-zh/img/d63a1fb5f45b35e7ec3154e1776882a6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e386ea030024ab8609efc16a7ef45943ae2cff8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d63a1fb5f45b35e7ec3154e1776882a6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d6609e668dbe1a9022dffecb50120404.jpg b/docs/ucb-cs294-112-notes-zh/img/d6609e668dbe1a9022dffecb50120404.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab6ccc19513da67d86102da8b635e8d5ab45b1af Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d6609e668dbe1a9022dffecb50120404.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d6682d8b53a6255f81d67f88a1b9b9b4.jpg b/docs/ucb-cs294-112-notes-zh/img/d6682d8b53a6255f81d67f88a1b9b9b4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c26617540758e5e1a0273a40bd1256a98a8ea3d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d6682d8b53a6255f81d67f88a1b9b9b4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d700c80f3e82735a63b228ea4417a460.jpg b/docs/ucb-cs294-112-notes-zh/img/d700c80f3e82735a63b228ea4417a460.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df83689a2c5f9911bab4ad0ebd07d6f3252dafd5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d700c80f3e82735a63b228ea4417a460.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d712476a938088d39e03829878f18156.jpg b/docs/ucb-cs294-112-notes-zh/img/d712476a938088d39e03829878f18156.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8326b58c243b21aa912554e8f8276c5798931af7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d712476a938088d39e03829878f18156.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d75d5fd98124935663412abf4603c86c.jpg b/docs/ucb-cs294-112-notes-zh/img/d75d5fd98124935663412abf4603c86c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53e21405dec5b7d1b5b3e2cdd4d902bf18de1cc7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d75d5fd98124935663412abf4603c86c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d766d20d1b586bdd1d3bdbfd302f9bc0.jpg b/docs/ucb-cs294-112-notes-zh/img/d766d20d1b586bdd1d3bdbfd302f9bc0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..29728ea4d196c20c09807b1a96311391c1a4ce9f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d766d20d1b586bdd1d3bdbfd302f9bc0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d7ce41750efb7325a3191507939507d2.jpg b/docs/ucb-cs294-112-notes-zh/img/d7ce41750efb7325a3191507939507d2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39ab0a0096dd6dbd2e9298d93e456fc2e0199ac6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d7ce41750efb7325a3191507939507d2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d88e16608c6b67606a8cbe1d97b3d42c.jpg b/docs/ucb-cs294-112-notes-zh/img/d88e16608c6b67606a8cbe1d97b3d42c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4bc5e8dfecbfb68592b053b5cfdddfc26c639943 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d88e16608c6b67606a8cbe1d97b3d42c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d8952012d5ece7e22b010e0116c03ad0.jpg b/docs/ucb-cs294-112-notes-zh/img/d8952012d5ece7e22b010e0116c03ad0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e248b9832f85a18512f9ba45faa1b4f40483c9af Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d8952012d5ece7e22b010e0116c03ad0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d913b691c9d047fe34265115efbf3d1e.jpg b/docs/ucb-cs294-112-notes-zh/img/d913b691c9d047fe34265115efbf3d1e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ac3bd86b82bf24114a42e2e9d53fab5ad4569ab Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d913b691c9d047fe34265115efbf3d1e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d9216c6c1b24456d3dc4b2bbd2c9d61e.jpg b/docs/ucb-cs294-112-notes-zh/img/d9216c6c1b24456d3dc4b2bbd2c9d61e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..416681c1cd69be54e26d78e08f2f9d98dee74052 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d9216c6c1b24456d3dc4b2bbd2c9d61e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d96b471ec7f91bd9c0d21375f3896476.jpg b/docs/ucb-cs294-112-notes-zh/img/d96b471ec7f91bd9c0d21375f3896476.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b204f28321065d39bf7cdeee267d8b8f1c828ee Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d96b471ec7f91bd9c0d21375f3896476.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d97aebf95713474e67d99f37b6ec149b.jpg b/docs/ucb-cs294-112-notes-zh/img/d97aebf95713474e67d99f37b6ec149b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73792cb8a40ea4085454f6fefb288589a56b996a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d97aebf95713474e67d99f37b6ec149b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d98b7cab888cd63dce6ab9989df79b4c.jpg b/docs/ucb-cs294-112-notes-zh/img/d98b7cab888cd63dce6ab9989df79b4c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6caa68fb43099bda86fa94e22572805403482c6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d98b7cab888cd63dce6ab9989df79b4c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d9da1021f215cab012fa1e953f77c906.jpg b/docs/ucb-cs294-112-notes-zh/img/d9da1021f215cab012fa1e953f77c906.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a1f4c13e3970b74028b2ce6d2825f13bdac8da8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d9da1021f215cab012fa1e953f77c906.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/d9f156d6b933aad223d2fcc6fa2532bd.jpg b/docs/ucb-cs294-112-notes-zh/img/d9f156d6b933aad223d2fcc6fa2532bd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f7b663337c49777b3d40fd2a25f251cb2d69d4f5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/d9f156d6b933aad223d2fcc6fa2532bd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/da121a4c5a6b21690f8072df161a98b1.jpg b/docs/ucb-cs294-112-notes-zh/img/da121a4c5a6b21690f8072df161a98b1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e0f3f0efed33f6614473763119dc336af09a662 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/da121a4c5a6b21690f8072df161a98b1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/da50092fd8e85bfbd6b20e96c836f79f.jpg b/docs/ucb-cs294-112-notes-zh/img/da50092fd8e85bfbd6b20e96c836f79f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..670e22d3ccd5afb6467046698bedddd2a86fb9ca Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/da50092fd8e85bfbd6b20e96c836f79f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/da6913442777f3468e49c7b2ef07cb2b.jpg b/docs/ucb-cs294-112-notes-zh/img/da6913442777f3468e49c7b2ef07cb2b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9366ca3351826553e2b4dd63ed3157e63049ca49 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/da6913442777f3468e49c7b2ef07cb2b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/daad6317c28f34cf3f9e7f5080202376.jpg b/docs/ucb-cs294-112-notes-zh/img/daad6317c28f34cf3f9e7f5080202376.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d2cec4077a9a34883000ffc69bd10873c369ec1c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/daad6317c28f34cf3f9e7f5080202376.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/dad139946fdd1363ecd86d20700a53a6.jpg b/docs/ucb-cs294-112-notes-zh/img/dad139946fdd1363ecd86d20700a53a6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e124a2bc30cf2e43c50c8c718536282c0d3ae49 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/dad139946fdd1363ecd86d20700a53a6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/dad3a6a5bee8c41dac0d47b9d21ec25d.jpg b/docs/ucb-cs294-112-notes-zh/img/dad3a6a5bee8c41dac0d47b9d21ec25d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6fc70016914663575ddfc8a8d6e0ac220b2667ed Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/dad3a6a5bee8c41dac0d47b9d21ec25d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/db1c30e727a653d3d8be4d8a74c26121.jpg b/docs/ucb-cs294-112-notes-zh/img/db1c30e727a653d3d8be4d8a74c26121.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df736ea3fb6e8d4b7af8dbb909dbaaca70fb2856 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/db1c30e727a653d3d8be4d8a74c26121.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/db22fa15b67efc7eec7dc50fd7068c10.jpg b/docs/ucb-cs294-112-notes-zh/img/db22fa15b67efc7eec7dc50fd7068c10.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9927c024532f9f258ff4ebafa356ba60ab2a84f0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/db22fa15b67efc7eec7dc50fd7068c10.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/dbc5fb456ec98abcf4b92d28764aa198.jpg b/docs/ucb-cs294-112-notes-zh/img/dbc5fb456ec98abcf4b92d28764aa198.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6396d3cc3a9594135bb394839a72de268018345c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/dbc5fb456ec98abcf4b92d28764aa198.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/dc010f1c626c6f3a49ef31b6f49153e6.jpg b/docs/ucb-cs294-112-notes-zh/img/dc010f1c626c6f3a49ef31b6f49153e6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..748007427bc76ebfdbb2c87f2df5359385850436 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/dc010f1c626c6f3a49ef31b6f49153e6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/dc7d6cfed42818b77d33cfe1b7074bdd.jpg b/docs/ucb-cs294-112-notes-zh/img/dc7d6cfed42818b77d33cfe1b7074bdd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47fa8a0ec9071513438a4998c9c3f2df63e2895a Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/dc7d6cfed42818b77d33cfe1b7074bdd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/de7edf70f701853408ca6619b59d7af2.jpg b/docs/ucb-cs294-112-notes-zh/img/de7edf70f701853408ca6619b59d7af2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f7197a3e8486040994002f00e248c5c2079b684 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/de7edf70f701853408ca6619b59d7af2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/de97ae28a91fc04a42d6ea970700baa2.jpg b/docs/ucb-cs294-112-notes-zh/img/de97ae28a91fc04a42d6ea970700baa2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d1cf7d29697054bb8ced0d1c598ba7bda6bb8274 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/de97ae28a91fc04a42d6ea970700baa2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/de9e74fbbf37eca81c16ed9c8df02568.jpg b/docs/ucb-cs294-112-notes-zh/img/de9e74fbbf37eca81c16ed9c8df02568.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8925c30613180fe852e1ea6a1d351a5f43df5af6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/de9e74fbbf37eca81c16ed9c8df02568.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/decade55a657d45ec2c5e7b47f842201.jpg b/docs/ucb-cs294-112-notes-zh/img/decade55a657d45ec2c5e7b47f842201.jpg new file mode 100644 index 0000000000000000000000000000000000000000..90a019851ee55b7967864d3334a741ea2ea0aeab Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/decade55a657d45ec2c5e7b47f842201.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/deffa3e8d9fd1e5f6d8daaa306e80666.jpg b/docs/ucb-cs294-112-notes-zh/img/deffa3e8d9fd1e5f6d8daaa306e80666.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7067404f53cfd24605d67cfa33c490168544185 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/deffa3e8d9fd1e5f6d8daaa306e80666.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/df1a45644d86996d1e8acd583982a011.jpg b/docs/ucb-cs294-112-notes-zh/img/df1a45644d86996d1e8acd583982a011.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a6afa35147344c1fcb0da8cc22f0a25964db2a1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/df1a45644d86996d1e8acd583982a011.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/df50856ec23cf4bee059bda16030227e.jpg b/docs/ucb-cs294-112-notes-zh/img/df50856ec23cf4bee059bda16030227e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b2aab8ff817bfea1f47da3bf0824cd4e58d73ed Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/df50856ec23cf4bee059bda16030227e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e0c667d5d0475f2e09bb0e327cd84dd9.jpg b/docs/ucb-cs294-112-notes-zh/img/e0c667d5d0475f2e09bb0e327cd84dd9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d9893a7fc2374551e63b0fe219ca03252410863 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e0c667d5d0475f2e09bb0e327cd84dd9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e13f23b31f6c246a812a33419c0afe90.jpg b/docs/ucb-cs294-112-notes-zh/img/e13f23b31f6c246a812a33419c0afe90.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be786cd791f39480cc585ecfa0f9ec25004a0ed7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e13f23b31f6c246a812a33419c0afe90.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e1790d12e391c32a971e7a67d40fd760.jpg b/docs/ucb-cs294-112-notes-zh/img/e1790d12e391c32a971e7a67d40fd760.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3086de6265a5a07412faa2959e9fddd48321250 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e1790d12e391c32a971e7a67d40fd760.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e1e7d3e6593a505cbd9aed9e2dec65c5.jpg b/docs/ucb-cs294-112-notes-zh/img/e1e7d3e6593a505cbd9aed9e2dec65c5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f0a2131978fe9fb85cd84ff1d2d6ac8eb562b38 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e1e7d3e6593a505cbd9aed9e2dec65c5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e20d7153f84cdfedda2b0cb56997ca29.jpg b/docs/ucb-cs294-112-notes-zh/img/e20d7153f84cdfedda2b0cb56997ca29.jpg new file mode 100644 index 0000000000000000000000000000000000000000..41bac28f4f0c1999b10a1f3371a16ca51960b24f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e20d7153f84cdfedda2b0cb56997ca29.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e24226cb6ff26a6d55d7bad387223d9d.jpg b/docs/ucb-cs294-112-notes-zh/img/e24226cb6ff26a6d55d7bad387223d9d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2a5447e9ab15fab85ad7aad2ff474866c6da88f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e24226cb6ff26a6d55d7bad387223d9d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e252e9b2647235f0aa74524fac4f9397.jpg b/docs/ucb-cs294-112-notes-zh/img/e252e9b2647235f0aa74524fac4f9397.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d0a88cf3c78b9c17b69eeaf4b21346a82a19a02 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e252e9b2647235f0aa74524fac4f9397.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e273d67d5cbd2ca8e731810395fa74f3.jpg b/docs/ucb-cs294-112-notes-zh/img/e273d67d5cbd2ca8e731810395fa74f3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0707efe4d1b4b3fdc2bcbe8a402bbf02071958d6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e273d67d5cbd2ca8e731810395fa74f3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e2c3a75c9898a7c2bfe707438dd3bc9d.jpg b/docs/ucb-cs294-112-notes-zh/img/e2c3a75c9898a7c2bfe707438dd3bc9d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7748e8b05dbe6fa6a0ddae7fc8b297967826289 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e2c3a75c9898a7c2bfe707438dd3bc9d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e2f75542d12f8d56270d0634c5e621b7.jpg b/docs/ucb-cs294-112-notes-zh/img/e2f75542d12f8d56270d0634c5e621b7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32ca1eb6eeaa60482e7c70469c5945647f9c4b98 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e2f75542d12f8d56270d0634c5e621b7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e310e61172a1b9ea8a6240f91dfb676f.jpg b/docs/ucb-cs294-112-notes-zh/img/e310e61172a1b9ea8a6240f91dfb676f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..238d93171561558074f74e3f31371f4ff5c7dbbd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e310e61172a1b9ea8a6240f91dfb676f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e31c86db029ec87f20b76e5f758f8de3.jpg b/docs/ucb-cs294-112-notes-zh/img/e31c86db029ec87f20b76e5f758f8de3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1da8d6c43773931fc6056d4c83b1fc4e4015cc15 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e31c86db029ec87f20b76e5f758f8de3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e403d9835dcc5568d8df467f6535d61a.jpg b/docs/ucb-cs294-112-notes-zh/img/e403d9835dcc5568d8df467f6535d61a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9498fa002abd730cfb4d9648a65b03f84d8209ff Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e403d9835dcc5568d8df467f6535d61a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e413ec70af8ae2c4719b3f4607d0d7d1.jpg b/docs/ucb-cs294-112-notes-zh/img/e413ec70af8ae2c4719b3f4607d0d7d1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e55f412f875c6fe51d6bae97b88ea4f7a411eb30 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e413ec70af8ae2c4719b3f4607d0d7d1.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e4a8aefc8fe880d35980a05923135182.jpg b/docs/ucb-cs294-112-notes-zh/img/e4a8aefc8fe880d35980a05923135182.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6dd88bd4674b5adddf6492c79f1798f17898fcf Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e4a8aefc8fe880d35980a05923135182.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e4cf1c5cd668e0660fcc47a7288d51ee.jpg b/docs/ucb-cs294-112-notes-zh/img/e4cf1c5cd668e0660fcc47a7288d51ee.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25ecedabf0334b9b52289aa74de24da5efbf0a72 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e4cf1c5cd668e0660fcc47a7288d51ee.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e4dbf712991f240f340bdaad4400b152.jpg b/docs/ucb-cs294-112-notes-zh/img/e4dbf712991f240f340bdaad4400b152.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a87fcb7939420ed76c2597b7ec9a9090e0c52748 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e4dbf712991f240f340bdaad4400b152.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e5b4f8d292cf75a08c930a702575403a.jpg b/docs/ucb-cs294-112-notes-zh/img/e5b4f8d292cf75a08c930a702575403a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..918d1ea9181a82b2d493d922ba245405dfb53bc9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e5b4f8d292cf75a08c930a702575403a.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e610ed90d4f8ef4c36f7c5e867080edd.jpg b/docs/ucb-cs294-112-notes-zh/img/e610ed90d4f8ef4c36f7c5e867080edd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65f6c1a290dd66312fdfecbac68e5c0f8016155b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e610ed90d4f8ef4c36f7c5e867080edd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e64138b463aebe0c99516077222822b9.jpg b/docs/ucb-cs294-112-notes-zh/img/e64138b463aebe0c99516077222822b9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..997169bd252b86530b7f7ea080c4c5dba3e9b6e0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e64138b463aebe0c99516077222822b9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e68c339e3e67897047b4d26d15f669dc.jpg b/docs/ucb-cs294-112-notes-zh/img/e68c339e3e67897047b4d26d15f669dc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..106293db11a8bd273a496acd91752845eb9b2171 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e68c339e3e67897047b4d26d15f669dc.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e6a149e064a6abacdcabb76570f4c9bb.jpg b/docs/ucb-cs294-112-notes-zh/img/e6a149e064a6abacdcabb76570f4c9bb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6cda92ffa2f5904d00e2a560c0dc4ba8794c5fa6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e6a149e064a6abacdcabb76570f4c9bb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e77c340b11434074173cb0511dff0334.jpg b/docs/ucb-cs294-112-notes-zh/img/e77c340b11434074173cb0511dff0334.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8d053d27b708f6a9d79b63a4ca2d19455bcc0cd8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e77c340b11434074173cb0511dff0334.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e7cda9ccf679bc0386ba6ecd89a6e169.jpg b/docs/ucb-cs294-112-notes-zh/img/e7cda9ccf679bc0386ba6ecd89a6e169.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3df3ce6c8ff27e55c95d6004b39f2382f235186 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e7cda9ccf679bc0386ba6ecd89a6e169.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e7de5c7e5ccab3e8ab5188f3e01f4a0c.jpg b/docs/ucb-cs294-112-notes-zh/img/e7de5c7e5ccab3e8ab5188f3e01f4a0c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d313c126189cd510313316ca3e2483938e95c86d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e7de5c7e5ccab3e8ab5188f3e01f4a0c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e7faab54808449c9df58627ce48e084f.jpg b/docs/ucb-cs294-112-notes-zh/img/e7faab54808449c9df58627ce48e084f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..504b0d9b991bd748cae87415418ed829631cd47e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e7faab54808449c9df58627ce48e084f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e85ee9bf098bd0b36f08c9348b2053b6.jpg b/docs/ucb-cs294-112-notes-zh/img/e85ee9bf098bd0b36f08c9348b2053b6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84429e8cf71552159da34290d0220dc0244556ce Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e85ee9bf098bd0b36f08c9348b2053b6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e8a17863b5e591e16e20b69a0cab56f6.jpg b/docs/ucb-cs294-112-notes-zh/img/e8a17863b5e591e16e20b69a0cab56f6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a09ed8e0c9feb1524d922f02dd20e656ba5efd5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e8a17863b5e591e16e20b69a0cab56f6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e8c8bc1d275d59049af46c9d54d40f10.jpg b/docs/ucb-cs294-112-notes-zh/img/e8c8bc1d275d59049af46c9d54d40f10.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca4c598410d488c329410c14ac18fd30d1506131 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e8c8bc1d275d59049af46c9d54d40f10.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/e8ede47aec1edc50f072c552b6d1e427.jpg b/docs/ucb-cs294-112-notes-zh/img/e8ede47aec1edc50f072c552b6d1e427.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53e9f7729e5df50613d305dc3530135a383e98d8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/e8ede47aec1edc50f072c552b6d1e427.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ea4a20574f303559b9cba7b9c7665d80.jpg b/docs/ucb-cs294-112-notes-zh/img/ea4a20574f303559b9cba7b9c7665d80.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2dfe335b05dacf1d1b13500145076daa4b4d8866 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ea4a20574f303559b9cba7b9c7665d80.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ea64a80e774640a26b218072827ba66d.jpg b/docs/ucb-cs294-112-notes-zh/img/ea64a80e774640a26b218072827ba66d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77d04d23310e6a005cba11e53a9e07d7ba5fa879 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ea64a80e774640a26b218072827ba66d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/eaa43ea99dfb487d5ab90661b5d52623.jpg b/docs/ucb-cs294-112-notes-zh/img/eaa43ea99dfb487d5ab90661b5d52623.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1697d071669e06525cecd9def9663f9018effaf1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/eaa43ea99dfb487d5ab90661b5d52623.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/eba851e782c37c3da8835054fb87c6ac.jpg b/docs/ucb-cs294-112-notes-zh/img/eba851e782c37c3da8835054fb87c6ac.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c68ac7bb5e81d913f6d65f31734ba5a34e6ddb5e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/eba851e782c37c3da8835054fb87c6ac.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ebbebc713ddf745becd38ed5d382533f.jpg b/docs/ucb-cs294-112-notes-zh/img/ebbebc713ddf745becd38ed5d382533f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2985ae501675a75628e74aa30ace2952690ef4a9 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ebbebc713ddf745becd38ed5d382533f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ebc140645dd4bd2a91ca78746a11ccf0.jpg b/docs/ucb-cs294-112-notes-zh/img/ebc140645dd4bd2a91ca78746a11ccf0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe0632a1fcf6589d94028e7177d85fb47e754c41 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ebc140645dd4bd2a91ca78746a11ccf0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ec14592ebd45ea5c5655cdb5d9b5d87c.jpg b/docs/ucb-cs294-112-notes-zh/img/ec14592ebd45ea5c5655cdb5d9b5d87c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a37f39f4aa4940573ce9c5bef6b3137110ffc74 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ec14592ebd45ea5c5655cdb5d9b5d87c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ec5b0a4d83e59b107aee8d61ef15db63.jpg b/docs/ucb-cs294-112-notes-zh/img/ec5b0a4d83e59b107aee8d61ef15db63.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e4a16b94d771968f669a080643fa0f7a6cb00a8 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ec5b0a4d83e59b107aee8d61ef15db63.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ecb23654c8a4959c2dfc6ce5b1b980b8.jpg b/docs/ucb-cs294-112-notes-zh/img/ecb23654c8a4959c2dfc6ce5b1b980b8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f676f4c0da35527bda5a216b1fa9d79718b7d6db Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ecb23654c8a4959c2dfc6ce5b1b980b8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ed28ff1a15a549058b3d5c09829601db.jpg b/docs/ucb-cs294-112-notes-zh/img/ed28ff1a15a549058b3d5c09829601db.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92f35d74fdada76647decd9a87606d7a27041a7b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ed28ff1a15a549058b3d5c09829601db.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ed9b611a03efec2fbf8a3c1c730de705.jpg b/docs/ucb-cs294-112-notes-zh/img/ed9b611a03efec2fbf8a3c1c730de705.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3c13439c86063a825641457f4ed94e6519b9fb4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ed9b611a03efec2fbf8a3c1c730de705.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/eda1f619949fe4b477d49f47c84e662f.jpg b/docs/ucb-cs294-112-notes-zh/img/eda1f619949fe4b477d49f47c84e662f.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6165b284e3391fec55282a27bba48055f13070b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/eda1f619949fe4b477d49f47c84e662f.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/edf93baa472bacd8dd9434f58ea6414b.jpg b/docs/ucb-cs294-112-notes-zh/img/edf93baa472bacd8dd9434f58ea6414b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03937f3eb33fe85a4691c2a61474e2726014f291 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/edf93baa472bacd8dd9434f58ea6414b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ee1a6751ebd629ed15678133f4b3af7c.jpg b/docs/ucb-cs294-112-notes-zh/img/ee1a6751ebd629ed15678133f4b3af7c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df71b67863955c8699f3b52f04454f220789e1df Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ee1a6751ebd629ed15678133f4b3af7c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ee64da19c7c3630410074d84a804859b.jpg b/docs/ucb-cs294-112-notes-zh/img/ee64da19c7c3630410074d84a804859b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3201c5b3258e82097dcdd091827615e01a9857b4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ee64da19c7c3630410074d84a804859b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/eec54755672e1c8d054ec2a16e47de11.jpg b/docs/ucb-cs294-112-notes-zh/img/eec54755672e1c8d054ec2a16e47de11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..477fecd50e86f662c391251d878f3158cab75f60 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/eec54755672e1c8d054ec2a16e47de11.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ef0aa596eb411e2023236957bcc20720.jpg b/docs/ucb-cs294-112-notes-zh/img/ef0aa596eb411e2023236957bcc20720.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84bdfebf412f9a7376438454560e3d8d72627e14 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ef0aa596eb411e2023236957bcc20720.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ef504946d38568070bf2f96cc263c369.jpg b/docs/ucb-cs294-112-notes-zh/img/ef504946d38568070bf2f96cc263c369.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad4a84ecf3b9785fd246a2f56457dd7a272703d6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ef504946d38568070bf2f96cc263c369.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ef7ab5eba60ecc20526c57baebb61929.jpg b/docs/ucb-cs294-112-notes-zh/img/ef7ab5eba60ecc20526c57baebb61929.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70364b1184730639bb2a0db0cef64cfaa2ac91ec Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ef7ab5eba60ecc20526c57baebb61929.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/efeeadbb1751057ffcd45eb68a1869a4.jpg b/docs/ucb-cs294-112-notes-zh/img/efeeadbb1751057ffcd45eb68a1869a4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c9ef135414e4550ff9144001ceed3fd88b39b2b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/efeeadbb1751057ffcd45eb68a1869a4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f0017ba74157ab6dcc71add24224bad2.jpg b/docs/ucb-cs294-112-notes-zh/img/f0017ba74157ab6dcc71add24224bad2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..426f723bffcd71604b48d6bc0ea56d4e9f83b1d7 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f0017ba74157ab6dcc71add24224bad2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f0481b76bd881625dd55f21f6d81bbc8.jpg b/docs/ucb-cs294-112-notes-zh/img/f0481b76bd881625dd55f21f6d81bbc8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3dd12e12f3fad6e4bc528c5e8be478a406c988dc Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f0481b76bd881625dd55f21f6d81bbc8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f09d59a3711ff7dc15a1c0419379be2b.jpg b/docs/ucb-cs294-112-notes-zh/img/f09d59a3711ff7dc15a1c0419379be2b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1000f2b1b0871202438b5fd992725a44ae81cf5c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f09d59a3711ff7dc15a1c0419379be2b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f0d56428fe4ff195c37df6d4c21643a7.jpg b/docs/ucb-cs294-112-notes-zh/img/f0d56428fe4ff195c37df6d4c21643a7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76be2bb6e1fff773b019d3c51b124c2b01b4d53f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f0d56428fe4ff195c37df6d4c21643a7.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f124a74ff959930ae4c0a1dd94e9c8cd.jpg b/docs/ucb-cs294-112-notes-zh/img/f124a74ff959930ae4c0a1dd94e9c8cd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5c5d073bd82ea478a78150e0b0b47a53872cfcb Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f124a74ff959930ae4c0a1dd94e9c8cd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f1471f58fca3cd89e27996bcf10a37ee.jpg b/docs/ucb-cs294-112-notes-zh/img/f1471f58fca3cd89e27996bcf10a37ee.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3901ea66bb7ef0ea741ffb3ffa5d51db305c1a0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f1471f58fca3cd89e27996bcf10a37ee.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f183e2116930d3b0b438387f5329e0f5.jpg b/docs/ucb-cs294-112-notes-zh/img/f183e2116930d3b0b438387f5329e0f5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0df1895bcd8b6b5652af68bdeca69b5173c4961b Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f183e2116930d3b0b438387f5329e0f5.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f2146af519509f931f838e902dfc4619.jpg b/docs/ucb-cs294-112-notes-zh/img/f2146af519509f931f838e902dfc4619.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f35023e0c64329fbaf76c935ecc5d428db3b8ddd Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f2146af519509f931f838e902dfc4619.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f2c02db563cef292837f97e55aff67ee.jpg b/docs/ucb-cs294-112-notes-zh/img/f2c02db563cef292837f97e55aff67ee.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca8a5ff1cba894172e21a8866d93c2234a4f80e0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f2c02db563cef292837f97e55aff67ee.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f2ce9e6d873f29db1e266d4b00a9a8db.jpg b/docs/ucb-cs294-112-notes-zh/img/f2ce9e6d873f29db1e266d4b00a9a8db.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e03d327af6b82babc05f7df09258a770fe3a5979 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f2ce9e6d873f29db1e266d4b00a9a8db.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f3134fb3fb3a2bec340c2d13d90e5064.jpg b/docs/ucb-cs294-112-notes-zh/img/f3134fb3fb3a2bec340c2d13d90e5064.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60a3f92a7114e6bc3e2a2762ac4de8bcb3e31b58 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f3134fb3fb3a2bec340c2d13d90e5064.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f336c76edad1bb8515a70c67c5f28018.jpg b/docs/ucb-cs294-112-notes-zh/img/f336c76edad1bb8515a70c67c5f28018.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddcb93d6c3b1d334f93c1da2b69f13ff34f949c5 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f336c76edad1bb8515a70c67c5f28018.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f364df6a5c75d576ad558761c027c47d.jpg b/docs/ucb-cs294-112-notes-zh/img/f364df6a5c75d576ad558761c027c47d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ffda1ba3c514d4474232f77fc6d125c1f0c6d0d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f364df6a5c75d576ad558761c027c47d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f36ae0213ed9569290f29c557905cc87.jpg b/docs/ucb-cs294-112-notes-zh/img/f36ae0213ed9569290f29c557905cc87.jpg new file mode 100644 index 0000000000000000000000000000000000000000..48e8b2d37e4614b3966c8c23192bc350afedff8d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f36ae0213ed9569290f29c557905cc87.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f3ce87ee55d1069fe7bf7a5617366168.jpg b/docs/ucb-cs294-112-notes-zh/img/f3ce87ee55d1069fe7bf7a5617366168.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad5e254f7eef922d96c545442ea5a6c3aafe7ea2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f3ce87ee55d1069fe7bf7a5617366168.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f48e0eb597c1bf0978f3307f974487a6.jpg b/docs/ucb-cs294-112-notes-zh/img/f48e0eb597c1bf0978f3307f974487a6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f5806aa24feb7d576cb6f70192f37da33b12da0 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f48e0eb597c1bf0978f3307f974487a6.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f51eefc9c4c162883c6ce7b1b29a92a8.jpg b/docs/ucb-cs294-112-notes-zh/img/f51eefc9c4c162883c6ce7b1b29a92a8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cb63edd6680980cf7ac7cf8020c642b185b3c1c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f51eefc9c4c162883c6ce7b1b29a92a8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f5221945e0d837c23431899288849b1c.jpg b/docs/ucb-cs294-112-notes-zh/img/f5221945e0d837c23431899288849b1c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b406168a449a9c4656816d1ad9b299ad8803ea08 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f5221945e0d837c23431899288849b1c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f5436bda01b5eaa36a2c128b916af600.jpg b/docs/ucb-cs294-112-notes-zh/img/f5436bda01b5eaa36a2c128b916af600.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c90f46823d4cffdcdc38a74ee01f2311f116f355 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f5436bda01b5eaa36a2c128b916af600.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f5472a5d9cb8eef7ee4ea263635c7fca.jpg b/docs/ucb-cs294-112-notes-zh/img/f5472a5d9cb8eef7ee4ea263635c7fca.jpg new file mode 100644 index 0000000000000000000000000000000000000000..326ea36f1688f506f560d97bc45080e8c7bef49e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f5472a5d9cb8eef7ee4ea263635c7fca.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f596186d7c7f0599adf449b9161a678e.jpg b/docs/ucb-cs294-112-notes-zh/img/f596186d7c7f0599adf449b9161a678e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b901de958128d95e4aa8635b7b19b25d18929a1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f596186d7c7f0599adf449b9161a678e.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f6637765bcbad8cdf38d16ded73297c4.jpg b/docs/ucb-cs294-112-notes-zh/img/f6637765bcbad8cdf38d16ded73297c4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..303af333a74fbe67ee4d1ccbde3dd7e55fcb68c2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f6637765bcbad8cdf38d16ded73297c4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f67d6aeebdb21eeffd49b493b8711cd8.jpg b/docs/ucb-cs294-112-notes-zh/img/f67d6aeebdb21eeffd49b493b8711cd8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..932b1f6ff8a060fe1770d6f395834f9a7fd93778 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f67d6aeebdb21eeffd49b493b8711cd8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f6be7aeb28531cb23c3fd8140b3ac9c9.jpg b/docs/ucb-cs294-112-notes-zh/img/f6be7aeb28531cb23c3fd8140b3ac9c9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..386f5c83b165c626a98954b1e4dcfc0538954629 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f6be7aeb28531cb23c3fd8140b3ac9c9.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f75df24cf02612fc463a48bd16857edd.jpg b/docs/ucb-cs294-112-notes-zh/img/f75df24cf02612fc463a48bd16857edd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08f30a32084d81e9470241a26984fe80dff1d5d4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f75df24cf02612fc463a48bd16857edd.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f7fe54896d48390439183ea3b7e0dad0.jpg b/docs/ucb-cs294-112-notes-zh/img/f7fe54896d48390439183ea3b7e0dad0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1c63f03972df848a37abba814b4c4d428acd200 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f7fe54896d48390439183ea3b7e0dad0.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f84ac4398f50bbb8ec5a28d62ddb831c.jpg b/docs/ucb-cs294-112-notes-zh/img/f84ac4398f50bbb8ec5a28d62ddb831c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73a3202a03a49cb410a9cd50403654fc56de9b54 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f84ac4398f50bbb8ec5a28d62ddb831c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f8522d3da635383bc47465f500926bb3.jpg b/docs/ucb-cs294-112-notes-zh/img/f8522d3da635383bc47465f500926bb3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..561233b4f743323d431bd1f090e62460c2a005ab Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f8522d3da635383bc47465f500926bb3.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f870c06fdb5b7160cb19d4b0b320cd34.jpg b/docs/ucb-cs294-112-notes-zh/img/f870c06fdb5b7160cb19d4b0b320cd34.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d37c8e5aaf58ee6dbc9a304f8653b1e1a63711d2 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f870c06fdb5b7160cb19d4b0b320cd34.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f8ea1f6106e897927d76e12c43546ec4.jpg b/docs/ucb-cs294-112-notes-zh/img/f8ea1f6106e897927d76e12c43546ec4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7048c997a8f8c8c3bd4dd9b0618826e98175200e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f8ea1f6106e897927d76e12c43546ec4.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f9035569746fe6d571e3e926bb402013.jpg b/docs/ucb-cs294-112-notes-zh/img/f9035569746fe6d571e3e926bb402013.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6beb350ab0dffdcc7d267afcc42a5221d3723556 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f9035569746fe6d571e3e926bb402013.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f927e5ceac43077134bc501f0c36e25c.jpg b/docs/ucb-cs294-112-notes-zh/img/f927e5ceac43077134bc501f0c36e25c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..888993bb6df754a6d06d1bb7b9f8fbf33646558c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f927e5ceac43077134bc501f0c36e25c.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f947b05e8c3e9490dbcccfbd807f6c89.jpg b/docs/ucb-cs294-112-notes-zh/img/f947b05e8c3e9490dbcccfbd807f6c89.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da707b80a2a906e702756b05d2ba1845a1dfd3d4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f947b05e8c3e9490dbcccfbd807f6c89.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f9c32547e0e61b7cbfd57652808335e2.jpg b/docs/ucb-cs294-112-notes-zh/img/f9c32547e0e61b7cbfd57652808335e2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1e486842f6d9d28b2eec32ab2890c9e500d9ce1 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f9c32547e0e61b7cbfd57652808335e2.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/f9e3ceebceb29defb521d469fd423e89.jpg b/docs/ucb-cs294-112-notes-zh/img/f9e3ceebceb29defb521d469fd423e89.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47d7e7a098b9c2833e973d8b6bbdd66970a6aa22 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/f9e3ceebceb29defb521d469fd423e89.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/fa1a5cb07364baeb6b25682fff09054d.jpg b/docs/ucb-cs294-112-notes-zh/img/fa1a5cb07364baeb6b25682fff09054d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd378769c65ac640725a22223583e341b1f8d456 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/fa1a5cb07364baeb6b25682fff09054d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/fa7241c6ed298009d45863afd4f627eb.jpg b/docs/ucb-cs294-112-notes-zh/img/fa7241c6ed298009d45863afd4f627eb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0566bc8809a758ff07c84ab516b5a3a8c254a106 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/fa7241c6ed298009d45863afd4f627eb.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/fa8cd8783384807e0a4015b370652001.jpg b/docs/ucb-cs294-112-notes-zh/img/fa8cd8783384807e0a4015b370652001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cfe175981024bb198b51ee668d8f71191ef1d75f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/fa8cd8783384807e0a4015b370652001.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/fac2dd3cef9b63d4e27ece42142a4a09.jpg b/docs/ucb-cs294-112-notes-zh/img/fac2dd3cef9b63d4e27ece42142a4a09.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c68173a6fa51831f938f2637f41eb1d679fbd4d Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/fac2dd3cef9b63d4e27ece42142a4a09.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/fc4951180627f83da0765ea266e6b18d.jpg b/docs/ucb-cs294-112-notes-zh/img/fc4951180627f83da0765ea266e6b18d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..992353ee4494fbc39c0b9319a96e747c23e6ed14 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/fc4951180627f83da0765ea266e6b18d.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/fcefb54b8994420b2d90290d15307599.jpg b/docs/ucb-cs294-112-notes-zh/img/fcefb54b8994420b2d90290d15307599.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c7fe9387139d17024fafb9b0ba776210a8edca4 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/fcefb54b8994420b2d90290d15307599.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/fd5707147c4b3a62034e9d59a763ed27.jpg b/docs/ucb-cs294-112-notes-zh/img/fd5707147c4b3a62034e9d59a763ed27.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7211a0c70c70fc05c73e7f03ed3c77e30c44390c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/fd5707147c4b3a62034e9d59a763ed27.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/fe02ab9ec869acecb151b8e69f6187c8.jpg b/docs/ucb-cs294-112-notes-zh/img/fe02ab9ec869acecb151b8e69f6187c8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..90b3d3566e03431709f01538a0a47877b4e7097f Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/fe02ab9ec869acecb151b8e69f6187c8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/fe0bd1bae1ec1cf967482fe4832b82b8.jpg b/docs/ucb-cs294-112-notes-zh/img/fe0bd1bae1ec1cf967482fe4832b82b8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..22a66fd4873804ed20e1b8b88f7652415d0dd72e Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/fe0bd1bae1ec1cf967482fe4832b82b8.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/fe6006a69b0121459537c15563079238.jpg b/docs/ucb-cs294-112-notes-zh/img/fe6006a69b0121459537c15563079238.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26d575dc85e09d26384727deaf186895d8c147fb Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/fe6006a69b0121459537c15563079238.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ff6a6440da9636e83e28f4750f392e23.jpg b/docs/ucb-cs294-112-notes-zh/img/ff6a6440da9636e83e28f4750f392e23.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d800fe8b4d70d28fb96c11cb3fcd07e5213615cf Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ff6a6440da9636e83e28f4750f392e23.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ff8206295fb2581f9083f2554118578b.jpg b/docs/ucb-cs294-112-notes-zh/img/ff8206295fb2581f9083f2554118578b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c4846357e44421ddb69b3cd217d8bf7f54892e6 Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ff8206295fb2581f9083f2554118578b.jpg differ diff --git a/docs/ucb-cs294-112-notes-zh/img/ff9397929bf50b3a3e6e8c0f3b0ddb27.jpg b/docs/ucb-cs294-112-notes-zh/img/ff9397929bf50b3a3e6e8c0f3b0ddb27.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d105c2e7c68e679d49a7b8c80b8aadb32444533c Binary files /dev/null and b/docs/ucb-cs294-112-notes-zh/img/ff9397929bf50b3a3e6e8c0f3b0ddb27.jpg differ