网站开发前景好吗,福建做网站,wordpress文章 相册,设计师兼职接单这是我读KAN系列论文的第三篇#xff0c;今天把两篇论文放在一起写#xff0c;分别是#xff1a;
ReLU-KAN#xff1a;
https://arxiv.org/abs/2406.02075
Wav-KAN#xff1a;
https://arxiv.org/abs/2405.12832
之所以放在一起#xff0c;是因为这两篇论文针对KAN的…这是我读KAN系列论文的第三篇今天把两篇论文放在一起写分别是
ReLU-KAN
https://arxiv.org/abs/2406.02075
Wav-KAN
https://arxiv.org/abs/2405.12832
之所以放在一起是因为这两篇论文针对KAN的改进思路是相似的都是采用新的基函数来替代KAN中的B样条函数。
另一个原因是这两篇文章内容都比较少笑
1ReLU-KAN
1.1原理
作者提出了一种新的ReLU激活函数和逐点乘法来简化KAN的基函数设计从而优化计算过程以实现高效的CUDA计算。通过将整个基函数计算表达为矩阵操作充分利用了GPU的并行处理能力。此外运用了类似于Transformer中的定位编码预生成了非训练参数以加速计算。
作者提出的新基函数如下 作者直接给出了ReLU-KAN的层的pytorch代码
import numpy as np
import torch
import torch.nn as nnclass ReLUKANLayer(nn.Module):def __init__(self, input_size: int, g: int, k: int, output_size: int):super().__init__()self.g, self.k, self.r g, k, 4*g*g / ((k1)*(k1))self.input_size, self.output_size input_size, output_sizephase_low np.arange(-k, g) / g # 计算ReLU函数的下限参数phase_height phase_low (k1) / g # 计算ReLU函数的上限参数self.phase_low nn.Parameter(torch.Tensor(np.array([phase_low for i in range(input_size)])), requires_gradFalse) # 将phase_low作为不可训练的参数self.phase_height nn.Parameter(torch.Tensor(np.array([phase_height for i in range(input_size)])),requires_gradFalse) # 将phase_height作为不可训练的参数self.equal_size_conv nn.Conv2d(1, output_size, (gk, input_size))def forward(self, x):x1 torch.relu(x - self.phase_low) # 第一个ReLU激活减去phase_lowx2 torch.relu(self.phase_height - x) # 第二个ReLU激活x减去phase_heightx x1 * x2 * self.r # ReLU激活结果的逐点乘积乘以归一化常数rx x * x x x.reshape((len(x), 1, self.g self.k, self.input_size))x self.equal_size_conv(x)x x.reshape((len(x), self.output_size, 1))return x
1.2实验结果 从实验结果看训练速度确实得到了极大的提升。
2Wav-KAN
2.1原理
作者用小波函数替换了B样条从而提高准确性、加快训练速度并增加鲁棒性。此外小波函数能够提供多分辨率分析有效捕捉数据的高频和低频特征。
2.2实验结果
在MNIST上的实验结果 其中Mexican hat和Derivative of Gaussian (DOG)对应的是不同类型的母小波函数。spl-KAN指的就是用B样条的原始KAN