WEBVTT

00:00.960 --> 00:03.270
大家好, 欢迎回到深度学习课程｡ 

00:03.270 --> 00:06.540
今天我们要讲的是随机梯度下降法｡ 

00:07.020 --> 00:14.430
之前我们学习了梯度下降, 我们发现这是一个非常有效的方法来解决我们的优化问题,

00:14.430 --> 00:19.410
我们试图最小化成本函数｡

00:19.410 --> 00:30.840
我们基本上需要10到57年的时间才能在几分钟或几小时内或一天左右的时间内解决一个问题｡

00:30.840 --> 00:37.440
这真的有助于加快速度, 因为我们可以看到哪条路是下坡路, 我们可以朝着那个方向走, 采取步骤,

00:37.440 --> 00:41.340
更快地达到最低点｡

00:41.340 --> 00:50.940
但是梯度下降的方法需要代价函数是凸的｡

00:50.940 --> 00:55.200
正如你在这里看到的, 我们特别选择了一个凸代价函数｡ 

00:55.200 --> 01:03.180
基本上凸的意思是这个函数看起来和我们现在看到的很相似, 它只是凸向一个方向, 它本质上有一个全局最小值,

01:03.180 --> 01:11.010
这就是我们要找到的｡

01:11.430 --> 01:13.980
但是如果我们的函数不是凸的呢？

01:13.980 --> 01:15.900
如果我们的代价函数不是凸的呢？

01:16.290 --> 01:17.730
如果它看起来像这样呢？

01:17.730 --> 01:19.590
首先, 这怎么可能？

01:19.590 --> 01:27.390
这是有可能的, 因为如果我们首先选择一个代价函数, 它不是y和y的平方差,

01:27.390 --> 01:34.380
或者如果我们确实选择了代价函数, 它是这样的, 但是在多维空间中,

01:34.380 --> 01:39.060
它实际上可以变成不是凸的｡

01:39.570 --> 01:44.670
那么在这种情况下, 如果我们尝试使用正态梯度下降法会发生什么呢？

01:44.970 --> 01:46.290
这种事是有可能发生的｡ 

01:46.290 --> 01:51.150
我们可以找到代价函数的局部最小值而不是全局最小值｡ 

01:51.150 --> 01:54.540
所以这一个是最好的, 我们找错了｡ 

01:54.540 --> 01:57.660
因此我们没有正确的重量｡ 

01:57.660 --> 02:02.310
我们没有一个优化的神经网络, 我们有一个低于标准的神经网络｡ 

02:02.310 --> 02:04.410
那么在这种情况下我们该怎么做呢？

02:04.410 --> 02:09.930
这里的答案是随机梯度下降｡ 

02:09.930 --> 02:15.120
结果表明, 随机梯度下降法并不要求代价函数是凸的.

02:15.120 --> 02:21.150
让我们来看看, 我们讨论过的正态梯度下降和随机梯度下降之间的两个区别｡

02:21.540 --> 02:27.540
正常的梯度下降就是我们把所有的行, 都插入到神经网络中｡ 

02:27.540 --> 02:35.820
这里我们又把神经网络复制了几次, 但是每次行都被插入到同一个神经网络中｡

02:35.820 --> 02:37.140
所以只有一个神经网络｡ 

02:37.140 --> 02:39.030
这只是为了形象化｡ 

02:39.030 --> 02:42.990
一旦我们把它们插进去,

02:42.990 --> 02:47.130
我们就可以根据右边的公式计算出成本函数, 并查看底部的图表, 然后我们调整权重｡

02:47.250 --> 02:54.390
这就是所谓的梯度下降法, 也可以称之为批梯度下降法.

02:54.390 --> 03:00.330
所以我们从样本中取出一整批, 我们应用它, 然后运行它｡ 

03:00.840 --> 03:04.170
这里的随机梯度下降法稍有不同｡ 

03:04.170 --> 03:11.460
我们一行一行地取, 所以我们取这一行, 我们运行我们的神经网络, 然后我们调整权重｡

03:11.760 --> 03:17.040
然后我们移到第二行, 我们取第二行, 我们运行我们的神经网络, 我们查看成本函数,

03:17.040 --> 03:19.710
然后我们再次调整权重｡

03:19.980 --> 03:22.170
然后我们再坐另一排, 坐第三排｡ 

03:22.560 --> 03:23.670
我们运行神经网络｡ 

03:23.670 --> 03:24.660
我们来看看代价函数｡ 

03:24.660 --> 03:25.350
我们只是重量｡ 

03:25.350 --> 03:32.580
因此, 我们基本上是在每一行之后调整权重, 而不是一起执行所有操作,

03:32.610 --> 03:35.970
然后根据不同的方法调整权重｡

03:35.970 --> 03:39.630
现在我们来比较一下这两个｡ 

03:39.630 --> 03:40.530
他们来了｡ 

03:40.560 --> 03:42.660
这就是视觉记忆的方法｡ 

03:42.660 --> 03:49.020
所以你有一个批量梯度下降, 在你运行完权重之后, 在你运行完神经网络中的所有行之后,

03:49.020 --> 03:52.290
你正在调整权重｡

03:52.800 --> 03:57.360
然后基本上你调整权重, 然后你再运行整个过程, 迭代, 迭代, 迭代｡

03:57.360 --> 04:03.840
在随机梯度下降法中, 你一次运行一行然后调整权重, 调整权重, 调整权重,

04:03.840 --> 04:07.500
然后你一遍又一遍地做所有的事情.

04:07.500 --> 04:09.990
这就是所谓的这个范畴｡ 

04:09.990 --> 04:10.770
用这种方法｡ 

04:10.980 --> 04:28.410
主要的两个区别是随机梯度下降法帮助您避免了寻找局部极值或局部最小值而不是整体全局最小值的问题｡

04:28.800 --> 04:38.160
简单地说, 原因是SGD或随机梯度下降法有更高的波动, 因为它可以承受｡

04:38.160 --> 04:43.620
它一次迭代一次或者一行,

04:43.620 --> 04:49.320
因此波动更大, 它更有可能找到全局最小值, 而不仅仅是局部最小值｡

04:49.320 --> 04:56.430
随机梯度下降法的另一个优点是比批量梯度法更快｡

04:56.430 --> 04:59.700
就像你的第一印象可能是因为它做的每一个单一的｡ 

04:59.960 --> 05:00.740
一个一个来

05:00.740 --> 05:07.280
它速度较慢, 但实际上速度更快, 因为它不需要将所有数据加载到内存中,

05:07.760 --> 05:12.530
然后运行并等待所有这些数据一起滚动｡

05:12.530 --> 05:14.150
它可以一个一个地运行它们｡ 

05:14.150 --> 05:15.470
所以这是一个更简单的算法｡ 

05:15.470 --> 05:16.730
从这个意义上说, 它要快得多｡ 

05:16.730 --> 05:25.190
所以虽然它比批梯度下降法有更多的优点, 但在这些意义上它比批梯度下降法有更多的优点｡

05:25.190 --> 05:31.040
批处理梯度下降法的主要优点是它是一种确定性算法, 而不是随机梯度下降法,

05:31.040 --> 05:36.890
它是一种随机算法,

05:36.890 --> 05:43.610
也就是说, 它是随机的,

05:44.210 --> 05:55.580
只要神经网络的初始权重相同, 每次运行批处理梯度下降法时, 都会得到相同的迭代次数, 的结果与您的权重更新方式相同｡

05:55.790 --> 05:58.220
首先对随机梯度下降法进行了研究｡ 

05:58.220 --> 06:01.100
因为这是一种随机方法, 所以你不会得到它｡ 

06:01.100 --> 06:07.880
您可能是随机选取行, 并且以随机方式更新神经网络｡

06:07.880 --> 06:12.950
因此每次你运行随机梯度下降法时,

06:12.950 --> 06:20.480
即使你在开始时有相同的权重, 你也会有不同的过程和不同的迭代｡

06:20.480 --> 06:25.460
这就是随机梯度下降法的简单含义｡ 

06:25.970 --> 06:31.190
还有一种介于两者之间的方法, 叫做迷你批次梯度下降法, 你可以将两者联合收割机运行,

06:31.190 --> 06:38.660
而不是运行整个批次, 或者一次运行一个, 而是运行一批行, 可能是5到10行,

06:38.660 --> 06:41.340
100行矿物.

06:41.390 --> 06:45.080
你决定设置, 你运行那些行数是时间｡ 

06:45.080 --> 06:47.630
然后你更新你的体重, 你更新你的体重, 等等｡ 

06:47.630 --> 06:50.300
这就是所谓的小批量梯度下降法｡ 

06:50.330 --> 06:56.570
如果你想了解更多关于梯度下降, 有一个伟大的文章, 你可以看看｡

06:56.570 --> 07:05.750
它被称为神经网络和Python的13行第二部分梯度下降由安德鲁特拉斯克和下面的链接｡

07:05.750 --> 07:12.500
这是在GitHub 2015文章写得非常好, 非常简单的条款｡ 

07:12.770 --> 07:21.410
它有一些有趣的哲学思想, 或者只是有趣的想法, 关于如何应用梯度下降,

07:21.410 --> 07:28.070
它的优点和缺点是什么, 以及在某些情况下如何做？

07:28.070 --> 07:32.000
所以他有一些非常酷的技巧, 窍门和窍门, 非常容易阅读｡ 

07:32.000 --> 07:33.500
所以一定要来看看｡ 

07:33.500 --> 07:36.900
还有一个, 读起来更重一点｡ 

07:36.920 --> 07:44.420
对于那些对数学感兴趣的人, 想深入了解数学的人来说, 为什么梯度下降是如此的特殊呢？

07:45.230 --> 07:48.770
驱动渐变的公式是什么？它是如何计算的？

07:49.130 --> 07:51.440
看看这篇文章或者这本书｡ 

07:51.530 --> 07:57.080
这是一本免费的在线书籍, 叫做神经网络和深度学习, 作者是迈克尔·尼尔森2015年的书｡ 

07:57.080 --> 07:59.510
只是基本上都是在线的｡ 

07:59.510 --> 08:02.120
你可以去那里看看｡ 

08:02.240 --> 08:05.780
再一次, 非常柔和地介绍了数学｡ 

08:05.780 --> 08:07.160
但后来对于数学｡ 

08:07.160 --> 08:13.220
但是当你阅读这篇文章的时候, 数学是相当沉重的｡ 

08:13.430 --> 08:17.260
但与此同时, 它让你进入那种情绪｡ 

08:17.270 --> 08:22.610
我认为它有一个热身的章节, 你首先用数学热身, 然后你跳进他们｡ 

08:22.610 --> 08:27.170
对数学很感兴趣, 那么这就是要去的文章, 我们就去吧｡ 

08:27.170 --> 08:36.260
简单地说, 这就是大下降和随机梯度下降的区别, 以及它们是如何工作的｡

08:36.260 --> 08:39.770
在这一点上, 我们将结束今天的教程｡ 

08:39.770 --> 08:41.930
我期待着在下一场比赛中见到你｡ 

08:41.930 --> 08:44.240
在此之前, 请尽情享受深度学习｡ 
