一文详解Softmax的性质与Self-Attention初步解析

news2024/9/21 12:28:53

概述

最近研究超平面排列(Hyperplane Arrangement)问题的时候,发现ReLU有其缺陷,即举例来说,ReLU 无法使用单一的超平面将分离的所有数据,完整的输出,即只会输出半个空间映射的数据,而另一半空间的数据被置为0; ReLU 要完整的映射输入空间的所有数据需要至少3个节点才能办到,比如在2维的输入空间上,当只有2个节点时构成的超平面排列将输入空间划分4个区域,其中其中一定有一个区域全部输出为[0,0]即所谓的死区(Dead Region),死区在ReLU的网络中是普遍问题。

所以想用ReLU的网络构造基于二叉树结构的网络是不行的。而二叉树有非常好的性质,在分类问题上表现为无限层的二叉空间划分一定可以将输入空间中任意一点分类为所属类别,即无限逼近能力,这是一个非常强大的性质。而基于softmax的激活函数却能构造出这样的性质,而且该激活函数是构成self-attention的重要组成,后文会详细介绍。

Softmax函数

softmax函数在深度学习中被广泛使用,其公式也比较简单:
s o f t m a x ( z i ) = e z i ∑ j = 1 n e z j softmax(z_i)=\frac{e^{z_i}}{\sum_{j=1}^{n} e^{z_j} } softmax(zi)=j=1nezjezi其中 i ∈ { 1 , 2 , . . , n } i \in \{1,2,..,n\} i{1,2,..,n} n n n为大于1的自然数,且 s o f t m a x ( z i ) softmax(z_i) softmax(zi)的值域为 [ 0 , 1 ] [0,1] [0,1]。softmax函数的作用即是求任意的节点值的指数与所有节点值的指数和的比值。

softmax函数也可以写为向量形式
s o f t m a x ( z ) = e z ∑ j = 1 n e z j softmax(z)=\frac{e^{z}}{\sum_{j=1}^{n} e^{z_j} } softmax(z)=j=1nezjez其中 z ∈ R n z \in R^n zRn,即 z z z n n n维实向量,这里 z j z_j zj表示 z z z的第 j j j维数据。

基于Softmax的激活函数

我们知道softmax本身也是激活函数,但是一般只在分类层使用,方便训练时反向传播或测试时获得近似的概率值,而很少被用于隐藏层中。但是self-attention与transformer的流行,使得softmax在隐藏层中被大量使用也产生了很好的效果,本节将解析一种基于softmax的激活函数,并研究其性质,最后解释这种激活函数与Seft-Attention的关系。

在讲解基于Softmax的激活函数之前先定义softmax的hard形式,方便解释其运行原理
h a r d m a x ( z i ) = { 0 z i ≠ max ⁡ ( z 1 , . . . , z n ) 1 z i = max ⁡ ( z 1 , . . . , z n ) hardmax(z_i)=\left\{\begin{matrix} 0& z_i\ne \max(z_1,...,z_n) \\ 1& z_i= \max(z_1,...,z_n) \end{matrix}\right. hardmax(zi)={01zi=max(z1,...,zn)zi=max(z1,...,zn) 即对于所有的输入,该输入如果不是最大值则为0,如果为最大值则为1。为了方便我们也将其写为向量形式(这个其实就是one-hot形式的表示)。
h a r d m a x ( z ) = h a r d m a x ( [ z 1 , . . , z n ] ) = [ h a r d m a x ( z 1 ) , . . . , h a r d m a x ( z n ) ] hardmax(z)=hardmax([z_1,..,z_n])=\begin{matrix} [hardmax(z_1),...,hardmax(z_n)] \end{matrix} hardmax(z)=hardmax([z1,..,zn])=[hardmax(z1),...,hardmax(zn)] 对于有2个输出节点的神经网络而言,其结构如图:

各节点的公式可以表示为:
y 1 = w 1 T x + b 1 y_1 = w_1^ \mathsf{T}x +b_1 y1=w1Tx+b1 y 2 = w 2 T x + b 2 y_2 = w_2^ \mathsf{T}x +b_2 y2=w2Tx+b2 将输出表示为向量形式 V = [ y 1 , y 2 ] T V=[y_1,y_2]^\mathsf{T} V=[y1,y2]T,我们构造以下函数(这个函数其实就是maxout激活函数的等价形式):
m a x o u t ( x ) = h a r d m a x ( V T ) V maxout(x)=hardmax(V^ \mathsf{T})V maxout(x)=hardmax(VT)V显然, h a r d m a x ( V T ) hardmax(V^ \mathsf{T}) hardmax(VT)只可能为 [ 0 , 1 ] [0,1] [0,1] [ 1 , 0 ] [1,0] [1,0],那么可以得到
m a x o u t ( x ) = { y 1 y 1 ≥ y 2 y 2 y 1 < y 2 maxout(x)=\left\{\begin{matrix} y_1& y_1\ge y_2 \\ y_2& y_1<y_2 \end{matrix}\right. maxout(x)={y1y2y1y2y1<y2可以推出
m a x o u t ( x ) = { y 1 w 1 T x + b 1 ≥ w 2 T x + b 2 y 2 w 1 T x + b 1 < w 2 T x + b 2 maxout(x)=\left\{\begin{matrix} y_1& w_1^ \mathsf{T}x +b_1\ge w_2^ \mathsf{T}x +b_2 \\ y_2& w_1^ \mathsf{T}x +b_1<w_2^ \mathsf{T}x +b_2 \end{matrix}\right. maxout(x)={y1y2w1Tx+b1w2Tx+b2w1Tx+b1<w2Tx+b2做一次代数替换,令 w T = ( w 1 − w 2 ) T w^\mathsf{T}=(w_1-w_2)^\mathsf{T} wT=(w1w2)T b = b 1 − b 2 b=b_1-b_2 b=b1b2,那么可得
m a x o u t ( x ) = { y 1 w T x + b ≥ 0 y 2 w T x + b < 0 maxout(x)=\left\{\begin{matrix} y_1& w^\mathsf{T}x +b\ge 0 \\ y_2& w^\mathsf{T}x +b<0 \end{matrix}\right. maxout(x)={y1y2wTx+b0wTx+b<0我们发现与ReLU是比较相似的
R e L U ( x ) = { w T x + b w T x + b ≥ 0 0 w T x + b < 0 ReLU(x)=\left\{\begin{matrix} w^\mathsf{T}x +b & w^\mathsf{T}x +b\ge 0 \\ 0& w^\mathsf{T}x +b<0 \end{matrix}\right. ReLU(x)={wTx+b0wTx+b0wTx+b<0 我们知道ReLU构造的超平面为 H = { x ∣ w T x + b = 0 } H=\{ x|w^\mathsf{T}x +b = 0 \} H={xwTx+b=0},同理 m a x o u t ( x ) maxout(x) maxout(x)也是一样的,与ReLU不同的是,ReLU只输出超平面一侧的数据,而丢弃了另一侧的数据;而 m a x o u t ( x ) maxout(x) maxout(x)可以输出两侧的数据,且只使用单个超平面就能实现,也就是说这个函数不存在所谓的死区问题,这是一个非常良好的性质。

以上描述了很多,其实是想引出maxout的soft形式,那么
m a x o u t s o f t ( x ) = s o f t m a x ( V T ) V maxout_{soft}(x)=softmax(V^ \mathsf{T})V maxoutsoft(x)=softmax(VT)V对于2个节点,当 y 1 = y 2 y_1=y_2 y1=y2时, s o f t m a x ( y 1 ) = s o f t m a x ( y 2 ) = 0.5 softmax(y_1)=softmax(y_2)=0.5 softmax(y1)=softmax(y2)=0.5,所以 s o f t m a x softmax softmax的这种形式并不影响上述内容 h a r d m a x hardmax hardmax形式的超平面位置,也就不影响上面得到的结论,唯一的区别是softmax最后的输出是soft形式(各节点值加权平均)的 y y y值,即
y = ∑ i = 1 n α i ∗ y i y=\sum_{i=1}^{n} \alpha_i*y_i y=i=1nαiyi其中 ∑ i = 1 n α i = 1 \sum_{i=1}^{n} \alpha_i=1 i=1nαi=1,这里 n = 2 n=2 n=2,当任意 α i = 1 \alpha_i=1 αi=1时, m a x o u t s o f t ( x ) maxout_{soft}(x) maxoutsoft(x) 退化为 m a x o u t ( x ) maxout(x) maxout(x)的形式。

n ≥ 3 n\ge 3 n3个节点时,也是同理, s o f t m a x softmax softmax也不影响超平面的位置,多个节点的网络会使用超平面排列(Hyperplane Arrangement)构造出类似下图的决策边界

对于 m a x o u t ( x ) maxout(x) maxout(x)当某个节点为最大值时,网络构造的分类区域中一个区域会被直接输出,如上图中3个节点的网络会有1个区域(完整包含1类模式,如蓝色区域)的数据输出,而 m a x o u t s o f t ( x ) maxout_{soft}(x) maxoutsoft(x)则是根据 s o f t m a x softmax softmax获取的权值,加权后输出。

以上就是 s o f t m a x softmax softmax 的性质的描述,且构造了 m a x o u t s o f t ( x ) = s o f t m a x ( V T ) V maxout_{soft}(x)=softmax(V^ \mathsf{T})V maxoutsoft(x)=softmax(VT)V的激活函数,其实我们会发现这个形式和self-attention是非常相似的,那么这个激活函数是否就是self-attention的等价形式呢?这个是接下来要研究的问题。

Self-Attention原理初步

上文构造了类self-attention的激活函数,而self-attention的公式为:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( 1 d k Q K T ) V Attention(Q,K,V) = softmax(\frac{1}{\sqrt{d_k} } QK^\mathsf{T})V Attention(Q,K,V)=softmax(dk 1QKT)V其中Q,K,V分别表示Query,Key,Value,且
Q = x W q Q = xW_q Q=xWq K = x W k K = xW_k K=xWk V = x W v V = xW_v V=xWv即Q,K,V都是 x x x 经过线性变换后的数据,而 1 d k \frac{1}{\sqrt{d_k}} dk 1只是避免矩阵乘值过大的超参数,本质上说self-attention的核心内容为:

A t t e n t i o n ( x ) = s o f t m a x ( x W q ( x W k ) T ) V Attention(x) = softmax(xW_q(xW_k)^\mathsf{T})V Attention(x)=softmax(xWq(xWk)T)V可以写为
A t t e n t i o n ( x ) = s o f t m a x ( x ( W q W k T ) x T ) V Attention(x) = softmax(x(W_qW_k^\mathsf{T})x^\mathsf{T})V Attention(x)=softmax(x(WqWkT)xT)V W ~ = W q W k T \tilde{W} = W_qW_k^\mathsf{T} W~=WqWkT,其中 W ~ \tilde{W} W~是一个方阵,可以得到
A t t e n t i o n ( x ) = s o f t m a x ( x W ~ x T ) V Attention(x) = softmax(x\tilde{W}x^\mathsf{T})V Attention(x)=softmax(xW~xT)V而不管 w T x + b w^\mathsf{T}x+b wTx+b 或者 x W xW xW本质都是一样的,即 x x x的线性变换;我们可以令 W = w T W=w^\mathsf{T} W=wT,将 b b b写到 W W W当中可以得到 W x Wx Wx,所以两者是形式等价的, x W xW xW的形式更方便程序计算。所以上节中的
m a x o u t s o f t ( x ) = s o f t m a x ( V T ) V maxout_{soft}(x)=softmax(V^ \mathsf{T})V maxoutsoft(x)=softmax(VT)V与self-attention的不同之处是 x W ~ x T x\tilde{W}x^\mathsf{T} xW~xT x W v xW_v xWv的区别,权值不同很好理解,Attention使用了新的权值矩阵,且 W ~ \tilde{W} W~ n × n n\times n n×n方阵,而 W v W_v Wv n × m n\times m n×m的矩阵;另一个不同是 x W v xW_v xWv只是 x x x的一个简单线性变换,而 x W ~ x T x\tilde{W}x^\mathsf{T} xW~xT则不是这样的。

为了论述方便,我们假设当 W ~ \tilde{W} W~为对角矩阵时,如

d i a g ( [ 1 , 1 , 1 ] ) = [ 1 0 0 0 1 0 0 0 1 ] diag([1,1,1])=\begin{bmatrix} 1& 0 &0 \\ 0 & 1 & 0 \\ 0& 0 & 1 \end{bmatrix} diag([1,1,1])= 100010001
x W ~ x T x\tilde{W}x^\mathsf{T} xW~xT退化为了 x x T xx^\mathsf{T} xxT,而 x x T xx^\mathsf{T} xxT一般用于协方差矩阵(Covariance Matrix)或相关矩阵(Correlation Matrix),而不管是协方差矩阵还是相关矩阵都可以用于描述矩阵各行,列向量之间的相关程度或相关关系,自协方差矩阵公式是这样的
C o v x , y = E ( ( x − x ˉ ) ( x − x ˉ ) T ) = [ c x 1 , y 1 … c x 1 , y N … … … c x N , y 1 … c x N , y N ] Cov_{x,y} = E((x-\bar{x})(x-\bar{x})^\mathsf{T})=\begin{bmatrix} c_{x_1,y_1}& \dots &c_{x_1,y_N} \\ \dots & \dots & \dots \\ c_{x_N,y_1}& \dots & c_{x_N,y_N} \end{bmatrix} Covx,y=E((xxˉ)(xxˉ)T)= cx1,y1cxN,y1cx1,yNcxN,yN
其中 c x n , x n c_{x_n,x_n} cxn,xn表示两元素的方差,其中 n ∈ { 1 , . . , N } n\in\{1,..,N\} n{1,..,N},而自相关矩阵是这样的
R x , x = E ( x x T ) = [ r x 1 , x 1 … r x 1 , x N … … … r x N , x 1 … r x N , x N ] R_{x,x} = E(xx^\mathsf{T})=\begin{bmatrix} r_{x_1,x_1}& \dots &r_{x_1,x_N} \\ \dots & \dots & \dots \\ r_{x_N,x_1}& \dots & r_{x_N,x_N} \end{bmatrix} Rx,x=E(xxT)= rx1,x1rxN,x1rx1,xNrxN,xN
其中 r x n , x n r_{x_n,x_n} rxn,xn表示两元素相关系数。我们再把 W ~ \tilde{W} W~设置为普通的方阵,那么 x W ~ x T x\tilde{W}x^\mathsf{T} xW~xT则表示经过 W ~ \tilde{W} W~线性映射的 x x x x x x自身的相关关系矩阵。

有了相关关系的矩阵,便可以通过softmax函数获取每个元素的权值,如在自然语言里,就是每个单词的权值,再乘 V V V就是每个单词关于句子加权求和之后的表示,即所谓的Attention。

所以, m a x o u t s o f t ( x ) maxout_{soft}(x) maxoutsoft(x) 与 self-attention还是不太相同的,而self-attention确实用到了 m a x o u t s o f t ( x ) maxout_{soft}(x) maxoutsoft(x)的激活函数的性质。

总结

self-attention部分写的有点粗糙,大概解析了self-attention的部分逻辑,后面有新的内容再补充。

参考

  1. Maxout networks
  2. Attention Is All You Need
  3. Understand Maxout Activation Function in Deep Learning
  4. Correlation coefficients
  5. Scan and Snap: Understanding Training Dynamics and Token Composition in 1-layer Transformer
  6. Understanding the Covariance Matrix

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试---简历

项目 1.1、商品管理 新增商品 同时插入商品对应的使用时间数据&#xff0c;需要操作两张表&#xff1a;product&#xff0c;product_usetime。在productService接口中定义save方法&#xff0c;该方法接受一张Dto对象&#xff0c;dto对象继承自product类&#xff0c;并将prod…

学习open62541 --- [78] 单线程和多线程的使用场景

open62541提供多线程功能&#xff0c;默认不开启&#xff0c;即单线程&#xff0c; 把UA_MULTITHREADING的值设置为 > 100就可以开启多线程了。 这里单线程/多线程的意思是基于open62541运行的server内部是否使用锁去保护数据。只要server运行后还有读写操作需要做&#x…

从源码全面解析 dubbo 消费端服务调用的来龙去脉

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;CSDN博客专家&#xff0c;阿里云专家博主&#x1f4d5;系列专栏&#xff1a;Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

3D 顶点着色与Phong 反射模型

Phong 反射模型有时被称为“Phong 照明”或“Phong 照明”。它由环境光照、漫反射&#xff08;朗伯反射&#xff09;、镜面反射三部分组成。 Phong 反射模型提供了一个方程式&#xff0c;用于计算表面上每个点的光照&#xff0c;I_p&#xff1a; 第一部分代表环境光项。在GLSL代…

X书hmac参数

被删重新发送 全文可以查看&#xff1a; 上面一遍unidbg解密shield文章 unidbg - 》 callObjectMethodV方法填写你的小红书路径下s.xml里的值: 或者在抓包响应头中: 查找xy-ter-str hmac 结果都是在&#xff0c;响应头里&#xff0c;所以 hmac 是服务器下发给客户端的. Over…

黑马头条.

文章目录 前言一、项目概述1.1 能收获什么1.2 项目概述1.3 项目术语1.4 业务说明 二、技术栈2.1技术栈整体框架图2.2技术栈简介 三、nacos环境搭建3.1 虚拟机镜像准备3.2 nacos的安装 四、初始工程搭建4.1 开发环境准备 五、实现登录功能5.1 需求分析5.2 表结构分析5.3 思路分析…

22道常见RocketMQ面试题以及答案

面试宝典到手&#xff0c;搞定面试&#xff0c;不再是难题&#xff0c;系列文章传送地址&#xff0c;请点击本链接。 1、RocketMQ是什么? 2、RocketMQ有什么作用&#xff1f; 3、RoctetMQ的架构 4、RoctetMQ的优缺点 8、消息过滤,如何实现&#xff1f; 9、消息去重,如果…

Elasticsearch 基本使用(四)聚合查询

聚合查询 概述单字段聚合查询统计分组后的数量非文档字段分组文档字段分组 其他聚合运算统计平均值统计总金额统计最大值自定义聚合结果排序简单聚合小结 多字段聚合查询 概述 说到聚合查询&#xff0c;马上会想到 SQL 中的 group by&#xff0c;ES中也有类似的功能&#xff0…

编程语言发展历史

文章目录 语言的发展时间轴语言世代时间轴1940年前-机器语言时代1940年后-汇编语言时代1950年-高级语言的初生1960年-高级语言的进一步成熟1980年-各大语言的进一步增强1990年代-飞速发展时代2000年-新时代 高级编程语言的分类解释型与编译型面向过程与面向对象 对语言的评价Ti…

【学习学习】NLP理解层次模型

NLP&#xff08;Neuro-Linguistic Programming&#xff0c;神经语言程序学&#xff09;&#xff0c;由两位美国人理查得.班德勒&#xff08;Richard Bandler&#xff09;与约翰.葛瑞德&#xff08;John Grinder&#xff09;于1976年创办&#xff0c;并在企业培训中广泛使用。美…

PyTorch 深度学习 || 4. 自编码网络 | Ch4.3 卷积自编码网络图像去噪

卷积自编码网络图像去噪 1. 数据的准备 先简单介绍一下训练网络使用到的图像数据集——STL10&#xff0c;该数据集可以通过torchvision.datasets模块中的STL10()函数进行下载&#xff0c;该数据集共包含三种类型数据,分别是带有标签的训练集和验证集&#xff0c;分别包含5000…

Cookie增删改查方法封装(低内存开销版)

本文章中的低内存开销是指在获取cookie的时候不进行字符串—>数组的转变&#xff0c;全程使用sliceindexOf切割字符串&#xff0c;不创建和操作数组&#xff0c;节约内存&#xff0c;本文代码已存放到github中&#xff0c;后续会持续完善功能&#xff0c;传送门&#xff1a;…

二进制方式部署kubernetes集群

二进制方式部署kubernetes集群 1、部署k8s常见的几种方式 1.1 kubeadm Kubeadm 是一个 k8s 部署工具&#xff0c;提供 kubeadm init 和 kubeadm join&#xff0c;用于快速部署 Kubernetes 集群。 Kubeadm 降低部署门槛&#xff0c;但屏蔽了很多细节&#xff0c;遇到问题很难…

掌握Python的X篇_4_开发工具ipython与vscode的安装使用

本篇将会介绍两个工具的安装及使用来提高Python的编程效率。 ipython&#xff1a;比python更好用的交互式开发环境vscode&#xff1a;本身是文本编辑器&#xff0c;通过安装相关的插件vscode可以作为python集中开发环境使用 掌握Python的X篇_4_开发工具ipython与vscode的安装使…

第四章 linux编辑器——vim的使用

第四章 linux编辑器——vim的使用 一、什么是vim&#xff1f;二、vim的基本操作1、模式之间的相互切换2、vim的常见命令集&#xff08;1&#xff09;正常模式的常见命令a. 模式切换b. 光标移动c.删除文字d.复制e.替换f.撤销g.更改 &#xff08;2&#xff09;底行模式的常见命令…

复习之linux的网络配置

一、基本定义 1.IP IP指网际互连协议&#xff0c;Internet Protocol的缩写&#xff0c;是TCP/IP体系中的网络层协议。 电脑之间要实现网络通信&#xff0c;就必须要有一个合法的ip地址。 IP地址网络地址主机地址&#xff08;又称&#xff1a;主机号和网络号组成&#xff09…

【MySQL】MyISAM中的索引方案

介绍 B树索引使用存储引擎如表所示&#xff1a; 索引/存储引擎MyISAMInnoDBMemoryB树索引支持支持支持 多个存储引擎支持同一种类型的索引&#xff0c;但是他们的实现原理是不同的。 InnoDB和MyISAM默认的索引是B树索引&#xff0c;而Memory默认的索引是Hash索引。 MyISAM…

【软件测试】在Windows使用Docker搭建CentOS环境(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 我们做软件测试在…

租服务器跑代码、pycharm连接服务器跑代码、Xshell连接服务器运行代码

一、服务器 1.1 注册 推荐使用矩池云服务器&#xff0c;按时按量计费&#xff0c;服务器自带镜像可选&#xff0c;可将要运行的项目上传到网盘 注册网址&#xff1a;矩池云 1.2 租用 选择合适的租用 1.3 选择镜像 选择合适的系统镜像 1.4 复制命令 进入租用列表&#xff…

【每日挠头算法题(9)】二叉树的直径|二叉树的层序遍历

文章目录 一、二叉树的直径思路&#xff1a;二叉树的深度优先搜索具体代码如下&#xff1a; 二、二叉树的层序遍历思路&#xff1a;借助队列实现具体代码如下&#xff1a; 总结&#xff1a; 一、二叉树的直径 点我直达~ 思路&#xff1a;二叉树的深度优先搜索 根据题目要求&a…