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

news/2024/11/28 7:33:34/

概述

最近研究超平面排列(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.ppmy.cn/news/455082.html

相关文章

CentOS7 安装 主题、图标、壁纸

安装 Numix 主题和图标(个人喜欢Numix的图标) sudo yum install numix-gtk-theme numix-icon-theme-circle安装 paper 图标 sudo yum install paper-icon-theme安装 xenlism 主题、图标和壁纸 sudo yum install xenlism-wildfire*安装 arc 主题(个人喜欢arc的主题) sudo yu…

达梦数据库介绍

文章目录 前言一、达梦数据库的定位二、达梦有哪些工具1、达梦管理工具2、达梦数据迁移工具3、 达梦数据库配置助手4、其它工具 三、Linux下的工具1、数据库初始化工具2、数据库迁移工具3、其它工具 四、其它连接工具总结 前言 近几年由于各种原因&#xff0c;国内开启了一波国…

弹性盒(Flexbox)布局完全指南:实现灵活自适应的网页排列

弹性盒(Flexbox) 弹性盒(Flexbox)是一种CSS布局模型,旨在为网页提供灵活的、自适应的排列方式。它通过定义容器和内部项目的行为,使得页面元素能够以可预测的方式在容器中进行排列和分布。 弹性盒的使用 通过设置容器的display属性为flex或inline-flex来将其声明为弹性盒…

【第五次】21级计科计算机组成原理课外练习

【第五次】21级计科计算机组成原理课外练习 一、单选题二、多选题三、填空题 一、单选题 2-1 在下列存储器中&#xff0c;哪一种可以在线进行擦除和重写的非易失性存储器&#xff1f; A.FLASH B.DRAM C.SDRAM D.SRAM 2-2 在下列存储器中&#xff0c;断电后所存数据也不会改变…

某农业大学c/c++第五次实验(类和对象)

1.Time时间类 【问题描述】 设计一个Time类&#xff0c;并设计多个重载的构造函数&#xff0c;可以设置时间、进行时间的加减运算、按12小时格式和24小时格式输出时间。 例如&#xff1a; 其中构造函数Time::Time(int s)根据总秒数计算hour、minute、second并构造对象&#x…

创建nextjs项目动态路由

官网 创建nextjs项目 npx create-next-applatest # or yarn create next-app开始nextjs服务 yarn dev #npm run dev修改next项目 pages/index.js {/*可以修改为pages/index.jsx*/} import styles from /styles/Home.module.css import Test from "/components/Test/Tes…

go初识iris框架(一)

iris初始化项目 我找到的文档 mkdir myappcd myappgo mod init myapp对go mod不是很清楚的可以看这篇 go get github.com/kataras/iris/v12latest如果出现以下问题&#xff0c;可以尝试go env -w GOPROXYhttps://goproxy.io,direct go env -w GOPROXYhttps://goproxy.io,di…

flutter学习之旅 - Wrap组件

文章目录 Wrap组件使用Wrap组件实现电商App搜索页面布局 Wrap组件 Wrap可以实现流布局&#xff0c;单行的Wrap跟Row表现几乎一致&#xff0c;单列的Wrap跟Column都是单行单列的; Wrap则突破了这个限制,mainAxis上的空间不足时&#xff0c;则向crossAxis上去扩展 属性说明direct…