PyTorch学习DAY4权值初始化和损失函数

权值初始化

梯度消失与爆炸

从公式可看到,标准差由三个因素所决定,网络层的神经元个数,输入值的方差和网络层权值的方差。当我们的权值的标准差设置为1/n的开根号,我们每一个网络层输出的标准差都是1。

Xavier初始化

方差一致性:保持数据尺度维持在恰当范围,通常方差为1

激活函数:饱和函数,如Sigmoid,Tanh

Kaiming初始化

方差一致性:保持数据尺度维持在恰当范围,通常方差为1。

激活函数:ReLU及其变种。

通过上面几个例子,对权值的初始化有了清晰的认识,不良的权值初始化会引起输出层输出值过大或者过小,从而引发梯度消失或者爆炸,最终导致我们的模型无法正常训练。为了避免这样的事情发生,我们要控制网络层输出值的尺度范围,使每一个网络层的输出的方差尽量是一,遵循方差一致性原则,保持网络层输出值方差在一附近,不让方差和输出值过大或者过小。


十种初始化方法

  1. Xavier均匀分布
  2. Xavier正态分布
  3. Kaiming均匀分布
  4. Kaiming正态分布
  5. 均匀分布
  6. 正态分布
  7. 常数分布
  8. 正交矩阵初始化
  9. 单位矩阵初始化
  10. 稀疏矩阵初始化

nn.init.calculate_gain(nonlinearity, param=None)

功能:计算激活函数的方差变化尺度

参数:

  • nonlinearity:激活函数名称。
  • param:激活函数的参数,如Leaky ReLU的negative_slop

损失函数

损失函数是什么

衡量模型输出与真实标签的差异。

损失函数(Loss Function):

Loss =f(\hat{y},y)

代价函数(CostFunction):

Cost=\frac{1}{N}\sum_{N}^{i}f(\hat{y}_{i},y_{i})

目标函数(Objective Function):

Obj=Cost+Regularization

熵表示一个事件的不确定性,越大就越不确定。

nn.CrossEntropyLoss

功能:nn.LogSoftmax()与nn.NLLLoss()结合,进行交叉熵计算

主要参数:

  • weight:各类别的loss设置权值。
  • ingore_index:忽略某个类别。
  • reduction:计算模式,可为none/sum/mean。
  1. none:逐个元素计算。
  2. sum:所有元素求和,返回标量。
  3. mean:加权平均,返回标量。

nn.NLLLoss

功能:实现负对数似然函数中的负号功能。

主要参数:

  • weight:各类别的loss设置权值。
  • ingore_index:忽略某个类别。
  • reduction:计算模式,可为none/sum/mean。
  1. none:逐个元素计算。
  2. sum:所有元素求和,返回标量。
  3. mean:加权平均,返回标量。

nn.BCELoss

功能:二分类交叉熵。

注意:输入值取值在[0,1]

主要参数:

  • weight:各类别的loss设置权值。
  • ingore_index:忽略某个类别。
  • reduction:计算模式,可为none/sum/mean。
  1. none:逐个元素计算。
  2. sum:所有元素求和,返回标量。
  3. mean:加权平均,返回标量。

nn.BCEWithLogitsLoss

功能:结合Sigmoid与二分类交叉熵。

注意:网络最后不加sigmoid函数。

主要参数:

  • pos_weight:正样本的权值。
  • weight:各类别的loss设置权值。
  • ingore_index:忽略某个类别。
  • reduction:计算模式,可为none/sum/mean。
  1. none:逐个元素计算。
  2. sum:所有元素求和,返回标量。
  3. mean:加权平均,返回标量。

nn.L1Loss

功能:计算inputs与target之差的绝对值。

nn.MSELoss

功能:计算inputs与target之差的平方。

主要参数:

  • reduction:计算模式,可为none/sum/mean。
  1. none:逐个元素计算。
  2. sum:所有元素求和,返回标量。
  3. mean:加权平均,返回标量。

nn.SmoothL1Loss

功能:平滑的L1Loss

主要参数:

  • reduction:计算模式,可为none/sum/mean。
  1. none:逐个元素计算。
  2. sum:所有元素求和,返回标量。
  3. mean:加权平均,返回标量。

nn.PoissonLoss

功能:泊松分布的负对数似然损失函数。

主要参数:

  • log_input:输入是否为对数形式,决定计算公式。
  • full:计算所有loss,默认为False
  • eps:修正项,避免log(input)为nan

nn.KLDivLoss

功能:计算KLD(divergence),KL散度,相对熵。

注意事项:需提前将输入计算log-probabilities,如通过nn.logsoftmax()

主要参数:

  • reduction:计算模式,可为none/sum/mean/batchmean。
  1. batchmean:batchsize维度求平均值。
  2. none:逐个元素计算。
  3. sum:所有元素求和,返回标量。
  4. mean:加权平均,返回标量。

nn.MarginRankingLoss

功能:计算两个向量之间的相似度,用于排序任务。

特别说明:该方法计算两组数据之间的差异,返回一个n*n的loss矩阵。

主要参数:

  • margin:边界值,x1与x2之间的差异值。
  • reduction:计算模式,可为none/sum/mean。

y=1时,希望x1比x2大,当x1>x2时,不产生loss;

y=-1时,希望x2比x1大,当x2>x1时,不产生loss。

nn.MultiLabelMarginLoss

功能:多标签边界损失函数。

举例:四分类任务,样本x属于0类和3类。

标签:[0,3,-1,-1],不是[1,0,0,1]

主要参数:

  • reduction:计算模式,可为none/sum/mean。

标签所在的神经元减去不是标签所在的神经元。

nn.SoftMarginLoss

功能:计算二分类的logistic损失

主要参数:

  • reduction:计算模式,可为none/sum/mean。

nn.MultiLabelSoftMarginLoss

功能:SoftMarginLoss多标签版本

主要参数:

  • weight:各类别的loss设置权值。
  • reduction:计算模式,可为none/sum/mean。

nn.MultiMarginLoss

功能:计算多分类的折页损失。

主要参数:

  • p:可选1或2。
  • weight:各类别的loss设置权值。
  • margin:边界值。
  • reduction:计算模式,可为none/sum/mean。

nn.TripletMarginLoss

功能:计算三元组损失,人脸验证中常用。

主要参数:

  • p:范数的阶,默认为2。
  • margin:边界值。
  • reduction:计算模式,可为none/sum/mean。

nn.HingeEmbeddingLoss

功能:计算两个输入的相似性,常用于非线性embedding和半监督学习。

特别注意:输入x应为两个输入之差的绝对值。

主要参数:

  • margin:边界值。
  • reduction:计算模式,可为none/sum/mean。

nn.CosineEmbeddingLoss

功能:采用余弦相似度计算两个输入的相似性。

主要参数:

  • margin:可取值[-1,1],推荐为[0,0.5]。(由于cos的值域)
  • reduction:计算模式,可为none/sum/mean。

nn.CTCLoss

功能:计算CTC损失,解决时序类数据的分类(Connectionist Temporal Classification)。

主要参数:

  • blank:blank label。
  • zero_infinity:无穷大的值或梯度置0。
  • reduction:计算模式,可为none/sum/mean。

最近才添加进来的

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值