文章目录
Task3-1:《深度学习详解》- 3.7 批量归一化(8页+31分钟)
Part01:视频笔记
Batch Normalization(批量归一化):
当error surface比较崎岖时,可以绕过去,也可以考虑把山铲平;
即使误差表面像碗状,是一个convex function,想尽可能减小损失值也很困难
给 w 1 w_1 w1增加一点变化 Δ w 1 \Delta w_1 Δw1,损失值也会有相应的变化:
什么时候 Δ L \Delta L ΔL变化会很大:
- 当x(输入)比较小的时候;反之,如果x比较大,那么L的变化就比较小;
此时,在不同方向上斜率/坡度差异很大;
——让不同的dimension上的斜率都很小
Feature Normalization(特征归一化):
x
~
i
r
←
x
i
r
−
m
i
σ
i
\tilde{x}_i^r \leftarrow \frac{x_i^r-m_i}{\sigma_i}
x~ir←σixir−mi
归一化计算完成后,这个维度上的数值均值为0,方差是1——形成一个比较好的误差表面;
可以给
w
i
w^i
wi、
Z
i
Z^i
Zi也使用归一化;
归一化在激活函数前后操作差距不大;
计算 Z i Z^i Zi的归一化:
μ
=
1
3
∑
i
=
1
3
z
i
\mu =\frac13 \sum_{i=1}^3z^i
μ=31i=1∑3zi
σ
=
1
3
∑
i
=
1
3
(
z
i
−
μ
)
2
\sigma = \sqrt{\frac13 \sum_{i=1}^3 (z^i - \mu)^2}
σ=31i=1∑3(zi−μ)2
z
~
i
=
z
i
−
μ
σ
\tilde{z}^i = \frac{z^i-\mu}{\sigma}
z~i=σzi−μ
μ
\mu
μ和
σ
\sigma
σ是由
z
i
z^i
zi计算出来的,当
z
1
z^1
z1发生变化,后续的
z
~
i
\tilde{z}^i
z~i以及在之后的数据都会受到影响发生变化;
新的问题:数据集很大,GPU放不下那么多数据去计算 μ \mu μ和 σ \sigma σ;
适用于batch size比较大的时候(如果batch size较小,无法计算出准确的
μ
\mu
μ和
σ
\sigma
σ)
在
z
~
i
\tilde{z}^i
z~i的基础上进行新运算:
z
^
i
=
γ
⊙
z
~
i
+
β
\hat{z}^i=\gamma \odot \tilde{z}^i + \beta
z^i=γ⊙z~i+β
其中
⊙
\odot
⊙代表逐元素相乘,而
γ
\gamma
γ和
β
\beta
β可以被视作网络参数,可以被学习出来
初始化设
γ
\gamma
γ是一个值全为1的向量,而
β
\beta
β是一个初始值全为0的向量;
测试时的批量归一化:如果测试时没有批量(batch),又该如何计算;
PyTorch处理方法:由训练时的每个批量的
μ
\mu
μ和
σ
\sigma
σ来计算moving average(移动平均):
μ
ˉ
←
p
μ
ˉ
+
(
1
−
p
)
μ
t
\bar{\mu} \leftarrow p\bar{\mu}+(1-p)\mu^t
μˉ←pμˉ+(1−p)μt
p是一个超参数(需要提前设定)
Internal Convariate Shift(内部协变量偏移):
批量归一化使得
a
a
a和
a
′
a'
a′有近似特征,但一些实验数据并不支持;
但批量归一化可以改善error surface的崎岖形状;
Task3-2:《深度学习详解》- 4.1&2&3&4 卷积神经网络-上(8页+26分钟)
Convolutional Neural Network(CNN,卷积神经网络)
常用于Image Classification(图像识别)
流程:将一张图片输入进模型中,得到输出
y
y
y,将起于
y
^
\hat{y}
y^比较,不断优化模型
- y ^ \hat{y} y^的dimensions代表着这个模型最多可以识别多少种物品
如何将一张图片输入进模型中:
将图片视作一个3-D tensor(三维张量):长、宽和通道数(channel)
展开张量后每个数值代表着一个像素中某个通道的强度(intensity)
如果使用全连接层(Fully Connected Network),由于输入很多,那么类似于weight的参数也很多;
参数多会导致调用数据困难;
同时,较多的参数也会使得模型更具有弹性,容易导致训练过拟合;
识别一些关键图案(critical patterns):
不需要Nerual去识别完整的图片——不需要输入整张图片,只需要将图片的部分输入;
简化1:receptive field(每个神经元只需要关注小范围里的数据
receptive field(感受野):
不同神经元的感受野可以重叠,甚至可以相同;
可以只包含个别通道;
不一定是正方形,可以使长方形;
最经典的感受野:包含所有的通道——可以用长宽来描述感受野——kernel size;
Stride:(步幅)移动感受野的距离(不要太大),最好两两之间存在重叠;
Padding:(填充)有各种不同的填充方法;
——最终结果整张图片都被感受野覆盖
相似或者相同的图案出现在不同的区域:
要为每个感受野设置识别某一类别“A”的神经元(detector)吗?
简化2:让不同感受野共享参数(parameter sharing)——两个神经元的权重一样
但是同一感受野的不同神经元是不能共享参数的(否则输入、参数相同,模型输出也相同)
不同的感受野中相对应的神经元会进行参数的共享——这样的参数叫做滤波器(filter)
Task3-3:《深度学习详解》- 4.5&6&7&8 卷积神经网络-下(8页+30分钟)
Part01:视频笔记
卷积层的优势:
全连接层(弹性最大);
感受野(弹性降低);
参数共享(弹性进一步降低);
卷积层=全连接层+感受野+参数共享;
卷积神经网络有着很大的模型偏差(Model Bias)——专精于图像任务
而全连接层样样能行,样样不精;
特征映射(Feature Map):当一张图像通过卷积层中的滤波器时,就会产生一个特征映射。卷积层中多少个滤波器就生多少组数字。
filter的高度是对应输入图像的channel数;
不用扩大kernel size是否需要大一点来识别较大的物品:
可以通过叠加卷积神经网络的层数俩使其检测到较大的模式;
卷积层不同的描述方式:
Neuron Version | Filter Version |
---|---|
每个神经元只需要考虑一个感受野 | 有一组过滤器用于识别小型模式 |
不同感受野的对应神经元会共享参数 | 每个过滤器会和整张输入图片卷积操作 |
下采样(downsampling/subsampling):去除图像的偶数列和奇数行,使得新图像变为原来的1/4。
简化3:Pooling(汇聚)——Max Pooling(最大汇聚)
汇聚操作面向滤波器产生的一组数字,自由地将数字分为若干组,最大汇聚就是从每一组中选出最大的那个数字。
除了最大汇聚外,还有平均汇聚(mean pooling)
(卷积+汇聚)
×
n
\times n
×n+扁平化(flatten)+全连接层+softmax—>图像识别的模型