通俗易懂的理解卷积

这里用存款复利为例来理解卷积:

小明存入100元钱,年利率是5%,按复利计算(即将每一年所获利息加入本金,以计算下一年的利息),那么在五年之后他能拿到的钱数是100(1+5\%)^5,如下表所示:


将这笔钱存入银行的一年之后,小明又往银行中存入了100元钱,年利率仍为5%,那么这笔钱按复利计算,到了第五年,将收回的钱数是100(1+5\%)^4,我们将这一结果作为新的一行加入上面的表格中:


以此类推,如果小明每年都往银行中存入新的100元钱,那么这个收益表格将是这样的:


可见,最终小明拿到的钱将等于他各年存入的钱分别计算复利之后得到的钱数的总和,即:


用求和符号来简化这个公式,可以得到:

\sum_{i=0}^{5}{f(i)g(5-i)}, \mathrm{where} \ f(i)=100, g(5-i) = (1.05)^{5-i}

在上式中,f(i)为小明第i年的存款,而为第i年的存款在第5年时的作用程度最后乘起来再叠加就ok了。在这里,小明最终得到的钱就是他的存钱函数和复利计算函数的卷积。

为了更清晰地看到这一点,我们将这个公式推广到连续的情况,也就是说,小明在从 0t的这一段时间内,每时每刻都往银行里存钱,他的存钱函数为 f(\tau)\ (0\leq \tau\leq t),而银行也对他存入的每一笔钱按复利公式计算收益: g(t-\tau)=(1+5\%)^{t-\tau},则小明到时间 t将得到的总钱数为:
\int_{0}^{t} f(\tau)g(t-\tau)d\tau=\int_{0}^{t} f(\tau)(1+5\%)^{t-\tau}d\tau
这也就是卷积的表达式了,上式可以记为(f\ast g)(t)

相信通过上面这个例子,大家应该能够很清晰地记住卷积公式了。下面我们再展开说两句:
如果我们将小明的存款函数视为一个 信号发生(也就是激励)的过程,而将复利函数 g(t-\tau)视为一个 系统对信号的响应函数(也就是响应),那么二者的卷积 (f\ast g)(t)就可以看做是在 t时刻对系统进行观察, 得到的观察结果(也就是输出)将是过去产生的所有信号经过系统的「处理/响应」后得到的结果的 叠加,这也就是 卷积的物理意义了。


转载链接:https://www.zhihu.com/question/22298352/answer/50940942


### Transformer模型原理及应用 #### 变化维度适应能力 对于输入维度变化的情况,传统的多层感知器(MLP)或卷积神经网络(CNN)难以灵活应对不同尺寸的数据输入。然而,Transformer架构通过其独特的机制克服了这一难题并表现出色[^2]。 #### 自注意力机制工作流程 自注意力(self-attention)是Transformer的核心组件之一,在处理特定词语时能关联到句子中的其他相关词汇来增强理解如,“it”这样的代词可以通过self-attention找到对应的实体如“animal”,从而更精准地捕捉语义关系[^4]。 #### 架构优势概述 得益于上述特性以及其他设计上的创新之处,使得基于Transformer的大规模预训练语言模型不仅能在多种自然语言处理任务上取得优异成绩,而且在实际部署过程中也展现出强大的灵活性与泛化能力[^1]。 ```python import torch.nn as nn class MultiHeadAttention(nn.Module): def __init__(self, d_model, num_heads): super(MultiHeadAttention, self).__init__() assert d_model % num_heads == 0 self.d_k = d_model // num_heads self.num_heads = num_heads self.linears = clones(nn.Linear(d_model, d_model), 4) def forward(self, query, key, value, mask=None): nbatches = query.size(0) # Do all the linear projections in batch from d_model => h x d_k query, key, value = \ [l(x).view(nbatches, -1, self.num_heads, self.d_k).transpose(1, 2) for l, x in zip(self.linears, (query, key, value))] scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(self.d_k) if mask is not None: scores = scores.masked_fill(mask == 0, -1e9) p_attn = F.softmax(scores, dim=-1) output = torch.matmul(p_attn, value) # Concatenate and apply final linear transformation. concatenated_output = output.transpose(1, 2).contiguous().view(nbatches, -1, self.num_heads * self.d_k) return self.linears[-1](concatenated_output) ``` 此代码片段展示了一个多头注意力模块实现,这是构成整个Transformer结构的关键部分。它接收查询、键值三个参数,并返回经过加权求后的输出向量表示形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值