编辑
2025-05-19
深度学习
00

🌀 RoPE 旋转位置编码详解与计算示例

一、RoPE 的数学基础

1. 频率参数生成

给定维度 dd 和位置 mm,定义频率参数:

θi=1100002i/d\theta_i = \frac{1}{10000^{2i/d}}

其中:

  • ii:维度索引(从 0 开始), 这个公式很好记忆,d 是向量维度,比如128。而ii 乘以2不能超过d,所以当d=128d=128 的时候,
  • dd:向量总维度。
编辑
2025-05-16
深度学习ban
00

该文章已加密,点击 阅读全文 并输入密码后方可查看。

编辑
2025-05-16
深度学习
00

1. 梯度消失如何缓解?

(1)梯度消失是深度神经网络训练过程中出现的一种现象,指的是在反向传播时,靠近输入层的梯度变得非常小,几乎趋近于零。这通常发生在使用如 Sigmoid 或 Tanh 等饱和激活函数的深层网络中,由于链式法则导致多个小于1的数连乘,使得梯度指数级衰减。

(2)梯度消失的现象主要表现为模型训练缓慢甚至停滞,靠近输入层的参数几乎不更新,导致网络无法有效学习特征。这会直接影响模型的收敛速度和最终性能,尤其在层数较多的情况下更为明显。

(3)缓解梯度消失的方法包括:使用如 ReLU 及其变体等非饱和激活函数;采用合适的参数初始化方法如 He 初始化Xavier 初始化,保证信号传播的稳定性;引入 Batch Normalization 层来标准化每层输出;利用 残差连接(Residual Connection) 使梯度更容易回传;以及在必要时使用 梯度裁剪(Gradient Clipping) 防止梯度过小或过大带来的训练不稳定问题。

编辑
2025-05-16
工具使用
00

在当前Word按Alt+F11,然后输入代码:

vba
Sub CheckIfDocumentHasPictures() Dim hasPictures As Boolean hasPictures = False ' 检查内联图片(InlineShapes) If ActiveDocument.InlineShapes.Count > 0 Then hasPictures = True End If ' 检查浮动图片(Shapes) If Not hasPictures Then If ActiveDocument.Shapes.Count > 0 Then hasPictures = True End If End If ' 显示结果 If hasPictures Then MsgBox "当前文档包含图片!", vbInformation, "检测结果" Else MsgBox "当前文档没有图片。", vbInformation, "检测结果" End If End Sub
编辑
2025-05-15
算法刷题
00
py
import numpy as np import random class KMeans: def __init__(self, n_clusters=3, max_iter=300, tol=1e-4): self.n_clusters = n_clusters # 聚类数量 self.max_iter = max_iter # 最大迭代次数 self.tol = tol # 收敛阈值 self.centroids = None # 聚类中心 self.labels = None # 样本标签 def fit(self, X): # 1. 随机初始化聚类中心 n_samples = X.shape[0] random_indices = random.sample(range(n_samples), self.n_clusters) self.centroids = X[random_indices] for _ in range(self.max_iter): # 2. 分配样本到最近的聚类中心 distances = self._compute_distances(X) self.labels = np.argmin(distances, axis=1) # 3. 保存旧中心用于收敛判断 old_centroids = self.centroids.copy() # 4. 更新聚类中心 for i in range(self.n_clusters): # 获取属于当前聚类的所有样本 cluster_samples = X[self.labels == i] if len(cluster_samples) > 0: self.centroids[i] = np.mean(cluster_samples, axis=0) # 5. 检查是否收敛 centroid_shift = np.linalg.norm(old_centroids - self.centroids) if centroid_shift < self.tol: break def predict(self, X): distances = self._compute_distances(X) return np.argmin(distances, axis=1) def _compute_distances(self, X): # 计算每个样本到所有聚类中心的距离 distances = np.zeros((X.shape[0], self.n_clusters)) for i, centroid in enumerate(self.centroids): distances[:, i] = np.linalg.norm(X - centroid, axis=1) return distances # 生成测试数据 np.random.seed(42) X = np.vstack([ np.random.normal(loc=[0, 0], scale=1, size=(100, 2)), np.random.normal(loc=[5, 5], scale=1, size=(100, 2)), np.random.normal(loc=[-5, 5], scale=1, size=(100, 2)) ]) # 训练K-Means kmeans = KMeans(n_clusters=3) kmeans.fit(X) # 预测 labels = kmeans.predict(X) print("聚类中心:\n", kmeans.centroids)