文章目录

  • 梯度
    • 1.初始状态
    • 2.学习率
    • 3.动量(怎么逃离局部最小值)
    • 4.stochastic gradient descent
    • 5.梯度消失和梯度爆炸、退化问题
  • 常见的函数梯度
  • 梯度API
    • 1.torch.autograd.gard(loss[w1,w2,..])
    • 2.loss.backward()
    • 3.梯度更新
  • 激活函数及其梯度
    • 1.torch.sigmoid()
    • 2.torch.tanh()
    • 3.torch.relu()
    • 4.softmax
    • 5.Leaky ReLU
    • 6.SELU
    • 7.softplus
  • Loss
    • 1.MSE(优先使用)
    • 2.Cross Entropy Loss交叉熵
      • 1.Cross Entropy Loss
        • p=q
        • for one-hot encoding
        • 实例
      • 2.binary classification
        • 求entropy
      • 3.muti-class classification
    • 3.Hinge Loss
    • 4.分类问题为什么不选择MSE

梯度

神经网络中最为核心的概念,梯度。
梯度是一个向量,
第一,梯度的长度大小表达了某种趋势,第二,梯度的方向代表着增长(大值)的方向,朝着函数越来越大的方向走。

找到极小值

αt一般设置的比较小,可以更好地找到极小值。
除了马鞍的鞍点影响优化器,也就是搜索的过程外,还有:

1.初始状态

如果你的初始值在A点,很有可能当你到达x1时,得到局部最小值后就停止了。

2.学习率

当我们的学习率比较大时,步长就会比较大,可能下一个点直接就跨过了最小值到另一边了,对于一些较好的函数,可能会通过左右震荡,最终会收敛到最小值点。但大部分情况都是,最后无法收敛。最开始最好把学习率设置的小一点,例如0.01,0.001,若是收敛了,则慢慢增加学习率,训练的速度会变快,如果不收敛,则继续减少学习率。学习率还会影响训练的精度,有的时候,会不断在最小值左右震动,就是无法到达最小值点,此时需要慢慢减小学习率。

3.动量(怎么逃离局部最小值)

我们会添加一个动量,这个动量可以理解为一个惯性,帮助走出这个局部最小值。

4.stochastic gradient descent

把原来的在所有数据集的所有梯度均值变成在一个batch上的所有梯度均值
stochastic
有一定的随机性,但不是真正的random,给一个x,它对应的f(x)符合某个分布
deterministic
x与f(x)是一一对应。

5.梯度消失和梯度爆炸、退化问题

解决梯度消失、爆炸:对数据进行准化处理、权重初始化、以及BN标准化处理。
退化问题:残差结构

常见的函数梯度

梯度API

求梯度

1.torch.autograd.gard(loss[w1,w2,…])

loss对w求导

2.loss.backward()

直接进行w1.grad

3.梯度更新

反向传播后,要梯度更新:权重新=权重旧-lr*(loss对权重偏导)

激活函数及其梯度

激活就是指在x必须大于某个数后,才会激活,输出一个电平值。
激活函数存在一个重要概念,就是不可导。不能使用梯度下降的方法进行优化。使用启发式搜索来求解最优解。

1.torch.sigmoid()

比较适合模拟生物学上神经元的机制。Sigmod是可导的,
Sigmod导数=Sigmod(1-Sigmod)
Sigmod函数是连续的光滑的,且函数值压缩在0到1之间,概率、RGB都可以使用Sigmod函数。
缺点:梯度离散现象,求最优解时,因为x趋近于无穷小时等于0,loss保持不变,使得我们的最优解一直无法更新。

import torch
a=torch.linspace(-100,50,10)
print(a)
print(torch.sigmoid(a))

2.torch.tanh()

在RNN中常用。
tanh的导数=1-tanh**2
缺点:梯度离散现象

a=torch.linspace(-10,10,10)
print(a)
print(torch.tanh(a))

3.torch.relu()

ReLU(Rectified Linear Unit)是深度学习奠基石的激活函数,使用最多的。
做research时优先选择relu。
优点:一定程度上解决了sigmod函数的梯度离散现象。

当x小于0时不激活,且梯度是0,当x大于0时,线性激活,且梯度是1。导数计算起来非常简单,且不会放大缩小。x等于0时,一般梯度理解为0或1。

a=torch.linspace(-10,10,10)
print(a)
print(torch.relu(a))

4.softmax

与Cross Entropy Loss结合的激活函数。
首先,每个区间的概率值在0到1之间,且概率之和等于1,适合多分类问题。
pi对aj求导,当i=j时,得pi(1-pj),当i≠j时,得-pipj。

刚开始2是1的2倍,俩个值的概率大于2倍,即会把大的放的更大,把小的放的更密集,使差距变得更大。

a=torch.rand(3)
p=torch.softmax(a,dim=0)
print(p)

必须写dim。

5.Leaky ReLU

解决:ReLU在x小于0时梯度为0的情况

∝很小,且可在pytorch上设置。

6.SELU

SELU(x)=scale*(max(0,x)+min(0,∝*(exp(x)-1)))
relu=max(0,x)

7.softplus

是relu函数平滑的版本,在0附近是连续光滑的。

Loss

1.MSE(优先使用)

Mean Square Erro

采用torch.norm求解MSE,则torch.norm(y-pred,2)*pow(2),第一个2代表L2。

2.Cross Entropy Loss交叉熵

1.Cross Entropy Loss

熵entropy在信息学上的定义:

a=torch.full([4],1/4.)
print(a)
print(a*torch.log2(a))
print(-(a*torch.log2(a)).sum())
b=torch.tensor([0.1,0.1,0.1,0.7])
print(-(b*torch.log2(b)).sum())
c=torch.tensor([0.001,0.001,0.001,0.999])
print(-(c*torch.log2(c)).sum())

对于a,这四个数的增长度一样,熵较大,比较稳定。
对于b,前三个数的增长度较小,最后一个数增长都比较高,熵大概是1.3568,不稳定的。
对于c,前三个数代表发生概率极低,最后一个是极高,最后熵是0.0313,如果是这四分数中的幸运儿,则更加惊喜,因为这种情况发生概率很低。
从上到下越来越好,使我们朝着目标前进。


Dkl求散度,判断两者的重叠情况。

p=q

当p和q相等时,交叉熵就会等于某一个分布的熵

for one-hot encoding

若分布是[0,1,0,0],只有这一项的概率是1,则1log1=0,则H(p)=0。

实例

import torch
import torch.nn.functional as Fx=torch.randn(1,784)
w=torch.randn(10,784)logits=x@w.t()
print('logits shape',logits.shape)pred=F.softmax(logits,dim=1)
print('pred shape',pred.shape)pred_log=torch.log(pred)print('cross entropy:',F.cross_entropy(logits,torch.tensor([3])))
print('nll_loss后:',F.nll_loss(pred_log,torch.tensor([3])))

logits=xw+b
logits经过softmax函数后,得到pred
pred经过log函数,得到pred_log
使用cross entropy,此时必须使用logits,cross entropy把softmax和log在一起了。
cross entropy=softman+log+nll_loss,cross entropy相当于这三个操作一起。

2.binary classification

f:x->p(y=1|x)
如果p(y=1|x)>0.5(已经确定的阈值),预测为1,其他情况预测为0

求entropy

目标函数是-[ylog(p+(1-y)log(1-p))]

3.muti-class classification

f:x->p(y=y|x)
多类:p(y=0|x),p(y=1|x),…,p(y=9|x),每个的概率都是0到1,且总概率值为1。可通过softmax实现。

3.Hinge Loss

4.分类问题为什么不选择MSE

在一些前沿问题上,假如cross entropy不行时,可以选择使用MSE进行尝试

  • sigmoid+MSE会很容易出现梯度离散现象
  • cross entropy更大,梯度信息更大,收敛的更快。

10.梯度、激活函数和loss相关推荐

  1. (四)激活函数与loss梯度

    (四)激活函数与loss梯度 激活函数 科学家对于青蛙的神经元的研究,发现青蛙的神经元有多个输入,中间是一个对输入加权的响应,但是这个响应不是线性的输出,而是基于一个阈值来作为标准,当响应值大于阈值时 ...

  2. 聊一聊CNN中的感受野、优化函数、激活函数、Loss函数等

    目录: 1.感受野 2.优化函数 3.激活函数 4.loss 函数. 前言 文章有点长,内容有点丰富,基本涵盖整个深度卷积神经网络,涉及 网络中的感受野.激活函数.loss函数以及各种相关知识. Pa ...

  3. 激活函数和最常用的10个激活函数

    1. 什么是激活函数 activation function 激活函数 是一种添加到ANN中的函数,它决定了最终要发射给下一个神经元的内容. 在人工神经网络中,一个节点的激活函数 定义了该节点在给定的 ...

  4. PyTorch教程(八):常见激活函数与Loss的梯度

    如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机. 如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近 ...

  5. 【2】激活函数与Loss函数求导

    文章目录 1.常见的激活函数与梯度 Sign函数 Sigmoid函数 Tanh函数 ReLU函数 Softmax函数 Leaky ReLU函数 SELU函数 Softplus函数 2.常见的Loss与 ...

  6. 深度学习最常用的10个激活函数

    那就让我们来整理一下深度学习中离不开的激活函数! 激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式.类似于人类大脑中基于神经元的模型 ...

  7. 深度学习最常用的10个激活函数!(数学原理+优缺点)

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Sukanya Bag,来源:机器之心 激活函数是神经网络模型重要 ...

  8. 深度学习领域最常用的10个激活函数,一文详解数学原理及优缺点

    来源:机器之心.信息网络工程研究中心本文约2400字,建议阅读5分钟本文从激活函数的数学原理出发,详解了十种激活函数的优缺点. 激活函数是神经网络模型重要的组成部分,本文作者Sukanya Bag从激 ...

  9. 【CV】10分钟理解Focal loss数学原理与Pytorch代码

    原文链接:https://amaarora.github.io/2020/06/29/FocalLoss.html 原文作者:Aman Arora Focal loss 是一个在目标检测领域常用的损失 ...

最新文章

  1. JAVA服务治理实践之无侵入的应用服务监控--转
  2. JDK 1.4 主要新特性
  3. [数论]Gcd/ExGcd欧几里得学习笔记
  4. 一个ABAP程序,能够下载指定的note到本地
  5. python调用键盘_使用 Python 控制自己的电脑和键盘是一种什么样的体验?
  6. 没有代码天赋的我,先退出了
  7. Robot Framework操作
  8. 导出函数__declspec(dllexport)
  9. mybatis从0到1--学mybatis看这一篇就足够
  10. javascript小方法之数组去重、数字转成逗号分隔、html元素去标签
  11. 计算机应用软件安装不了,应用程序无法正常启动,详细教您电脑应用程序无法正常启动0xc000007b怎么解决...
  12. 在我的网站   Φ十三月网Φ  开站前的宣传,当我是炒作,造势都可以,但是我们要的是有内涵。
  13. 【Android 教程系列第 31 篇】通过 adb install 命令安装 apk 时提示 signatures do not match previously installed version
  14. 服务器怎么买,腾讯云服务器购买三种流程介绍
  15. 国内洗地机品牌排行榜前十名有哪些?洗地机十大品牌排行榜介绍
  16. 简悦+Logseq 搭建本地化个人知识库
  17. 使用ADB命令连接手机、发送广播
  18. 四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps
  19. XZ_iOS之内存泄露exc_bad_access
  20. php 怎么打印条形码,php – 直接从(zebra)打印机上的浏览器打印贴纸/条形码标签...

热门文章

  1. 第168篇,中心点(扶摇生财思维)
  2. Apple App Store 音乐App 美国畅销榜单前30名使用记录
  3. 史上最全的投资美股指南
  4. 滑雪在日本 之 新泻篇 3
  5. 保温夹层滤芯式过滤器
  6. Pascal VOC数据集 下载 百度云
  7. feign.codec.DecodeException异常解决方案
  8. pandas 错误提醒:FutureWarning: elementwise comparison failed;
  9. 将word文档中所有文本框中的内容转换成普通段落
  10. JavaScript基础——第四章,JavaScript对象及初识面向对象