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

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​

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值