(四)激活函数与loss梯度
(四)激活函数与loss梯度
激活函数
科学家对于青蛙的神经元的研究,发现青蛙的神经元有多个输入,中间是一个对输入加权的响应,但是这个响应不是线性的输出,而是基于一个阈值来作为标准,当响应值大于阈值时才会输出,而且输出的大小是固定的。这个计算的函数就是阶梯函数。
上图就是基于青蛙的神经元发明的一个计算机上的模型。它的输入是x1,...,xnx_1,...,x_nx1,...,xn,然后经过加权求和,但并不是直接输出,而是经过一个阶梯函数后输出。这里就可以比较好的解释激活函数激活的意思,如果计算的结果大于0,则输出为1(这里假设为1),如果小于0则输出为0,认为大于0的输出才有效,所以大于0的输出就起到了激活作用,而小于0的输出处于睡眠状态。但是这个函数是不可导的,所以我们不能用梯度下降的方法来优化,在当时采用了一种启发式搜索的方法来优化,这里不再多说。
sigmoid
为了解决单层感知机激活函数不可导的情况,科学家提出了一种连续的可导的函数——sigmoid
σ(x)=11+e−x\sigma (x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1
可以看到sigmoid函数能够把一个函数值为(−∞,+∞)(-\infty,+\infty)(−∞,+∞)压缩到(0,1)(0,1)(0,1)区间内
下面来推导sigmoid函数导数的情况
可以看到,sigmoid函数求导只需要自身函数的值即可。
但是当x−>−∞x->-\inftyx−>−∞或者x−>+∞x->+\inftyx−>+∞时,σ′=0\sigma'=0σ′=0,所以θ′=θ−Δ\theta' = \theta - \Deltaθ′=θ−Δ会很长时间得不到更新,使得长时间losslossloss保持不变的情况,导致梯度离散的情况。
下面来看下sigmoid函数在PyTorch中怎么实现
tanh
从上面公式可以看出,其可以用sigmoid函数来表示。
下面来看其导数:
下面来看在Pytorch中怎么使用
relu
下面来看下在PyTorch中怎么使用relu
softmax
下面给出sotfmax的求导过程
总结一下
下面来看下在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
以上为两个分布的交叉熵公式
DKLD_{KL}DKL为散度,是真正衡量两个分布具体的关系。
当两个分布几乎完全一样的时候DKLD_{KL}DKL的值几乎为0,两个分布不相同的时候,DKLD_{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)=DKL(p∣q)H(p,q) = D_{KL}(p|q) H(p,q)=DKL(p∣q)
这是因为H§ = 1log1 = 0。所以采用one-hot encoding的话,就直接用DKLD_{KL}DKL来衡量交叉熵就行。
小结
在分类问题中我们会经常使用交叉熵,而不是使用均方差,这是因为
(1)用sigmoid和MSE搭配的话会很容易出现梯度离散的情况,这样创建起来会非常困难
(2)交叉熵的梯度更大,更容易收敛得更快
但是MSE求导会比较简单,在很多问题上也有很好的表现。
下面看看PyTorch中怎么使用交叉熵
从中可以看出 cross_entropy = softmax + log + nll_loss
下面顺便说下如何使用PyTorch来进行求导
这种方法无法更新动态图,求导比较麻烦,我们下面使用另外一种方法进行求导
这里使用backward()函数进行反向自动的动态图更新,在创建w的时候使用requires_grad=True,让w可以计算梯度。
如果博客有问题欢迎大家给出意见,记得点赞、收藏加关注哦!
(四)激活函数与loss梯度相关推荐
- 聊一聊CNN中的感受野、优化函数、激活函数、Loss函数等
目录: 1.感受野 2.优化函数 3.激活函数 4.loss 函数. 前言 文章有点长,内容有点丰富,基本涵盖整个深度卷积神经网络,涉及 网络中的感受野.激活函数.loss函数以及各种相关知识. Pa ...
- 10.梯度、激活函数和loss
文章目录 梯度 1.初始状态 2.学习率 3.动量(怎么逃离局部最小值) 4.stochastic gradient descent 5.梯度消失和梯度爆炸.退化问题 常见的函数梯度 梯度API 1. ...
- PyTorch教程(八):常见激活函数与Loss的梯度
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机. 如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近 ...
- pytorch梯度下降函数_Pytorch学习笔记6:激活函数/单层感知机/梯度下降求最小值实例...
#添加到学习笔记2末尾,直接运行.代码意义可以看注释. #需要import以下库 import torch import numpy as np from matplotlib import pypl ...
- 【2】激活函数与Loss函数求导
文章目录 1.常见的激活函数与梯度 Sign函数 Sigmoid函数 Tanh函数 ReLU函数 Softmax函数 Leaky ReLU函数 SELU函数 Softplus函数 2.常见的Loss与 ...
- 机器学习(四):批量梯度下降法(BGD)、随机梯度下降法(SGD)和小批量梯度下降法(MBGD)
本文基于吴恩达老师的机器学习课程.看了吴恩达老师的机器学习课程,收获很多,想把课上学做的笔记结合自己的理解以及找到的一些资料综合起来做一个总结.大家感兴趣也可以自己去看一看吴恩达老师的课,这套课程,被 ...
- 目标检测之Loss:Center Loss梯度更新
转载:https://blog.csdn.net/u014380165/article/details/76946339 最近几年网络效果的提升除了改变网络结构外,还有一群人在研究损失层的改进,这篇博 ...
- 【学习经验分享NO.16】超全代码-python画Sigmoid,ReLU,Tanh等十多种激活函数曲线及其梯度曲线(持续更新)
文章目录 前言 1. Sigmoid 2. tanh 3. ReLU 4. Leaky ReLU 5. ELU 6.PReLU 7. Softmax 8. Swish 9. Maxout 10. So ...
- 萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第四节 PCA与梯度上升 (上)理解篇...
转载于:https://www.cnblogs.com/romannista/p/10811992.html
最新文章
- Java关键字this、super使用总结
- 学python有哪些书推荐-学python看什么书好?求推荐
- electron-vue脚手架项目初始化时提示: Failed to download repo simulatedgreg/electron-vue: Response code Server E
- Spring Boot 构建RESTful Web服务
- Java Web学习总结(19)——web.xml配置详解
- mysql execution plan_MySQL Execution Plan--NOT IN查询
- 【原】机器学习几个基本的问题
- Python实现注册账号系统密码验证模块编写
- vue实时显示当前时间
- linux源码编译ipk,OpenWrt-SDK-编译生成ipk软件包
- tplink迷你路由器中继模式_TP-link迷你无线路由器Repeater模式(中继模式)设置教程(转载).docx...
- MATLAB与信号处理课程手册
- C++图书ISBN码校验
- OpenJudge 百练 2787 算24
- K.M.P算法个人浅谈
- 集合 Collection
- 520表白——送她一片星空模拟
- 开发人员的涅槃重生路——出差
- 使用TensorRt搭建自己的模型
- 基于协同过滤的电影评分推荐案例及相关代码
热门文章
- String index out of range: -4 错误解析
- 2020/2/23如何高效使用Axure绘制原型图
- java-01背包(动态规划)
- MarkdownPad的安装,打开.md文件
- 华为鸿蒙系统支持旧机型,华为鸿蒙系统2.0来了! 华为鸿蒙2.0系统支持手机机型...
- C2 - Pokémon Army (hard version)(思维+差分/线段树+dp)详解
- 计算机键盘无法使用怎么处理,电脑键盘失灵怎么解决
- Substrate Tutorials:Start a Private Network (multi-node)
- AspNet Core 2.2 SendGrid邮件发送(可群发)
- APP爬虫- 手机安装证书-解决SSL证书的移动端数据包问题