我们知道在训练模型时,模型越复杂拟合效果就越好,但相应的该模型在预测新的数据时效果就会不太理想,这就是过拟合。那么为了解决这一问题我们提出了正则化。正则化是通过对大权重增加惩罚项以降低模型复杂度的一种方法。所谓惩罚是指对损失函数中的某些参数做一些限制。使用时直接加在损失函数后面
常见的正则化方法为L1正则化和L2正则化,又称为L1范数或L2范数
L1正则化是指权值向量ww中各个元素的绝对值之和。
L 1 : ∣ ∣ w ∣ ∣ 1 = ∑ j = 1 n ∣ w j ∣ L_1 : ||w||_1=\sum_{j=1}^n |w_j| L1:∣∣w∣∣1=j=1∑n∣wj∣
L1正则化可以产生稀疏权值矩阵,稀疏矩阵指的是很多元素为0,只有少数元素是非零值的矩阵,即得到的线性回归模型的大部分系数都是0。表示只有少数特征对这个模型有贡献,绝大部分特征是没有贡献的,或者贡献微小,进而将贡献微小的特征去掉。
L1正则化主要用于特征选择,防止过拟合还要看L2正则化
L2正则化是指权值向量ww中各个元素的平方和然后再求平方根
L 2 : ∣ ∣ w ∣ ∣ 1 2 = ∑ j = 1 n w j 2 L_2 : ||w||_1^2=\sum_{j=1}^n w_j^2 L2:∣∣w∣∣12=j=1∑nwj2
实际上,这些参数的值越小,通常对应于越光滑的函数,也就是更加简单的函数。因此 就不易发生过拟合的问题。通常来说,我们不知道要惩罚哪些参数,于是在代价函数中减少所有的参数。
σ ( a ) = 1 1 + e − x \sigma(a) = \frac{1}{1+e^{-x}} σ(a)=1+e−x1
输入实数值并将其“挤压”到0到1范围内。更具体地说,很大的负数变成0,很大的正数变成1。
有两个主要缺点:
和sigmoid神经元一样,它也存在饱和问题,但是和sigmoid神经元不同的是,它的输出是零中心的。可以直接想象sigmoid函数下移一个单位
t a n h ( x ) = 2 σ ( 2 x ) − 1 tanh(x)=2\sigma(2x)-1 tanh(x)=2σ(2x)−1
ReLU和sigma是我大概了解人工智能以来最先知道的两个激活函数
f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)
优点:
为了解决上述问题出现了Leaky ReLU。当x<0时函数值不再为0而是是给出一个很小的负数梯度值,比如0.01。
Maxout是对ReLU和leaky ReLU的一般化归纳。
它的函数是
f ( x ) = m a x ( w 1 T x + b 1 , w 2 T x + b 2 ) f(x)=max(w_1^Tx+b_1,w_2^Tx+b_2) f(x)=max(w1Tx+b1,w2Tx+b2)
线性操作和不饱和的优点它有而没有其缺点。
它对数据中每个独立特征减去平均值,从几何上可以理解为在每个维度上都将数据云的中心都迁移到原点。
是指将数据的所有维度都归一化,使其数值范围都近似相等。有两种常用方法可以实现归一化。第一种是先对数据做零中心化(zero-centered)处理,然后每个维度都除以其标准差,实现代码为X /= np.std(X, axis=0)。第二种方法是对每个维度都做归一化,使得每个维度的最大和最小值是1和-1。只有在确信不同的输入特征有不同的数值范围(或计量单位)时才有意义
在这种处理中,先对数据进行零中心化处理,然后计算协方差矩阵,它展示了数据中的相关性结构。数据协方差矩阵的第(i, j)个元素是数据第i个和第j个维度的协方差。对数据协方差矩阵进行SVD(奇异值分解)运算。
下面是百度百科中对pca降维的一段解释:
“对于一个训练集,100个对象模板,特征是10维,那么它可以建立一个10010的矩阵,作为样本。求这个样本的协方差矩阵,得到一个1010的协方差矩阵,然后求出这个协方差矩阵的特征值和特征向量,应该有10个特征值和特征向量,我们根据特征值的大小,取前四个特征值所对应的特征向量,构成一个104的矩阵,这个矩阵就是我们要求的特征矩阵,10010的样本矩阵乘以这个104的特征矩阵,就得到了一个1004的新的降维之后的样本矩阵,每个特征的维数下降了。
白化操作的输入是特征基准上的数据,然后对每个维度除以其特征值来对数值范围进行归一化。该变换的几何解释是:如果数据服从多变量的高斯分布,那么经过白化后,数据的分布将会是一个均值为零,且协方差相等的矩阵。
小随机数初始化。权重初始值要非常接近0又不能等于0。解决方法就是将权重初始化为很小的数值,以此来打破对称性。其思路是:如果神经元刚开始的时候是随机且不相等的,那么它们将计算出不同的更新,并将自身变成整个网络的不同部分。
使用1/sqrt(n)校准方差。上面做法存在一个问题,随着输入数据量的增长,随机初始化的神经元的输出数据的分布中的方差也在增大。我们可以除以输入数据量的平方根来调整其数值范围,这样神经元输出的方差就归一化到1了。