範數求導

一、什麼是範數

範數是一種將向量映射到非負實數的函數。對於一個n維向量x,其p範數定義為:$$\left\lVert x \right\rVert_{p} = \sqrt[p]{\sum_{i=1}^{n} {{\left\lvert x_i \right\rvert}^p}}$$ 其中,p為範數的階數,向量中每個元素的絕對值取p次方後求和再開p次方。

通常情況下,常用的範數如下:

  • L1範數:$$\left\lVert x \right\rVert_{1}=\sum_{i=1}^{n} {\left\lvert x_i \right\rvert}$$
  • L2範數:$$\left\lVert x \right\rVert_{2}=\sqrt{\sum_{i=1}^{n} {\left\lvert x_i \right\rvert}^2}$$
  • L∞範數:$$\left\lVert x \right\rVert_{\infty}=\max_{1\leq i\leq n}{\left\lvert x_i \right\rvert}$$

二、範數的導數

範數的導數表示為範數的梯度向量,即向量各分量的導數向量。對於一個向量x,其p範數的導數為:

  • L1範數的導數:$$\frac{\partial{\left\lVert x \right\rVert_{1}}}{\partial{x_i}}=\frac{x_i}{\left\lVert x \right\rVert_{1}}$$
  • L2範數的導數:$$\frac{\partial{\left\lVert x \right\rVert_{2}}}{\partial{x_i}}=\frac{x_i}{\left\lVert x \right\rVert_{2}}$$
  • L∞範數的導數:$$\frac{\partial{\left\lVert x \right\rVert_{\infty}}}{\partial{x_i}}=\begin{cases} 1,\left\lvert x_i \right\rvert=\left\lVert x \right\rVert_{\infty} \\0,\left\lvert x_i \right\rvert\neq\left\lVert x \right\rVert_{\infty} \end{cases}$$

具體來說,L1範數可視為L2範數在原點與目標點的曼哈頓距離,而L2範數則是在原點與目標點的歐幾里得距離。因此,L1範數的導數在原點的分量不唯一,而L2範數則有唯一的梯度向量。L∞範數則是在各分量差值中取最大值作為距離,其導數在最大值處分量為1,其他處為0。

三、範數求導的應用

範數求導在優化問題中有著廣泛的應用,主要用於對目標函數的求導。一些常用的應用如下:

  • 正則化:在模型訓練中引入範數正則化可以使得模型的泛化性能更好。例如,L1正則化可以實現特徵選擇,L2正則化可以防止過擬合。
  • 稀疏表示:通過使問題的解具有更大的結構性,使得問題變得更加容易求解。例如,對於二次規劃問題C(x)的目標函數,一個常見的目標是最小化L1範數,即:$$\min \left\lVert x \right\rVert_{1}\quad \text{s.t.}\quad C(x)\leq0$$

四、代碼示例

<?php
/**
 * 計算向量的Lp範數
 *
 * @param array $vector 向量數組
 * @param int $p 範數的階數
 *
 * @return float
 */
function norm(array $vector, int $p = 2): float
{
    $sum = 0;
    foreach ($vector as $item) {
        $sum += pow(abs($item), $p);
    }
    return pow($sum, 1 / $p);
}

/**
 * 計算向量的導數
 *
 * @param array $vector 向量數組
 * @param int $p 範數的階數
 *
 * @return array
 */
function grad(array $vector, int $p = 2): array
{
    $g = [];
    $n = norm($vector, $p);
    foreach ($vector as $i => $item) {
        switch ($p) {
            case 1:
                $g[$i] = $item === 0 ? 0 : $item / $n;
                break;
            case 2:
                $g[$i] = $item / $n;
                break;
            default:
                $g[$i] = abs($item) === $n ? ($item > 0 ? 1 : -1) : 0;
        }
    }
    return $g;
}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/154277.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-15 03:26
下一篇 2024-11-15 03:26

相關推薦

  • diff函數是否能夠實現數值求導?

    答案是可以的。下面將從數學原理、實現過程和可行性三個方面對此進行詳細闡述。 一、數學原理 求導的定義是函數在某一點的變化率,也即在該點處的斜率。而數值求導便是使用有限差分近似求解該…

    編程 2025-04-28
  • 用python求導怎麼求,python求導數調用什麼庫

    本文目錄一覽: 1、python求導用哪個庫 2、如何使用Python求導? 3、如何使用Python求導 4、如何用python求導數 5、Python如何通過函數導數值求出原函…

    編程 2025-01-13
  • 從多個方面詳細闡述LaTeX求導

    一、LaTeX求導基礎 LaTeX是一種非常適合於數學公式排版的工具,也因此在求導方面應用十分廣泛。 LaTeX求導的公式由 \frac{dy}{dx} 來表示,其中y為被求導函數…

    編程 2024-11-26
  • Python求導實現

    引言 在數學中,求導(Derivative)是指函數對自變數的變化率。對函數進行求導能夠揭示函數的性質、極值、斜率等信息。然而在實際生活中,求導的具體計算顯得極為繁瑣和複雜。Pyt…

    編程 2024-11-25
  • 深入理解softmax求導

    一、簡介 softmax函數是在深度學習和神經網路中常用的函數,主要用於多分類問題和概率分布。在反向傳播演算法中,softmax函數的求導是一個非常重要的過程,本文將從多個方面闡述s…

    編程 2024-11-21
  • 多項式求導探究

    一、多項式求導方法 多項式求導是高等數學中的一個重要概念,它廣泛應用於科學技術以及各種工程領域。求導是求函數導數的過程,對於多項式來說,求導其實就是求多項式的導數。在求導之前,需要…

    編程 2024-10-08

發表回復

登錄後才能評論