损失与梯度与回传

损失函数

开始的时候的,我觉得梯度最重要,但是都在强调损失函数。

  • 损失意估量预测与真实之间的差距
  • 梯度是缩小预测与真实之间的方向

刚开始学习,损失函数的确比较死板,反倒是梯度给予我们更大的进步的感觉,因为计算是沿着梯度的进行的。

不过,为什么损失函数会比梯度更受追捧呢?

因为损失是灵活的,真正死板的,反而是梯度。

梯度下降

对于函数: G ( H ( F ( x ) ) ) G(H(F(x))) G(H(F(x)))
{ ∂ G ∂ H = g ( x ) ∂ H ∂ F = h ( x ) ∂ F ∂ x = f ( x ) ⇒ ∂ G ∂ x = ∂ G ∂ H ⋅ ∂ H ∂ F ⋅ ∂ F ∂ x = g ( x ) ⋅ h ( x ) ⋅ f ( x ) \left\{ \begin{aligned} \frac{\partial G}{\partial H} =& g(x) \\ \frac{\partial H}{\partial F} =& h(x) \\ \frac{\partial F}{\partial x} =& f(x) \end{aligned} \right. \Rightarrow \frac{\partial G}{\partial x} = \frac{\partial G}{\partial H} \cdot \frac{\partial H}{\partial F} \cdot \frac{\partial F}{\partial x} = g(x)\cdot h(x) \cdot f(x)

### KMeans梯度回传机制的区别 KMeans是一种聚类算法,旨在将数据集划分为若干簇,在每个簇内对象之间的相似性较高而不同簇间对象差异较大。该方法基于距离度量来迭代调整质心位置直到收敛[^1]。 另一方面,梯度回传(通常指反向传播中的梯度下降)用于训练神经网络等参数化模型。通过计算损失函数相对于各权重的导数并沿负梯度方向更新这些权值以最小化预测误差。此过程依赖于链式法则来进行高效求解。 两种技术主要区别在于: - **目标不同**:前者专注于无监督场景下的模式发现;后者则服务于有标签数据上的监督学习任务。 - **优化策略各异**:KMeans采用期望最大化(EM)框架下局部最优解搜索;而梯度回传则是利用微积分原理指导全局最优点逼近路径规划。 ### 实现方式及其协同工作的可能性 尽管两者本质上属于不同类型的学习范式——即无监督 vs. 监督——但在某些特定应用场景中确实可以找到结合使用的案例。例如,在深度嵌入式聚类(deep embedded clustering, DEC)[^2] 中就体现了这种融合思路: #### Deep Embedded Clustering (DEC) 在这种混合架构里,首先使用自动编码器(autoencoder)预训练阶段获取输入样本低维表示形式作为特征提取手段。接着引入KMeans初始化聚类中心,并定义新的目标函数J(q||p),其中q代表软分配概率矩阵,p为辅助分布用来拉近真实类别间的差距。整个过程中涉及到了对自编码部分参数w经由BP算法完成端到端调优操作。 ```python import numpy as np from sklearn.cluster import KMeans import tensorflow.keras.backend as K def target_distribution(q): weight = q ** 2 / q.sum(axis=0) return (weight.T / weight.sum(axis=1)).T class DEC(object): def __init__(self, encoder_model, n_clusters): self.encoder = encoder_model self.n_clusters = n_clusters def compile(self, optimizer='adam', loss='kld'): self.model.compile(optimizer=optimizer, loss=loss) def fit(self, x_train, y=None, maxiter=2e4, batch_size=256, tol=1e-3, update_interval=140, save_dir='./results/dec'): kmeans = KMeans(n_clusters=self.n_clusters, n_init=20) y_pred_last = None index_array = np.arange(x_train.shape[0]) for ite in range(int(maxiter)): if ite % update_interval == 0: q = self.model.predict(x_train, verbose=0) p = target_distribution(q) # evaluate the clustering performance y_pred = q.argmax(1) delta_label = np.sum(y_pred != y_pred_last).astype(np.float32) / y_pred.shape[0] y_pred_last = y_pred if ite > 0 and delta_label < tol: print('delta_label ', delta_label, '< tol ', tol) print('Reached tolerance threshold. Stopping training.') break idx = index_array[(ite*batch_size)%x_train.shape[0]:((ite+1)*batch_size)%x_train.shape[0]] X_batch = x_train[idx] kl_loss = self.model.train_on_batch(X_batch, p[idx]) self.model.save_weights(save_dir + '/DEC_model_final.h5') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值