一、什麼是範數
範數是一種將向量映射到非負實數的函數。對於一個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-hant/n/154277.html