【吴恩达】神经网络&深度学习-学习笔记【二】

神经网络-深度学习 - 吴恩达 - 第二课

一、改善神经网络

1.1 数据集划分

image-20220416000024200

早期 70/30 或者 60/20/20

大数据时代:尽量缩小验证集数量

要保证数据集和验证集合来自同一分布

也可以没有独立的测试集(不需要无偏性能估计)

1.2 方差/偏差

image-20220416000723281

以上三图分别对应高偏差,低偏差和低方差,高方差

过拟合会出现验证集效果不好,训练集效果很好

image-20220416001158052

1.3 设计思路

对于一个系统,要选用的神经网络架构测试步骤:

image-20220416002001175

主要是要搞明白当前是高偏差的问题还是高方差的问题

当下的大数据时代,有办法实现改变偏差的时候对方差没有太大影响,反之亦然。

1.4 L2正则化

$\min _{w, b} J(w, b)$

  • 线性回归中的正则化:

image-20220416102320123

现在用的比较多的是L2正则化

  • 神经网络中的正则化

image-20220416103008570

从最后化简出来的式子不难看出,lambla范数可以控制权重矩阵的大小

为了使损失函数接近0,当lambla越大,相应的权重矩阵约接近0

  • 为什么正则化可以减少方差(减小过拟合)?

lambla变大,实际上发生了:

image-20220416103911390

image-20220416104430652

​ 缺点:有可能需要尝试很多的正则化参数

1.5 Dropout正则化

image-20220416105446162

用代码实现:

image-20220416110814272

在测试阶段不应该用dropout。

为什么dropout能发挥作用?

可以设定单层的dropout参数防止特定的层过拟合,一般用在机器视觉领域,如果没有发生过拟合不推荐使用。

使用dropout后 J的代价函数 会不再被明确定义,出现错误时候会很难调试

image-20220416143937878

1.6 其他正则化方法

  • 扩增数据集:翻转/裁剪/扭曲/强变形图片,可以增大数据集,降低过拟合

  • early stop:同时绘制训练集和验证集,在验证集的代价函数开始上升时停止学习

​ 缺点:无法保证这个时候学习得到的 J 最小

image-20220416144759728

1.7 归一化

image-20220416145843153

为什么要使输入数据归一化?

当输入的特征x数据不是归一化的时候,所需要的权重w都是不一行的,会影响迭代速度

(实际上就是保证数据的输入范围基本要一样)

image-20220416150341957

1.8 梯度消失&梯度爆炸

使用线性激活函数:

当权重矩阵比1大一点->梯度爆炸

当权重矩阵比1小一点->梯度消失

image-20220416163859430

权重的初始化(将权重设置成标准的正态分布)

image-20220416164653634

其实就是通过这个公式,设定权重矩阵的初值(和输入数据的维数挂钩)

目的:设定权重矩阵,使输出既不会增长过快,也不会太快下降到0.

梯度检验时候,使用双边偏差:

image-20220416165708046

梯度检验步骤:

  • 第一步,将所有量转化为向量

image-20220416170218381

  • 第二步,通过双边偏差求导(通过循环对J中的每个参数进行双边偏差):

image-20220416170807518

  • 第三步,计算用双边偏差得到的结果和直接求偏导得到的数值的差别(使用范数判断,分母是防止数值太大或者太小,实际上就是三角验证,分子表示第三条边长度,分母表示剩余两边长,这样子比值总是落在[0,1]之间):

image-20220416171324290

前向传播:foreprop 反向传播 :backprop

通过梯度检验,进行debug,发现系统中的错误。

注意事项

(1. 不要在训练中使用梯度校验,只应该在debug中用梯度校验)

(2. 当在计算过程中发现某层数值差距很大时候,有可能这层存在bug)

(3. 如果使用了正则化,梯度检验时候代价函数需要包含正则化项)image-20220416172127453

(4. dropout中不应该使用梯度检验,或者把keep.prop设置为1)

二、不同的梯度下降法

2.1 Mini-batch

现有训练方式的问题:必须全部处理完一批训练集才能进行下一层训练。

解决方法,使用Mini-batch(子集)之前的整体训练方式成为 Batch

image-20220416173107054

mini-batch 的一代(1 epoch 遍历一遍训练集集)可以完成1000次梯度下降(下面例子中)

batch的一代(1 epoch 遍历一遍训练集集)只能完成1次梯度下降

image-20220417163112958

使用batch和mini-batch时,成本函数的下降趋势:

image-20220417163537179

mini-batch的size选择:

两个极端情况-size=m和size=1:

image-20220417163845480

image-20220417163859732

对于mini-batch来说,局部样本有可能导致优化方向不一定向着收敛,所以会产生很多噪声。

image-20220417164031082

在现实中采用的大小介于1~m之间。

  • 当大小为m时候,每次迭代需要大量的训练样本,耗时长

  • 当大小为1时(随机梯度下降法),每次处理一个样本,可以减少噪声,但是舍去了所有向量化的优势,时间也很长

现实中选择一个不大不小的mini-batch的size ,达到快速处理并且效果最好

如何选择?

  • 样本集少的时候:直接使用batch(一般小于2000个)
  • 一般mini-batch的size(64,128,256,512)选二次方,方便计算机处理
  • 使mini-batch适合CPU/GPU内存(防止爆内存)

2.2 指数加权移动平均

什么是指数加权移动平均(例子)

image-20220417165127112

通过前一天的90%+今天的10%作为平均值,画出红线

如果改变权重时:

image-20220417165727456

为什么名称中含有指数?

权重的n次方后会下降到接近1/e,1/e在自然数中和(1-a)^(1/a)相等,所以等效于平均了1/1-a天的天气。

image-20220417170945163

如何实现?

优点:占用内存极小(计算中只需要占用单行数字存储)

缺点:不一定精准

image-20220417171905591

加权平均的偏差修正:

(偏差修正是防止刚开始的时候,数据量少导致的平均值不准确,实际上就是把开始处变小一点)

image-20220417172356034

2.3 (Momentum)动量梯度下降优化算法

image-20220417190430281

将上面的指数加权移动平均应用在梯度下降法中,主要是代替原来梯度下降中的微分项,用平均代替原值,可以降低微分项的震荡,加快收敛。(一般在迭代10次后初值影响就不大了,因此在实际应用中一般不加偏差修正)

原来的梯度下降法就变成了:

image-20220417191108304

betla一般取0.9,效果不错

2.4 RMSprop优化算法

这种算法从动量梯度法改进而来:

image-20220417192543451

可以降低震荡的幅度,并且可以在调整学习率的同时,避免增大b的震荡,加快收敛

2.5 Adam优化算法

结合了Momentum和RMSprop:

image-20220417193601320

该算法广泛运用于许多的神经网络结构中。

经验取值:

image-20220417193723320

2.6 学习率衰减

image-20220417194037864

用同一种学习率,到最后会出现没办法完全收敛的情况。

再设定一个超参数,控制alpha学习率

  • 学习率衰减法1:

image-20220417194410197

  • 学习率衰减法2:

指数衰减:

image-20220417194641395

  • 学习率衰减法3:

image-20220417194729479

  • 学习率衰减法4:

离散衰减:

image-20220417194747289

也可以手动控制衰减(模型数量小时有用)

2.7 局部最优问题

有可能遇到鞍点

image-20220417195257980

在高维空间中,鞍点需要有左右的扰动离开局部最优点

三、超参数调试、Batch正则化和程序框架

3.1 如何调试

神经网络中的所有参数(中括号代表重要性):
$$
\alpha&学习率【1】\
\beta&Momentum动量梯度优化参数【2】\
\beta_1,\beta_2,\epsilon&Adam优化算法中的参数【4】\
layers&网络层数【3】\
hidden-units&隐含层节点数【2】\
learning-rate-decay&学习率衰减函数【3】\
mini-batch--size&minibatch的大小【2】
$$
PS:
$$
\beta_1,\beta_2,\epsilon一般直接取值0.9,0.999,10^{-8}
$$

  • 方形法(不要用左图网格):

    二维量

image-20220417201519596

  • 立方体法:

    三维量

image-20220417201602941

​ 选出较好的区域,继续取点:

image-20220417201701028

3.2 选取超参数范围

用对数坐标尺可以快速确定超参数范围

给alpha取值:

image-20220417202547347

给belta取值:

转换为取(1-belta)

image-20220417203231477

离1近标尺取小,离1远标尺取大

3.3 超参数实际调整方式

image-20220417203845562

Panda法:只训练一组,根据时间不断调整参数(算力不够或者数据过多)。

Caviar法:同时训练多组,取出最好的一组(需要有强大的并行算力)。

3.4 归一化网络的激活函数

image-20220417205143036

image-20220417205555895

两个参数y,b不是超参数,实际上就是控制归一化后结果的缩放平移

比如激活函数为sigmod,可以控制z(i)使之脱离线性区域:

image-20220417205641484

在激活函数前进行归一化(BatchNum)

image-20220417210226956

在batch中,b参数可以先省略,因为归一化后除平均值,该参数也就没有了

在现实中,经常也和mini-batch一起用

image-20220417212104634

归一化的作用:加快学习速率

3.5 归一化加快学习速度的原因

归一化可以降低各层间的影响(都回到均值0方差1的情况)

image-20220417213733989

batch归一化有类似于轻微正则化的效果,通过均值和方差限制了参数的变化。

3.6 实践中的batch归一化

均值和方差在mini-batch中的计算:

是在整个mini-batch上计算出来的,包含了一定数量的样本。

image-20220417214445617

在测试集中需要逐个处理数据。

3.7 Softmax回归

softmax激活函数:

image-20220417222625561

决策边界:

image-20220417222918280

posted @   伦敦烟云  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示