【CVPR_2024】:逐元素乘积为什么会产生如此令人满意的结果?

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除!


文章目录


前言

自AlexNet以来,出现了无数的深度网络,一系列模型主要是基于混合线性投影(即卷积和线性层)和非线性激活的块。最近,通过逐元素乘法(element-wise multiplication)融合不同的子空间特征获得了较好的性能。论文将其称为"星型操作",逐元素乘法在各个研究领域都表现出良好的性能和效率,包括自然语言处理(Monarch Mixer、Mamba、Hyena Hierarchy等)、计算机视觉(FocalNet、HorNet、VAN等)。

举个简单的例子:如下图,使用左图构建的网络,逐元素相加和逐元素乘积的性能差异如右图。

显而易见,在不同的宽度的网络中,逐元素乘积比逐元素相加的性能更好,尤其是在宽度较窄的情况下。因此,建议设计紧凑、高效网络时,推荐使用星形操作。


星形操作非常简单,为什么它会产生如此令人满意的结果?

部分解释:

FocalNet:假设星形操作可以作为调制或门控机制,动态改变输入特征。

HorNet:假设有效利用高阶特征。

VAN、Monarch Mixer:假设其有效性归因于卷积注意。

以上解释主要基于直觉和假设,缺乏全面的分析和有力的证据。

该论文则是通过明确地证明星型运算具有将输入映射到一个非常高维的非线性特征空间的能力,来解释星型运算的强代表性能力。

  • 揭示了星形运算具有将特征投射到极高维隐式特征空间的能力
  • 通过实证结果和理论探索来验证分析以及视觉表现
  • 提出StarNet,超越了许多高效的设计。
  • 该论文的分析可作为一个指导框架,引导研究人员进行的络设计。

论文

论文名: Rewrite the Stars

论文速递: 点我转跳哦

代码通道: GitHub(StarNet)

重写星形运算

主要创新 网络
深度可分离卷积 MobileNet
特征洗牌 ShuffleNet, ShuffleNetv2
特征重用 GhostNet, FasterNet
网络架构搜索 EfficientNet, MnasNet
重参数 MobileOne, FasterViT
混合架构 Mobile-Former, EdgeViT
隐式高维 StarNet

一层网络

在单层神经网络中,星形运算通常写成 ( W 1 T X + B 1 ) ∗ ( W 2 T X + B 2 ) ( W _ { 1 } ^ { T } X + B _ { 1 } ) * ( W _ { 2 } ^ { T } X + B _ { 2 } ) (W1TX+B1)∗(W2TX+B2),通过元素乘法实现两个线性变换特征的融合。为方便起见,将权重矩阵和偏差合并为一个实体,记为:
W = [ W B ] , X = [ X 1 ] W = \begin{bmatrix} W \\ B \end{bmatrix} , X = \begin{bmatrix} X \\ 1 \end{bmatrix} W=[WB],X=[X1]

进而,星形运算表示为: ( W 1 T X ) ∗ ( W 2 T X ) ( W _ { 1 } ^ { T } X ) * ( W _ { 2 } ^ { T } X ) (W1TX)∗(W2TX),

为了简化分析,将重点放在涉及单输出通道转换和单元素输入的场景上。具体定义 w 1 , w 2 , x ∈ R ( d + 1 ) × 1 w _ { 1 } , w _ { 2 },x \in R^{( d + 1 ) \times 1} w1,w2,x∈R(d+1)×1,其中 d d d为输入通道号。它可以很容易地扩展以适应多个输出通道 W 1 , W 2 ∈ R ( d + 1 ) × ( d ′ + 1 ) W _ { 1 } , W _ { 2 } \in R^{( d + 1 ) \times ( d ^ { \prime } + 1 )} W1,W2∈R(d+1)×(d′+1),并处理多个特征元素,其中 X ∈ R ( d + 1 ) × n X \in R ^ { ( d + 1 ) \times n } X∈R(d+1)×n。

一般来说,重写星号运算:

w 1 T x ∗ w 2 T x w _ { 1 } ^ { T } x \ast w _ { 2 } ^ { T } x w1Tx∗w2Tx
= ( ∑ i = 1 d + 1 w 1 i x i ) ∗ ( ∑ j = 1 d + 1 w 2 j x j ) = ( \sum _ { i = 1 } ^ { d + 1 } w _ { 1 } ^ { i } x ^ { i } ) \ast ( \sum _ { j = 1 } ^ { d + 1 } w _ { 2 } ^ { j } x ^ { j } ) =(i=1∑d+1w1ixi)∗(j=1∑d+1w2jxj)
= ∑ i = 1 d + 1 ∑ j = 1 d + 1 w 1 i w 2 j x i x j = \sum _ { i = 1 } ^ { d + 1 } \sum _ { j = 1 } ^ { d + 1 } w _ { 1 } ^ { i } w _ { 2 } ^ { j } x ^ { i } x ^ { j } =i=1∑d+1j=1∑d+1w1iw2jxixj
= α ( 1 , 1 ) x 1 x 1 + ⋯ + α ( 4 , 5 ) x 4 x 5 + ⋯ + α ( d + 1 , d + 1 ) x d + 1 x d + 1 =\alpha _ { ( 1 , 1 ) } x ^ { 1 } x ^ { 1 } + \cdots + \alpha _ { ( 4 , 5 ) } x ^ { 4 } x ^ { 5 } + \cdots + \alpha _ { ( d + 1 , d + 1 ) } x ^ { d + 1 } x ^ { d + 1 } =α(1,1)x1x1+⋯+α(4,5)x4x5+⋯+α(d+1,d+1)xd+1xd+1

其中 i , j i, j i,j表示来通道索引, α α α是每个项的系数:

α ( i , j ) = { w 1 i w 2 j ,     i f   i   =   j . w 1 i w 2 j + w 1 j w 2 i ,      i f   i ! = j . } \alpha _ { ( i , j ) } = \left\{ \begin{matrix} w _ { 1 } ^ { i } w _ { 2 } ^ { j }, \: \: \: if \: i \:= \: j. \\ w _ { 1 } ^ { i } w _ { 2 } ^ { j } + w _ { 1 } ^ { j } w _ { 2 } ^ { i }, \: \: \: \:if \: i !=j. \end{matrix} \right\} α(i,j)={w1iw2j,ifi=j.w1iw2j+w1jw2i,ifi!=j.}

如上,星型操作可展开为 ( d + 2 ) ( d + 1 ) 2 \frac { ( d + 2 ) ( d + 1 ) } { 2 } 2(d+2)(d+1)个不同项目的组合,值得注意的是,除 α ( d + 1 , : ) x d + 1 x \alpha _ { ( d + 1 , : ) } x ^ { d + 1 } x α(d+1,:)xd+1x项外,每个项都与x呈非线性关系,表明它们是独立的、隐含的维度。

因此,可使用计算效率高的星形操作在 d d d维空间内执行计算,进而在一个 ( d + 2 ) ( d + 1 ) 2 ≈ ( d 2 ) 2 \frac { ( d + 2 ) ( d + 1 ) } { 2 } \approx ( \frac { d } { \sqrt { 2 } } ) ^ { 2 } 2(d+2)(d+1)≈(2 d)2(其中 d > > 2 d >> 2 d>>2),隐维特征空间中实现了一个等效表示,显着放大特征维度,而不会在单个层内产生任何额外的计算开销。

推广多层网络

以递归的方式将隐维指数增加到接近无限。考虑初始网络层宽度为 d d d,应用一个星形运算得到 ∑ i = 1 d + 1 ∑ j = 1 d + 1 w 1 i w 2 j x i x j \sum _ { i = 1 } ^ { d + 1 } \sum _ { j = 1 } ^ { d + 1 } w _ { 1 } ^ { i } w _ { 2 } ^ { j } x ^ { i } x ^ { j } ∑i=1d+1∑j=1d+1w1iw2jxixj,这是在 R ( d 2 ) 2 1 R^{ ( \frac { d } { \sqrt { 2 } } ) ^ { 2 ^ { 1 } }} R(2 d)21的隐式特征空间中的表示。

设 O l O_l Ol表示第 l l l个 ∗ * ∗ 操作的输出,得到:
O 1 = ∑ i = 1 d + 1 ∑ j = 1 d + 1 w ( 1 , 1 ) i w ( 1 , 2 ) j x i x j       ∈ R ( d 2 ) 2 1 O _ { 1 } = \sum _ { i = 1 } ^ { d + 1 } \sum _ { j = 1 } ^ { d + 1 } w _ { ( 1 , 1 ) } ^ { i } w _ { ( 1 , 2 ) } ^ { j } x ^ { i } x ^ { j } \: \:\:\:\:\in R^{ ( \frac { d } { \sqrt { 2 } } ) ^ { 2 ^ { 1 } }} O1=i=1∑d+1j=1∑d+1w(1,1)iw(1,2)jxixj∈R(2 d)21
O 2 = W 2 , 1 T O 1 ∗ W 2 , 2 T O 1                ∈ R ( d 2 ) 2 2 O _ { 2 } = W _ { 2 , 1 } ^ { T } O _ { 1 } \ast W _ { 2 , 2 } ^ { T } O _ { 1 } \: \:\:\:\:\:\:\:\:\:\:\:\:\:\in R^{ ( \frac { d } { \sqrt { 2 } } ) ^ { 2 ^ { 2 } }} O2=W2,1TO1∗W2,2TO1∈R(2 d)22
O 3 = W 3 , 1 T O 2 ∗ W 3 , 2 T O 2                ∈ R ( d 2 ) 2 3 O _ { 3 } = W _ { 3 , 1 } ^ { T } O _ { 2 } \ast W _ {3 , 2 } ^ { T } O _ { 2 } \: \:\:\:\:\:\:\:\:\:\:\:\:\:\in R^{ ( \frac { d } { \sqrt { 2 } } ) ^ { 2 ^ { 3 } }} O3=W3,1TO2∗W3,2TO2∈R(2 d)23
. . . ... ...
O l = W l , 1 T O l − 1 ∗ W l , 2 T O l − 1             ∈ R ( d 2 ) 2 l O _ { l } = W _ { l , 1 } ^ { T } O _ { l-1 } \ast W _ { l , 2 } ^ { T } O _ { l-1 } \: \:\:\:\:\:\:\:\:\:\:\in R^{ ( \frac { d } { \sqrt { 2 } } ) ^ { 2 ^ { l } }} Ol=Wl,1TOl−1∗Wl,2TOl−1∈R(2 d)2l

意味着, l l l层网络即可隐式地获得一个属于 R ( d 2 ) 2 l R^{ ( \frac { d } { \sqrt { 2 } } ) ^ { 2 ^ { l } }} R(2 d)2l的特征空间。

如给定宽度为128的10层各向同性网络,通过星形运算获得的隐式特征维数约为 9 0 1024 90^{1024} 901024,可以合理地近似为无限维。因此,通过堆叠多层,甚至只是几层,星型运算可以以指数方式大幅放大隐含维度。

特殊情况

并非所有星型操作都遵循上述公式,其中每个分支都要进行转换。例如,VAN和SENet包含一个恒等分支,而GENet不进行任何可学习变换。

W 1 W_1 W1和/或 W 2 W_2 W2的非线性性质
  • 在实际场景中,大量的研究(如Conv2Former、FocalNet等)通过合并激活函数将变换函数 W 1 W_1 W1、 W 2 W_2 W2实现为非线性。尽管如此,一个关键的方面是对通道通信的维护。重要的是,隐式维度的数量保持不变(约为 d 2 2 \frac { d ^ { 2 } } { 2 } 2d2)。
W 1 T X ∗ X W _ { 1 } ^ { T } X * X W1TX∗X
  • 当去掉变换 W 2 W_2 W2时,隐维数从大约 d 2 2 \frac { d ^ { 2 } } { 2 } 2d2减小到 2 d 2d 2d.
X ∗ X X * X X∗X
  • 星形运算将特征从特征空间 { x 1 , x 2 , ⋯   , x d } ∈ R d \left\{ x ^ { 1 } , x ^ { 2 } , \cdots , x ^ { d } \right\} \in R ^ { d } {x1,x2,⋯,xd}∈Rd转换为特征为 { x 1 x 1 , x 2 x 2 , ⋯   , x d x d } ∈ R d \left\{ x ^ { 1 } x ^ { 1 } , x ^ { 2 } x ^ { 2 } , \cdots , x ^ { d } x ^ { d } \right\} \in R ^ { d } {x1x1,x2x2,⋯,xdxd}∈Rd的新空间。

有几个值得注意的方面需要考虑。星型操作及其特殊情况通常与空间相互作用相结合,通常通过池化或卷积实现,如VAN所示。这些方法中有许多都强调扩大接受域的好处,但往往忽略了隐含的高维空间所带来的好处。其次,将这些特殊情况结合起来是可行的。


实验

为了证实和验证分析,从不同的角度对明星运营进行了广泛的研究。

性能优势


从表2和表3可以看出,无论网络深度和宽度如何,星型运算始终优于求和运算。这种现象验证了明星运营的有效性和优越性。此外,观察到,随着网络宽度的增加,星型运算带来的性能增益逐渐减少。然而,在不同深度的情况下没有观察到类似的现象。

这种差异提出了两个关键的见解:

  • 表2所示的星型运算带来的收益逐渐减少并不是模型尺寸扩大的结果;
  • 星型操作在本质上确实扩大网络的维度,降低了网络扩大的增量效益。

决策边界比较

在2D Noisy Moon数据集上可视化这两种操作的决策边界,该数据集由两组月球形状的2D点组成。在模型配置方面,从演示块中消除了归一化层和卷积层。考虑到该数据集相对简单的性质,将模型配置为宽度为100,深度为4。

图2(上行)显示了求和和星型操作划定的决策边界。很明显,星形运算比求和运算更精确、更有效地描绘了一个决策边界。值得注意的是,观察到的决策边界的差异并非源于非线性,因为两种操作都在各自的构建块中包含激活函数。主要的区别在于星形运算能够达到极高的维度。

如上所述,星型运算类似于核函数,特别是多项式核函数。为了证实这一点,还用高斯和多项式来说明支持向量机的决策边界内核(使用scikit-learn包实现),见图2(下一行)。与预期一致,星型运算产生的决策边界与多项式核的决策边界非常接近,而与高斯核有明显的偏离。

扩展到无激活函数的网络

激活函数是神经网络中必不可少的基本组成部分。然而,常用的ReLU和GELU等激活方法存在一定的缺陷,如"均值偏移"和信息丢失等。如果没有激活函数,传统的神经网络会因为缺乏非线性而崩溃为单层网络。

在本研究中,虽然主要关注的是通过星型运算获得的隐式高维特征,但非线性方面也具有深远的重要性。为了研究这一点,通过从DemoNet(第一张图)中删除所有激活来进行实验,从而创建一个无激活的网络。

如上表,去除所有激活后,求和操作的性能明显恶化,从66.2%降至32.4%。与之形成鲜明对比的是,星形操作仅受到消除激活的最小影响,精度仅下降1.2%。该实验不仅证实理论分析,而且为未来的研究开辟了广阔的道路。

公开讨论和更广泛的影响

虽然基于简单的操作,本文的分析为探索深度学习的基本挑战奠定了基础。下面,概述了几个有希望和有趣的研究问题,值得进一步研究,其中恒星操作可能发挥关键作用。

激活函数真的不可或缺吗?

在本文研究中,主要集中在星型运算引入的隐式高维方面。值得注意的是,星型运算还包含非线性,这是核函数区别于其他线性机器的一个特点。研究的初步实验证明了在神经网络中消除激活层的潜在可行性。

星型运算与自注意力和矩阵乘法有什么关系?

自注意利用矩阵乘法在 R n × n R ^ { n \times n } Rn×n空间中生成矩阵。可以证明,自注意中的矩阵乘法与元素乘法具有相似的属性(非线性和高维)。值得注意的是,与元素乘法相比,矩阵乘法促进了全局交互。然而,矩阵乘法改变了输入形状,需要额外的操作(例如,池化,另一轮矩阵乘法等)来调和张量形状,这是通过元素乘法避免的复杂性。本文分析可以为自注意力的有效性提供新的见解,并有助于重新审视神经网络中的"动态"特征。

如何优化隐式高维空间中的系数分布?

传统的神经网络可以为每个通道学习一组不同的权重系数,但是星形运算中每个隐含维度的系数是固定的,类似于核函数。例如,在多项式核函数 k ( x 1 , x 2 ) = ( γ x 1 ⋅ x 2 + c ) d k ( x _ { 1 } , x _ { 2 } ) = ( \gamma x _ { 1 } \cdot x _ { 2 } + c ) ^ { d } k(x1,x2)=(γx1⋅x2+c)d中,可以通过超参数调整系数分布。

在星形运算中,虽然权重 W 1 W_1 W1和 W 2 W_2 W2是可学习的,但它们只提供了有限的范围来微调分布,而不像传统神经网络那样允许为每个通道定制系数。这个约束可以解释为什么极高的维度只能带来适度的性能改进。值得注意的是,跳跃连接似乎有助于平滑系数分布,密集连接(如DenseNet)可能提供额外的好处。此外,采用指数函数可以直接映射到隐式无限维,类似于高斯核函数。

StarNet

鉴于星型运算的独特优势------它能够在低维空间中进行计算,同时产生高维特征------确定了它在高效网络架构领域的实用性。因此,本文引入StarNet作为概念验证模型。StarNet的特点是极简的设计和显著减少人为干预。尽管它很简单,但StarNet展示了卓越的性能,强调了星型操作的有效性。

StarNet的结构为4阶段分层架构,利用卷积层进行下采样,并利用改进的演示块进行特征提取。为了满足效率的要求,用批归一化代替层归一化,并将其置于深度卷积之后(可以在推理过程中融合)。从MobileNeXt中汲取灵感,在每个块的末尾合并深度卷积。通道扩展因子始终设置为4,网络宽度在每个阶段加倍。演示块中的GELU激活被ReLU6取代,遵循MobileNetv2设计。StarNet框架如下图,仅通过改变块号和输入嵌入通道号来构建不同大小的StarNet。

虽然许多先进的设计技术(如重新参数化、与注意力集成、SE-block等)可以在经验上提高性能。通过刻意避开这些复杂的设计元素并尽量减少人为设计干预,强调星型操作在StarNet概念化和功能中的关键作用。

实验

实验设置

  • 优化器:AdamW
  • batch size: 2048
  • 学习率:3e−3
  • epoch:300

实验结果

实验结果见上表。与许多其他最先进的高效模型相比,StarNet具有最小的手工设计,能够提供有希望的性能。值得注意的是,StarNet在iPhone 13设备上的准确率仅为0.7秒,达到了73.5%的第一名,超过了mobileone - 50 2.1% (73.5% vs 71.4%),在相同的延迟。当将模型缩放到1G FLOPs预算时,StarNet继续表现出卓越的性能,比MobileOne-S2高出1.0%,比EdgeViT-XS高出0.9%,同时速度提高了三倍(1.0 ms vs 3.5 ms)。

StarNet的简洁设计,主要归功于星型操作的基本作用。图4进一步说明了各种模型之间的延迟-精度权衡。能否进一步推动StarNet的性能再上一个台阶? 通过仔细的超参数优化,利用表1的见解,并应用训练增强,如更多的时代或蒸馏,可以对StarNet的性能进行实质性的改进。


消融实验

星型操作被认为是模型高性能的唯一贡献者。为了从经验上验证这个断言,在实现中系统地用求和取代了星号运算。具体来说,这需要用模型架构中的"+"替换"*"操作符。

结果如上表所示。取消所有星型作业导致性能显著下降,精度下降3.1%。有趣的是,在模型的第一和第二阶段,星型操作对性能的影响似乎很小。这种观察是合乎逻辑的。在非常窄的宽度下,ReLU6激活会导致一些特征变为零。在星形运算的背景下,这导致其隐含的高维空间中的许多维度也变为零,从而限制了其全部潜力。然而,它的贡献在最后两个阶段(更多的渠道)变得更加明显,分别导致1.6%和1.6%的改进。

星型操作的延迟影响 ,如上表。从理论上讲,与简单的求和运算相比,乘法运算被认为具有更高的计算复杂度,正如几篇相关著作所指出的那样。然而,实际的延迟结果可能并不总是与理论预测一致。本文进行了基准测试,比较了用求和替换所有星型操作的延迟。从表中,观察到延迟影响取决于硬件。在实践中,星型操作并不会导致GPU和iPhone设备上相对于求和操作的任何额外延迟。然而,在CPU上,求和运算比星型运算效率略高(例如,StarNet-S4的求和运算为8.4ms,星型运算为9.4 ms)。考虑到相当大的性能差距,CPU上的这个小延迟开销可以忽略不计。

激活函数放置的研究。对网络块中激活函数(ReLU6)的位置进行了全面的分析。为清晰起见,用x1和x2表示两个分支的输出,以StarNet-S4作为示范模型。研究了在StarNet中实现激活功能的四种方法:1)不使用激活,2)激活两个分支,3)激活后星型操作,以及4)激活单个分支。表明只激活一个分支产生最高的准确率,达到78.4%。令人鼓舞的是,完全去除来自StarNet的激活(除了在茎层中的激活)导致准确率仅降低2.8%,使其降至75.6%,这一性能仍然与表6中一些强大的基线具有竞争力。强调了无激活网络的潜力。


星形操作块的设计研究 。在StarNet中,星形运算通常被实现为 a c t ( W 1 T X ) ∗ ( W 2 T X ) a c t ( W _ { 1 } ^ { T } X ) * ( W _ { 2 } ^ { T } X ) act(W1TX)∗(W2TX),使StarNet-S4的准确率达到84.4%。然而,替代实现是可能的。本文尝试了一个变化: ( W 2 T a c t ( W 1 T X ) ) ∗ X ( W _ { 2 } ^ { T } a c t ( W _ { 1 } ^ { T } X ) ) * X (W2Tact(W1TX))∗X,其中 W 1 ∈ R d × d ′ W _ { 1 } \in R ^ { d \times d ^ { \prime } } W1∈Rd×d′被设计为扩展宽度,而 W 2 ∈ R d ′ × d W _ { 2 } \in R ^ { d ^ { \prime } \times d } W2∈Rd′×d将其恢复为 d d d。这种调整导致仅转换一个分支,而另一个分支保持不变。改变 d ′ d' d′以确保与StarNet-S4相同的计算复杂度。因此,性能从78.4%下降到74.4%。虽然更好和更仔细的设计可能会减轻这种性能差距,但准确性的显着差异强调了在利用星型操作能力方面的初始实施的有效性,并强调了在星型操作中转换两个分支的关键重要性。


总结

总结: 对星形操作进行了重新语境化,发现它们强大的表征能力来源于隐含的高维空间。在许多方面,星号运算反映了多项式核函数的行为。在此基础上,将star操作定位于高效网络设计领域,并推出了简单的原型网络StarNet。StarNet令人印象深刻的表现,在没有依赖复杂的设计或精心选择的超参数的情况下取得的,证明了星型操作的有效性。


致谢

欲尽善本文,因所视短浅,怎奈所书皆是瞽言蒭议。行文至此,诚向予助与余者致以谢意。


参考

[1]. Ma, Xu, **yang Dai, Yue Bai, Yizhou Wang, and Yun Fu. "Rewrite the Stars." arxiv preprint arxiv:2403.19967 (2024).

[2]. Markdown常见语法

相关推荐
大模型任我行3 天前
HKUST:通过agent协作选取LLM训练数据
人工智能·语言模型·自然语言处理·论文笔记
喵~来学编程啦6 天前
【论文精读】LPT: Long-tailed prompt tuning for image classification
人工智能·深度学习·机器学习·计算机视觉·论文笔记
、你的风衣8 天前
FITS论文解析
人工智能·深度学习·论文笔记
迪娜学姐12 天前
科研项目:利用AI大模型获得基金资助的10个原则
论文阅读·人工智能·chatgpt·论文笔记
栀子清茶12 天前
SegNet & DeconvNet——论文阅读
论文阅读·深度学习·计算机视觉·论文笔记
源于花海14 天前
论文学习 | 《锂离子电池健康状态估计及剩余寿命预测研究》
论文阅读·人工智能·学习·论文笔记
喵~来学编程啦16 天前
【论文精读】ID-like Prompt Learning for Few-Shot Out-of-Distribution Detection
论文阅读·计算机视觉·prompt·论文笔记·预训练模型
醒了就刷牙19 天前
《Vision-Language Pre-Training with Triple Contrastive Learning》中文校对版
人工智能·深度学习·自然语言处理·论文笔记
栀子清茶20 天前
Unsupervised Domain Adaptation in SemanticSegmentation: A Review——论文笔记
论文阅读·人工智能·深度学习·生成对抗网络·计算机视觉·论文笔记·1024程序员节
杜若南星20 天前
VASCO:增减材混合制造的体积和表面共分解
论文阅读·经验分享·笔记·算法·制造·几何学·论文笔记