Deep Learning Course Note (Part 1)

Neutron Network and Deep Learning

Posted by Xiaoye's Blog on February 6, 2018

笔者在2017年10,11月期间学习了Cousera上吴恩达老师的深度学习课程系列的前四个课程,并拿到证书.趁假期回头分析总结下,希望能有更深的理解.

这门课主要介绍了神经网络的基础知识.首先大致介绍了神经网络的种类的应用场景,神经网络技术为何会兴起,然后课程一步步从线性回归,逻辑回归,进而过渡到浅层神经网络,深层神经网络.这个过程中介绍了损失函数,梯度下降,反向传播,激活函数等概念.

  1. 神经网络种类和应用前景
  2. 为何深度学习会兴起
  3. 从线性回归到逻辑回归
    1. 算法
    2. 损失函数
  4. 梯度下降
  5. 神经网络概览和表示
  6. 神经网络的向量表示
  7. 激活函数(Activation function)
  8. 梯度下降(正向传播和反向传播)
  9. 随机初始化
  10. 深层神经网路
  11. 总结

神经网络种类和应用前景

下图可看出标准神经网络,卷积神经网络,递归神经网络的主要应用场景

为何深度学习会兴起

答案是数据的增加和积累

从线性回归到逻辑回归

算法

  • Given X, want $y_{predict}$,
    • Param $w=R^n$, $b\in R$

    • 线性回归 Output: $y_{predict}=w^Tt + b$
    • 逻辑回归 Output: $y_{predict} = \sigma(w^Tt +b)$ where $\sigma(z) = \frac{1}{1 + e^{-z}}$

损失函数

一般想法为$L = \frac{1}{2}(y’-y)^2$, 但这个函数在梯度下降过程中很容易困于局部最值,于是选择以下损失函数:

Loss function(single sample):

  • $L(y’, y)=-(ylog(y’) + (1-y)log(1-y’))$

Cost function(entir train set):

  • $J(w, b) = \frac{1}{m}\sum_{i=1}^{n}L(y’^{(i)}, y^{(i)})$

原因解释为

若P(y/x)表示值为y的概率,则\(P(y/x)=y'^y(1-y')^{(1-y)}\) 则: \(logP(y/x)=ylogy'+(1-y)log(1-y')\) 结论:损失函数最小就意味着损失函数最小

对于一个数据集: \(P(y/x)=P(y^{1}/x^{1}) + ... P(y^{m}/x^{m})\) \(log(P(y/x))=log(P(y^{1}/x^{1})) + ... log(P(y^{m}/x^{m}))\)

梯度下降

梯度下降方法在数值分析中是一种很常见的求最值的方法.通过不断向最值靠近来逼近最优值,然而需要注意学习率(learning rate)大小的选取,后面章节中会具体讨论学习率大小选取的技巧.

下图是梯度下降概念的展示: 在课程中还提到用计算图(Computation graph)来展示逻辑回归中梯度下降的实现.如下图:

神经网络概览和表示

如下图为一个两层的神经网路:输入层,中间层(输出层不包括).

需要注意的是:每个圆圈都代表一个神经元,每个神经元中都会进行两步操作,如第二个图显示.

神经网络的向量表示

由于实例,特征,层数,每层神经元数目都可能不是一个,问题变成了多维,难于理解.神经网络的向量化实现可以大大简化问题.

结合上部分图一,有三个量在向量化中需要注意:

h: 这一层的神经元数

$n_x$: 特征的数目

m: 实例的数目

如下图所示,具体形状如下:

(h, $n_x$)*($n_x$, m) $\longrightarrow$ (h, m) $\longrightarrow$ (h, m)

以上还牵涉到Python语法中的传播特性,笔者会在之后补充这部分的内容

激活函数(Activation function)

课程中介绍了四种常见的激活函数,如下图:

同时给出了各个函数的优缺点如下表,同时给出建议:若是不确定那个比较合适,那就都尝试一下

  Sigmoid Tanh ReLU Leaky ReLU
缺点 x较大或较小时,值的变化不大 同Sigmoid x<0时斜率为0 很少被采用
优点 一般只用于二元问题的输出层 比较常用性能高于sigmoid 常用的中间层函数  

这些函数都是非线性函数,如若是线性函数,则输出会是输入的线性函数,则隐藏层作用全无

梯度下降(正向传播和反向传播)

以下为反向传播的总结:

随机初始化

由上知道需要初始化的有两个矩阵: w 和 b

如若初始化为0矩阵$\longrightarrow$ 隐藏层中对称,每个神经元都得到同样结果$\longrightarrow$ 不能收敛

为避免这个结果,随机初始化w即可,同时比较大的w会导致比较大的z,结合tanh和sigmoid函数的形状特点.比较小的w比较适合

于是: w = 0.01*np.random.randn((x, y))

注意:

  1. np.random.rand: choose from uniform distribution

  2. np.random.randn: choose from normal distribution

深层神经网路

深层的神经网络会有更多的参数,其过程可理解为从提取简单信息开始到提取高级复杂信息,下如是一个展示

参数和超参数

参数:

  1. $w^{[1]} d^{[1]}w^{[2]} d^{[2]}$等

超参数:

  1. 学习率 
  2. 迭代次数
  3. 神经网络层数
  4. 每层单元数
  5. 激活函数的选择
  6. 其他方法如: momentam, minBatch等技术的选择

正式由于参数众多,深度学习的正确应用需要经验,需要不断试错

总结

本门课程解释了在Machine learning 课程上未解释清楚的概念,整体上介绍神经网络,同时介绍了一些基本概念和技术如损失函数,激活函数,梯度下降,正向传播和反向传播等.