IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 激活函数与Pytorch -> 正文阅读

[人工智能]激活函数与Pytorch

image-20220422112550646

基本概念

单层求导

f为激活函数
y = f ( w x + b ) w = [ w 11 w 12 . . . w 1 n w 21 w 22 . . . w 2 n . . . . . . . . . . . . w m 1 w m 2 . . . w m n ] x = [ x 1 x 2 . . . x n ] b = [ b 1 b 2 . . . b m ] y = [ f ( ∑ j = 1 n w 1 j x j + b 1 ) f ( ∑ j = 1 n w 2 j x j + b 2 ) . . . f ( ∑ j = 1 n w m j x j + b m ) ] ? y ? w = [ f ′ ( ∑ j = 1 n w 1 j x j + b 1 ) x 1 f ′ ( ∑ j = 1 n w 1 j x j + b 1 ) x 2 . . . f ′ ( ∑ j = 1 n w 1 j x j + b 1 ) x n f ′ ( ∑ j = 1 n w 2 j x j + b 2 ) x 1 f ′ ( ∑ j = 1 n w 2 j x j + b 2 ) x 2 . . . f ′ ( ∑ j = 1 n w 2 j x j + b 2 ) x n . . . . . . . . . . . . f ′ ( ∑ j = 1 n w m j x j + b m ) x 1 f ′ ( ∑ j = 1 n w m j x j + b m ) x 2 . . . f ′ ( ∑ j = 1 n w m j x j + b m ) x n ] ? y ? b = [ f ′ ( ∑ j = 1 n w 1 j x j + b 1 ) f ′ ( ∑ j = 1 n w 2 j x j + b 2 ) . . . f ′ ( ∑ j = 1 n w m j x j + b m ) ] y=f(wx+b)\\ w=\begin{bmatrix} w_{11}&w_{12}&...&w_{1n}\\ w_{21}&w_{22}&...&w_{2n}\\ ...&...&...&...\\ w_{m1}&w_{m2}&...&w_{mn} \end{bmatrix}\\ x=\begin{bmatrix} x_1\\x_2\\...\\x_n \end{bmatrix}\\ b=\begin{bmatrix} b_1\\b_2\\...\\b_m \end{bmatrix}\\ y=\begin{bmatrix} f(\sum_{j = 1}^{n}w_{1j}x_j+b_1)\\f(\sum_{j = 1}^{n}w_{2j}x_j+b_2)\\...\\f(\sum_{j = 1}^{n}w_{mj}x_j+b_m) \end{bmatrix}\\ \frac{\partial y}{\partial w} = \begin{bmatrix} f'(\sum_{j = 1}^{n}w_{1j}x_j+b_1)x_1&f'(\sum_{j = 1}^{n}w_{1j}x_j+b_1)x_2&...&f'(\sum_{j = 1}^{n}w_{1j}x_j+b_1)x_n\\ f'(\sum_{j = 1}^{n}w_{2j}x_j+b_2)x_1&f'(\sum_{j = 1}^{n}w_{2j}x_j+b_2)x_2&...&f'(\sum_{j = 1}^{n}w_{2j}x_j+b_2)x_n\\ ...&...&...&...\\ f'(\sum_{j = 1}^{n}w_{mj}x_j+b_m)x_1&f'(\sum_{j = 1}^{n}w_{mj}x_j+b_m)x_2&...&f'(\sum_{j = 1}^{n}w_{mj}x_j+b_m)x_n\\ \end{bmatrix}\\ \frac{\partial y}{\partial b}=\begin{bmatrix} f'(\sum_{j = 1}^{n}w_{1j}x_j+b_1)\\f'(\sum_{j = 1}^{n}w_{2j}x_j+b_2)\\...\\f'(\sum_{j = 1}^{n}w_{mj}x_j+b_m) \end{bmatrix}\\ y=f(wx+b)w=?????w11?w21?...wm1??w12?w22?...wm2??............?w1n?w2n?...wmn???????x=?????x1?x2?...xn???????b=?????b1?b2?...bm???????y=?????f(j=1n?w1j?xj?+b1?)f(j=1n?w2j?xj?+b2?)...f(j=1n?wmj?xj?+bm?)???????w?y?=?????f(j=1n?w1j?xj?+b1?)x1?f(j=1n?w2j?xj?+b2?)x1?...f(j=1n?wmj?xj?+bm?)x1??f(j=1n?w1j?xj?+b1?)x2?f(j=1n?w2j?xj?+b2?)x2?...f(j=1n?wmj?xj?+bm?)x2??............?f(j=1n?w1j?xj?+b1?)xn?f(j=1n?w2j?xj?+b2?)xn?...f(j=1n?wmj?xj?+bm?)xn????????b?y?=?????f(j=1n?w1j?xj?+b1?)f(j=1n?w2j?xj?+b2?)...f(j=1n?wmj?xj?+bm?)??????

作用

激活函数对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用,它们将非线性特性引入到我们的网络中。

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

Me:增加非线性运算,增强拟合能力

梯度饱和

梯度饱和常常是和激活函数相关的,比如sigmod和tanh就属于典型容易进入梯度饱和区的函数,即自变量进入某个区间后,梯度变化会非常小,表现在图上就是函数曲线进入某些区域后,越来越趋近一条直线,梯度变化很小,梯度饱和会导致训练过程中梯度变化缓慢,从而造成模型训练缓慢。

以0为中心

因为输出不以0为中心的激活函数,比如sigmoid函数,其输出都为正,意味着在梯度下降时对某权重1到权重n的导数要么全为正,要么全为负。这会导致梯度下降呈z字型,增加了迭代次数,降低了收敛速度

Sigmoid

image-20220422112932444
σ ( x ) = 1 1 + e ? x σ ′ = σ ( 1 ? σ ) \sigma(x)=\frac{1}{1+e^{-x}}\\ \sigma'=\sigma(1-\sigma) σ(x)=1+e?x1?σ=σ(1?σ)
优点:
Sigmoid 函数的输出范围是 0 到 1。由于输出值限定在 0 到 1,因此它对每个神经元的输出进行了归一化;
用于将预测概率作为输出的模型。由于概率的取值范围是 0 到 1,因此 Sigmoid 函数非常合适;梯度平滑,避免「跳跃」的输出值;
函数是可微的,便于求导。
明确的预测,即非常接近 1 或 0。

缺点:
容易梯度饱和后梯度消失;
函数输出不是以 0 为中心的,这会降低权重更新的效率;
Sigmoid 函数执行指数运算,计算机运行得较慢。

Tanh/双曲正切

image-20220422113248612
t a n h ( x ) = 2 σ ( x ) ? 1 = 2 1 + e ? 2 x ? 1 t a n h ′ = 1 ? t a n h 2 tanh(x)=2\sigma(x)-1=\frac{2}{1+e^{-2x}}-1\\ tanh'=1-tanh^2 tanh(x)=2σ(x)?1=1+e?2x2??1tanh=1?tanh2
整体优越点与sigmoid类似,但Tanh函数是 0 均值的,因此实际应用中 Tanh 会比 sigmoid 更好。

在一般的二元分类问题中,tanh 函数用于隐藏层,而 sigmoid 函数用于输出层,但这并不是固定的,需要根据特定问题进行调整。

ReLU/整流线性单元

image-20220422124145848
f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)
优点:
当输入为正时,不存在梯度饱和问题。
计算速度快得多。ReLU 函数中只存在线性关系,因此它的计算速度比 sigmoid 和 tanh 更快。

缺点:
Dead ReLU 问题。当输入为负时,ReLU 完全失效,在正向传播过程中,这不是问题。有些区域很敏感,有些则不敏感。但是在反向传播过程中,如果输入负数,则梯度将完全为零,sigmoid 函数和 tanh 函数也具有相同的问题;
ReLU 函数不是以 0 为中心的函数。

Leaky ReLU/LReLU/渗透整流线性单元

image-20220422125025368
f ( x ) = m a x ( α x , x ) f(x)=max(\alpha x, x) f(x)=max(αx,x)
一种专门设计用于解决 Dead ReLU 问题的激活函数。a通常取0.01
从理论上讲,Leaky ReLU 具有 ReLU 的所有优点,而且 Dead ReLU 不会有任何问题,但在实际操作中,尚未完全证明 Leaky ReLU 总是比 ReLU 更好。

ELU

image-20220422125635182
f ( x ) = { x , x ≥ 0 α ( e x ? 1 ) , x < 0 f(x)=\left\{ \begin{aligned} x,x\geq0 \\ \alpha(e^x-1),x<0 \end{aligned} \right. f(x)={x,x0α(ex?1),x<0?
优点:
没有 Dead ReLU 问题,输出的平均值接近 0,以 0 为中心;
ELU 通过减少偏置偏移的影响,使正常梯度更接近于单位自然梯度,从而使均值向零加速学习;ELU 在较小的输入下会饱和至负值,从而减少前向传播的变异和信息。

与 Leaky ReLU 类似,尽管理论上比 ReLU 要好,但目前在实践中没有充分的证据表明 ELU 总是比 ReLU 好。

Parametric ReLU/PReLU/参数化整流线性单元

image-20220422151257119
f ( x ) = { x , x ≥ 0 α x , x < 0 f(x)=\left\{ \begin{aligned} x,x\geq0 \\ \alpha x,x<0 \end{aligned} \right. f(x)={x,x0αx,x<0?
α是可学习的参数

优点:
在负值域,PReLU 的斜率较小,这也可以避免 Dead ReLU 问题。
与 ELU 相比,PReLU 在负值域是线性运算。尽管斜率很小,但不会趋于 0。

Softmax

大的相对更大,小的相对更小,但不改变相对的大小关系,一般对分类任务的输出进行处理

image-20220422112007285

缺点:
在零点不可微;
负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。

Swish

image-20220422152251284
y = x ? s i g m o i d ( x ) y=x*sigmoid(x) y=x?sigmoid(x)
优点:
「无界性」有助于防止慢速训练期间,梯度逐渐接近 0 并导致饱和;(同时,有界性也是有优势的,因为有界激活函数可以具有很强的正则化,并且较大的负输入问题也能解决);
导数恒 > 0;平滑度在优化和泛化中起了重要作用。

Maxout

https://www.bilibili.com/video/BV1bD4y1d7Zz?spm_id_from=333.337.search-card.all.click

maxout单元进一步扩展了整流线性(ReLU)单元。maxout单元将z划分为每组具有k个值的组,而不是使用作用于每个元素的函数g (z)。每个maxout单元则输出每组中的最大元素。
g ( z ) i = max ? j ∈ G ( i ) z j g(z)_i=\max_{j\in G^{(i)}}z_j g(z)i?=jG(i)max?zj?
i是组号索引,j是组内号索引。

例如,我们要得到一个3输入2输出的结构:
image-20220422163042193
即将线性变换后的z分为2组,每组4个元素,组内求最大值

maxout单元可以学习具有多达k段的分段线性的凸函数。maxout单元因此可以视为学习激活函数本身,而不仅仅是单元之间的关系。使用足够大的k,maxout单元可以以任意的精确度来近似任何凸函数。

特别地,具有两块的maxout层可以学习实现和传统层相同的输入x的函数,这些传统层可以使用整流线性激活函数、绝对值整流、渗漏整流线性单元或参数化整流线性单元,或者可以学习实现与这些都不同的函数。Me:ReLU,绝对值整流,LReLU,PReLU是2分段函数,所有k=2就可以拟合到

maxout层的参数化当然也将与这些层不同,所以即使是maxout学习去实现和其他种类的层相同的x的函数这种情况下,学习的机理也是不一样的。

代码

import torch
from torch import nn
from torch.nn import functional as F

inputs = torch.randn(2, 4)

print(F.sigmoid(inputs))

print(F.tanh(inputs))

print(F.relu(inputs))

print(F.leaky_relu(inputs, negative_slope=0.01))

print(F.elu(inputs, alpha=1.0))

# num_parameters 可学习的参数a的个数,只有两个合法的取值:1(默认)2 the number of channels
m = nn.PReLU(num_parameters=1)
print(m(inputs))

print(F.softmax(inputs, dim=1))

# swish
print(inputs * F.sigmoid(inputs))
a=1.0))

# num_parameters 可学习的参数a的个数,只有两个合法的取值:1(默认)2 the number of channels
m = nn.PReLU(num_parameters=1)
print(m(inputs))

print(F.softmax(inputs, dim=1))

# swish
print(inputs * F.sigmoid(inputs))
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-25 11:36:15  更:2022-05-25 11:36:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:32:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码