机器学习、深度学习总结

目前包括:
输入归一化、参数初始化、批归一化、Dropout、全连接层、激励函数、卷积层、池层、ResNet 、Inception网络、损失函数、正则化、多分类、梯度下降、SVM等

输入归一化

为了减少迭代的次数,使用输入归一化,将输入改写成均值为0,范围一致的分布形式。


\(\mu = \frac{1}{m}\sum_i x^{(i)}\)
\(\sigma^2 = \frac{1}{m}\sum_i (x_i - \mu)^2\)
\(x^{(i)}_{norm} = \frac{z^{(i)}-\mu}{\sqrt{\sigma^2 + \varepsilon}}\)

参数初始化

  • 0初始化:
    • 所谓0初始化就是将所有的参数都初始化为零,但是由于初始化的值是一样的,它将不能破坏对称,以至于所有同源的参数的值将永远一样。
    • 具有相同激活函数的两个隐藏单元连接到相同单元,那么这些单元必须具有不同的初始参数。一旦他们具有相同的初始参数,然后应用到确定性损失和模型的确定性学习算法将一直以相同的方式更新这两个
  • 随机初始化:
    • 梯度爆炸: \(W>I\)
    • 梯度消失:\(W<I\)
  • He初始化:He初始化是在随机初始化的基础上,使得每一层的参数\(W^{[l]}\)经过缩放,使得\(A^{[l]}\)与X的均值类似,因此随机初始化的方差应为:\(\sqrt{\frac{2}{n^{l-1}}}\)

批归一化(Batch Normalization-BN)

在隐藏层中的优化


\(\mu = \frac{1}{m}\sum_i z^{(i)}\)
\(\sigma^2 = \frac{1}{m}\sum_i (z_i - \mu)^2\)
\(z^{(i)}_{norm} = \frac{z^{(i)}-\mu}{\sqrt{\sigma^2 + \varepsilon}}\)
\(\tilde{z}^{(i)} = \gamma z^{(i)}_{norm} + \beta\)

Dropout

Dropout是正则化的一种方式,由名字退出(drop out)可以看出,它是以随机除去神经元来使得减少某个神经元的依赖程度,达到可以使用正则化的方式。在应用过程中,我们设置一个新的变量\(D^{[l]}=[d^{[l](1)}...d^{[l](m)}]\)用以表示第l个隐藏层的D,其中每一个d(i)表示在第i个数据下的d,而d表示的是该神经元是否隐藏。因此它将是一个由0和1组成的向量。使用\(d^{[l](i)}=np.random.rand(a^{[l](i)}.shape)<keep\_prob\)来设置d和D。之后为了使得输出结构的均值保持不变,在使用了Dropout的隐藏层在正向传播求得\(A^{[ l ]}\) 之后还要再除以\(keep\_prob\)。并且在反向传播时也要将\(dA = \frac{dA}{keep\_prob}\)

全连接层

  • 前项传播

    \(Z^{[l]} = W^{[l]}A^{[l-1]} + b\)
    \(A^{[l]} = g^{[l]}(Z^{[l]})\)
  • 反向传播

    \(dA^{[L]} = \frac{\partial loss}{\partial A^{[L]}}\)
    \(dZ^{[l]} = dA^{[l]}\dot{g(Z^{[l]})}\)
    \(dA^{[l-1]} = W^{[l]T}dZ^{[l]}\)
    \(\frac{\partial L}{\partial W^{[l]}} = \frac{1}{m}\frac{\partial L}{\partial Z^{[l]}}A^{[l-1]T}\)
    \(\frac{\partial L}{\partial b^{[l]}} = \frac{1}{m} \sum_{i = 1}^{m} dZ^{[l] (i)}\)

卷积层

层数公式:


\(n^{[l]} = \lfloor \frac{n^{[l-1]} + 2p^{[l]}-f^{[l]}}{s^{[l]}} +1 \rfloor\)

1x1卷积层: 可以降维或者升维,一般用于减少参数

Pool层

分为average pooling和max pooling


\(n^{[l]} = \lfloor \frac{n^{[l-1]} + 2p^{[l]}-f^{[l]}}{s^{[l]}} +1 \rfloor\)

ResNet

由于在神经网络很深的时候,会出现性能翻转的问题,即随着层数的增加,training error反而会增大(degradation problem),因此引用了ResNet。假设在一种网络A的后面添加几层形成新的网络B,如果增加的层级只是对A的输出做了个恒等映射(identity mapping),即A的输出经过新增的层级变成B的输出后没有发生变化,这样网络A和网络B的错误率就是相等的,也就证明了加深后的网络不会比加深前的网络效果差。


\(a^{[l+2]} = g(z^{[l+2]} + a^{[l]})\)

Inception网络

使用多个相同长宽(可能不同深度)进行叠加,形成Inception网络。

损失函数

机器学习分为监督学习和无监督学习,他们之间的区别在于监督学习有数据和真实值,即X,Y;而监督学习只有数据,没有真实值,即X。其中监督学习分为线性回归和分类,而无监督学习只有分类。
线性回归主要是做预测,即使用数据集和真实值(以后已训练集来代替)用线性拟合来形成一条曲线。主要使用的损失函数式MSE(均方误差),即:


\(loss = (h_{\theta}(x) - y)^2\) or \((\hat{y} - y)^2\)

而分类问题有叫做逻辑回归主要用以区分类别,其中包含二分类和多分类是使用交叉熵(cross-entropy)来做损失函数,即:

\(loss = -ylog\hat{y} - (1-y)log(1-\hat{y})\)

损失函数问题:而为什么在线性回归中使用MSE而在逻辑回归中使用交叉熵作为损失函数:

  1. 从MSE和交叉熵的目的来说,MSE表示真值与预测值之间的距离;交叉熵表示预测概率分布与真实概率分布的问题,对于分类来说使用概率分布更加的合理。且对于线性回归问题有负数,log(-1.5)无法计算
  2. 在分类问题中,开始会使用Sigmoid函数作为激励函数,而如果将sigmoid函数带入到交叉熵之中的时候,会产生非凸函数,即有多个极点的函数,这是梯度下降所无法解决的问题。

激励函数

激励函数问题:sigmoid, Tanh, Relu的区别:



Fig. 1 sigmoid, tanh, relu

Sigmoid函数: \(\delta(x) = \frac{1}{1+e^{-x}}\)
特点:函数取值在0-1之间,方便实现二分类,即(>0.5为1,否则为0)
缺点:

  1. 正负值大的时候后有软饱和问题,即梯度小
  2. exp计算量大
  3. 只有与训练值的同号输出,有ziggle问题
    • \(\frac{dL}{dw_i} = \frac{dL}{dy}\frac{dy}{dw_i}\)
      \(= \frac{dL}{dy}\frac{dy}{dz}\frac{dz}{dw_i}\)
      \(= \frac{dL}{dy}y(1-y)xi\)
      因此\(dw_i\)将于\(x_i\)同号

Tanh函数:\(tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}\)
特点:比起sigmoid来说优点是其中心对称
缺点:还是有软饱和问题;exp计算量大的问题
Relu函数:\(max(0,x)\)
特点:正数不饱和,负数硬饱和;比sigmoid和tanh比计算量小
缺点:非中心对称

正则化

正则化:在使用损失函数构建成本函数的时候有一项很重要的就是正则化。一般来说正则化分为两种:L1正则化和L2正则化

  • L1正则化:\(J_{\theta R_1} = J_{\theta} + \lambda \sum \|\theta_j\|\)
  • L2正则化:\(J_{\theta R_2} = J_{\theta} + \lambda \sum \theta_j^2\)
  • L1正则化目的是使参数更加稀疏,通俗来讲是是参数为0的项更多;L2正则化目的是减少参数的权重

二分类与多分类

输出之前
在说到逻辑回归问题时,它有二分类问题和多分类问题,那么他们的区别和联系是:

  • 一般使用sigmoid来处理二分类问题:\(\delta(x) = \frac{1}{1+e^{-x}}\)
  • 使用softmax函数来处理多分类问题:\(S(x_j) = \frac{e^{x_j}}{\sum^K_{k=1} e^{x_k}}\), j = 1 ... K

梯度下降

梯度下降:梯度下降是求解机器学习/深度学习问题的基础但是由于批梯度下降处理速度慢、计算量下降因此引入了mini-batch梯度下降之后出现了收敛震荡的问题,引出以下三种方法用以做梯度下降的加速。

  • Momentum:使用指数权重平均,为dw和db做平均

    \(V_{dw} = \beta V_{dw} + (1-\beta)dw\)
    \(V_{db} = \beta V_{db} + (1-\beta)db\)
    \(w = w - \alpha V_{dw}\)
    \(b = b - \alpha V_{db}\)
  • RMSprop:Momentum是将\(dw\)\(db\)做指数权重平均,而RMSprop是将\(dw^2\)\(db^2\)做指数平均,而在迭代时,使用\(\frac{dw}{\sqrt{\bar{dw^2}}+\varepsilon}\)作为步进实现加速。

    \(S_{dw} = \beta S_{dw} + (1-\beta)dw^2\)
    \(V_{db} = \beta S_{db} + (1-\beta)db^2\)
    \(w = w - \alpha \frac{dw}{\sqrt{S_{dw}}+\varepsilon}\)
    \(b = b - \alpha \frac{db}{\sqrt{S_{db}}+\varepsilon}\)
  • Adam(Momentum + RMSprop):Adam是将上述综合起来,但是由于指数平均初始几个指误差较大因此有做修改:

    \(V_{dw}^{correct} = \frac{V_{dw}}{1-\beta_1^t}\), \(V_{db}^{correct} = \frac{V_{db}}{1-\beta_1^t}\)
    \(S_{dw}^{correct} = \frac{S_{dw}}{1-\beta_2^t}\), \(S_{db}^{correct} = \frac{S_{db}}{1-\beta_2^t}\)
    \(w = w - \alpha \frac{V_{dw}^{correct}}{\sqrt{S_{dw}^{correct}}+\varepsilon}\)
    \(b = b - \alpha \frac{V_{db}^{correct}}{\sqrt{S_{db}^{correct}}+\varepsilon}\)

SVM

SVM(support vecter machine)支持向量机:SVM是从逻辑回归变化而来的,由于逻辑回归的损失函数为:


\(loss = -ylog\hat{y} - (1-y)log(1-\hat{y})\)

SVM中,将log函数改变为cost函数使得降低运算量方便之后kernel的使用且不适用激励函数,因此在svm中的损失函数为:

\(loss= ycost_1(\theta^Tx) + (1-y)cost_2(\theta^Tx)\)

由于损失函数,svm的决策边界是最大间隔分类器:由于输入 \(\theta^Tx\)可以看做两个向量的点积,即向量 \(x\)在向量 \(\theta\)的投影乘 \(\|\theta\|\),即 \(p\|\theta\|\),当p越大的时候, \(\|\theta\|\)可以越小,因此为最大间隔分类。
在SVM中,除了直接使用 \(\theta^Tx\)还可以使用 \(\theta^Tf\),其中f被称为kernel,它可以使线性的,也可以是非线性的。非线性一般使用高斯kernel,即:

\(f = similarity(x,l) = exp(-\frac{\|x - l\|}{2\sigma^2})\)

  1. n>>m时,一般使用逻辑回归或svm线性
  2. n小,m中等时,使用svm高斯
  3. n小m大,一般使用逻辑回归或svm线性

猜你喜欢

转载自www.cnblogs.com/x1ao/p/12376137.html