WEBVTT

00:00.660 --> 00:03.150
-: Hello, welcome back to the course on Deep Learning.

00:03.150 --> 00:04.620
In the previous tutorial, we found out

00:04.620 --> 00:07.320
what convolution neural networks are all about.

00:07.320 --> 00:11.070
And today we're going to dive into step one convolution.

00:11.070 --> 00:15.000
So this is the convolution function.

00:15.000 --> 00:17.130
I know we tried to survey from mathematics

00:17.130 --> 00:19.689
and keep things intuitive, but I couldn't help

00:19.689 --> 00:23.160
but share this formula for you because it is so simple.

00:23.160 --> 00:26.250
A convolution is basically a combined integration

00:26.250 --> 00:27.300
of two functions

00:27.300 --> 00:31.320
and it shows you how one function modifies the other

00:31.320 --> 00:32.730
or modifies the shape of the other.

00:32.730 --> 00:35.250
And if you've done any signal processing

00:35.250 --> 00:36.390
or electrical engineering

00:36.390 --> 00:39.570
or profession where signal processing is required

00:39.570 --> 00:41.160
you would've inevitably come

00:41.160 --> 00:42.420
across the convolution function.

00:42.420 --> 00:43.830
It is quite popular.

00:43.830 --> 00:48.000
Now, once again, we're going to keep the mathematics light

00:48.000 --> 00:49.500
or keep them separate.

00:49.500 --> 00:51.090
And if you'd like to get

00:51.090 --> 00:54.930
into the math behind the convolution neural networks

00:54.930 --> 00:57.277
a great additional read is

00:57.277 --> 01:02.277
"Introduction to Convolution Neural Networks," by Jianxin Wu

01:02.340 --> 01:05.790
who is a professor at the Nanjing University in China.

01:05.790 --> 01:08.820
This paper was published literally days ago

01:08.820 --> 01:12.780
like five or six days ago, and it is oriented specifically

01:12.780 --> 01:14.670
at people who are starting out at beginners

01:14.670 --> 01:17.430
who are getting to know convolutional neural networks.

01:17.430 --> 01:20.160
So the mathematics there should be accessible.

01:20.160 --> 01:23.700
I actually emailed Professor Jianxin Wu

01:23.700 --> 01:28.260
and yeah he said his whole goal is to make

01:28.260 --> 01:30.630
break the complex things down

01:30.630 --> 01:33.360
so that people who are new to this field can understand.

01:33.360 --> 01:34.950
And also he mentioned

01:34.950 --> 01:38.970
that he's got some materials available on his homepage.

01:38.970 --> 01:40.560
So if you, in the URL

01:40.560 --> 01:42.900
if you just remove the last two parts and you just go

01:42.900 --> 01:47.900
to like /wjx to that part, that's his homepage

01:47.970 --> 01:50.820
and you'll be able to find more additional tutorials

01:50.820 --> 01:53.400
and materials which haven't been published as papers

01:53.400 --> 01:55.920
but he uses them in his tutorials.

01:55.920 --> 01:57.930
So you might find those useful.

01:57.930 --> 02:01.530
So browser around there if you'd like to get an introduction

02:01.530 --> 02:04.800
into the mathematics behind convolutional neural networks

02:04.800 --> 02:08.550
and kind of build a solid base around that area.

02:08.550 --> 02:09.990
But we're going to move on

02:09.990 --> 02:12.540
and we're gonna talk about the convolution.

02:12.540 --> 02:16.500
So what is the convolution in intuitive terms?

02:16.500 --> 02:19.020
Here on the left we've got an input image as we discussed.

02:19.020 --> 02:20.970
That's how we're going to look at images

02:20.970 --> 02:22.890
just ones and zeros to simplify things.

02:22.890 --> 02:25.050
And you can see the smiley face there.

02:25.050 --> 02:26.370
There we've got a feature detector.

02:26.370 --> 02:28.800
So a feature detectors are three by three matrix.

02:28.800 --> 02:30.120
Does it have to be three by three?

02:30.120 --> 02:31.890
No, it doesn't.

02:31.890 --> 02:34.923
Alex Net I think uses seven by seven.

02:35.850 --> 02:38.700
And then some other, one of those other famous ones

02:38.700 --> 02:40.750
uses like five by five feature detectors.

02:41.640 --> 02:44.280
They can be different, but usually you'll see

02:44.280 --> 02:46.020
that they are three by three

02:46.020 --> 02:49.380
and they are reasons to make them three by three.

02:49.380 --> 02:51.780
So we eventually stick to the convention

02:51.780 --> 02:54.600
of a having a three by three feature detector.

02:54.600 --> 02:57.540
Also, the feature detectors called these are important terms

02:57.540 --> 02:58.740
because you might come across them.

02:58.740 --> 03:01.800
They're many different terms for the feature detector

03:01.800 --> 03:04.140
but the most common ones are feature detector.

03:04.140 --> 03:07.050
Or you might hear it being called kernel

03:07.050 --> 03:09.510
or you might hear it being called filter.

03:09.510 --> 03:11.520
So in this course we're gonna be using

03:11.520 --> 03:14.430
either filter or feature detector interchangeably

03:14.430 --> 03:17.040
but just bear in mind that it has those names.

03:17.040 --> 03:20.040
And a convolution operation is signified

03:20.040 --> 03:25.040
by an X in a circle, just as you saw in the formulas before.

03:25.770 --> 03:29.820
And here what happens is on an intuitive level

03:29.820 --> 03:31.770
or just to think of it

03:31.770 --> 03:33.750
in terms of what is actually happening in the background

03:33.750 --> 03:35.010
rather than the mathematics.

03:35.010 --> 03:38.340
Well, you take this feature detector or filter

03:38.340 --> 03:40.680
and you put it on your image like you see on the left.

03:40.680 --> 03:44.490
So you cover the, for instance, in this case

03:44.490 --> 03:48.420
the top left corner, the nine pixels in the top left corner

03:48.420 --> 03:53.420
and you basically multiply each value by each value.

03:54.120 --> 03:54.990
So respective value.

03:54.990 --> 03:58.770
So the top zero by the top left value

03:58.770 --> 04:01.680
by the top left value, then basically

04:01.680 --> 04:03.750
position number one one by position number one, one

04:03.750 --> 04:08.670
position by number or 01 by 01, 02 by 02 and so on.

04:08.670 --> 04:13.230
So just it's element wise, multiplication of these matrices.

04:13.230 --> 04:14.490
And then you add up the results.

04:14.490 --> 04:16.710
So in this case, nothing matches up.

04:16.710 --> 04:19.980
So always it's always either a zero by zero, zero by one.

04:19.980 --> 04:21.540
So the result is zero.

04:21.540 --> 04:23.940
Here you can see that one of them matched up,

04:23.940 --> 04:26.550
the one on the left matched up

04:26.550 --> 04:28.140
and therefore we got a one here.

04:28.140 --> 04:30.603
Nothing matched up, nothing matched up, nothing matched up.

04:30.603 --> 04:32.130
Then we move on to the next row.

04:32.130 --> 04:35.610
So, and the step at which we're moving

04:35.610 --> 04:38.610
this whole filter is called the stride.

04:38.610 --> 04:40.500
So here we have a stride of one pixel.

04:40.500 --> 04:42.270
So here you can see again something matched up,

04:42.270 --> 04:44.130
the bottom right corner matched up.

04:44.130 --> 04:48.300
Again, stride, bottom one in the middle, matched up

04:48.300 --> 04:50.100
here top right one matched up.

04:50.100 --> 04:50.970
Then nothing matched up.

04:50.970 --> 04:52.170
The stride is one.

04:52.170 --> 04:56.340
You can change the stride, you can make it one, two

04:56.340 --> 04:58.920
you can make it three, whatever you like.

04:58.920 --> 05:01.740
The conventionally, the one that works well

05:01.740 --> 05:02.790
is usually at two.

05:02.790 --> 05:04.560
So that's what people stick to.

05:04.560 --> 05:07.590
And we'll talk about what the stride is

05:07.590 --> 05:09.510
towards the end of the tutorial.

05:09.510 --> 05:12.450
So here we've got, we're matching up, so we just keep, oh

05:12.450 --> 05:13.590
here you can see we've got a two

05:13.590 --> 05:15.750
because two of them matched up

05:15.750 --> 05:17.730
and so on and so on and so on.

05:17.730 --> 05:18.563
And there we go.

05:18.563 --> 05:20.070
There's another one that matched up.

05:21.390 --> 05:22.503
There we go.

05:23.700 --> 05:24.840
And there we're done.

05:24.840 --> 05:28.800
So what's have we created, right?

05:28.800 --> 05:32.010
Couple of important things here.

05:32.010 --> 05:35.280
The image on the right is called a feature map

05:35.280 --> 05:36.660
also has several terms.

05:36.660 --> 05:40.980
It also can be called, sometimes it can bold feature.

05:40.980 --> 05:44.190
So when you apply convolution operator to something,

05:44.190 --> 05:47.070
it doesn't become convoluted it becomes convolved.

05:47.070 --> 05:51.120
And yes, sometimes I think to myself

05:51.120 --> 05:54.936
in the wrong way, but it's the correct term it's convolved

05:54.936 --> 05:56.760
it's a convolved feature, or it can also be called

05:56.760 --> 05:58.050
activation map.

05:58.050 --> 06:01.080
But we are gonna be calling it a feature map in this course.

06:01.080 --> 06:03.480
So it can be called any one of those things.

06:03.480 --> 06:06.330
And what have we done here?

06:06.330 --> 06:09.900
Well, as you can see, we've reduced the size of the image.

06:09.900 --> 06:10.733
That's number one.

06:10.733 --> 06:12.720
And that's the important thing I wanted to mention

06:12.720 --> 06:15.087
about your input image

06:15.087 --> 06:17.250
and the featured detect and the stride, right?

06:17.250 --> 06:18.690
If you have a stride of one

06:18.690 --> 06:20.040
you can see the image reduced a bit.

06:20.040 --> 06:21.330
But if you have a stride of two

06:21.330 --> 06:23.190
the image is going to reduce more.

06:23.190 --> 06:25.590
So the feature app is gonna be even smaller.

06:25.590 --> 06:29.730
And that's an very important function

06:29.730 --> 06:30.960
of the feature detector

06:30.960 --> 06:35.960
of this whole convolution step is to make the image smaller

06:36.090 --> 06:39.070
because it'll be easier to process it

06:40.140 --> 06:45.140
and it'll be just faster and it'll be just faster.

06:46.890 --> 06:49.200
Because imagine like here we've got a what

06:49.200 --> 06:51.870
a seven by seven image.

06:51.870 --> 06:55.710
But imagine if you have a proper photo, right?

06:55.710 --> 06:59.280
Or you have like a 256 by 256 pixel image.

06:59.280 --> 07:04.280
That's a huge number of pixel 256 squared.

07:04.410 --> 07:07.230
Or like, let's say you have a 300 by 300 pixels,

07:07.230 --> 07:09.930
so we don't get confused with the RGB 256

07:09.930 --> 07:12.960
let's just say like we have a 300 by 300 image

07:12.960 --> 07:14.760
in terms of size in pixels

07:14.760 --> 07:17.400
then you have 300 squared number of pixels.

07:17.400 --> 07:19.170
That's a huge number.

07:19.170 --> 07:20.890
And therefore feature detectors

07:22.020 --> 07:24.540
will reduce the size of the image,

07:24.540 --> 07:27.750
and therefore stride of two is actually beneficial.

07:27.750 --> 07:29.970
But then the question is, do we lose information?

07:29.970 --> 07:31.950
Are we losing information

07:31.950 --> 07:34.500
when we're applying the feature detector?

07:34.500 --> 07:37.320
Well, some information we are losing, of course

07:37.320 --> 07:40.710
because we have less values in our resulting matrix.

07:40.710 --> 07:43.350
But at the same time, the purpose of the feature detector

07:43.350 --> 07:44.820
is to detect certain features

07:44.820 --> 07:48.600
certain parts of the image that are integral.

07:48.600 --> 07:51.030
And so for instance, if you think about it this way

07:51.030 --> 07:53.970
like the feature detector has a certain pattern on it

07:53.970 --> 07:56.340
the highest number in your feature map

07:56.340 --> 07:57.960
is when that pattern matches up.

07:57.960 --> 07:59.820
In fact, the highest number you can get

07:59.820 --> 08:02.220
is in an now simplified example,

08:02.220 --> 08:05.580
is when the feature matches exactly.

08:05.580 --> 08:07.950
And you can see with that number four,

08:07.950 --> 08:10.560
we have in our feature map, that's exactly,

08:10.560 --> 08:12.150
so if you look over here,

08:12.150 --> 08:15.780
that's exactly where this feature detector,

08:15.780 --> 08:19.110
because there's only four ones in it matched perfectly.

08:19.110 --> 08:21.480
So you can see this part over here.

08:21.480 --> 08:23.430
So the feature was detected here.

08:23.430 --> 08:27.280
And as we discuss at the very start of this section

08:28.350 --> 08:31.530
that is features is how we see things,

08:31.530 --> 08:33.090
is how we recognize things.

08:33.090 --> 08:37.410
We don't look at every single pixel, so to speak

08:37.410 --> 08:40.380
in what we see on an image or in real life.

08:40.380 --> 08:41.820
We don't look at every single pic.

08:41.820 --> 08:45.298
We look at features, we look at the nose, the hats

08:45.298 --> 08:50.298
the feather, the the eyes under or the little black marks

08:51.180 --> 08:54.210
under the cheaters eyes to distinguish it

08:54.210 --> 08:57.648
between a cheater and a leopard, or the shape of the train,

08:57.648 --> 09:00.390
to distinguish it between a bullet train and a normal train

09:00.390 --> 09:01.223
and so on.

09:01.223 --> 09:03.240
So we don't look at everything, we look at features

09:03.240 --> 09:04.650
and that's what we are preserving

09:04.650 --> 09:08.520
and that's what the feature map helps us preserve actually.

09:08.520 --> 09:12.600
That's what it allows us to bring forward

09:12.600 --> 09:15.270
and get rid of all of the unnecessary things

09:15.270 --> 09:17.520
that even as humans, we don't process this.

09:17.520 --> 09:20.873
So much information going into your eyes

09:20.873 --> 09:24.270
at any given time, like gigabytes of information

09:24.270 --> 09:27.870
if you look at every single dot, if not terabytes

09:27.870 --> 09:30.420
of information going into your eyes per second.

09:30.420 --> 09:32.730
And still we're able to process that

09:32.730 --> 09:36.000
because we get rid of what is unnecessary only focus

09:36.000 --> 09:37.020
on the important features.

09:37.020 --> 09:38.940
Features are important to us.

09:38.940 --> 09:42.240
And that is exactly what the feature map does.

09:42.240 --> 09:44.670
So now moving on

09:44.670 --> 09:49.500
this is our input image and you, we create a feature map.

09:49.500 --> 09:50.730
So the front one

09:50.730 --> 09:52.740
let's say the front one is the one we just created

09:52.740 --> 09:54.300
but then how come there is many of them?

09:54.300 --> 09:56.980
But we create multiple feature maps

09:58.230 --> 10:00.600
because we use different filters, right?

10:00.600 --> 10:03.000
And that's another way that we preserve

10:03.000 --> 10:03.840
lots of the information.

10:03.840 --> 10:05.850
So we don't just have one feature map

10:05.850 --> 10:08.320
we look for certain features and then

10:09.300 --> 10:12.330
or basically the network decides through its training.

10:12.330 --> 10:13.410
And this is something we'll discuss

10:13.410 --> 10:14.460
towards the end of this section.

10:14.460 --> 10:15.570
Through its training

10:15.570 --> 10:18.930
it decides which features are important

10:18.930 --> 10:21.660
for certain types or certain categories,

10:21.660 --> 10:22.620
and it looks for them.

10:22.620 --> 10:24.690
And therefore it'll have different filters.

10:24.690 --> 10:26.160
And we'll talk about filters just now

10:26.160 --> 10:27.810
but basically it'll apply these filters.

10:27.810 --> 10:29.550
So to get this feature map

10:29.550 --> 10:32.550
it applied a filter like the one we saw.

10:32.550 --> 10:33.550
But then to get this feature map it

10:33.550 --> 10:35.107
apply a different filter to get this feature map

10:35.107 --> 10:37.533
and apply a different filter and so on.

10:38.370 --> 10:43.370
And so basically it just creates these feature maps.

10:43.620 --> 10:45.330
And actually that's why personally

10:45.330 --> 10:49.590
I think the term feature detector is better than filter.

10:49.590 --> 10:52.950
So remember over here we have this filter,

10:52.950 --> 10:55.080
which we also can call a feature detector.

10:55.080 --> 10:57.780
Well actually the word feature detector

10:57.780 --> 10:59.460
I think is better suited.

10:59.460 --> 11:03.334
And the reason for that is that's what the purpose is.

11:03.334 --> 11:06.510
We don't wanna just filter out our image,

11:06.510 --> 11:08.895
but even though that's the whole

11:08.895 --> 11:10.230
that's the same just question of terminology.

11:10.230 --> 11:12.503
But basically we want to detect features.

11:12.503 --> 11:14.980
In this layer, we're going to,

11:14.980 --> 11:18.090
or in this feature map we've detected

11:18.090 --> 11:20.180
where certain features are in the image.

11:20.180 --> 11:21.810
In this feature map we've detected

11:21.810 --> 11:23.100
where certain other features are,

11:23.100 --> 11:25.380
where a certain specific feature is located.

11:25.380 --> 11:27.840
And this feature map we've detected

11:27.840 --> 11:31.410
where a certain other feature is located on the image.

11:31.410 --> 11:33.390
So that's what we are doing.

11:33.390 --> 11:34.650
And let's have a look at a couple of examples.

11:34.650 --> 11:39.650
So here we're using, and this is from gib.org

11:40.530 --> 11:44.430
their documentation, it's a free like of kind of tool

11:44.430 --> 11:48.690
like paint and you can use it to adjust your images

11:48.690 --> 11:49.560
or work with your images.

11:49.560 --> 11:52.500
But basically they have some valuable examples

11:52.500 --> 11:53.580
in their documentation.

11:53.580 --> 11:57.150
And here they have a picture of the Taj Mahal

11:57.150 --> 11:59.850
and you can choose which filter you want to apply.

11:59.850 --> 12:01.560
So if you download this program

12:01.560 --> 12:02.790
and you upload a photo into it

12:02.790 --> 12:06.660
and then you can actually start a convolution matrix

12:06.660 --> 12:07.590
and apply filters

12:07.590 --> 12:11.730
and you will see that these things, these convolution matrix

12:11.730 --> 12:15.240
I actually applied in image processing and design and so on.

12:15.240 --> 12:16.830
So let's have a look at what we get.

12:16.830 --> 12:19.470
So if we apply this filter five in the middle

12:19.470 --> 12:21.660
minus one, minus one, minus one minus one

12:21.660 --> 12:23.790
you can see that it sharpens the image.

12:23.790 --> 12:26.880
And yeah, so this is

12:26.880 --> 12:28.980
it's quite intuitive if you think of it.

12:28.980 --> 12:31.830
So five is the pixel, the main pixel,

12:31.830 --> 12:36.570
like in the middle of the filter or the feature detector.

12:36.570 --> 12:38.280
And then minus one, minus one, minus one

12:38.280 --> 12:42.390
just you kind of like reduces the pixels around it.

12:42.390 --> 12:47.010
In an intuitive sense then blur.

12:47.010 --> 12:50.400
So basically it takes equal significance

12:50.400 --> 12:53.340
gives equal significance to all of the pixels

12:53.340 --> 12:54.600
around the one in the center

12:54.600 --> 12:57.060
and therefore it combines them together

12:57.060 --> 12:59.070
and you get a blur edge in hands.

12:59.070 --> 13:02.610
So here you can see that minus one and one

13:02.610 --> 13:03.900
and then you get zeros, right?

13:03.900 --> 13:08.900
So you delete, remove the pixels around the main one

13:09.300 --> 13:12.120
in the middle and you only keep this one at a minus one.

13:12.120 --> 13:13.020
And it gives you an edge.

13:13.020 --> 13:16.320
This one's a bit harder to understand how it works.

13:16.320 --> 13:18.360
Like probably harder just to think

13:18.360 --> 13:20.940
of it intuitively edge detect, right?

13:20.940 --> 13:23.550
So this one probably makes more sense, right?

13:23.550 --> 13:27.580
You take the middle one, you reduce the middle one

13:29.196 --> 13:32.520
probably like the strength of the middle pixel.

13:32.520 --> 13:37.110
And then you look for the ones, you look for these ones

13:37.110 --> 13:42.090
you increase the strength of the ones around them.

13:42.090 --> 13:43.440
So you have the ones there.

13:44.670 --> 13:47.190
Yeah, so that gives you like an edge text

13:47.190 --> 13:48.990
and you can see what you get there.

13:48.990 --> 13:50.700
And boss another one.

13:50.700 --> 13:55.700
So the key here is that it's asymmetrical

13:55.710 --> 13:58.170
and you can see the image becomes asymmetrical as well.

13:58.170 --> 14:01.410
So you've got like that kind of feeling

14:01.410 --> 14:03.750
that it's standing out towards you.

14:03.750 --> 14:06.570
And that's what you get when you have like minuses here

14:06.570 --> 14:08.460
And pluses here, again, this is very

14:08.460 --> 14:10.050
this is getting a bit technical now,

14:10.050 --> 14:11.460
but at least we can get

14:11.460 --> 14:12.810
some kind of intuitive understanding.

14:12.810 --> 14:14.190
Lets just go quickly through them again.

14:14.190 --> 14:18.360
So there's sharpen, there's blur, there's edge enhance

14:18.360 --> 14:20.880
there's edge detect, there's emboss.

14:20.880 --> 14:23.010
And so as you can see, these are great examples

14:23.010 --> 14:27.300
of the same image, but we are getting feature maps.

14:27.300 --> 14:29.220
So we use different feature detectors

14:29.220 --> 14:31.860
to get different feature maps of the same image.

14:31.860 --> 14:35.610
And therefore now we have lots of this versions

14:35.610 --> 14:39.840
of this image where in each one we've tried

14:39.840 --> 14:41.160
to detect certain things.

14:41.160 --> 14:45.049
These terms, they're not applicable to us.

14:45.049 --> 14:47.460
Like I said, like in boss is probably not applicable

14:47.460 --> 14:50.100
to us in terms of convolutional neural networks.

14:50.100 --> 14:51.630
But edge detect that's important.

14:51.630 --> 14:53.280
We want to detect the edges,

14:53.280 --> 14:56.520
edge enhance probably not, blur, sharpen.

14:56.520 --> 14:58.530
So certain things like edge detect

14:58.530 --> 15:02.460
is probably the most important one for our type of work.

15:02.460 --> 15:04.140
And in terms of understanding,

15:04.140 --> 15:06.360
like computers they will decide for themselves

15:06.360 --> 15:07.980
their neural network will decide for itself

15:07.980 --> 15:09.030
what's important, what's not.

15:09.030 --> 15:12.900
And it probably won't be even recognizable to the human eye.

15:12.900 --> 15:14.910
You won't be able to understand what those features mean

15:14.910 --> 15:16.800
but the computer will decide.

15:16.800 --> 15:19.830
And that's the beauty that of neural networks

15:19.830 --> 15:23.190
that they can process so many different things

15:23.190 --> 15:26.640
and understand without even having that intuition

15:26.640 --> 15:29.430
without having that explanation why

15:29.430 --> 15:32.400
they will understand which features are important to them

15:32.400 --> 15:35.258
whether we have a name for them or not,

15:35.258 --> 15:37.740
that's an irrelevant question

15:37.740 --> 15:39.960
for their artificial neural network.

15:39.960 --> 15:44.070
And my favorite one, here's a image of Jeffrey Hinton

15:44.070 --> 15:49.003
photo of Jeffrey Hinton passed through one of these filters.

15:50.910 --> 15:53.070
All right, so that brings us to the end of today's tutorial.

15:53.070 --> 15:55.440
I hope you enjoyed learning about convolution.

15:55.440 --> 15:58.680
The key takeaway is that a convolution,

15:58.680 --> 16:00.450
the primary purpose of a convolution

16:00.450 --> 16:04.590
is to find features in your image using the feature detector

16:04.590 --> 16:06.300
put them into a feature map.

16:06.300 --> 16:08.310
And by having them in a feature map,

16:08.310 --> 16:13.050
it still preserves the spatial relationships between pixels

16:13.050 --> 16:15.690
which is very important for us to,

16:15.690 --> 16:17.160
because if they're completely jumbled up,

16:17.160 --> 16:19.320
then we've lost the pattern.

16:19.320 --> 16:21.600
And at the same time, it's important to understand

16:21.600 --> 16:25.080
that most of the time the features a neural network

16:25.080 --> 16:29.400
will detect and use to recognize certain images

16:29.400 --> 16:31.800
and classes will mean nothing to humans.

16:31.800 --> 16:33.090
But nevertheless, they work.

16:33.090 --> 16:34.410
And that's what convolution is.

16:34.410 --> 16:36.270
And I look forward to seeing you on the tutorial.

16:36.270 --> 16:38.163
Until then, enjoy Deep Learning.
