WEBVTT

00:00.530 --> 00:03.020
大家好, 欢迎回到深度学习课程｡ 

00:03.020 --> 00:07.910
在上一个教程中, 我们了解了卷积神经网络的全部内容,

00:07.910 --> 00:10.820
今天我们将深入到第一步卷积｡

00:10.820 --> 00:14.780
这就是卷积函数｡ 

00:14.780 --> 00:20.720
我知道我们试图远离数学, 保持事物的直观性, 但我还是忍不住要和你们分享这个公式,

00:20.720 --> 00:23.090
因为它太简单了｡

00:23.090 --> 00:32.630
卷积基本上是两个函数的组合积分, 它向你展示了一个函数是如何修改另一个函数或修改另一个函数的形状的｡

00:32.630 --> 00:38.360
如果您从事过信号处理､ 电气工程或需要信号处理的专业,

00:38.360 --> 00:42.350
您肯定会遇到卷积函数｡

00:42.350 --> 00:44.030
现在很流行｡ 

00:44.030 --> 00:49.400
再一次, 我们要保持数学的轻松或者把它们分开｡ 

00:49.400 --> 00:55.850
如果你想了解卷积神经网络背后的数学知识,

00:55.850 --> 01:05.630
还可以读一读中国南京大学教授吴建生（Janson Wu）的《卷积神经网络导论》｡

01:05.630 --> 01:12.710
这篇论文是几天前发表的, 大概五六天前,

01:12.710 --> 01:17.330
它专门面向那些刚开始学习卷积神经网络的人｡

01:17.330 --> 01:20.090
所以那里的数学应该是可以理解的｡ 

01:20.090 --> 01:33.260
我给约翰逊Wu教授发了电子邮件, 他说他的整个目标是把复杂的事情简化, 这样这个领域的新手就可以理解了｡

01:33.260 --> 01:38.900
他还提到他的主页上有一些材料｡ 

01:38.900 --> 01:46.310
如果你在URL中, 如果你去掉最后两个部分, 你只要转到那个部分, 这是他的主页,

01:46.310 --> 01:51.440
你可以找到更多的教程和资料,

01:51.440 --> 01:57.860
这些资料还没有以论文的形式发表, 但是他在教程中使用了它们, 所以你可能会发现这些资料很有用｡

01:57.860 --> 02:03.650
如果你想了解卷积神经网络背后的数学知识, 可以浏览这里,

02:03.650 --> 02:08.180
并在这方面打下坚实的基础｡

02:08.300 --> 02:12.440
但我们会继续讨论卷积｡ 

02:12.440 --> 02:15.980
那么什么是直观的卷积呢？

02:16.340 --> 02:18.890
左边是我们讨论过的输入图像｡ 

02:18.890 --> 02:22.670
这就是我们看图像的方式, 只有1和0来简化事情｡ 

02:22.670 --> 02:24.770
你可以看到那个笑脸｡ 

02:24.770 --> 02:26.300
然后我们有一个特征探测器｡ 

02:26.300 --> 02:28.400
因此, 特征检测器是一个3 × 3矩阵｡ 

02:28.670 --> 02:30.050
一定要三乘三吗？

02:30.050 --> 02:31.040
不, 不是这样的｡ 

02:31.760 --> 02:40.640
我想亚历克斯·内特用的是七乘七, 而其他一些著名的探测器用的是五乘五的特征探测器｡

02:41.480 --> 02:49.310
它们可以是不同的, 但通常你会看到它们是三乘三的, 它们是使它们成为三乘三的理由｡

02:49.310 --> 02:53.900
所以我们要坚持使用3 × 3特征检测器的惯例｡ 

02:54.470 --> 02:59.180
另外, 特征检测器也被称为特征检测器, 这些都是重要的术语,

02:59.330 --> 03:04.040
因为您可能会遇到许多不同的特征检测器术语, 但最常见的是特征检测器｡

03:04.040 --> 03:09.290
或者你可能听到它被称为内核或者你可能听到它被称为过滤器｡ 

03:09.290 --> 03:14.240
因此, 在本课程中, 我们将交替使用过滤器或特征检测器｡ 

03:14.360 --> 03:22.100
但请记住, 它有这些名字, 卷积运算是用圆圈中的X表示的,

03:22.100 --> 03:26.480
就像你在前面和这里的公式中看到的那样｡

03:26.510 --> 03:34.820
所发生的一切都是在直觉的层面上, 所有或仅仅是从背景中实际发生的事情而不是数学的角度来思考它｡

03:34.820 --> 03:40.520
你把这个特征检测器或过滤器放在你的图像上, 就像你在左边看到的那样｡ 

03:40.520 --> 03:48.170
例如, 在这个例子中, 你覆盖了左上角, 左上角有九个像素｡

03:48.170 --> 03:54.050
你基本上是把每个值乘以每个值｡ 

03:54.050 --> 03:54.920
所以各自值｡ 

03:54.920 --> 04:02.540
所以最上面的0由左上角的值乘以左上角的值, 然后基本上是位置编号1, 1由位置编号1, 1位置由一个数字或者0

04:02.540 --> 04:08.600
1乘以0, 102由0 2等等｡

04:08.600 --> 04:14.390
把这些矩阵的元素相乘, 然后把结果加起来｡ 

04:14.390 --> 04:16.610
所以在这种情况下, 没有匹配的｡ 

04:16.610 --> 04:19.760
所以要么是0乘0, 要么是0乘1｡ 

04:19.760 --> 04:21.050
所以结果是零｡ 

04:21.620 --> 04:26.480
在这里你可以看到其中一个匹配, 左边的那个匹配｡ 

04:26.480 --> 04:28.060
所以这里有一个1｡ 

04:28.070 --> 04:30.680
没有匹配的, 没有匹配的, 没有匹配的｡ 

04:30.680 --> 04:32.060
然后我们继续下一排｡ 

04:32.060 --> 04:38.510
我们移动整个滤波器的步长称为步幅｡ 

04:38.510 --> 04:40.460
这里我们有一个像素的步幅｡ 

04:40.460 --> 04:45.650
在这里你可以看到右下角的匹配项与步幅匹配, 但是中间的一个匹配项在这里, 右上角,

04:45.650 --> 04:50.800
一个匹配项, 然后没有匹配项.

04:50.840 --> 04:51.980
步幅是一｡ 

04:52.070 --> 04:57.290
你可以改变步幅, 你可以一步, 两步, 三步｡ 

04:57.290 --> 04:59.510
你喜欢什么都行｡ 

04:59.920 --> 05:02.670
最终, 效果良好的通常是2｡ 

05:02.670 --> 05:04.260
这就是人们所坚持的｡ 

05:04.260 --> 05:08.940
在本教程的最后, 我们会讨论这个步幅｡ 

05:09.420 --> 05:11.700
所以现在我们要匹配了｡ 

05:11.700 --> 05:12.570
所以我们就一直走下去｡ 

05:12.570 --> 05:17.640
你可以看到我们得到了一个2, 因为其中两个是匹配的, 等等, 等等｡ 

05:17.640 --> 05:18.180
好了

05:18.180 --> 05:19.530
还有一个匹配的｡ 

05:21.330 --> 05:22.500
我们走吧｡ 

05:23.560 --> 05:24.570
他们就这样结束了｡ 

05:24.580 --> 05:26.300
那又怎样？

05:26.320 --> 05:27.660
我们创造了什么？

05:27.670 --> 05:28.270
好吧, 我知道了

05:28.630 --> 05:31.240
这里有几件重要的事情｡ 

05:31.870 --> 05:34.900
右边的图像称为特征图｡ 

05:35.170 --> 05:36.610
也有好几个术语｡ 

05:36.610 --> 05:40.190
有时也可称为受控特征｡ 

05:40.750 --> 05:46.930
所以当你把卷积运算符应用到某个东西上时, 它并没有变得卷积, 而是变得复杂｡

05:46.930 --> 05:53.530
是的, 有时候我喜欢, 我想自己在错误的方式, 但它是正确的术语｡ 

05:53.530 --> 05:57.820
它的参与, 是一种老功能, 或者也可以叫激活图｡ 

05:57.820 --> 06:02.650
但在本课程中我们将把它称为功能图, 这样它就可以被称为这些东西中的任何一个｡ 

06:03.280 --> 06:06.250
我们在这里做了什么？

06:06.250 --> 06:09.820
如你所见, 我们缩小了图像的尺寸.

06:09.820 --> 06:10.540
这是第一条｡ 

06:10.540 --> 06:17.110
这就是我想提到的关于输入图像､ 特征检测和步幅的重要内容, 对吧？

06:17.290 --> 06:21.160
如果步幅为1, 您可以看到图像缩小了一点, 但如果步幅为1或2,

06:21.160 --> 06:23.110
图像将缩小更多｡

06:23.110 --> 06:30.880
因此, 特征图将变得更小, 这是整个卷积步骤中特征检测器的一个非常重要的功能,

06:30.880 --> 06:38.320
就是使图像更小, 因为这样处理起来更容易,

06:38.320 --> 06:42.040
速度也更快｡

06:42.040 --> 06:43.600
它会和｡ 

06:45.990 --> 06:51.780
他就是福斯特, 因为想象一下, 我们有一个什么, 一个七乘七的图像｡ 

06:51.780 --> 06:55.080
但是想象一下如果你有一张合适的照片, 对吗？

06:55.590 --> 06:59.220
或者你有一个像256乘256像素的图像｡ 

06:59.220 --> 07:06.720
这是一个巨大的像素数, 比如256的平方, 或者说是300 x 300像素｡ 

07:06.720 --> 07:09.810
所以, 我们才不会和GB 256搞混｡ 

07:09.810 --> 07:14.550
假设我们有一张300 x 300的图像, 大小和像素都是300｡ 

07:14.550 --> 07:18.690
那么你有300平方像素, 这是一个很大的数字｡ 

07:18.900 --> 07:27.480
因此, 特征检测器将减小图像的大小, 因此, 步长为2实际上是有益的｡

07:27.480 --> 07:34.350
但接下来的问题是, 当我们应用特征检测器时, 我们是丢失了信息还是正在丢失信息？

07:34.350 --> 07:40.470
当然, 我们丢失了一些信息, 因为我们得到的矩阵中的值较少｡ 

07:40.470 --> 07:47.910
但同时, 特征检测器的目的是检测某些特征, 即图像中不可分割的某些部分｡

07:48.420 --> 07:52.920
所以, 举例来说,

07:52.920 --> 07:57.870
如果你这样想, 就像特征检测器上有一个特定的模式, 当模式匹配时, 你的特征图中的最高数字｡

07:57.870 --> 08:05.100
事实上, 在一个简化的例子中, 你能得到的最高数字是当特征匹配时｡ 

08:05.100 --> 08:05.490
-没错—没错

08:05.490 --> 08:09.330
您可以在功能图中看到数字4｡ 

08:09.330 --> 08:10.470
没错｡ 

08:10.470 --> 08:19.020
所以如果你看这里, 这就是这个特征检测器的位置, 因为只有四个1完全匹配｡

08:19.020 --> 08:21.240
所以你可以看到这里｡ 

08:21.240 --> 08:27.300
因此, 正如我们在本节开头所讨论的, 在此处检测到了该功能｡ 

08:28.160 --> 08:33.020
这个特性就是我们如何看待事物, 是我们如何认识事物｡ 

08:33.020 --> 08:40.190
我们不会看每一个像素, 可以说, 在我们看到的图像或在真实的生活中｡ 

08:40.190 --> 08:41.750
我们不会看每一张照片｡ 

08:41.750 --> 08:50.150
我们看特征, 看鼻子, 帽子,

08:50.150 --> 08:57.320
羽毛, 眼睛下面或者猎豹眼睛下面的小黑点来区分猎豹和豹子或者火车的形状｡

08:57.320 --> 09:00.620
我们不去区分它是子弹头列车还是普通列车等等｡ 

09:00.620 --> 09:02.510
所以我们不看所有的东西｡ 

09:02.510 --> 09:08.030
我们看特征, 这就是我们要保留的, 这就是特征地图帮助我们保留的｡ 

09:08.030 --> 09:15.410
事实上, 这就是它允许我们向前推进并去除所有不必要的东西, 即使是作为人类,

09:15.410 --> 09:22.550
我们也不会处理在任何给定时间进入你眼睛的这么多信息, 比如千兆字节的信息, 如果你看每一个点,

09:22.550 --> 09:28.430
如果不是每秒进入你眼睛的兆字节的信息,

09:28.430 --> 09:35.330
我们仍然能够处理, 因为我们去除了不必要的东西｡

09:35.330 --> 09:36.920
只关注重要的功能｡ 

09:36.980 --> 09:42.050
特征对我们很重要, 这正是特征图的作用｡ 

09:42.050 --> 09:49.430
现在继续, 这是我们的输入图像, 我们创建一个特征图｡ 

09:49.430 --> 09:52.490
前面的那个, 假设前面的那个就是我们刚刚创建的那个｡ 

09:52.490 --> 10:00.500
但是为什么会有很多这样的地图, 但是我们创建了多个特征地图, 因为我们使用了不同的过滤器, 对吗？

10:00.500 --> 10:03.770
这是我们保存大量信息的另一种方式｡ 

10:03.770 --> 10:10.550
所以我们不只是有一个特征图, 我们寻找特定的特征, 然后或者基本上是网络通过它的训练来决定,

10:10.550 --> 10:14.570
这是我们在本节最后讨论的,

10:14.570 --> 10:22.490
通过它的训练, 它决定哪些特征对特定类型或特定类别是重要的, 然后它寻找它们｡

10:22.490 --> 10:27.710
因此, 我们会有不同的过滤器, 我们刚才会谈到过滤器, 但基本上它会应用这些过滤器｡

10:27.710 --> 10:32.480
所以为了得到这个特征图, 它应用了一个过滤器, 就像我们看到的那样｡ 

10:32.480 --> 10:36.200
但是, 为了得到这个特征映射, 应用不同的过滤器来得到这个特征映射,

10:36.200 --> 10:37.460
应用不同的过滤器等等｡

10:38.150 --> 10:43.370
所以基本上它只是创建这些特征地图｡ 

10:43.370 --> 10:49.520
事实上, 这就是为什么我个人认为特征检测器比过滤器更好｡ 

10:49.520 --> 10:55.010
请记住, 这里有一个过滤器, 我们也可以称之为特征检测器｡ 

10:55.010 --> 10:59.330
事实上, 我认为单词特征检测器更适合｡ 

10:59.330 --> 11:03.110
原因是这就是目的所在｡ 

11:03.110 --> 11:03.320
好吧, 我知道了

11:03.320 --> 11:06.440
我们不想只是我们不想只是过滤掉我们的图像｡ 

11:06.440 --> 11:10.130
但是, 即使这是全部, 这是相同的, 只是一个术语的问题｡ 

11:10.130 --> 11:11.930
但基本上, 我们想要检测特征｡ 

11:11.930 --> 11:12.200
好吧, 我会的

11:12.200 --> 11:19.610
在这一层中, 我们将获得我们检测到的特征地图, 在我们检测到的特征地图中, 某些特征在图像中的位置,

11:19.610 --> 11:25.280
某些其他特征在哪里, 某个特定特征在哪里｡

11:25.310 --> 11:30.890
在这个特征图中, 我们已经检测到, 某个其他特征位于图像上的什么位置｡ 

11:31.190 --> 11:33.320
这就是我们要做的｡ 

11:33.320 --> 11:34.550
让我们看几个例子｡ 

11:34.550 --> 11:44.360
我们使用的是Ingeborg的文档, 这是一个免费的工具, 就像画图一样,

11:44.360 --> 11:49.460
你可以用它来调整图像或处理图像｡

11:49.460 --> 11:59.720
但基本上他们在他们的文档中有一些有价值的例子, 这里他们有一张泰姬陵的图片, 你可以选择你想要应用的过滤器｡

11:59.720 --> 12:06.080
如果你下载这个程序, 上传一张照片到里面, 你就可以启动卷积矩阵,

12:06.080 --> 12:12.080
应用滤波器, 你会看到这些东西,

12:12.080 --> 12:15.140
这些卷积矩阵实际上应用在图像处理和设计等方面｡

12:15.140 --> 12:16.700
让我们来看看我们得到了什么, 我们得到了什么｡ 

12:16.700 --> 12:21.440
所以, 如果我们在中间应用这个过滤器5, -1, -1, -1,

12:21.440 --> 12:23.540
-1, 你可以看到它锐化了图像｡

12:23.540 --> 12:28.820
是的, 如果你想的话, 这是非常直观的｡ 

12:28.820 --> 12:36.350
五是像素, 主要像素, 比如滤波器或特征检测器中间的像素, 然后减一,

12:36.350 --> 12:42.250
减一, 减一, 直观地说,

12:42.290 --> 12:44.960
就是减少周围的像素｡

12:46.100 --> 12:46.850
然后模糊｡ 

12:46.880 --> 12:54.500
所以基本上它需要同等的重要性, 给中心像素周围的所有像素同等的重要性｡

12:54.500 --> 12:58.940
因此, 它将它们结合在一起, 你会得到一个模糊的, 手中的边缘｡ 

12:58.940 --> 13:03.770
这里你可以看到减1和1, 然后你得到0, 对吗？

13:03.770 --> 13:12.740
所以你删除, 删除中间主像素周围的像素, 你只保留这个负1, 它就给了你一个边缘｡

13:12.740 --> 13:14.960
而这一个有点难以理解它是如何工作的｡ 

13:15.900 --> 13:19.070
直觉上想起来可能更难｡ 

13:19.460 --> 13:20.800
右边缘检测｡ 

13:20.810 --> 13:23.510
所以这个可能更有意义, 对吧？

13:23.510 --> 13:32.450
你取中间的一个, 你减少中间的一个, 可能就像中间像素的强度｡ 

13:32.450 --> 13:41.510
然后你寻找那些, 你寻找这些, 你增加他们周围的力量｡

13:42.020 --> 13:43.310
所以你有那些｡ 

13:44.420 --> 13:44.810
是的, 我知道

13:44.810 --> 13:50.630
这就是边缘检测, 你可以看到你得到了什么, 并领导另一个｡

13:50.630 --> 13:58.070
所以这里的关键是它是不对称的, 你可以看到图像也是不对称的｡ 

13:58.070 --> 14:05.000
所以你会有一种感觉, 它是站在你面前的, 这就是你得到的, 当你在这里有负,

14:05.000 --> 14:07.100
在这里有正｡

14:07.100 --> 14:12.320
再一次, 这是非常的, 这现在变得有点技术性了, 但至少我们可以得到一些直观的, 理解的东西,

14:12.320 --> 14:14.090
让我们再快速地浏览一遍｡

14:14.090 --> 14:20.690
有锐化, 有模糊, 有边缘增强, 有边缘检测, 有浮雕｡ 

14:20.690 --> 14:27.230
正如你所看到的, 这些都是同一幅图像的很好的例子, 但是我们得到的是特征图,

14:27.230 --> 14:31.640
所以我们使用不同的特征检测器来得到同一幅图像的不同特征图｡

14:31.640 --> 14:39.770
所以现在我们有很多版本的图像, 在每一个版本中, 我们都试图检测某些东西,

14:39.770 --> 14:49.910
这些术语, 它们不适用于我们, 除了像boss, 可能不适用于我们的卷积神经网络｡

14:49.910 --> 14:51.530
但边缘检测很重要｡ 

14:51.530 --> 14:56.360
我们要检测边缘, 边缘增强, 可能不是模糊锐化｡ 

14:56.360 --> 15:02.390
所以像边缘这样的东西可能是我们这类工作中最重要的一个｡ 

15:02.390 --> 15:07.100
就像计算机一样的理解力而言, 他们会自己决定, 他们的神经网络会自己决定, 什么是重要的,

15:07.100 --> 15:08.930
什么是不重要的｡

15:08.930 --> 15:12.800
而且它可能连人眼都认不出来｡ 

15:12.830 --> 15:24.410
你无法理解这些特征的含义, 但计算机会做出决定, 这就是神经网络的美妙之处, 它们可以处理很多不同的事情,

15:24.410 --> 15:30.620
甚至不用直觉就能理解,

15:30.620 --> 15:39.230
不用解释为什么它们会理解哪些特征对它们很重要, 不管我们是否给它们起了名字, 这是一个与人工神经网络无关问题｡

15:39.800 --> 15:50.660
我最喜欢的一张, 这是杰弗里·欣顿的照片, 杰弗里·辛顿的照片通过了其中一个过滤器｡

15:50.810 --> 15:51.110
好吧, 我会的

15:51.110 --> 15:52.970
今天的教程到此结束｡ 

15:52.970 --> 15:55.220
我希望你喜欢学习卷积｡ 

15:55.220 --> 16:02.270
关键的一点是, 卷积, 卷积的主要目的是用特征检测器找到图像中的特征,

16:02.270 --> 16:08.000
把它们放到特征图中, 通过把它们放到未来的图中,

16:08.000 --> 16:15.200
它仍然保留了像素之间的空间关系, 这对我们来说非常重要, 因为如果它们完全混乱了,

16:15.530 --> 16:19.130
那么我们就失去了模式｡

16:19.130 --> 16:25.040
与此同时, 重要的是要理解,

16:25.040 --> 16:32.930
大多数时候, 神经网络检测并用于识别某些图像和类别的特征对人类来说毫无意义, 但它们仍然有效｡

16:32.930 --> 16:34.280
这就是卷积｡ 

16:34.280 --> 16:36.140
我期待着在赤道上见到你｡ 

16:36.140 --> 16:38.090
在此之前, 请尽情享受深度学习｡ 
