cs231n:Lecture 7: Training Neural Networks

一次性设置:
激活函数、预处理、权重初始化、正则化、梯度检查
训练动态:
监控学习过程、参数更新、超参数优化
评估:
模型集成、测试时增强、迁移学习

激活函数

sigmoid激活函数
- 将数字压缩到范围 [0, 1]
- 在历史上很受欢迎,因为它们具有作为神经元饱和“放电率”的良好解释。
但有三个问题:无梯度、输出y不是以0为中心,可能会影响原始数据分布、梯度大

tanh(x)
- 将数字压缩到范围 [-1, 1]
- 零居中(好)
- 仍会在饱和时破坏梯度 

relu
- 不饱和(在正区域)
- 计算效率非常高
- 在实践中比sigmoid/tanh收敛速度快得多(例如,6倍)
但是,输出不是零居中,一个烦恼:

leaky relu
- 不会饱和
- 计算效率高
- 在实践中收敛速度比sigmoid/tanh快得多!(例如,6倍)
- 不会“死亡”。

elu
- 具有ReLU的所有优势
- 输出更接近零均值
- 与Leaky ReLU相比具有负饱和区域
- 对噪声具有一定的鲁棒性

selu
- ELU的缩放版本,对深度网络效果更好
- 具有“自标准化”特性;
- 可以在没有批标准化的情况下训练深度SELU网络

Maxout “Neuron”
- 没有基本的点积形式 -> 非线性
- 推广了ReLU和Leaky ReLU
- 线性区域!不饱和!不死!
问题:每个神经元的参数数量翻倍 

数据处理

在实践中,你可能还会看到对数据进行中心化、标准化、主成分分析(PCA)和白化(Whitening)的方法。

权重优化:怎样选择好的权重?

当使用 \( W = \text{constant} \) 初始化权重时会发生什么?

使用常量初始化 \( W \) 意味着所有的权重都将被初始化为相同的常量值。这会导致神经网络中的所有神经元在初始时具有相似的输出,因为它们所拥有的权重相同。

这种初始化可能导致以下问题:

1. **对称性问题:** 如果所有的权重都相同,每个神经元在反向传播时将收到相同的梯度信号。这可能导致网络在训练过程中很难破坏对称性,使得每个神经元学到的特征都是相似的。

2. **信息瓶颈:** 如果初始时所有神经元都输出相似的值,那么在网络的后续层中,这些相似的值将传播,可能导致信息的瓶颈。

3. **训练困难:** 对称性和信息瓶颈可能导致网络在训练时收敛缓慢,甚至无法训练。

因此,通常建议使用一些随机的初始化策略,如高斯分布或均匀分布,以打破对称性,促使网络学到更丰富的特征。

正则化:怎样去减少训练误差?

1、多个结果合在取平均值。

2、正则化
3、dropout:怎么去解释为什么有效?

        在测试时dropout会使我们的结果随机,那我们怎么去得到结果,用平均?显然不行因为平均会得到下面这个式子,带有概率积分。怎么解决?At test time, multiply by dropout probability

        

output at test time = expected output at training time

比较下面两个dropout的不同:

数据增强!

数据增强的例子:
- 平移
- 旋转
- 拉伸
- 剪切
- 镜头失真,...(尽情发挥)

正则化 - 在实践中

训练:添加随机噪声
测试:在噪声上进行边缘化
例子:
Dropout(随机失活)
Batch Normalization(批归一化)
数据增强
DropConnect
Fractional Max Pooling
Stochastic Depth
Cutout / Random Crop
Mixup


- 考虑在大的全连接层中使用dropout
- 批归一化和数据增强几乎总是一个好主意
- 尝试在小的分类数据集中特别使用cutout和mixup

选择超参数步骤:

步骤1:检查初始损失
关闭权重衰减,在初始化时检查损失,例如 softmax 分类的 log(C),其中 C 是类别数。

步骤2:过拟合小样本
尝试在少量训练数据(约5-10个小批次)上训练至100%的训练准确度;调整架构、学习率和权重初始化。
损失没有下降?学习率可能太低,初始化不好。
损失爆炸到无穷大或 NaN?学习率可能太高,初始化不好。

步骤3:找到使损失下降的学习率
使用前一步的架构,使用所有训练数据,打开小的权重衰减,找到在约100次迭代内显著降低损失的学习率。
可以尝试的良好学习率:1e-1、1e-2、1e-3、1e-4。

步骤5:细化网格,延长训练时间
从步骤4中选择最佳模型,延长它们的训练时间(约10-20个时期),不进行学习率衰减。

Step 6: Look at loss and accuracy curves

Step 7: GOTO step 5

Transfer learning

总结

We looked in detail at:

- Activation Functions (use ReLU)

- Data Preprocessing (images: subtract mean)

- Weight Initialization (use Xavier/Kaiming init)

- Batch Normalization (use this!)

- Transfer learning (use this if you can!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值