Improving Deep Neural Network学习笔记

本周学习了深度学习(吴恩达老师的课程)中,提升深度神经网络的一些方法,包括超参数的调整、正则化以及优化算法,明白了网络优化的一些思路以及优化的原理。

1 超参数

在学习率、梯度下降的循环次数(iteration)、隐藏层数目(L)、隐藏层神经元个数、激活函数、momentum、batch size等等超参数中,学习率是其中最为重的超参数。在我们测试学习率的选值测试过程中,我们不能够按照随机均匀取值法,而应该选择对数标尺搜索。下面举个例子:
假设学习率a的取值范围在0.0001-1之间,我们如果随机均匀取值的话,90%的数值会落在0.1到1之间,0.0001到0.1之间只用了10%的资源区搜索(但是学习率恰恰有可能在小区间中取到最优)。这个时候采用对数标尺搜索,分别选取0.0001,0.001,0.01,0.1,1为标尺,在对数轴上面的均匀取点。

2 方差、偏差

方差:描述模型在不同训练集上预测的波动性和分散程度
偏差:描述模型预测值和真实值之间的差异,即准确性
模型在训练集和测试集上的表现会呈现出欠拟合(underfitting)、过拟合(overfitting)、适度拟合(just right)三种情况。在欠拟合中,模型会呈现高偏差,而在过拟合情况下,模型会出现高方差的情况,而适度拟合则是方差和偏差的均衡状态(也是模型的最好状态)

3 正则化

模型出现过拟合的情况,有两种解决方式,一是增加数据量,二是采用正则化来解决。正则化有多种实现方式,常用的方式为
1.L2正则化
在逻辑回归中,我们通常正正则化高维矢量参数W,正则化的过程如下:
在这里插入图片描述

2.dropout正则化
dropout正则化的过程就是让神经网络中的神经元以一定概率随机失活

提供的引用内容未涉及NTK - SAP在通过对齐训练动态来改进神经网络剪枝方面的信息,所以暂时无法准确回答关于“NTK - SAP: 通过对齐训练动态改进神经网络剪枝的研究”的具体内容。不过,从一般性角度推测,NTK(Neural Tangent Kernel)可描述无限宽度神经网络的训练动态,在神经网络剪枝中,若能利用NTK来对齐训练动态,或许可以让剪枝过程更符合模型训练时的梯度动态。 在传统的神经网络剪枝中,可能会随机或者基于一些简单的规则去除网络中的部分连接或神经元,但这可能会破坏网络原本的训练动态,影响模型性能。而NTK - SAP可能是借助NTK的特性,分析网络在训练过程中的动态变化,找出那些对训练动态影响较小的连接或神经元进行剪枝,从而在减少模型参数的同时,尽可能保持模型的性能,提升优化稳定性。 以下是一种可能的伪代码示例,展示基于NTK - SAP思想进行剪枝的大概流程: ```python import torch import torch.nn as nn # 假设这是一个简单的神经网络 class SimpleNet(nn.Module): def __init__(self): super(SimpleNet, self).__init__() self.fc1 = nn.Linear(10, 20) self.fc2 = nn.Linear(20, 1) def forward(self, x): x = torch.relu(self.fc1(x)) x = self.fc2(x) return x # 初始化模型 model = SimpleNet() # 这里应该有计算NTK的函数,此处简化为占位 def compute_ntk(model): # 实际中需要实现NTK的计算逻辑 return torch.randn(model.fc1.weight.shape) # 计算NTK ntk = compute_ntk(model) # 假设根据NTK进行剪枝的阈值 pruning_threshold = 0.1 # 进行剪枝 for param in model.parameters(): if len(param.shape) > 1: # 只处理权重矩阵 ntk_mask = (ntk.abs() > pruning_threshold).float() param.data *= ntk_mask ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值