(四)激活函数与loss梯度

(四)激活函数与loss梯度

激活函数

科学家对于青蛙的神经元的研究,发现青蛙的神经元有多个输入,中间是一个对输入加权的响应,但是这个响应不是线性的输出,而是基于一个阈值来作为标准,当响应值大于阈值时才会输出,而且输出的大小是固定的。这个计算的函数就是阶梯函数。
在这里插入图片描述

上图就是基于青蛙的神经元发明的一个计算机上的模型。它的输入是 x 1 , . . . , x n x_1,...,x_n x1,...,xn,然后经过加权求和,但并不是直接输出,而是经过一个阶梯函数后输出。这里就可以比较好的解释激活函数激活的意思,如果计算的结果大于0,则输出为1(这里假设为1),如果小于0则输出为0,认为大于0的输出才有效,所以大于0的输出就起到了激活作用,而小于0的输出处于睡眠状态。但是这个函数是不可导的,所以我们不能用梯度下降的方法来优化,在当时采用了一种启发式搜索的方法来优化,这里不再多说。

sigmoid

为了解决单层感知机激活函数不可导的情况,科学家提出了一种连续的可导的函数——sigmoid
σ ( x ) = 1 1 + e − x \sigma (x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1

可以看到sigmoid函数能够把一个函数值为 ( − ∞ , + ∞ ) (-\infty,+\infty) (,+)压缩到 ( 0 , 1 ) (0,1) (01)区间内

下面来推导sigmoid函数导数的情况

可以看到,sigmoid函数求导只需要自身函数的值即可。

但是当 x − > − ∞ x->-\infty x>或者 x − > + ∞ x->+\infty x>+时, σ ′ = 0 \sigma'=0 σ=0,所以 θ ′ = θ − Δ \theta' = \theta - \Delta θ=θΔ会很长时间得不到更新,使得长时间 l o s s loss loss保持不变的情况,导致梯度离散的情况。

下面来看下sigmoid函数在PyTorch中怎么实现

tanh

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nPSdoEqF-1643430333274)(E:\刘颖资料\技术学习\pytorch\整理\(四)激活函数与loss梯度\捕获2.PNG)]

从上面公式可以看出,其可以用sigmoid函数来表示。

下面来看其导数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oiG7ghLE-1643430333275)(C:\Users\ying\AppData\Roaming\Typora\typora-user-images\image-20220129102556416.png)]

下面来看在Pytorch中怎么使用

relu

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vwLOSyy7-1643430333276)(C:\Users\ying\AppData\Roaming\Typora\typora-user-images\image-20220129102809871.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gYLPjuvC-1643430333276)(C:\Users\ying\AppData\Roaming\Typora\typora-user-images\image-20220129102855108.png)]

下面来看下在PyTorch中怎么使用relu

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDXL1frn-1643430333276)(C:\Users\ying\AppData\Roaming\Typora\typora-user-images\image-20220129103215823.png)]

softmax

下面给出sotfmax的求导过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7A3RS8BZ-1643430333277)(C:\Users\ying\AppData\Roaming\Typora\typora-user-images\image-20220129114735015.png)]
在这里插入图片描述

总结一下

下面来看下在PyTorch中怎么使用softmax

这里的retain_graph让图不能被清楚,可以再次调用计算梯度的信息。

loss及其梯度

以下介绍两种典型的loss

Mean Squared Error(均方差)

以下先给出均方差的一些公式:

以上公式是为了得出均方差和norm的关系,norm的一些概念比较简单,norm(1)为求和,norm(2)为平方和开根,不清楚直接查询即可。

第一个公式就是均方差的公式,可以直接得出loss,下面我们来看loss的梯度求解情况:

具体的求导过程这里不再给出,运用高数的知识很容易求解。

Cross Entropy Loss(交叉熵)

entropy中文叫做熵也叫做不确定性或者自由度。熵越大说明不确定越小,自由度越小。举个例子,假如你本来就长得很好看,我说你长得好看,那我这句话基本等于废话,所以这句话的不确定性就很低,熵就很高;再举个反面的例子,假如你本来很穷,我说你很有钱,这句话就会产生很大的反响,所以这句话的不确定性就很高,熵就很低。下面来看熵的定义

下面我们来用一些具体例子来理解下:

从中可以看出,当数据的差别越小的时候,熵越大,数据差别越大的时候,熵越小。

entorpy指的是一个分布,而cross entropy指的是两个分布,这里设为p,q

以上为两个分布的交叉熵公式

D K L D_{KL} DKL为散度,是真正衡量两个分布具体的关系。

当两个分布几乎完全一样的时候 D K L D_{KL} DKL的值几乎为0,两个分布不相同的时候, D K L D_{KL} DKL的值很大,这和熵的值相反。

当p和q的分布相同的时候得到 H ( p , q ) = H ( p ) H(p,q) = H(p) H(p,q)=H(p)

这里提一下one-hot encoding,如果采用交叉熵的话,会得到
H ( p , q ) = D K L ( p ∣ q ) H(p,q) = D_{KL}(p|q) H(p,q)=DKL(pq)
这是因为H§ = 1log1 = 0。所以采用one-hot encoding的话,就直接用 D K L D_{KL} DKL来衡量交叉熵就行。

小结

在分类问题中我们会经常使用交叉熵,而不是使用均方差,这是因为

(1)用sigmoid和MSE搭配的话会很容易出现梯度离散的情况,这样创建起来会非常困难

(2)交叉熵的梯度更大,更容易收敛得更快

但是MSE求导会比较简单,在很多问题上也有很好的表现。

下面看看PyTorch中怎么使用交叉熵

从中可以看出 cross_entropy = softmax + log + nll_loss

下面顺便说下如何使用PyTorch来进行求导

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tHTrnffN-1643430333277)(E:\刘颖资料\技术学习\pytorch\整理\(四)激活函数与loss梯度\QQ截图20220129110000.png)]

这种方法无法更新动态图,求导比较麻烦,我们下面使用另外一种方法进行求导

这里使用backward()函数进行反向自动的动态图更新,在创建w的时候使用requires_grad=True,让w可以计算梯度。

如果博客有问题欢迎大家给出意见,记得点赞、收藏加关注哦!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
选取损失函数和激活函数深度学习模型设计中的重要步骤。下面我将分别解释如何选取损失函数和激活函数。 选取损函数: 1. 根据任务类型选择损失函数:根据你的任务类型,例如分类、回归或生成等,选择适合的损失函数。例如,对于分类任务,常用的损失函数有交叉熵损失函数(Cross Entropy Loss),对于回归任务,常用的损失函数有均方误差损失函数(Mean Squared Error Loss)等。 2. 考虑输出的特点:根据输出的特点,选择合适的损失函数。例如,如果输出是概率分布,可以选择交叉熵损失函数;如果输出是实数值,可以选择均方误差损失函数。 3. 考虑数据分布:根据数据分布的特点,选择合适的损失函数。例如,如果数据存在明显的类别不平衡问题,可以选择加权损失函数来平衡各个类别的重要性。 选取激活函数: 1. 考虑非线性能力:选择具有非线性能力的激活函数,以便模型可以学习非线性关系。常用的激活函数有ReLU、Sigmoid、Tanh等。 2. 避免梯度消失和梯度爆炸:选择激活函数时要注意避免梯度消失和梯度爆炸问题。例如,ReLU函数可以有效地避免梯度消失问题。 3. 适应输出范围:根据输出范围的要求选择激活函数。例如,如果需要将输出限制在特定范围内,可以选择Sigmoid或Tanh函数。 4. 网络结构的要求:根据网络结构的要求选择激活函数。例如,如果需要稀疏性,可以选择稀疏激活函数(如ReLU)。 需要注意的是,损失函数和激活函数的选择也可以通过实验和调参来确定,根据具体问题的特点进行适当调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值