本周主要进行了深度学习的学习,阅读论文,继续完成 3D 人体项目
学习内容
1.3D 人体重建项目
2.阅读论文
3.吴恩达深度学习
学习时间
2023.7.25 — 2023.7.28
学习笔记
3D 人体重建项目
与前端可以成功交互,正在与前端定义接口相关规范。
以下是本周主要完成的代码:
论文
本周粗略过了一遍本论文,正在进行精读,目前精读到第二章。
Introduction
第一段:说明了有很多的 2D 与 3D 局部描述符的生成方式,并列举了一些经典的例子。
第二段:说明 2D 与 3D 描述符所在的空间不一样,不易完成匹配。
贡献:新型学习跨域描述符 (LCD),一个数据集,以及 LCD 对应的性能验证程序。
Related Work
局部描述符在很多领域都有所涉及,包括 SfM,SLAM,姿态估计等。
2D 描述符:手作描述符——端到端 Siamese 架构——在本架构基础上进行距离匹配时,使用欧式距离,本文工作就是建立在这个思想上,实际是学习一个跨域描述符。接着到了三元组网络,输入的内容是三个图像块。本文工作旨在学习 2D 和 3D 描述符的共享潜在空间,输入也是图像块。
吴恩达深度学习
1.5 为什么正则化有利于预防过拟合呢?(Why regularization reduces overfitting?)
当每个隐藏层的 w 参数太大时,会发生过拟合现象,因为 w 中的数据过大,表示对样本的影响很大,此时需要把 w 调小。
当 w 偏小的时候,会发生高偏差现象,因为 w 太小,表示隐藏层对样本的影响很小,即使这个网络再深,也会是一个高度线性的函数。原因:w 小—— z 小——激活函数在该点的斜率接近线性。
如下,λ 如果过大,那么 w 就会接近 0,就会发生高偏差的现象。
J
(
w
,
b
)
=
1
m
∑
i
=
1
m
L
(
y
^
(
i
)
,
y
(
i
)
)
+
λ
2
m
∑
l
=
1
L
∣
∣
w
[
l
]
∣
∣
F
2
J(w,b)=\frac{1}{m}\sum^{m}_{i=1}L(\hat{y}^{(i)},y^{(i)})+\frac{\lambda}{2m}\sum^{L}_{l=1}||w^{[l]}||^{2}_{F}
J(w,b)=m1i=1∑mL(y^(i),y(i))+2mλl=1∑L∣∣w[l]∣∣F2
通常情况下,让 λ 处在一个合适的位置,这样有利于 Just Right 样本。
1.6 dropout 正则化(Dropout Regularization)
对每层的节点部分随机保留(保留多少可以自己设置概率),反向随机失活(inverted dropout)是比较常用的方法。
方法:按概率 keep-prob 随机生成一个与该层 a3 等规模的一个 01 矩阵 d3,然后与本层 a3 逐元素相乘,获得一个新的矩阵。得到的 a3 需要除以 keep-prop (因为部分结点失活会导致整体数值下降,这样做可以使 a 的值期望不变)
以下是具体的实现方法:
keep-prob = 0.8
d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep-prob
a3 = np.multiply(a3, d3)
a3 /= keep-prob
1.7 理解 dropout(Understanding Dropout)
由于每个结点都有可能被清除,因此不能依赖于任何一个特征,通过传播所有权重,dropout 将产生收缩权重的平方范数的效果(类似 L2 正则化),达到预防过拟合的效果。
对于容易产生过拟合的层,我们可以把 keep-prob 的值缩小,对于不容易产生过拟合的点,或者该层节点较少(比如输出层,只有一个节点),就可以适当放大,甚至设为 1。
dropout 在 CV 领域使用的更多,因为输入的像素太多,导致样本不足,容易产生过拟合。
缺点:代价函数 J 不再明确定义,在检查梯度下降的性能时,很难复查,不易计算。
1.8 其他正则化方法(Other regularization methods)
除了使用正则化,还可以使用数据扩增,early stopping 等方法。
数据扩增:这里并不是指增加数据集,而是指处理你的数据集,比如将你的图片水平翻转,裁剪等行为来进行数据扩增。这种行为代价几乎为 0,但是会有一些对抗性代价。可作为正则化方法来使用。
Early Stopping:在进行迭代的过程中,代价函数值往往会下降,而验证集误差往往会先下降,再上升。要赶在开始上升之前提前停止训练,以保证训练不会过拟合。最终得到一个 w 值中等大小的 Frobenious 范数。
es 的缺点:我们在训练中往往会遇到两个问题:代价函数的下降(梯度下降等算法)与防止过拟合(正则化等方法)。而 es 不能独立地处理这两个问题。提前停止,会导致代价函数值不够小,与此同时又不想发生过拟合,这会导致问题变得复杂。
如果使用 L2 正则化,它的缺点是要反复尝试 lambda 的值,计算代价太高。
正交化:减少方差(variance)时使用,思路是在一个时间做一个任务,后续会讲。
1.9 归一化输入(Normalizing inputs)
归一化是为了更好的优化数据集。
归一化包括以下两步:
零均值:顾名思义,让所有样本在单独的方向上的平均值为 0。
归一化方差:计算所有特征的方差,然后让所有数据除以这个方差。
如果不进行归一化输入,在优化的时候,比如使用梯度下降,方向会比较难找,而且步长也不大;而归一化后,代价函数更加圆滑,进行迭代的速度会变快,如下图。
μ
=
1
m
⋅
∑
i
=
1
m
x
(
i
)
σ
2
=
1
m
⋅
∑
i
=
1
m
(
x
(
i
)
)
2
\mu=\frac{1}{m}\cdot\sum_{i=1}^{m}x^{(i)}\\ \sigma^{2}=\frac{1}{m}\cdot\sum_{i=1}^{m}(x^{(i)})^{2}
μ=m1⋅i=1∑mx(i)σ2=m1⋅i=1∑m(x(i))2