1.对于一个神经元,并使用梯度下降优化参数
时,如果输入
恒大于0,其收敛速度会比零均值化的输入更慢。
梯度下降优化参数,用于最小化损失,梯度下降我们首先,计算损失函数关于模型参数的梯度,这给出了参数应向哪个方向移动以减小损失的指示。
零均值化是一种数据预处理的方法,通过减去数据集的均值,将数据的均值为0,用于归一化数据,使得其分布更接近标准正态分布,提高泛化能力,神经网络训练,梯度计算基于输入和输出差值的,输入和输出均值接近,梯度更大,不便于训练。
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
正因为如此,收敛速度变快。
2.如果限制一个神经网络的总神经元数量(不考虑输入层)为N+1,输入层大小为,输出层大小为1,隐藏层的层数为L,每个隐藏层的神经元数量为
,试分析参数数量和隐藏层层数L的关系。
神经网络全连接神经网络,都会有权重和偏置,暂时不考虑偏置
假设,输入层到第一层隐层的权重为p
隐层之间的权重数量为q
隐层到输出层权重为m
p=
q=
m=
层数增加,参数增加
3. 为什么在神经网络模型的结构化风险函数中不对偏置b进行正则化?
结构性风险=经验风险+置信风险
经验风险是在给定样本上的误差
置信风险是在未知分类结果的误差
影响经验风险:复杂度
影响置信风险:样本数量等
偏置b是神经网络调整数据点到激活函数的偏移量,对偏置b进行正则化可能会影响模型的泛化能力,正则化是为了防止过拟合,过拟合是模型因为微小变化发生较大差异,由于w原因,所以在神经网路中对b进行正则化,对结果并没有影响,神经网络中如果发生较大偏差是因为w,而不会因为b,偏差是曲率,曲率由w决定。
4.为什么在用反向传播算法进行参数学习时要采用随机参数初始化的方式而不是直接令W=0,b=0?
如果全部参数为0,导致前向传播的结果隐层激活值结果都相同,
w = [torch.tensor([0.0]),torch.tensor([0.0]),torch.tensor([0.0]), torch.tensor([0.0]),torch.tensor([0.0]),torch.tensor([0.0]),torch.tensor([0.0]),torch.tensor([0.0])]
而在反向传播中,权重更新也相同,没有多样性,而随机初始化使得每层梯度不同,得到更好的分类的结果
5. 梯度消失问题是否可以通过增加学习率来缓解?
梯度消失问题,主要发生在深层网络中,以及当使用不合适的损失函数,如sigmoid函数时。
如果连乘因子大部分小于1,可能趋近于0,后面的网络层的参数不发生变化。如果上一层梯度小于1,随着层数增多,求出的梯度更新信息将会以指数形式衰减,即发生了梯度消失。如果使用sigmoid作为损失函数,其梯度是不可能超过0.25的,这样经过链式求导之后,很容易发生梯度消失。
学习率,学习率过小会导致模型训练速度过慢,需要更多的训练次数才能达到收敛;而学习率过大则可能导致模型在训练过程中产生震荡,无法收敛到最佳解。在神经网络中用于参数更新
回答这个问题,“可以”是因为,使用一个较大的学习率与这个较小的导数相乘所得到的的结果就没那么小了。“不可以”是因为这样会导致这个较大的学习率与最开始较大的导数相乘结果十分巨大,导致梯度爆炸。防止梯度消失可以改变激活函数,ReLU等,权重初始化使用高斯初始化。
正如治病时候,治标不治本
参考博客: