WEBVTT

00:01.080 --> 00:04.590
大家好, 欢迎回到人工智能课程｡ 

00:04.590 --> 00:07.620
今天我们要讨论的是时间上的差异｡ 

00:07.860 --> 00:14.900
这是一个非常重要的教程, 因为时间差是Q学习算法的核心和灵魂｡

00:14.910 --> 00:22.110
这实际上就是我们迄今为止所学到的一切如何在学习中发挥作用｡ 

00:22.110 --> 00:23.340
让我们来看看｡ 

00:23.730 --> 00:29.100
还记得我们讨论过确定性搜索和非确定性搜索的时候吗, 还记得我们说过在这个例子中, 当代理想向上时,

00:29.100 --> 00:34.290
他肯定会向上｡

00:34.290 --> 00:37.330
在这种情况下, 当他想走的时候, 有10%的机会他会走｡ 

00:37.440 --> 00:40.800
我们只剩下10%的机会他会走右边, 80%的机会他会走右边｡ 

00:41.340 --> 00:42.270
一直往上走｡ 

00:42.270 --> 00:46.320
当然, 这些数字是任意的, 可以不同｡ 

00:46.320 --> 00:50.610
这整个概念就是它在不同的问题中可能是不同的｡ 

00:50.610 --> 00:55.320
所以它不需要关心他的移动方向, 只是有一些随机性,

00:55.320 --> 00:59.730
一些不受代理人控制的事情在这个环境中发生｡

00:59.730 --> 01:09.000
正如你们所记得的, 这一点的效果是, 在确定性的例子中, 计算值非常容易｡

01:09.000 --> 01:10.950
嗯, 不一定总是很容易的｡ 

01:10.950 --> 01:15.060
但在我们的例子中, 我们可以简单地用贝尔曼方程来计算它们｡ 

01:15.060 --> 01:17.070
我们有准确的数值｡ 

01:17.070 --> 01:24.420
然后, 正如你们所记得的, 我非常小心地提到过,

01:24.420 --> 01:27.630
这些非确定性搜索示例的值是我所不知道的｡

01:27.630 --> 01:28.650
它们是不计算的｡ 

01:29.130 --> 01:33.000
最后我说我们不会, 我们只是不会去计算它们, 因为它非常复杂｡ 

01:33.000 --> 01:39.510
但计算机可以做到这一点, 我们只是按照这些值, 只是我编沿着值｡

01:39.510 --> 01:41.220
但他们确实完成了任务｡ 

01:41.220 --> 01:47.760
他们帮助我们很好地理解了这些概念, 现在我们将回到这一点, 并了解这里到底发生了什么｡

01:47.760 --> 01:55.350
为什么在非确定性的例子中, 或者一般来说, 在这些问题中, 在这些环境中,

01:55.350 --> 01:59.520
在代理人经历这些环境时, 计算这些值要困难得多？

01:59.520 --> 02:02.790
为什么计算这些值会这么难呢？

02:02.790 --> 02:08.100
当你仔细想想, 因为当代理人从这里移动到右边时,

02:08.100 --> 02:11.340
他不一定总是那样移动｡

02:11.340 --> 02:15.930
有时候他有可能会去到一个, 而不是直接去｡ 

02:15.930 --> 02:24.330
所以我们把这个叫做东北, 西南, 等等｡  代理人有时会向南走, 而不是向西走｡

02:24.480 --> 02:28.980
例如, 从这里, 他有时会向东, 而不是向北｡ 

02:29.220 --> 02:30.180
真的很抱歉

02:30.180 --> 02:32.970
所以他有时候会往南走, 而不是往东走｡ 

02:32.970 --> 02:36.840
在这里, 他不向北走, 有时候会向东或向西走｡ 

02:36.840 --> 02:40.980
在这里, 他不是向北走, 而是有时向西､ 向东或向西走, 等等｡ 

02:40.980 --> 02:42.960
如此, 故我如此｡ 

02:42.960 --> 02:46.290
为了计算该值, 您需要知道该值是什么｡ 

02:46.470 --> 02:50.880
但有趣的是, 为了计算这个值, 你需要知道这个值是什么｡

02:50.880 --> 02:57.240
所以这里有很多递归的过程, 所以你不能只定义这些值｡

02:57.240 --> 03:01.080
最重要的是, 这种递归是不确定的｡ 

03:01.080 --> 03:02.910
有时候就是这样｡ 

03:02.910 --> 03:04.890
有时候他不往上走, 而是往右走｡ 

03:04.890 --> 03:07.080
有时候他不是往上走, 而是往左走｡ 

03:07.080 --> 03:10.290
有时候是他想上去的时候, 他就会上去｡ 

03:10.290 --> 03:12.780
所以这是受偶然性的影响｡ 

03:12.780 --> 03:17.850
所以也许很多次代理人会通过这条路, 他会向上, 向上, 向上, 向上.

03:17.850 --> 03:20.730
他会认为从这里他总是向上走｡ 

03:20.730 --> 03:24.660
所以这个状态的价值会下降, 会变好, 然后突然间他会掉到坑里,

03:24.660 --> 03:27.210
这个价值会下降｡

03:27.300 --> 03:35.160
所以你可以看到, 这些值的计算是随机的, 因为它们是相互关联的｡

03:35.160 --> 03:41.880
此外, 环境中固有的随机性是最重要的, 因为这是决策过程的标志｡

03:42.330 --> 03:47.640
这就是所有这些的集合点, 也是我们要引入时间差概念的地方,

03:47.640 --> 03:52.230
它将允许代理计算这些值｡

03:52.230 --> 03:57.540
这里我们讨论的是V值, 从那以后我们已经讨论了Q值｡ 

03:57.540 --> 03:59.310
这就是我们要做的｡ 

03:59.310 --> 04:00.840
我们将要看到的｡ 

04:00.840 --> 04:01.710
Q值｡ 

04:01.710 --> 04:05.910
大家还记得, 这是Q值的贝尔蒙特方程｡ 

04:05.910 --> 04:17.190
所以Q值或者说在状态A下执行某个动作的价值等于你在执行该动作后得到的奖励.

04:17.190 --> 04:26.580
所以在完成这个动作之后, 加上你得到的最大值, 你得到了所有可能的总和的gamma｡

04:26.850 --> 04:31.170
所以你可以得到你最终所处状态的期望值｡ 

04:31.590 --> 04:34.680
大家还记得, 这是我们的构建公式｡ 

04:35.070 --> 04:41.580
现在, 为了简单起见, 我们将用传统的方法重写它, 就像我们在了解随机城市之前,

04:41.580 --> 04:45.760
讨论贝尔蒙特方程的方法一样｡

04:45.780 --> 04:52.590
你们还记得, 这是我们的贝尔蒙特方程, 在确定性搜索的例子中,

04:52.590 --> 04:57.480
因为这里你没有期望值, 你没有所有概率的总和｡

04:57.480 --> 05:00.390
你只是有它, 好像它是确定的地方｡ 

05:00.530 --> 05:02.960
你最终会是什么状态？

05:02.960 --> 05:05.270
然后你就在那个州里拿了最大值｡ 

05:05.270 --> 05:14.510
我们重写它的原因是, 唯一的原因是因为这样写起来更容易, 我们也更容易接受这个公式｡

05:14.510 --> 05:21.560
所以我们要记住我们用这个部分替换了这个部分, 而且你们会在很多文献中找到这个符号, 所以如果你们在学习其他的资料,

05:21.560 --> 05:28.160
你们会更容易理解沿着

05:28.160 --> 05:33.530
但请记住, 事实上, 我们这里所指的是概率方法｡ 

05:33.530 --> 05:39.200
而不是这种符号, 它只是更容易让我们操作它, 理解发生了什么, 就像看方程一样,

05:39.200 --> 05:42.410
这样它们就不会太混乱了｡

05:42.620 --> 05:47.390
但再一次, 记住, 事实上, 我们所指的是这种概率方法｡ 

05:48.080 --> 05:50.060
所以我们差不多就完成了｡ 

05:50.060 --> 05:52.040
让我们来看看到底发生了什么｡ 

05:52.040 --> 05:56.360
这是我们迷宫的空白状态｡ 

05:56.360 --> 05:58.100
我们没有任何提示值｡ 

05:58.100 --> 05:58.880
让我想想｡ 

05:58.880 --> 06:01.610
也可以, 但先不要填｡ 

06:01.610 --> 06:04.310
让我们看看其中一个州｡ 

06:04.310 --> 06:06.620
所以其中一个细胞, 特别是这个细胞｡ 

06:07.640 --> 06:14.240
这里我们有, 例如, 对于上升的动作, 我们有一个我们计算过的Q值｡ 

06:14.240 --> 06:16.910
因此, 我们并不是没有Q值｡ 

06:16.910 --> 06:19.850
我们有, 我们有, 但我们只是没有说明任何事情｡ 

06:19.850 --> 06:22.400
为了简单起见, 我们将其保留为空白｡ 

06:22.400 --> 06:25.490
但我们有一段时间以来一直在走动的年龄｡ 

06:25.490 --> 06:33.830
假设, 他计算出了从这个州, 从这个特定的细胞, 向上或向北的Q值,

06:33.830 --> 06:42.990
这个值是Q, A, A, 现在我们有了, 他现在就是这个蓝色箭头指向的地方｡

06:43.010 --> 06:48.440
特工坐在这间牢房里现在他需要做出选择他要去哪里？

06:48.440 --> 06:55.910
他知道这个, 向北行动的价值, 也就是Q, S和A,

06:55.910 --> 07:00.140
我之前说过的, 原因是他在行动之前就知道了.

07:00.140 --> 07:01.520
他还没有采取行动｡ 

07:01.520 --> 07:02.990
所以他还在牢房里｡ 

07:03.170 --> 07:11.270
在他采取行动之前, 这里的值是Q和S现在他实际上采取了行动｡ 

07:11.270 --> 07:13.580
假设他认为这是最好的选择｡ 

07:13.580 --> 07:16.280
他采取行动, 他移动到这个细胞｡ 

07:16.460 --> 07:24.290
那么, 现在发生的事情是在他采取行动之后发生的, 我们可以测量这个值是多少？

07:24.290 --> 07:30.470
我们来计算一下这个值, 这个值是采取这个行动的奖励, 加上gamma乘以,

07:30.470 --> 07:35.180
这个新状态的最大值, 这个状态是他刚进入的质数.

07:35.390 --> 07:38.480
所以在se素数中所有可能的动作的最大值｡ 

07:38.840 --> 07:47.120
这里我们得到的是之前的值, 然后我们计算了这个度量,

07:47.120 --> 07:58.790
但是你可以回忆一下之前的公式, 如果我们快速地回到之前的公式, 我们刚刚计算的就是这个值.

07:58.790 --> 08:01.520
这就是SNR的Q的计算方法｡ 

08:02.000 --> 08:09.470
所以右边的部分, 我们已经单独计算过了, 但是在我们采取行动之后,

08:09.470 --> 08:15.770
所以在我们知道S的Q和值之前, 我们已经通过之前的迭代计算过了｡

08:15.770 --> 08:19.940
所以我们的记忆中储存了一个值｡ 

08:19.940 --> 08:21.830
所以就像我们知道的一个数字｡ 

08:21.890 --> 08:29.060
现在在执行了这些动作之后, 我们知道了他实际得到了什么奖励, 代理人实际得到了什么奖励,

08:29.060 --> 08:33.260
我们可以计算出这个新的值｡

08:33.260 --> 08:36.860
所以本质上, 我们是在重新计算这个值｡ 

08:36.860 --> 08:42.800
但是现在有了新的信息, 新的信息是我们得到的奖励,

08:42.800 --> 08:50.510
加上我们最终处于什么状态, 在这个状态下的最大值是多少, 这个新的值对于我们正在寻找的特定状态是什么｡

08:50.510 --> 08:54.470
所以在那种状态下存在的价值是什么｡ 

08:54.470 --> 09:02.750
所以基本上, S和A的Q, 但是给出了新的信息, 现在时间差被定义为A的TD,

09:03.260 --> 09:07.640
和这两个的TD, 这两个的差｡

09:07.640 --> 09:11.540
第一个元素是after值｡ 

09:11.540 --> 09:18.680
就像S和A的Q值, 但是之后再计算它, 和之前的一篇文章的Q值,

09:18.710 --> 09:21.530
和你记忆中的A值｡

09:21.920 --> 09:24.050
所以问题是, 它们是不同的吗？

09:24.050 --> 09:26.030
所以理想情况下它们应该是相同的｡ 

09:26.030 --> 09:31.610
理想情况下, 它应该和这个相同, 因为这是计算这个的公式｡ 

09:31.610 --> 09:34.970
但问题是, 这不是我们计算出来的｡ 

09:34.970 --> 09:41.240
这是我们从经验证据中得到的, 是我们通过迷宫多次计算得到的｡

09:41.240 --> 09:43.940
这是我们目前所想到的｡ 

09:44.240 --> 09:46.760
它与目前的反覆项目无关｡ 

09:46.760 --> 09:51.080
这是我们很久以前就想到的, 不是很久以前,

09:51.080 --> 09:58.340
但是在我们之前的一次迭代中, 通过迷宫, 而这是我们刚刚计算过的, 不能保证它们会是一样的｡

09:59.340 --> 10:05.970
因为迷宫中存在的随机性, 因为这是可以计算出来的, 一些随机事件被触发了,

10:05.970 --> 10:08.700
这是可以计算出来的｡

10:08.700 --> 10:11.040
不同的随机事件被触发｡ 

10:11.490 --> 10:13.980
现在让我们在这里重写｡ 

10:14.010 --> 10:15.240
我们把它移到那边去吧｡ 

10:15.540 --> 10:16.790
那么我们该如何使用它呢？

10:16.800 --> 10:19.920
问题是, 好的, 我们有这个时间差｡ 

10:20.280 --> 10:23.340
我们如何使用它, 为什么它被称为时间差？

10:23.370 --> 10:28.920
之所以称之为时间差, 是因为你计算的基本上是同一件事.

10:28.920 --> 10:36.090
你在计算S的Q值, 也就是这个动作的Q值, 你在这里计算, 在这里计算.

10:36.090 --> 10:38.110
但不同的是时间｡ 

10:38.130 --> 10:41.580
这是您先前的SNA Q｡ 

10:41.580 --> 10:48.990
这是你的问题和答案, 现在你的新问题和答案, 问题是它有区别吗？

10:48.990 --> 10:51.270
他们之间有时间上的转变吗？

10:51.810 --> 10:56.760
如果时间确实发生了转变, 我们如何利用这一点呢？

10:56.760 --> 11:04.740
我们可以说, 好吧, 我们的Q of A不等于这个新的值｡

11:04.740 --> 11:09.510
所以我们要去掉旧的, 我们将忘记旧的, 我们将使用它作为一个新的值｡ 

11:09.750 --> 11:11.820
但这样做并不明智｡ 

11:11.820 --> 11:17.790
原因是在我们的环境中, 随机事件有时会发生｡ 

11:17.790 --> 11:28.620
如果我们过去的问答是80%的时间都在发生的事情, 然后80%的时间都在发生的事情, 那会怎么样？

11:28.620 --> 11:32.580
然后这个新的, 只是由于随机性而发生的事情｡ 

11:33.150 --> 11:39.600
在这种情况下, 我们要扔掉的一个是负责的大部分情况｡ 

11:39.600 --> 11:43.610
我们将用一种只有10%或20%的概率会发生的事情来代替它｡ 

11:43.620 --> 11:46.920
那不是最好的办法｡ 

11:46.920 --> 11:51.810
这就是为什么我们不想完全改变Q值的原因｡ 

11:51.810 --> 11:56.700
我们要用喜欢的方式一步一步地改变一点点, 靠一点点｡ 

11:56.700 --> 12:00.720
这就是为什么我们要以一种特殊的方式来利用这个时间差｡ 

12:00.720 --> 12:07.020
所以我们要说, 这是一个公式我们要用问答的形式来更新它｡

12:07.020 --> 12:13.110
我们将把奎师那的旧值加上时间差的α倍｡ 

12:13.110 --> 12:15.570
所以α是我们的学习率｡ 

12:15.570 --> 12:17.340
这是我们引入的新参数｡ 

12:17.340 --> 12:19.590
这就是算法学习的速度｡ 

12:19.860 --> 12:26.940
因此, 我们基本上是把这个差额, 不管它是什么, 我们把它加到我们上一个星期三的Q上｡

12:26.970 --> 12:31.680
这个公式可能没有任何意义, 或者仅仅看一下, 它没有任何意义, 因为这里有星期三的Q,

12:31.680 --> 12:33.990
这里有S和A的Q｡

12:33.990 --> 12:36.780
这是一回事, 所以它可能应该否定对方｡ 

12:36.780 --> 12:39.900
但是我们要用一种不同的方式来重写这个｡ 

12:40.170 --> 12:41.520
所以我再给你们演示一遍｡ 

12:41.520 --> 12:44.070
所以我只是把时间加到这些公式中｡ 

12:44.070 --> 12:51.000
所以这里是QT减1, 这里是Q, T减1, 这里是新的｡ 

12:51.030 --> 12:53.010
这里应该有一个圆圈, 这里也应该有一个圆圈｡ 

12:53.010 --> 12:53.940
不过没关系｡ 

12:53.940 --> 12:58.470
这里我们有α时间差, 新的是当前时间差｡ 

12:58.470 --> 13:00.330
这样你就能看到我们在做什么了｡ 

13:00.330 --> 13:07.770
我们说,

13:07.770 --> 13:16.080
好的, 让我们现在的Q等于之前的Q加上我们找到的时间差乘以α, 这里的公式是Q学习算法的核心和灵魂｡

13:16.080 --> 13:21.780
这就是Q值是如何更新的, 很好, 我们已经知道了Q值是什么, Gamma是什么,

13:21.780 --> 13:24.960
R是什么, 以及所有这些东西是什么｡

13:25.200 --> 13:30.180
现在我们需要看到的是你有一个先前的Q值｡ 

13:30.270 --> 13:31.560
是的, 那很好｡ 

13:31.680 --> 13:37.830
然后可能发生的是, 当你真正采取行动时, 当代理人采取行动时,

13:37.830 --> 13:42.360
他会知道他会得到奖励, 他会在一个状态中结束｡

13:42.360 --> 13:45.840
所以他可以根据这个来计算｡ 

13:45.930 --> 13:46.230
-你好

13:46.350 --> 13:52.980
好的, 那么我刚才那一步的Q值应该是多少.

13:53.250 --> 13:56.250
现在这就是等式的一部分｡ 

13:56.250 --> 14:03.600
减去旧的Q值, 得到时间差, 现在需要取α乘以时间差｡

14:03.810 --> 14:05.760
这就是调整Q值的方法｡ 

14:05.760 --> 14:07.590
这就是你要调整Q值的依据｡ 

14:08.010 --> 14:12.750
最后, 这就像是,

14:12.750 --> 14:18.780
这就足以理解发生了什么, 但是为了更好地澄清或者混淆, 我们要做的是,

14:18.780 --> 14:22.500
我们要把这个时间差或者这个时间差放在这里｡

14:22.530 --> 14:24.120
我们要把它代入这个公式｡ 

14:24.120 --> 14:29.760
所以我们要把这部分全部代入这个公式, 最后得到一个很大的方程｡ 

14:29.760 --> 14:31.470
我们开始吧｡ 

14:31.470 --> 14:32.520
这就是我们的方程式｡ 

14:32.520 --> 14:38.370
这是一个完整的方程, 时间差完全写出来了｡ 

14:38.370 --> 14:45.180
我之所以把它写出来是因为, 首先, 如果你研究一下, 你可能会在其他文献中找到它.

14:45.510 --> 14:48.510
第二件事是, 它使一些事情变得更复杂｡ 

14:48.510 --> 14:52.050
他的公式更长, 但也使一些事情更清楚一点｡ 

14:52.050 --> 14:55.860
例如, 你可以看到α在这里扮演的角色｡ 

14:55.860 --> 14:58.500
你可以看得更清楚, 因为你看这里｡ 

14:58.850 --> 15:00.470
Q T减一｡ 

15:00.470 --> 15:01.250
给你｡ 

15:01.370 --> 15:03.470
Q T减一, 带负号｡ 

15:03.470 --> 15:12.110
所以如果你代入α等于1, 如果你在这里输入1, 那么这个会和这个求反｡ 

15:12.110 --> 15:13.550
所以他们会互相残杀｡ 

15:13.550 --> 15:15.920
你就只剩下这一部分了｡ 

15:16.190 --> 15:24.650
这就意味着, 我们得到了一个新的值, 它本来应该是这样的.

15:24.650 --> 15:29.380
让我们用新的值更新Q值, 并忽略之前的值｡ 

15:29.390 --> 15:36.740
正如我们所讨论的, 这不是最好的方法, 因为这里有随机事件, 我们想一步一步地更新｡

15:37.340 --> 15:43.250
另一方面, 如果你把α设为零, 那么你会完全忘记这一部分,

15:43.250 --> 15:49.430
你的q, t, 新的或当前的, 总是等于前一个｡

15:49.430 --> 15:51.440
所以你什么也学不到｡ 

15:51.440 --> 15:58.820
这意味着迷宫发生的一切都无关紧要, 因为你很久以前就决定了自己的价值, 你只想保持它｡

15:59.150 --> 16:01.670
这就是为什么α不应该是0或1｡ 

16:01.820 --> 16:03.140
应该介于两者之间｡ 

16:03.140 --> 16:08.920
它会让你慢慢学习, 一步一步地学习, 当你或代理人穿过迷宫时,

16:08.930 --> 16:12.680
会得到这个时间差｡

16:12.680 --> 16:17.120
慢慢地, 这个价值观肯定会不断更新｡ 

16:17.120 --> 16:17.720
已更新｡ 

16:17.720 --> 16:25.400
最终会发生的是, 在某个时刻, 希望算法会收敛｡ 

16:25.400 --> 16:30.890
这意味着这个时间差将开始越来越接近于零, 最终, 非常接近于零,

16:30.890 --> 16:35.300
甚至是0000｡

16:35.300 --> 16:43.490
这意味着每次你的新值或者新计算的值, 它应该是什么, 所以不是这个, 而是假设在你迈出这一步后,

16:43.490 --> 16:50.930
它应该是什么, 它正好等于你之前的值｡

16:50.930 --> 16:52.280
然后是1, 然后是0.

16:52.280 --> 16:57.950
也就是说, 当时间差为零时,

16:57.950 --> 17:05.720
意味着算法已经收敛, 没有必要继续更新, 也没有必要继续更新Q值｡

17:06.110 --> 17:11.990
这里需要注意的是,

17:11.990 --> 17:19.070
如果环境不断变化, 如果不是因为环境中有一些随机事件, 而是环境本身在修改､

17:19.070 --> 17:28.610
变形, 并随时间而变化, 那么您可能是唯一一次仍希望继续执行队列值的整个更新的情况｡

17:28.880 --> 17:38.930
所以你需要不断地学习因为你不可能学习所有的东西然后得出最优策略因为最优策略也会随着环境的变化而变化.

17:38.930 --> 17:43.790
在这种情况下, 您需要继续计算时间差和Q值｡ 

17:44.570 --> 17:46.760
但除此之外, 这有点像一个额外的复杂｡ 

17:46.760 --> 17:49.310
除此之外, 这就是Q值的更新方式｡ 

17:49.310 --> 17:56.180
这是Q学习算法的主要公式, 这有点像它的扩展版本｡

17:56.180 --> 18:02.120
现在我们应该能理解为什么会有贝尔曼方程, 不仅是它所代表的,

18:02.120 --> 18:10.400
Q值, 还有代理人如何更新它的Q值, 以及在那个环境中到底发生了什么,

18:10.400 --> 18:14.090
这样它就可以提出最优策略｡

18:14.390 --> 18:20.540
我知道这是一个相当多的学习, 但希望你喜欢今天的教程,

18:20.540 --> 18:25.790
希望你能够带走核心价值观背后的基本概念和直觉｡

18:25.790 --> 18:33.440
时间差异的概念是什么, 为什么它很重要, 为什么它能帮助我们慢慢地训练我们的代理人,

18:33.440 --> 18:38.750
让他们了解他们所处的环境｡

18:39.020 --> 18:48.320
如果你想了解更多关于时间差异的知识, 那么一篇很受欢迎的论文就是学习用时间差异的方法来预测｡

18:48.320 --> 18:52.220
作者理查德·萨顿, 1988年｡ 

18:52.490 --> 18:56.330
我们已经有了理查德·萨顿的参考文献, 但这是另一个.

18:56.330 --> 18:57.470
实际上他有一本书｡ 

18:57.470 --> 19:04.760
所以如果你深入了解他的写作风格和沟通风格, 那么看看他的书,

19:04.760 --> 19:08.570
就像是所有这些东西的更扩展版本｡

19:08.570 --> 19:11.480
我没读过这本书, 但那是我的想象｡ 

19:11.630 --> 19:20.810
同时, 这是到论文的链接, 你可以从中了解到更多关于时间差异的信息｡

19:21.050 --> 19:24.140
我希望你喜欢今天的教程, 并期待着看到你的下一次｡ 

19:24.140 --> 19:26.360
在那之前, 好好享受我｡ 
