status
type
date
slug
summary
tags
category
password
icon
Total Videos
Link
Video Duration

0:00 简介

为什么network的架构能让结果变得更好?下面让我以卷积神经网络(CNN)为例来解释。

0:40 图像分类

假设一个模型的输入(图像)都是相同的大小,label是one-hot vector,而模型的输出是softmax转换出的概率,Loss则由Cross-entropy来定义。
notion image
接下来的问题是图像是怎么变成模型的输入的?
对于计算机来说,一张图像是一个三维的Tensor。三个维度分别为长、宽和3个channels,三个channels代表了RGB三种颜色的强度,也就是说长和宽规定了图像的分辨率,channels规定每个像素点的RGB三色。
notion image
下一步是把这个三维的Tensor变为一个向量,将这个Tensor拉直,其中每一个数值代表了某一维的某一个位置的某一个颜色的强度。
notion image
对于一个最普通的全连接的神经网络,我们把拉直后的向量输入进去,因为每一个feature都要通过每一个neuron所以weight会非常的大,这会更容易出现overfitting问题。所以我们需要限制模型的feature。

7:35 观察1

对于图像识别,神经网络只需要识别出物体的某些特有组件(pattern),因此并不是每个feature都要通过每一个神经元。
notion image
notion image
一个经典的方法是给每个神经元划定一个receptive field,将这个区域的Tensor拉直为one-hot vector,然后让这个向量的数据通过神经元传递给下一个神经元。
而receptive field的具体划分是人为指定的,并且receptive field的范围是可以重叠的,并且一个receptive field 可以有多个不同的神经元,甚至每个receptive field的范围和形状都可以不一样,甚至可以给每个receptive field 单独指定一个channels,一切都取决于人们对于问题的理解。
notion image

15:39 简化1 - 经典设置

一个经典的receptive field的安排方式如下,这种方式下,机器会读取全部的channels所以,我们只要为receptive field划定长和宽就可以了。这个长和宽合起来叫做kernel size
一般我们的kernel size都设置为3x3,这就引出一个问题:难道我们需要找到的pattern都只用3x3这么小的范围就能找到吗?这个问题的答案在后面。
notion image
每一个receptive field都会通过一组的神经元(常见64,128个),以确保神经元能够检测到pattern。
对于不同的receptive field我们会让它们之间有一定的区域重叠,而重叠的范围由 stride 超参数控制,这也是为了确保神经元能够检测到pattern,因为如果不重叠,可能会出现刚好一个pattern被两个不同的receptive field截断,反而不能识别的情况。但此时又出现了一个问题,即receptive field的范围超出了图像范围,这个时候我们需要对图像做padding,即用各种方法去补全图像缺少的那一条信息。
通过这种方法,我们让一张图像完全被receptive field覆盖

20:27 观察 2

notion image
对于一张图片来说,相同的pattern可能出现在不同位置,如果我们在每个receptive field都安排了一个神经元专门检测某一个特定的pattern(比如鸟嘴),那毫无疑问我们是能识别出来的。但问题是我们真的需要在每一个receptive field上安排这样一个神经元吗?
notion image
一个简化的方法是,让不同的receptive field的神经元之间parameter sharing(共享参数),如上图,让weight,bias等参数共享。

25:07 简化 2 - 经典设置

notion image
一个经典的参数共享方法是,让不同的receptive field的每一个神经元的参数一一对应,也就是说对于所有的receptive field,我们都只有一组参数而已。而这组参数叫做filter。

26:21 卷积层的优势

notion image
上面提到的两种简化方法合在一起称为卷积层(Convolutional Layer),它的弹性通过接收场(receptive field)和参数共享(Parameter Sharing)限制的比全连接层要低的多,而有用卷积层的神经网络就称为卷积神经网络(CNN)
从图中可以很明显的看出来,卷积层的model bias要比全连接层大,但这并不是坏事,因为弹性的增大容易带来overfitting问题,而卷积层是专门为图像设计的,所以它在图像处理上的能力要比全连接层高的多,也就是说全连接层大而全,而卷积层小而精。

另一个角度介绍CNN

notion image
卷积层的里面有很多filter,它们的大小是3 x 3 x channel的Tensor,也就是未知参数,需要通过Gradient Descent来找出来。channel为3是彩色照片,为1是黑白照片。
现在我们假设filter已经找出来了,并且是一个channel为1的黑白照片。接下来就是通过filter来匹配pattern。我们将filter匹配到图像的左上角,相乘做内积。然后往右边移动stride的距离,继续做内积;横向移动完之后,再往下移动stride的距离,算内积,重复上面的步骤,直到filter匹配到右下角。
notion image
可以看到,filter匹配到的pattern的内积数值是最大的。接下来将所有的filter都走一遍上面的流程,我们又得到一组数值。
notion image
也就是说我们有多少filter就有多少组数值,如果我们有64个filter我们就有64组数值,这一群数字称为Feature Map

35:06 多层卷积层

notion image
feature map可以看成是一张新的图片,但是channel不再是RGB,而是filter的数目。下一步我们将这个“新”图片输入下一个卷积层,这个卷积层也有一堆的filter,不过这个filter的大小是3 x 3 x 64,是64维的,用来匹配作为输入的feature map。
notion image
从图中可以看出filter一直设置为3x3,这不会导致神经元匹配不到pattern,因为每一个新的3x3的filter实际上关注到了上一个卷积层的9个3x3的filter所关注到的范围。

37:41 对比两个版本的CNN介绍

notion image
对比两个版本的CNN介绍,我们第一个版本提到的parameter sharing其实就是第二个版本里的filter。weight就是filter中的参数(各种颜色的线和圆圈对应)。bias在第二个版本也是存在的,只不过前文忽略了。
notion image
所谓convolution,就是指filter扫过一张图片,这件事就是不同的receptive field和神经元之间共用参数,这组共用的参数就叫做filter。
Neuron 版本
Filter 版本
每一个神经元只考虑一个receptive field
一组的filter检测小的pattern
不同的receptive field的神经元之间共享参数
每一个filter要扫过整张图片

40:02 观察 3

notion image
对于一张图片,我们可以对他做子采样,去掉偶数列和奇数行,这样图片变小了,但表达的内容不会改变。这就是Pooling,它不是一个Layer,不需要learn任何东西,它和Sigmoid,ReLU这些激活函数差不多,只是一种操作,所有的行为都已经固定好了,不需要根据data学任何东西。

Max Pooling

每一个filter都会产生一堆新的数字,作Pooling时就会把这些数字分组(如下图是2x2一组),每一组会选择一个代表,以Max Pooling就是选择最大的那个数字,分组的大小和每组选择的代表都是自己指定的。
notion image

42:06 Convolutional Layers + Pooling

notion image
一般Pooling会和卷积层连用,如上图做了一次卷积后再Pooling,将4x4的图片变成了2x2的图片。
Pooling会对我们的模型带来一点危害,因为对于很小的pattern,它不能完成的非常好。因此最近的模型也开始不再使用Pooling,因为Pooling最初就是用来减少运算量的,但随着现在显卡性能的快速提升,Pooling已经不是必要的组件了。

完整的CNN

notion image

44:50 应用:AlphaGo

notion image
AlphaGo下围棋也是使用的DNN,将棋盘转换为19x19的矩阵,黑子表示为1,白字为-1,无子为0。通过神经网络来预测下一步移动位置是一个19x19种情况的分类问题,并且CNN要比完全连接网络更优秀。
这是因为CNN将棋盘看作一张19x19的图片,channel为48。

48:19 为什么下围棋可以用CNN

下围棋与图像识别的共同点在于:
  1. 一些pattern对于整张图片来说很小
  1. 相同的pattern可能出现在不同的位置
不同点在于:
  1. 围棋不能使用Pooling
⚠️
所以我们不能刻舟求剑,所有的应用都需要我们对于问题具有足够的了解,不能照搬

CNN的缺点

CNN并不能识别放大,缩小,旋转之后的图片,这是因为对于CNN来说经过这些操作之后的图片拉直为向量后数值都是不同的。所以在训练时我们需要做data augmentation,这是一个将图片放大旋转后在让CNN识别的过程,让CNN能认识到这张图片放大旋转后是什么样子。
3.2 为什么用了验证集 (validation set) 结果还是过拟合(overfitting)了呢?2.6再探宝可梦、数码宝贝分类器-浅谈机器学习原理
Loading...