深度学习_07_2_随机梯度下降_激活函数及梯度损失函数及梯度

news/2024/6/14 23:45:33 标签: 深度学习, python, 机器学习, tensorflow

07_2_随机梯度下降_激活函数及梯度&损失函数及梯度

激活函数及其梯度

Activation Functions(激活函数)

研究青蛙的神经元有多个输入,比如 x 0 , x 1 , x 2 x_0,x_1,x_2 x0,x1,x2,它的中间结果是 x 0 x_0 x0 x 2 x_2 x2的加权响应,而响应值并不是线性的输出,当响应值的和小于某个值,青蛙不会响应;当大于阈值,会输出固定的响应值。->由此推出阈值函数,它是阶梯函数,小于阈值不反应,大于阈值输出固定的响应。

在这里插入图片描述

Derivative(导数)

借用上面的机制发明了计算机的模型。中间变量z,最终变量a。z变量是x输入和每条边上的权值的加权求和,但是a会根据z的值,结果为0或者1。这个阶梯函数也就是一个激活函数,这就是激活函数的来源

但是下图的激活函数是不可导的,左边的导数等于0,右边的导数也是0,并且当z=0时导数是不连续的情况,不可导。这个函数不能直接使用梯度下降的方法进行优化,当时是使用了启发式搜索的方法求解单层感知机的最优解的情况。

在这里插入图片描述


Sigmoid/Logistics

为了解决激活阶梯函数不可导的情况,提出了连续光滑的函数-Sigmoid或Logistics(logistic regression)。

z等于0的时候取0.5,范围在0~1之间。它有效地模拟了生物学的特性,当z趋近负无穷,则不反应;当z很大的时候,也是稳定输出为1。相当于这个函数把 ( − ∞ , + ∞ ) (-\infty,+\infty) (,+)的值压缩到 ( 0 , 1 ) (0,1) (0,1)

数学表达式: f ( x ) = σ ( x ) = 1 1 + e − x f(x) = \sigma(x) = \frac{1}{1 + e^{-x}} f(x)=σ(x)=1+ex1

可以看出,这个函数的导数在 − ∞ -\infty + ∞ +\infty +的时候趋近0,z=0导数取最大值。

在这里插入图片描述

Derivative(导数)

推导导数:

可得 d σ ( x ) x = σ ( 1 − σ ) \frac{d \sigma(x)}{x} = \sigma(1-\sigma) xdσ(x)=σ(1σ),因此很容易,一直 σ \sigma σ的值,代入即可求出导数。

范围在0~1的好处:

  1. prob(概率)属于0~1,为了得到概率的区间可以用sigmoid函数
  2. 像素的值,范围也在0~1,也使用sigmoid压缩到0~1的范围

缺点:

在z为 − ∞ -\infty + ∞ +\infty +的时候,导数趋近于0,因此当值取在这个区间的时候,参数 θ ′ = θ − Δ \theta' = \theta - \Delta θ=θΔ长时间得不到更新,叫做梯度离散。

在这里插入图片描述

tf.sigmoid

代码实现:

这里的a相当于x。

x为-3的时候,y的值接近于0;x为1的时候,y的值接近为1。所以x在-3到1的区间里,tf.sigmoid就接近于饱和的值了。

grads为梯度(导数),在-3到1的梯度比较合适(大一点点),在之外梯度都接近于0。

在这里插入图片描述


Tanh

另外一种激活函数,在RNN使用较多,其实是可以由sigmoid变换来的:x压缩 1 2 \frac{1}{2} 21,y轴放大2倍,再下移1。

范围为-1~1。

在这里插入图片描述

Derivative(导数)

也是可以之间由tanh的值直接得到。

在这里插入图片描述

tf.tanh

代码实现:

在这里插入图片描述


Rectified Linear Unit(ReLU 整型线性单元)

虽然没有像生物学的要求,但是很适合deep learning。

在这里插入图片描述

为什么?当z<0,梯度为0;当z>0,梯度为1。计算梯度很方便。当大于0直接为1,没有放大和缩小的功能,保持梯度不变,避免sigmoid带来的梯度离散和梯度爆炸的情况。

在这里插入图片描述

tf.nn.relu

代码实现:

对于leaky_relu,当x<0,呈现kx,比较小的接近于0的范围。

在这里插入图片描述

损失函数及梯度

Typical Loss

两种常见的梯度:

  • Mean Squared Error(均方差MSE) - 平方和求和

  • Cross Entropy Loss

    既可以用来2分类,也可以多分类

    经常和softmax搭配使用

在这里插入图片描述

MSE

l o s s = [ L 2 − n o r m ] 2 loss = [L2 - norm] ^2 loss=[L2norm]2

torch.norm(y-pred,2).pow(2) #2表示2范数

在这里插入图片描述

Derivative(导数)

Δ f Δ θ \frac{\Delta f}{\Delta \theta} ΔθΔf取决于具体的网络形式,如果是非常简单的线性感知机,f=xw+b,那么 θ w \frac{\theta}{w} wθ求导就是x,对b求导就是1。

在这里插入图片描述

MSE Gradient

  • x [b,4]
  • w [4,3] 4维变3维
  • b [3]
  • y 两个label 2和0

在tape中,要么watch,要么赋值Variable。

softmax解决多分类,sigmoid解决2分类。

在这里插入图片描述

Softmax

这是和Cross Entropy(一种损失函数)搭配起来的激活函数-softmax

对于输出2.0、1.0、0.1,把数值转成概率,使用softmax,满足数值在[0,1]的范围,可以使全部概率之和为1

经过softmax操作后,把原来大的放的更大,把原来小的压缩在一个比较密集的空间。-soft version of max

在这里插入图片描述

Derivative(导数)

softmax的求导:

输入节点 a 0 . . . a 3 a_0...a_3 a0...a3,输出节点 p 0 . . . p 3 p_0...p_3 p0...p3

左边为设,为了更好求解;右边为i=j的求解步骤。

结果最后为 δ p i δ p j = p j ( 1 − p j ) \frac{\delta p_i}{\delta p_j} = p_j(1-p_j) δpjδpi=pj(1pj)

p j p_j pj的值在神经网路都是已知的,只需要利用公式来求出导数。

在这里插入图片描述

当i != j 的时候:

δ p i δ p j = − p j ∗ p i \frac{\delta p_i}{\delta p_j} = -p_j*p_i δpjδpi=pjpi

在这里插入图片描述

总结:

对相同的输入和输出的节点做偏导是负的,对其他点偏导是正的。

在这里插入图片描述

Crossentropy gradient

x表示一共2个样本,每个样本是4维的Vector。

w是把4维转化为3维

logits:一般激活函数之前的叫logits

采用categorical_crossentropy,categorical表示是分类问题,第1个元素是真实的label(需要先one-hot),第2个元素是logits(或prob,建议logits,经过激活函数以后就会变成prob,在crossentropy内部实现了softmax,为了实现稳定性,之前讲过),设置from_logits=True​

在这里插入图片描述


http://www.niftyadmin.cn/n/1363881.html

相关文章

UAT测试,PPT测试

UAT:user acceptable testing 用户验收测试 PPT:product produce test 产品生产验证 转载于:https://www.cnblogs.com/ttss/p/4289722.html

深度学习_07_3_随机梯度下降_单输出多输出感知机梯度链式法则

07_3_随机梯度下降_单输出&多输出感知机梯度&链式法则 单输出感知机及其梯度 recap(回顾) 单层的感知机模型&#xff1a;每个输入节点xix_ixi​和它对应的wiw_iwi​节点相乘&#xff0c;加上bias得到预测值。图是数学模型。 Perception(感知) 单层感知机前面激活函…

PHP正则表达式修饰符的种类及介绍

◆i &#xff1a;如果在修饰符中加上"i"&#xff0c;则正则将会取消大小写敏感性&#xff0c;即"a"和"A" 是一样的。◆m&#xff1a;默认的正则开始"^"和结束"$"只是对于正则字符串如果在修饰符中加上"m"&#xf…

20150216简单的Linux字符设备驱动程序

20150216简单的Linux字符设备驱动程序 2015-02-16 李海沿 关于字符设备驱动程序详细的知识点&#xff0c;本文就不再介绍了&#xff0c;很多同志&#xff0c;看了知识点&#xff0c;还是一头雾水&#xff0c;写不出来&#xff0c;所以&#xff0c;本文从实战出发&#xff0c;…

深度学习_07_4_随机梯度下降_反向传播算法函数优化实战

07_4_随机梯度下降_反向传播算法&函数优化实战 多层感知机梯度(反向传播算法) Chain rule 通过链式法则&#xff0c;转换为对OK1O^1_KOK1​和OK2O^2_KOK2​的求导&#xff0c;一个一个求解。 Multi-output Perception(多输出感知机) 对wjk1w_{jk}^1wjk1​的导数只和 当…

第七章,面向对象分析

在我们把做好了准备工作之后&#xff0c;就应该着眼于编写程序&#xff0c;这是一个程序员必须要熟练掌握的一门技术&#xff0c;但是&#xff0c;编写程序也有方法&#xff0c;如何更简单&#xff0c;快速&#xff0c;高效的编写程序&#xff0c;在本章中都有介绍。 标准和过程…

深度学习_07_5_随机梯度下降_手写数字问题实战(层)TensorBoard可视化

07_5_随机梯度下降_手写数字问题实战(层)&TensorBoard可视化 FashionMNIST实战&#xff08;手写数字问题实战(层)&#xff09; FashionMNIST 大小、类型和MNIST一样&#xff0c;只是图片内容是帽子、鞋子……10种。 黑白&#xff0c;28*28 代码实现 import os os.en…

转 RMI、RPC、SOAP通信技术介绍及比对

http://www.open-open.com/home/space.php?uid37924&doblog&id8974 1、RMI 使用java的程序员&#xff0c;对于RMI&#xff08;RemoteMethod Invoke&#xff0c;远程方法调用&#xff09;一定不陌生&#xff0c;在java中&#xff0c;为了在分布式应用开发时&#xff0c…