【正则】常用正则公式

前言


公式大全

  1. https://blog.youkuaiyun.com/weixin_43497384/article/details/91490842
  2. https://blog.youkuaiyun.com/youaiqingnian/article/details/91360254
  3. http://c.runoob.com/front-end/854 这个是菜鸟教程的,这个比较全

使用方式


javascript

var pattern = /^([1-9]\d{0,2}|1000)$/
if (!pattern.test(value)) {
	 return callback(new Error('请输入1-1000以内的正整数'))
} else {
	 callback()
}

java

import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class RegexMatches {
	public static void main(String args[]) {
		String str = "";
		String pattern = "^(http|https)://([\\w.]+\\/?)\\S*";
		Pattern r = Pattern.compile(pattern);
		Matcher m = r.matcher(str);
		System.out.println(m.matches());
	}
}

公式列表


校验以http://和https://开头的url正则表达式

regexp = "^(http|https)://([\\w.]+\\/?)\\S*"

验证是否包含中文

function CheckChinese(val){     
  var reg = new RegExp("[\\u4E00-\\u9FFF]+","g");
  if(reg.test(val)){alert("包含汉字!"); }   
}

两位小数,可以为负数

var reg = /^([\+ \-]?(([1-9]\d*)|(0)))([.]\d{0,2})?$/;

转载自:https://blog.youkuaiyun.com/huangwen123456/article/details/79194286

1-1000以内的正整数

/^([1-9]\d{0,2}|1000)$/

小数点前0位,小数点后4位

/^(0)(\.\d{1,4})?$/

小数点前最多15位,小数点后4位

/^([1-9]\d{0,15}|0)(\.\d{1,4})?$/;

前后,结尾,或者任意位置不能包含空格

https://blog.youkuaiyun.com/u011641008/article/details/78893283
校验开头不能有空格:

/^\S+/;

校验结尾不能有空格:

=/\S+$/

校验不能包含空格

 /^\S*$/

正数的正则表达式(包括0,小数保留两位)

^((0{1}\.\d{1,2})|([1-9]\d*\.{1}\d{1,2})|([1-9]+\d*)|0)$

正数的正则表达式(不包括0,小数保留两位)

^((0{1}\.\d{1,2})|([1-9]\d*\.{1}\d{1,2})|([1-9]+\d*))$

正整数的正则表达式(包括0):

^[+]{0,1}(\d+)$

正整数的正则表达式(不包括0):

^[1-9]\d*$

折扣(0-1)的小数的正则表达式(包括1)

^(0\.\d+|1)$

折扣(0-1)的小数的正则表达式(不包括1)

^(0\.\d+)$

颜色编码

https://blog.youkuaiyun.com/overmind/article/details/118117

^#[0-9a-fA-F]{6}$
<think>嗯,我现在需要了解L2正则化的公式。首先,我应该回忆一下正则化的基本概念。正则化是在机器学习中用来防止过拟合的一种技术,对吧?那L2正则化具体是什么样子的呢? 记得在损失函数中,正则化项会被加上,用来惩罚模型的复杂度。L1和L2正则化是两种常见的方法,它们的区别在于正则化项的形式。L1用的是权重的绝对值之和,而L2应该是平方和吧?比如,原始的损失函数是J(θ),那么加上L2正则化之后,是不是变成J(θ) + λ乘以权重的平方和? 比如,假设θ代表模型的所有参数,比如神经网络的权重,那么L2正则化的项应该是λ乘以所有θ_i的平方之和,再除以2?或者有没有系数上的差别?可能不同的资料有不同的写法,有的可能有1/2,有的可能没有。比如,有些地方可能会写成(λ/2)||θ||²,这样在求导的时候,平方项导数的系数2可以和1/2抵消,简化计算? 那具体的公式应该是什么样的呢?假设原始损失函数是J(θ),那么加上L2正则化后的损失函数就是J_reg = J(θ) + λ/2 * Σθ_i²,对吗?这里的λ是正则化系数,控制惩罚的力度。如果λ很大,那么模型会更倾向于让权重变小,避免过拟合。 那这里的Σθ_i²是不是所有可训练参数的平方和?例如,在神经网络中,每一层的权重矩阵中的每个元素都会被平方然后相加起来。然后乘以λ/2。这时候,当进行梯度下降的时候,权重的更新会多减去一个λ乘以θ_i的项,对吗?因为导数的话,原来的梯度加上λθ_i,所以梯度下降的更新会是θ_j := θ_j - α*(梯度 + λθ_j),其中α是学习率。 那这样做的效果是让权重在训练过程中不仅减小误差,还要让自身的值尽可能小,这样模型的复杂度就降低了,避免了对训练数据的过度拟合。这种惩罚项倾向于让权重分散到较小的值,而不是集中在某些大的权重上,可能有助于提高模型的泛化能力。 那么,正确的L2正则公式应该怎么写呢?应该是这样的:在原来的损失函数基础上,加上正则化项,也就是λ乘以权重的L2范数的平方的一半,或者是λ乘以权重的平方和的一半。例如,使用数学公式的话,就是: $$ J_{\text{reg}}(\theta) = J(\theta) + \frac{\lambda}{2} \sum_{i=1}^{n} \theta_i^2 $$ 或者有时候可能省略了1/2,直接写成: $$ J_{\text{reg}}(\theta) = J(\theta) + \lambda \sum_{i=1}^{n} \theta_i^2 $$ 不过,带1/2的情况可能更多,因为在求导的时候,平方项的导数是2θ_i,这样乘以1/2后,导数的系数就变成了λθ_i,比较方便。比如,在梯度下降中,参数θ_i的更新会变成θ_i := θ_i - α(∂J/∂θ_i + λθ_i)。这时候,如果有1/2的话,导数的计算刚好抵消掉系数,使得表达式更简洁。 另外,L2正则化也被称为权重衰减,因为每次更新时,权重会乘以一个略小于1的因子(比如1 - αλ),这样权重会逐渐衰减,除非被损失函数的梯度更新所补偿。 总结一下,L2正则化的公式就是在原来的损失函数基础上,加上所有模型参数的平方和乘以λ/2。这样在优化过程中,模型不仅要最小化原始的损失函数,还要尽量让参数的平方和小,从而防止过拟合。 不过,我需要确认一下是否在公式中确实有1/2这个系数。查一下资料,比如在Andrew Ng的机器学习课程里,他确实提到了加入的项是λ/(2m)乘以权重的平方和,其中m是样本数量,但可能在不同的实现中,系数可能会有所不同,比如是否考虑样本数或者有没有除以2。不过基本结构是对的,关键部分是权重的平方和乘以一个正则化系数。 所以正确的L2正则公式应该是这样的,使用$$...$$来表示独立公式的话: $$ J_{\text{reg}}(\theta) = J(\theta) + \frac{\lambda}{2} \|\theta\|_2^2 $$ 其中,||θ||₂²表示参数θ的L2范数的平方,也就是各参数的平方和。这里的λ是控制正则化强度的超参数,值越大,正则化的效果越强。</think>L2正则化是机器学习中用于防止模型过拟合的一种技术,其核心思想是在损失函数中增加一个与模型参数相关的惩罚项,从而约束参数的幅度。以下是L2正则化的详细介绍: ### 1. **L2正则公式** 假设原始损失函数为$J(\theta)$,其中$\theta$表示模型参数。加入L2正则化后,新的损失函数$J_{\text{reg}}(\theta)$为: $$ J_{\text{reg}}(\theta) = J(\theta) + \frac{\lambda}{2} \|\theta\|_2^2 $$ 其中: - $\lambda$是正则化系数(超参数),控制惩罚力度。 - $\|\theta\|_2^2 = \sum_{i=1}^n \theta_i^2$表示参数$\theta$的L2范数平方(即所有参数的平方和)。 - $\frac{\lambda}{2}$中的$\frac{1}{2}$是为了后续梯度计算时简化表达式(与平方项导数中的系数2抵消)。 --- ### 2. **作用原理** - **惩罚大权重**:L2正则化通过增加$\frac{\lambda}{2} \sum \theta_i^2$项,使得模型在优化过程中不仅需要最小化原始损失$J(\theta)$,还需尽量减小参数的平方和。 - **梯度更新**:以梯度下降为例,参数$\theta_i$的更新公式变为: $$ \theta_i := \theta_i - \alpha \left( \frac{\partial J}{\partial \theta_i} + \lambda \theta_i \right) $$ 其中$\alpha$是学习率。可见,每次更新时参数会额外减去$\lambda \theta_i$,导致权重逐渐衰减(因此L2正则化也称为**权重衰减**)。 --- ### 3. **几何解释** - 在参数空间中,L2正则化等价于为损失函数添加一个“球形”约束。优化过程会倾向于选择范数较小的参数组合,从而限制模型复杂度(如下图)。 --- ### 4. **与L1正则化的区别** | 特性 | L2正则化 | L1正则化 | |--------------|-----------------------------------|-----------------------------------| | 公式 | $\frac{\lambda}{2} \|\theta\|_2^2$ | $\lambda \|\theta\|_1$ | | 解的性质 | 参数趋向于较小的均匀值 | 参数趋向于稀疏性(部分参数为0) | | 适用场景 | 防止过拟合,通用性强 | 特征选择,模型压缩 | --- ### 5. **实际应用** - **代码示例**(以线性回归为例): ```python # 定义L2正则化损失函数 def loss_function(X, y, theta, lambda_): m = len(y) prediction = X.dot(theta) mse_loss = (1/(2*m)) * np.sum((prediction - y)**2) l2_penalty = (lambda_/(2*m)) * np.sum(theta**2) # 注意:部分实现会将λ除以样本数m return mse_loss + l2_penalty ``` - **调参建议**:通过交叉验证选择合适的$\lambda$。$\lambda$过大会导致欠拟合,过小则无法抑制过拟合。 --- ### 6. **总结** L2正则化通过向损失函数添加参数的平方和项,有效约束模型复杂度,提升泛化能力。其公式简单且易于实现,是深度学习、线性回归等模型中的常用正则化方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值