Update from Sync Service

This commit is contained in:
FNS Service
2026-07-31 15:28:08 +08:00
commit b8a78631a4
569 changed files with 193313 additions and 0 deletions
@@ -0,0 +1,80 @@
---
doc_type: hypothesis-highlights
url: 'https://blog.csdn.net/Tink1995/article/details/105012972'
---
# 史上最小白之Attention详解_Stink1995的博客-CSDN博客_attention小白解释
## Metadata
- Author: [blog.csdn.net]()
- Title: 史上最小白之Attention详解_Stink1995的博客-CSDN博客_attention小白解释
- Reference: https://blog.csdn.net/Tink1995/article/details/105012972
- Category: #source/article🗞
- Tags:
## Highlights
![image](https://myonemanager.lzybetter.repl.co/picbed/picbed/20200321225923264.png)
- 上图就是引入了Attention 机制的Encoder-Decoder框架。咱们一眼就能看出上图不再只有一个单一的语义编码C,而是有多个C1,C2,C3这样的编码。当我们在预测Y1时,可能Y1的注意力是放在C1上,那咱们就用C1作为语义编码,当预测Y2时,Y2的注意力集中在C2上,那咱们就用C2作为语义编码,以此类推,就模拟了人类的注意力机制。
>*笔记*
> encoder-decoder模型的问题是encoder会将整个输入都转换为唯一的语义编码C,之后C会作用于整个decoder的解码过程,这会导致两个问题:1. 在解码过程中输入对输出的每个部分影响是相同的,这与实际情况不符;2. 对于较长的输入,全部压缩成一个语义编码会导致信息的丢失;attention机制就是为了解决这两个问题提出的;
- 将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成(对应到咱们上里面的例子,key和value是相等地,都是encoder的输出值h),此时给定Target中的某个元素Query(对应到上面的例子也就是decoder中的hi),通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数
>*笔记:*
>注意力机制计算过程:
>1. 利用encoder的输出$h_1, h_2, h_3, ..., h_j$与当前时刻decoder的隐藏值$H_i$计算相关性$F_i$
>2. 利用softmax函数处理$F_1$得到注意力分配权重$\alpha_{ij}$(j是encoder的时刻,i是decoder的时刻)
>3. 将encoder的输出值h与对应的注意力分配权重α进行点乘求和,就得到注意力attention;
- 相似度计算方法1: 点积:就是将Query和Keyi进行点积,Transformer中就是用的这种方法。
$$
Similarity(Q,K_i) = Query \times Key_i
$$
>*笔记*
>就是将decoder的隐藏值$H_i$分别与encoder的输出值$h_j$进行点乘
- 相似度计算方法2::Cosine相似性-余弦相似度:
$$
Similarity(Q,K_i) = \frac{Query\times Key_i}{||Query||·||Key_i||}
$$
- 分子就是两个向量Query与Key的点积 分母就是两个向量的L2范数,(L2范数:指向量各元素的平方和然后求平方根)
- 相似度计算方法3MLP网络:
$$
Similarity(Q,K_i) = MLP(Query, Key_i)
$$
- 计算出Query和Keyi的相似性后,第二阶段引入类似SoftMax的计算方式对第一阶段的相似性得分进行数值转换,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过SoftMax的内在机制更加突出重要元素的权重;
$$
\alpha_i=Softmax(Sim_i)=\frac{e^{Sim_{i}}}{\sum_{j=1}^{L_X}{e^{Sim_i}}}
$$
- 第二阶段的计算结果 $\alpha_i$ 即为 $Value_i$ 对应的权重系数,然后进行加权求和即可得到Attention数值:
$$
Attention(Query, Value) = \sum_{i=1}^{L_x}{\alpha_i·Value_i}
$$
![image](https://myonemanager.lzybetter.repl.co/picbed/picbed/20200322210257300.png)
- 阶段1:Query与每一个Key计算相似性得到相似性评分s
- 阶段2:将s评分进行softmax转换成\[0,1\]之间的概率分布
- 阶段3:将\[a1,a2,a3…an\]作为权值矩阵对Value进行加权求和得到最后的Attention值
- 优缺点:
- 优点: 1.速度快。Attention机制不再依赖于RNN,解决了RNN不能并行计算的问题。这里需要说明一下,基于Attention机制的seq2seq模型,因为是有监督的训练,所以咱们在训练的时候,在decoder阶段并不是说预测出了一个词,然后再把这个词作为下一个输入,因为有监督训练,咱们已经有了target的数据,所以是可以并行输入的,可以并行计算decoder的每一个输出,但是再做预测的时候,是没有target数据地,这个时候就需要基于上一个时间节点的预测值来当做下一个时间节点decoder的输入。所以节省的是训练的时间。
- 2.效果好。效果好主要就是因为注意力机制,能够获取到局部的重要信息,能够抓住重点。
- 缺点: 1.只能在Decoder阶段实现并行运算,Encoder部分依旧采用的是RNN,LSTM这些按照顺序编码的模型,Encoder部分还是无法实现并行运算,不够完美。
- 2.就是因为Encoder部分目前仍旧依赖于RNN,所以对于中长距离之间,两个词相互之间的关系没有办法很好的获取。
>*笔记:*
>总结来说,attention机制主要集中于对decoder的优化,并没有对encoder有太多优化;
- Self Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。其具体计算过程是一样的,只是计算对象发生了变化而已,相当于是Query=Key=Value,计算过程与attention一样
<div align="center"><img src="https://myonemanager.lzybetter.repl.co/picbed/picbed/20200322231248341.png"></div>
- 我们想知道这句话中的its,在这句话里its指代的是什么,与哪一些单词相关,那么就可以将its作为Query,然后将这一句话作为Key和Value来计算attention值,找到与这句话中its最相关的单词。通过self-attention我们发现its在这句话中与之最相关的是Law和application,通过我们分析语句意思也十分吻合。
- 如此引入Self Attention后会更容易捕获句子中长距离的相互依赖的特征,因为如果是RNN或者LSTM,需要依次序序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小。但是Self Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。除此外,Self Attention对于增加计算的并行性也有直接帮助作用。正好弥补了attention机制的两个缺点,这就是为何Self Attention逐渐被广泛使用的主要原因。
@@ -0,0 +1,28 @@
---
doc_type: hypothesis-highlights
url: 'https://blog.csdn.net/qq_38410428/article/details/101102075'
---
# Pytorchmodel.train()和model.eval()用法和区别,以及model.eval()和torch.no_grad()的区别_初识-CV的博客-CSDN博客_pytorch train
## Metadata
- Author: [blog.csdn.net]()
- Title: Pytorchmodel.train()和model.eval()用法和区别,以及model.eval()和torch.no_grad()的区别_初识-CV的博客-CSDN博客_pytorch train
- Reference: https://blog.csdn.net/qq_38410428/article/details/101102075
- Category: #source/article🗞
- Tags:
## Highlights
- 如果模型中有BN层(Batch Normalization)和 Dropout,需要在训练时添加model.train()
- 在这个特定的例子中,似乎每50次迭代就会降低准确度。 如果我们检查一下代码, 我们看到确实在train函数中设置了训练模式。
- 修复很简单,我们将model.train() 向下移动一行,让其在训练循环中。理想的模式设置是尽可能接近推理步骤,以避免忘记设置它。修正后,我们的训练过程看起来更合理,没有中间的峰值出现。
- 主要用于通知dropout层和BN层在training和validation/test模式间切换: 在train模式下,dropout网络层会按照设定的参数p,设置保留激活单元的概率(保留概率=p)。BN层会继续计算数据的mean和var等参数并更新。在eval模式下,dropout层会让所有的激活单元都通过,而BN层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值。
- 2.eval模式不会影响各层的gradient计算行为,即gradient计算和存储与training模式一样,只是不进行反向传播(back probagation)。
- 而with torch.no_grad()则主要是用于停止autograd模块的工作,以起到加速和节省显存的作用。它的作用是将该with语句包裹起来的部分停止梯度的更新,从而节省了GPU算力和显存,但是并不会影响dropout和BN层的行为。
- 如果不在意显存大小和计算时间的话,仅仅使用model.eval()已足够得到正确的validation/test的结果;而with torch.no_grad()则是更进一步加速和节省gpu空间(因为不用计算和存储梯度),从而可以更快计算,也可以跑更大的batch来测试。
@@ -0,0 +1,35 @@
---
doc_type: hypothesis-highlights
url: 'https://blog.csdn.net/Tink1995/article/details/105012972'
---
# 史上最小白之Attention详解_Stink1995的博客-CSDN博客_attention小白解释
## Metadata
- Author: [blog.csdn.net]()
- Title: 史上最小白之Attention详解_Stink1995的博客-CSDN博客_attention小白解释
- Reference: https://blog.csdn.net/Tink1995/article/details/105012972
- Category: #source/article🗞
- Tags:
## Highlights
- 上图就是引入了Attention 机制的Encoder-Decoder框架。咱们一眼就能看出上图不再只有一个单一的语义编码C,而是有多个C1,C2,C3这样的编码。当我们在预测Y1时,可能Y1的注意力是放在C1上,那咱们就用C1作为语义编码,当预测Y2时,Y2的注意力集中在C2上,那咱们就用C2作为语义编码,以此类推,就模拟了人类的注意力机制。
- 将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成(对应到咱们上里面的例子,key和value是相等地,都是encoder的输出值h),此时给定Target中的某个元素Query(对应到上面的例子也就是decoder中的hi),通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数
- 点积:就是将Query和Keyi进行点积,Transformer中就是用的这种方法。
- Cosine相似性-余弦相似度: 分子就是两个向量Query与Key的点积 分母就是两个向量的L2范数,(L2范数:指向量各元素的平方和然后求平方根)
- 计算出Query和Keyi的相似性后,第二阶段引入类似SoftMax的计算方式对第一阶段的相似性得分进行数值转换,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过SoftMax的内在机制更加突出重要元素的权重
- 第二阶段的计算结果 ai 即为 Valuei 对应的权重系数,然后进行加权求和即可得到Attention数值:
- 阶段1:Query与每一个Key计算相似性得到相似性评分s 阶段2:将s评分进行softmax转换成[0,1]之间的概率分布 阶段3:将[a1,a2,a3…an]作为权值矩阵对Value进行加权求和得到最后的Attention值
- 看到这你应该已经能够Attention的强大之处了,但是如此强大的Attention真的是无懈可击,没有一点缺点的吗? 优点: 1.速度快。Attention机制不再依赖于RNN,解决了RNN不能并行计算的问题。这里需要说明一下,基于Attention机制的seq2seq模型,因为是有监督的训练,所以咱们在训练的时候,在decoder阶段并不是说预测出了一个词,然后再把这个词作为下一个输入,因为有监督训练,咱们已经有了target的数据,所以是可以并行输入的,可以并行计算decoder的每一个输出,但是再做预测的时候,是没有target数据地,这个时候就需要基于上一个时间节点的预测值来当做下一个时间节点decoder的输入。所以节省的是训练的时间。 2.效果好。效果好主要就是因为注意力机制,能够获取到局部的重要信息,能够抓住重点。 缺点: 1.只能在Decoder阶段实现并行运算,Encoder部分依旧采用的是RNN,LSTM这些按照顺序编码的模型,Encoder部分还是无法实现并行运算,不够完美。 2.就是因为Encoder部分目前仍旧依赖于RNN,所以对于中长距离之间,两个词相互之间的关系没有办法很好的获取。
- Self Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。其具体计算过程是一样的,只是计算对象发生了变化而已,相当于是Query=Key=Value,计算过程与attention一样
- 我们想知道这句话中的its,在这句话里its指代的是什么,与哪一些单词相关,那么就可以将its作为Query,然后将这一句话作为Key和Value来计算attention值,找到与这句话中its最相关的单词。通过self-attention我们发现its在这句话中与之最相关的是Law和application,通过我们分析语句意思也十分吻合。
- 如此引入Self Attention后会更容易捕获句子中长距离的相互依赖的特征,因为如果是RNN或者LSTM,需要依次序序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小。但是Self Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。除此外,Self Attention对于增加计算的并行性也有直接帮助作用。正好弥补了attention机制的两个缺点,这就是为何Self Attention逐渐被广泛使用的主要原因。
@@ -0,0 +1,25 @@
---
doc_type: hypothesis-highlights
url: 'https://blog.csdn.net/Tink1995/article/details/105080033'
---
# 史上最小白之Transformer详解_Stink1995的博客-CSDN博客_transformer
## Metadata
- Author: [blog.csdn.net]()
- Title: 史上最小白之Transformer详解_Stink1995的博客-CSDN博客_transformer
- Reference: https://blog.csdn.net/Tink1995/article/details/105080033
- Category: #source/article🗞
- Tags:
## Highlights
- 输入inputs embedding后需要给每个word的词向量添加位置编码positional encoding
- 咱们的Transformer 的是完全基于self-Attention地,而self-attention是不能获取词语位置信息地
- 《Attention Is All You Need》论文中Transformer使用的是正余弦位置编码。位置编码通过使用不同频率的正弦、余弦函数生成,然后和对应的位置的词向量相加,位置向量维度必须和词向量的维度一致
- 可以通过数据训练学习得到positional encoding,类似于训练学习词向量,goole在之后的bert中的positional encoding便是由训练得到地
- pos表示单词在句子中的绝对位置,pos=0,1,2…,例如:Jerry在"Tom chase Jerry"中的pos=2dmodel表示词向量的维度,在这里dmodel=512;2i和2i+1表示奇偶性,i表示词向量中的第几维,例如这里dmodel=512,故i=012…255。
- 拼接相加都可以,只是本身词向量的维度512维就已经蛮大了,再拼接一个512维的位置向量,变成1024维,这样训练起来会相对慢一些,影响效率。两者的效果是差不多地,既然效果差不多当然是选择学习习难度较小的相加了。
@@ -0,0 +1,156 @@
---
doc_type: hypothesis-highlights
url: 'https://www.cnblogs.com/cxuanBlog/p/14917187.html'
---
# MQTT 协议是个啥?这篇文章告诉你! - 程序员cxuan - 博客园
## Metadata
- Author: [cnblogs.com]()
- Title: MQTT 协议是个啥?这篇文章告诉你! - 程序员cxuan - 博客园
- Reference: https://www.cnblogs.com/cxuanBlog/p/14917187.html
- Category: #source/article🗞
- Tags:
## Highlights
- 还有一个优势就是 MQTT 在客户端容易实现,而且具有易用性,非常适合当今资源有限的设备。
- MQTT 协议与 HTTP 相比具有一个明显的优势:数据包开销较小
- pub/sub 最重要的方面是 publisher 与 subscriber 的解藕
- 空间解耦
- 时间解藕
- 同步 Synchronization 解藕
- 发布/订阅模式消除了传统客户-服务器之间的直接通信,把通信这个操作交给了 broker 进行代理,并在空间、时间、同步三个维度上进行了解藕。
- pub/sub 比传统的客户端-服务器模式有了更好的拓展,这是由于 broker 的高度并行化,并且是基于事件驱动的模式
- 事件驱动中的程序流程会由诸如用户操作(点击鼠标、键盘)、传感器输出或者从其他程序或传递的消息事件决定
- 事件驱动编程是图形用户界面和其他应用程序比如 Web 中使用的主要范式,这些应用程序能够响应用户输入执行某些操作为中心,这同时也适用于驱动程序的编程
- broker 能够对消息进行过滤,使每个订阅者只接收自己感兴趣的消息
- 基于主题的过滤
- 基于内容的过滤
- 每条消息都会有一个 topic ,接收客户端会向 borker 订阅感兴趣的 topic,订阅后,broker 就会确保客户端收到发布到 topic 中的消息
- broker 会根据特定的内容过滤消息,接受客户端会经过过滤他们感兴趣的内容。这种方法的一个显著的缺点就是必须事先知道消息的内容,不能加密或者轻易修改
- 基于类型的过滤
- 为了发布/订阅系统的挑战,MQTT 具有三个服务质量级别,你可以指定消息从客户端传到 broker 或者从 broker 传到客户端,在 topic 的订阅中,会存在 topic 没有 subscriber 订阅的情况,作为 broker 必须知道如何处理这种情况。
- 在传统的消息队列模式中,一条消息会存储在消息队列中等待被消费,每个传入的消息都存储在消息队列中,直到它被客户端(通常称之为消费者)所接收,如果没有客户端消费消息的话,这条消息就会存在消息队列中等待被消费。但是在消息队列中,不会存在消息没有客户端消费的情况,但是在 MQTT 中,确存在 topic 无 subscriber 订阅的情况。
- 在传统的消息队列模式中,一条消息只能被一个客户端所消费,负载会分布在队列的每个消费者之间;而在 MQTT 中,每个订阅者都会受到消息,每个订阅者有相同的负载。
- 在传统的消息队列模式中,必须使用单独的命令来显式创建队列,只有队列创建后,才可以生产或者消费消息;而在 MQTT 中,topic 比较灵活,可以即时创建。
- publisher 和 subscriber 都属于 MQTT Client。
- 发布和订阅的功能也可以由同一个 MQTT Client 实现。
- MQTT 客户端是指运行 MQTT 库并通过网络连接到 MQTT broker 的任何设备,这些设备可以从微控制器到成熟的服务器
- broker 负责接收所有消息,过滤消息,确定是哪个 client 订阅了每条消息,并将消息发送给对应的 client,broker 还负责保存会话数据,这些数据包括订阅的和错过的消息。broker 还负责客户端的身份验证和授权。
- MQTT 是基于 TCP/IP 协议基础之上的,所以 MQTT 的 client 和 broker 都需要 TCP/IP 协议的支持。
- MQTT 的连接总是在 client 和 broker 之间进行,client 和 client 之间并不会相互连接。如果要发起连接的话,那么 client 就会向 broker 发起 CONNECT 消息,代理会使用 CONNACK 消息和状态码进行响应
- 一旦 client 和 broker 的连接建立后,broker 就会使客户端的连接一直处于打开状态,直到 client 发出断开命令或者连接中断。
- MQTT 的消息报文主要分为 CONNECT 和 CONNACK 消息。
- 为了初始化连接,需要 client 向 broker 发送 CONNECT 消息
- 一个 MQTT 客户端发送一条 CONNECT 连接,这条 CONNECT 连接可能会包含下面这些信息
- ClientId:显而易见,这个就是每个客户端的 ID 标识,也就是连接到 MQTT broker 的每个 client。
- 这个 ID 应该是每个 client 和 broker 唯一的,如果你不需要 broker 持有状态的话,你可以发送一个空的 ClientId,空的 ClientId 会没有任何状态。在这种情况下,ClientSession 需要设置为 true,否则将会拒绝连接。
- CleanSessionCleanSession 会话标志会告诉 broker client 是否需要建立持久会话。在持久会话 CleanSession = false)中,broker 存储 client 的所有订阅以及服务质量(Qos) 是 1 或 2 订阅的 client 的所有丢失的消息。
- 如果会话不是持久的(CleanSession = true),那么 broker 则不会为 client 存储任何内容并且会清除先前持久会话中的所有信息。
- Username/Password MQTT 会发送 username 和 password 进行 client 认证和授权
- LastWillxxx LastWillxxx 表示的是遗愿,client 在连接 broker 的时候将会设立一个遗愿,这个遗愿会保存在 broker 中,当 client 因为非正常原因断开与 broker 的连接时,broker 会将遗愿发送给订阅了这个 topic(订阅遗愿的 topic)的 client。
- keepAlivekeepAlive 是 client 在连接建立时与 broker 通信的时间间隔,通常以秒为单位。这个时间指的是 client 与 broker 在不发送消息下所能承受的最大时长。
- 当 broker 收到 CONNECT 消息时,它有义务回复 CONNACK 消息进行响应。CONNACK 消息包括两部分内容
- SessionPresent:会话当前标识,这个标志会告诉 client 当前 broker 是否有一个持久性会话与 client 进行交互。
- SessionPresent 标志和 CleanSession 标志有关,当 client 在 CleanSession 设置为 true 的情况下连接时,SessionPresent 始终为 false,因为没有持久性会话可以使用。如果 CleanSession 设置为 false,则有两种可能性,如果 ClientId 的会话信息可用,并且 broker 已经存储了会话信息,那么 SessionPresent 为 true,否则如果没有 ClientId 的任何会话信息,那么 SessionPresent 为 false。
- ReturnCodeCONNACK 消息中的第二个标志是连接确认标志。这个标志包含一个返回码,告诉客户端连接尝试是否成功。连接确认标志有下面这些选项。
- 消息类型 发布
- MQTT 使用的是基于 topic 主题的过滤。每条消息都应该包含一个 topic ,broker 可以使用 topic 将消息发送给感兴趣的 client。除此之外,每条消息还会包含一个负载(Payload),Payload 中包含要以字节形式发送的数据。
- MQTT 是数据无关性的,也就是说数据是由发布者 - publisher 决定要发送的是 XML 、JSON 还是二进制数据、文本数据
- MQTT 中的 PUBLISH 消息结构如下。
- Packet Identifier:这个 PacketId 标识在 client 和 broker 之间唯一的消息标识。packetId 仅与大于零的 Qos 级别相关
- TopicName:主题名称是一个简单的字符串,/ 代表着分层结构
- Qos:这个数字表示的是服务质量水平,服务质量水平有三个等级:0、1 和 2,服务级别决定了消息到达 client 或者 broker 的保证类型,来决定消息是否丢失
- RetainFlag:这个标志表示 broker 将最近收到的一条 RETAIN 标志位为true的消息保存在服务器端(内存或者文件)。
- MQTT 服务器只会为每一个 Topic 保存最近收到的一条 RETAIN 标志位为true的消息
- Payload:这个是每条消息的实际内容
- Dupflag:这个标志表示该消息是重复的并且由于预期的 client 或者 broker 没有确认所以重新发送了一次。
- 当 client 向 broker 发送消息时,broker 会读取消息,根据 Qos 的级别进行消息确认,然后处理消息。处理消息其实就是确定哪些 subscriber 订阅了 topic 并将消息发送给他们。
- 发布消息的 client 不会知道是否有人对发布的消息感兴趣,同时也不知道多少 client 从 broker 收到了消息。
- 订阅
- CONNACK
- CONNECT
- client 会向 broker 发送 SUBSCRIBE 消息来接收有关感兴趣的 topic,这个 SUBSCRIBE 消息非常简单,它包含了一个唯一的数据包标识和一个订阅列表
- Packet Identifier:这个 PacketId 和上面的 PacketId 一样,都表示消息的唯一标识符。 ListOfSubscriptionsSUBSCRIBE 消息可以包含一个 client 的多个订阅,每个订阅都会由一个 topic 和一个 Qos 构成。订阅消息中的 topic 可以包含通配符。
- 确认消息
- client 在向 broker 发送 SUBSCRIBE 消息后,为了确认每个订阅,broker 会向 client 发送 SUBACK 确认消息。这个 SUBACK 包含原始 SUBSCRIBE 消息的 packetId 和返回码列表。
- 发布 - 订阅 - 确认消息,这三种消息的示意图如下。
- 退订
- SUBSCRIBE 消息对应的是 UNSUBSCRIBE 消息,这条消息发送后,broker 会删除关于 client 的订阅。
- 确认退订
- 取消订阅也需要 broker 的确认,此时 broker 会向 client 发送一个 UNSUBACK 消息
- 退订和确认退订的流程如下
- MQTT Topic 非常轻量级,client 在发布或订阅之前不需要先创建所需要的 Topic,broker 在接收每个 Topic 前不用进行初始化操作。
- 当客户端订阅 Topic 时,它可以订阅已发布消息的确切 Topic,也可以使用通配符来同时订阅多个 Topic
- 单级通配符可以替换 Topic 的一个级别,+ 号代表 Topic 中的单级通配符
- 多级通配符涵盖多个 Topic,# 代表 Topic 中的多级通配符。为了让 broker 能够确定和哪些 Topic 匹配,多级通配符必须作为 Topic 中的最后一个字符放置,并以 / 开头
- 当 client 订阅带有多级通配符的 Topic 时,不论 Topic 有多长多深,它都会收到通配符之前 Topic 的所有消息。如果你只将 Topic 定义为 # 的话,那么你将会收到所有的消息。
@@ -0,0 +1,40 @@
---
doc_type: hypothesis-highlights
url: 'https://developer.aliyun.com/article/786001'
---
# MQTT协议详解及v5.0实践-阿里云开发者社区
## Metadata
- Author: [developer.aliyun.com]()
- Title: MQTT协议详解及v5.0实践-阿里云开发者社区
- Reference: https://developer.aliyun.com/article/786001
- Category: #source/article🗞
- Tags:
## Highlights
- MQTTv3协议是为在低带宽、不可靠的网络上工作的传感器而设计的基于TCP的应用层协议,适用于IoT场景
- 使用发布/订阅消息模式,支持一对多的消息分发
- 报文格式设计精简, 适用于小规模数据传输以及资源受限的IoT设备
- 支持QoS0、QoS1、QoS2 三种消息QoS。
- MQTT-SN(Sensor Networks) 是MQTT协议的传感器网络版本,最早用在zigBee无线网络中,主要面对电池供电,有限的处理器能力和存储能力的设备。只有很小的内存和CPU,TCP 对于这些设备来说非常奢侈,甚至无法允许TCP协议栈。
- MQTT 5.0在协议层提供了更大的自定义扩展空间,平台基于扩展点可支持更丰富的协议能力
- 设备状态一致性策略设计,包括session管理机制、心跳检测机制、异地登陆问题、状态最终一致性策略
- 协议层本地有session管理器来对本地会话进行管理,通过心跳检测、会话自检来保证跟设备之间的连接状态一致性
- 设备状态一致性策略:设备到MQTT协议接入层之间是tcp长连接,通过心跳机制保证心跳周期内设备状态的最终一致性
- 通过分布式会话版本号,保证分布式会话并发更新安全,通过上行消息/心跳定时触发会话自检机制,解决异常情况下本地/分布式会话状态不一致的问题。
- MQTT协议是基于PUB/SUB的异步通信模式
- MQTT协议层针对不同场景支持多种MQTT接入方式,同时支持tcp直连、tls、ws、wss等方式接入
- 协议层实现了多协议端口复用,也就是一个端口同时支持多种协议
- 通过topic中包含的messageId匹配请求与响应,对业务数据零侵入messageId的生成与匹配、超时控制等逻辑,调用方无感知简化了业务方调用逻辑,扩展了MQTT使用场景。
@@ -0,0 +1,16 @@
---
doc_type: hypothesis-highlights
url: 'https://www.jianshu.com/p/17a28814a925'
---
# MQTT协议详解
## Metadata
- Author: [jianshu.com]()
- Title: MQTT协议详解
- Reference: https://www.jianshu.com/p/17a28814a925
- Category: #source/article🗞
- Tags:
## Highlights
- 该协议构建于TCP/IP协议上
- MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务
@@ -0,0 +1,16 @@
---
doc_type: hypothesis-highlights
url: 'https://juejin.cn/post/7195433939593330749'
---
# 斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码 - 掘金
## Metadata
- Author: [juejin.cn]()
- Title: 斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码 - 掘金
- Reference: https://juejin.cn/post/7195433939593330749
- Category: #source/article🗞
- Tags:
## Highlights
- 斯皮尔曼相关系数的适用条件比皮尔逊相关系数要广,只需两个变量的观测值是成对的等级评定数据,或者是由连续变量观测数据转化得到的等级数据,不论两个变量的总体分布形态、样本容量的大小如何,都可以用斯皮尔曼等级相关系数来进行研究。只要数据满足单调关系(例如线性函数、指数函数、对数函数等)就能够使用。
@@ -0,0 +1,16 @@
---
doc_type: hypothesis-highlights
url: 'https://juejin.cn/post/7195433939593330749'
---
# 斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码 - 掘金
## Metadata
- Author: [juejin.cn]()
- Title: 斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码 - 掘金
- Reference: https://juejin.cn/post/7195433939593330749
- Category: #source/article🗞
- Tags:
## Highlights
- 斯皮尔曼相关系数的适用条件比皮尔逊相关系数要广,只需两个变量的观测值是成对的等级评定数据,或者是由连续变量观测数据转化得到的等级数据,不论两个变量的总体分布形态、样本容量的大小如何,都可以用斯皮尔曼等级相关系数来进行研究。只要数据满足单调关系(例如线性函数、指数函数、对数函数等)就能够使用。
@@ -0,0 +1,18 @@
---
doc_type: hypothesis-highlights
url: 'https://juejin.cn/post/7196290097549361209'
---
# 皮尔逊相关性分析一文详解+python实例代码 - 掘金
## Metadata
- Author: [juejin.cn]()
- Title: 皮尔逊相关性分析一文详解+python实例代码 - 掘金
- Reference: https://juejin.cn/post/7196290097549361209
- Category: #source/article🗞
- Tags:
## Highlights
- 总结一下对于皮尔逊相关系数的使用场景,有三种必要的特性使用皮尔逊系数最佳: 连续数据 正态分布 线性关系
- 上述三个条件均满足才能使用pearson相关系数,否则就用spearman相关系数。定序数据之间也只用spearman相关系数,不能用pearson相关系数。
@@ -0,0 +1,18 @@
---
doc_type: hypothesis-highlights
url: 'https://juejin.cn/post/7196290097549361209'
---
# 皮尔逊相关性分析一文详解+python实例代码 - 掘金
## Metadata
- Author: [juejin.cn]()
- Title: 皮尔逊相关性分析一文详解+python实例代码 - 掘金
- Reference: https://juejin.cn/post/7196290097549361209
- Category: #source/article🗞
- Tags:
## Highlights
- 总结一下对于皮尔逊相关系数的使用场景,有三种必要的特性使用皮尔逊系数最佳: 连续数据 正态分布 线性关系
- 上述三个条件均满足才能使用pearson相关系数,否则就用spearman相关系数。定序数据之间也只用spearman相关系数,不能用pearson相关系数。
@@ -0,0 +1,24 @@
---
doc_type: hypothesis-highlights
url: 'https://juejin.cn/post/7187943854141046839'
---
# 肯德尔系数相关性分析一文详解+python实例代码 - 掘金
## Metadata
- Author: [juejin.cn]()
- Title: 肯德尔系数相关性分析一文详解+python实例代码 - 掘金
- Reference: https://juejin.cn/post/7187943854141046839
- Category: #source/article🗞
- Tags:
## Highlights
- Kendall(肯德尔)系数的定义:n个同类的统计对象按特定属性排序,其他属性通常是乱序的。同序对(concordant pairs)和异序对(discordant pairs)之差与总对数(n*(n-1)/2)的比值定义为Kendall(肯德尔)系数。
- 肯德尔相关则是基于样本数据对之间的关系来进行相关系数的强弱的分析,数据对可以分为一致对(Concordant)和分歧对(Discordant)。
- 变量数据是有序的( ordinal) 或者是连续的(continuous. 有序尺度(Ordinal scales )的数据通常用于用数值的方式来衡量非数值的概念
- 连续尺度的数据就勿需解释了,常见的温度啊、体重啊、收入啊等等都(或严格、或近似)算是连续尺度的数据。
- 肯德尔系数有两个计算公式,一个称为Tau-c,另一个称为Tau-b。两者的区别是Tau-b可以处理有相同值的情况,即并列排位(tied ranks)。
@@ -0,0 +1,24 @@
---
doc_type: hypothesis-highlights
url: 'https://juejin.cn/post/7187943854141046839'
---
# 肯德尔系数相关性分析一文详解+python实例代码 - 掘金
## Metadata
- Author: [juejin.cn]()
- Title: 肯德尔系数相关性分析一文详解+python实例代码 - 掘金
- Reference: https://juejin.cn/post/7187943854141046839
- Category: #source/article🗞
- Tags:
## Highlights
- Kendall(肯德尔)系数的定义:n个同类的统计对象按特定属性排序,其他属性通常是乱序的。同序对(concordant pairs)和异序对(discordant pairs)之差与总对数(n*(n-1)/2)的比值定义为Kendall(肯德尔)系数。
- 肯德尔相关则是基于样本数据对之间的关系来进行相关系数的强弱的分析,数据对可以分为一致对(Concordant)和分歧对(Discordant)。
- 变量数据是有序的( ordinal) 或者是连续的(continuous. 有序尺度(Ordinal scales )的数据通常用于用数值的方式来衡量非数值的概念
- 连续尺度的数据就勿需解释了,常见的温度啊、体重啊、收入啊等等都(或严格、或近似)算是连续尺度的数据。
- 肯德尔系数有两个计算公式,一个称为Tau-c,另一个称为Tau-b。两者的区别是Tau-b可以处理有相同值的情况,即并列排位(tied ranks)。
@@ -0,0 +1,20 @@
---
doc_type: hypothesis-highlights
url: 'https://mengte.online/archives/1879'
---
# Spearman相关性分析(Spearman Correlation Analysis)——理论介绍 - 梦特医数通
## Metadata
- Author: [mengte.online]()
- Title: Spearman相关性分析(Spearman Correlation Analysis)——理论介绍 - 梦特医数通
- Reference: https://mengte.online/archives/1879
- Category: #source/article🗞
- Tags:
## Highlights
- 先将变量X、Y分别从小到大排序编秩,用秩次RX和RY表示。排序时,出现数据相等从而造成秩次相同的现象称为相持(tie),此时,取其平均秩次为每个数据的秩次
- Spearman相关性分析,需要满足2个条件: 条件1:变量包含等级变量、或变量不服从正态分布或分布类型未知。 条件2:两变量之间存在单调关系。
- Spearman相关,又称秩相关、等级相关,是对两变量的秩次大小作线性相关分析,对原始变量的分布不作要求,属于非参数统计方法,适用范围较广。对于服从Pearson相关的数据亦可计算Spearman相关系数,但统计效能更低。 Spearman相关系数(rs)介于-1与1之间,rs >0为正相关,rs <0为负相关。rs的绝对值(|rs|)越大,变量间的相关性越强。 参考Pearson相关系数对rs进行等级划分:当0.9</r/<1,为高度相关;当0.7</r/<0.9,为强相关;0.4</r/<0.7,为中度相关;0.2</r/<0.4,为弱相关性;0</r/<0.2,为极弱相关或无相关性。
@@ -0,0 +1,27 @@
---
doc_type: hypothesis-highlights
url: 'https://mp.weixin.qq.com/s/kBdFFcoFhOBWsPiR50s7ow'
---
# 我从未见过如此全面的Transformer剖析
## Metadata
- Author: [mp.weixin.qq.com]()
- Title: 我从未见过如此全面的Transformer剖析
- Reference: https://mp.weixin.qq.com/s/kBdFFcoFhOBWsPiR50s7ow
- Category: #source/article🗞
- Tags:
## Highlights
- Transformer架构的优点在于它完全摈弃了传统的循环结构,取而代之的是只通过注意力机制来计算模型输入与输出的隐含表示,而这种注意力的名字就是大名鼎鼎的自注意力机制(self-attention),也就是图1-2中的Multi-Head Attention模块
- 所谓自注意力机制就是通过某种运算来直接计算得到句子在编码过程中每个位置上的注意力权重;然后再以权重和的形式来计算得到整个句子的隐含向量表示。
- 1.2 技术手段
- 1.2.1 什么是self-Attention
- 所谓的自注意力机制其实就是论文中所指代的“Scaled Dot-Product Attention“
- 自注意力机制的核心过程就是通过Q和K计算得到注意力权重;然后再作用于V得到整个权重和输出
- 对于输入Q、K和V来说,其输出向量的计算公式为:其中Q、K和V分别为3个矩阵,且其(第2个)维度分别为 (从后面的计算过程其实可以发现。而公式(1.1)中除以的过程就是图1-3中所指的Scale过程。之所以要进行缩放这一步是因为通过实验作者发现,对于较大的来说在完成后将会得到很大的值,而这将导致在经过sofrmax操作后产生非常小的梯度,不利于网络的训练。
@@ -0,0 +1,17 @@
---
doc_type: hypothesis-highlights
url: 'https://www.woshipm.com/data-analysis/2163962.html'
---
## Metadata
- Author: [woshipm.com]()
- Title: 一套正确且高效的数据分析体系,该如何搭建? | 人人都是产品经理
- Reference: https://www.woshipm.com/data-analysis/2163962.html
- Category: #source/article🗞
- Tags:
-
## Highlights
- 明确分析目的和思路——数据收集——数据处理——数据分析——数据展现——报告撰写。
@@ -0,0 +1,19 @@
---
doc_type: hypothesis-highlights
url: 'https://www.zhihu.com/tardis/zm/art/366993073?source_id=1003'
---
# additive attention与dot-product attention
## Metadata
- Author: [zhihu.com]()
- Title: additive attention与dot-product attention
- Reference: https://www.zhihu.com/tardis/zm/art/366993073?source_id=1003
- Category: #source/article🗞
- Tags:
## Highlights
- “加型注意力机制”与“点积型注意力机制”最大的区别就是解码器隐状态与编码器输出的编码的交互过程,也就是两者关系大小的评估过程。在这里传统编码-解码结构使用了一个全连接神经网络结构,意味着两者的关系是加和的关系。因为我们知道全连接神经网络的公式是 ,如果将解码器的隐状态 和编码器每一步的隐状态 分别视作全连接神经网络的 和 的话,计算公式显然为 ,显然这里解码器隐状态与编码器输出编码的交互方式为加和。
- 矩阵 和矩阵 、 的交互为矩阵的乘积,所以这里解码器隐状态与编码器输出编码的交互方式为乘积。
- 根据Transformer论文的说法,加型注意力机制和点乘注意力机制有着相同的计算复杂度,但点乘注意力机制运算可以使用高度优化的并行矩阵乘法代码,会更快也更节省空间。
@@ -0,0 +1,20 @@
---
doc_type: hypothesis-highlights
url: 'https://zhuanlan.zhihu.com/p/445009191'
---
# 理解Pytorch的loss.backward()和optimizer.step()
## Metadata
- Author: [zhuanlan.zhihu.com]()
- Title: 理解Pytorch的loss.backward()和optimizer.step()
- Reference: https://zhuanlan.zhihu.com/p/445009191
- Category: #source/article🗞
- Tags:
## Highlights
- loss.backward()故名思义,就是将损失loss 向输入侧进行反向传播,同时对于需要进行梯度计算的所有变量 xxx (requires_grad=True),计算梯度 ddxloss\frac{d}{dx}loss\frac{d}{dx}loss ,并将其累积到梯度 x.gradx.gradx.grad 中备用,即: x.grad=x.grad+ddxlossx.grad =x.grad +\frac{d}{dx}lossx.grad =x.grad +\frac{d}{dx}loss
- optimizer.step()是优化器对 xxx 的值进行更新,以随机梯度下降SGD为例:学习率(learning rate, lr)来控制步幅,即:x=xlrx.gradx = x - lr * x.gradx = x - lr * x.grad ,减号是由于要沿着梯度的反方向调整变量值以减少Cost。
- optimizer.zero_grad()清除了优化器中所有 xxx 的 x.gradx.gradx.grad ,在每次loss.backward()之前,不要忘记使用,否则之前的梯度将会累积,这通常不是我们所期望的( 也不排除也有人需要利用这个功能)。